2024 - https://news.ycombinator.com/item?id=41047110 (41 comments)
2022 - https://news.ycombinator.com/item?id=33222687 (59 comments)
That said, I do think the translation into a physical card game means that kids aren't getting the experimentation and near-instant feedback that they'd be getting if they were doing this digitally.
In order for a kid to "win," they either have to already know, or explicitly be told using words, what all of the commands do. Then they have to hear the parent analyze their solution, and tell them where they went wrong. Picture, however, a different game, played online: A kid has no idea what "sort" does, but when they link the "sort" command to a blob of text, all the lines are sorted in order. Now no one has told them what this command does, but they've discovered it. By playing the role of a scientist discovering these commands, they might actually gain an intuitive understanding of them.
I'm thinking of the board game "robot turtle," where kids needed to create a "program" of commands to move a turtle to a goal. When they did that, they had near-instantaneous feedback: the parent moved the turtle. If the kid mixed up their left with the robot's left, the failure was obvious. But if the game has been re-made so that there was no board, and the parent and kid just needed to talk about whether the turtle would actually end up seven paces forward and three paces to the left -- i.e. doing it all verbally -- it wouldn't have been nearly as powerful.
So I'm not raining on this, I can see this as very cool. But I am having a hard time imagining it's the best way to learn to pipe together commands.
This idea of experimenting and getting instant feedback is just survivorship bias for a certain type of person, not “the way we ought to teach Unix shell”
This view is corroborated by the research summarized and presented in the programmer’s brain by Felienne Hermans.
Maybe Linux commands is a little different but I kinda doubt it. Errors and feedback are the way to learn, as long as you can endure the pain of getting to the correct result.
I'm (pleasantly) surprised every time I see evidence of one of them knowing anything about it.
That said, most institutions have teacher training resources for faculty. I was fortunate to be able to work intensely with a mentor for a summer, and it improved my teaching dramatically. Still, teaching is hard. Students sometimes know—but often don’t know—what is best for their learning. It’s easy to conflate student satisfaction with teaching effectiveness. The former is definitely an important ingredient, but there’s a lot more to it, and a really effective teacher knows when to employ tools (eg quizzes) that students really do not like.
I am frequently amused by the thought that here we have a bunch of people who have paid tons of money, set aside a significant fraction of their time, and nominally want to learn a subject that they signed up for; and yet, they still won’t sit down and actually do the reading unless they are going to be quizzes on it.
How often have they put down the money, as opposed to their parents?
How often do they actually care about learning the subject, as opposed to be able to credibly represent (e.g. to employers) that they have learned the subject?
How often is the nominally set-aside time actually an inconvenience? (Generally, they would either be at leisure or at the kind of unskilled work their parents would be disappointed by, right?) My recollection of university is that there was hardly any actual obligation to spend the time on anything specific aside from exams and midterms, as long as you were figuring out some way or other to do well enough on those.
Gaining true understanding/insight is necessarily trial and error. Teachers cannot teach insight. But they can present the optimal path to gain insight.
> As that is not a surprise, since research keeps showing that direct instruction—explanation followed by a lot of focused practice—works well.
Note the "lot of focused practice".
Direct instruction sounds similar but in my reading I think the emphasis is more on small, clearly defined tasks. Clarity is always good, but I am not sure that I agree that smallness is. There are times, particularly when students are confused, that little steps are important. But it is also easy for students to lose sight of the goals when they are asked to do countless little steps. I largely tuned out during my elementary school years because class seemed to be entirely about pointless minutiae.
By contrast, project work is often highly motivational for students, especially when projects align with student interests. A good project keeps a student directly in their ZPD, because when they need your help, they ask. Lessons that normally need a lot of motivation to keep students interested just arise naturally.
[1] https://en.wikipedia.org/wiki/Zone_of_proximal_development
I think that is a developer's superpower. The poncy term for it is grit. I tell others that the secret to leaning computers is frustration and persistence.
> and then giving up.
Knowing when to stop or change direction is hard.
I've definitely wasted years of work failing to solve something that I eventually had to give up on (most memorably depending on nasty Microsoft products).
But I've also been paid very nicely because I've solved problems that others struggled with.
And I was paid for the failures too.
> I think that is a developer's superpower.
I do too, but only because we can do both.I think comparing math education to programming education is quite apt here. After all, programming is math[0]. Both are extremely abstract subjects that require high amounts of precision. In fact, that's why we use those languages![1]
One of the absolute most difficult parts of math is that you don't have feedback. Proving you did things correctly is not automated. You can't run it and have an independent (not you) mechanism tell you that the output is what you expect it to be. This leads to lots of frustration as you sit there thinking very hard about what you've done wrong. It is frustrating because you're often blind to the mistakes as that's why you've made them in the first place! But the upside is that you quickly become attentive to details and learn those pitfalls very well. This also means you can abstract very well (the entire point of math) as you learn to abuse things on purpose. The struggle is real, but the struggle is important to the learning process. You learn very little if there's no struggle. Your mind is made to remember things that are hard better than things that are easy.
In programming we typically have the opposite problem. You get instant feedback. This makes iteration and solving your specific problem much faster. You can experiment and learn faster as you poke and prod seeing how the output changes. BUT there is a strong tendency to leverage this too much and use it to outsource your thinking and analysis. Iterating your way to success rather than struggling and analyzing. This doesn't result in as strong of neural pathways, so you don't remember as well and you don't generalize as well. Having taught programming I can tell you that countless students graduate from university[2] thinking that because the output of their program is correct that this means that their program is correct. This is a massive failure in logic. Much easier to see in math that just because 3+3=6 and 5+1=6 doesn't mean that the process is equivalent[3]. The correctness of the program is the correctness of the process, not the correctness of the output.
While that's the typical outcome of learning programming, it isn't a necessary outcome and there's nothing stopping anyone from also using the same approach we use in math. Math is only that way because we're forced to[4]! Both have their strengths and weaknesses, but neither is strictly better. The strictly better learning path is the combination and that is the superpower we have. It's just easy to abdicate this power and only do the easy thing.
[0] We can really say this from Church-Turing but if you really have concerns with this statement you'll need to read more up on the theory of computer science and I suggest starting with lambda calculus.
[1] https://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667...
[2] and even graduate degrees. You'll also see this idea prolific on HN and I'm sure someone will respond to this comment countering the point
[3] You can abstract this, I'm not going to do some long calculation here but I'm sure most people have done a long calculation where they got the right answer but the process was wrong and they had a professor still mark them wrong (and correctly so).
[4] If you're going to lean on me I'll concede
https://github.com/williamcotton/guish
It's a GUI for constructing and executing Unix pipelines and it shows the output of each step in the pipeline.
To be honest, it is very strange how hard it is to teach programming concepts, for some reason almost all humans use computers but only 0.1% or so can program them.
I am not sure we have the 'best way' to teach anything computer related.
People develop world model for physics quite early, they know they can pull with a rope but cant push with a rope.
And they get intuition, things that are thrown up, go down, and they can transfer this intuition in the math, because math is real.
For some reason its hard to do that with code. People keep trying to push with a rope, even after studying for many years.
PS: I am trying to teach her neural networks now and am working on this RNN board game https://punkx.org/projekt0/book/part2/rnn.html to fight the "square" dragon. I want her to develop good world model for neural networks, so that she understands what chatgpt is. I just keep experimenting, sometimes things click, sometimes not.
This is nitpicking but I was curious: there are 4.4 million software developers in the US (https://www.griddynamics.com/blog/number-software-developers...). The population is 340 million, 0.1% would be 340,000. You’re off by over one order of magnitude.
we could say 0.5%?
Not saying this is the best way, but have you followed any of Bret Victor's work with dynamicland[1]?
The same way scratch works for some, redstone for others, and https://strudel.cc/ for third
I think the truth is that we are more different than alike, and computers are quite strange.
I personally was professionally coding, and writing hundreds of lines of code per day for years, and now I look at this code and I can see that I was not just bad, I literally did not know what programming is.
Human code is an expression of the mind that thinks it. Some language allow us to better see into the author's mind, e.g forth and lisp, leak the most, c also leaks quite a lot e.g. reading antirez's code or https://justine.lol/lambda/, or phk or even k&r, go leaks the least I think.
Anyway, my point is, programming is quite personal, and many people have to find their own way.
PS: what I call programming is very distant from "professional software development"
one shot result:
you could do the same, or I could give you access to this one if you want.
At least it was just $5 but I think it's 1000% more fun to actually use a unix terminal with some sort capture the flag kind of game.
I used to randomly set HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon Shell to cmd.exe on my daughter's laptop so she can run programs from there, e.g. go the discord directory and start discord from there.
Then I made unix pipes just to help her with https://overthewire.org/wargames/bandit/ and so we can discuss how do you make "programs that do not know how they will be used", e.g. the programmer of "sort" does not know how it will be used, and you can create ridiculous pipe chains with the cards, just for fun.
Of course I made other random tasks, e.g. we take a random book and we start "catting" and "grepping" it
Most of the games i made on https://punkx.org are like that, i am just trying to teach her something and i need a bit of physical help to "get out of the computer"
The only real card game is http://punkx.org/punk0 which is like uno with state and I play it often with friends, and https://punkx.org/overflow/ which is super intense depending who you play with.
Started using it last year and being able to type ‘ls | sort-by modified -r | take 5’ feels liberating.
I am thinking of doing a reprint, but tbh shipping is so expensive now, and I there is also USA's tariffs and etc.
500 Internal Server Error