A New Programming Pedagogy Paradigm
10-22-2025
I have an unpopular opinion:
Programming should be learned more like a sport, less like a seminar or a book.
Now, it may seem like I'm repeating the same old "learn by doing" and project-based learning thing, but no. What I mean is closer to this:
When a kid is learning to play soccer, he most likely starts by playing a game with his cousins or neighbors, they'll just tell him "you stand there and if the ball comes to you, kick it as hard as you can in that direction"; see what I mean? It may be the most menial, low-responsibility task, but in a REAL context. And he'll probably play a hundred games just like that before doing anything much more interesting; then he'll slowly start progressing, someone will actually pass the ball to him, and they'll gradually rely more and more on him. If he's really passionate maybe he'll go to some formal training where eventually he'll learn more granular ways to make his game more efficient, how to pass, how to shoot to goal, strategy, etc.
The analogy was a little overstretched, but what I mean I think is clear enough: start with the most basic tasks, in a real context, repeat repeat repeat until, like a natural language, you start actually becoming fluent in it, and then move slowly to more and more complex tasks and contexts but repeating the same steps, go back, make variations, move forward, find a bigger challenge, repeat.
The problem with every other method out there, no matter how much it's focused on "practice", it is still too linear, it is still based on a model where you are expected to learn one concept, and move on to the next.
This is also very close to how you learn natural languages. One would think that programming languages would be taught similarly.
What I'm imagining in a very concrete example would be something like: grab a program, a real program, from GitHub or wherever, and first change all the variables' names, or values, find all the arrays and add a new index or do some other operation with them, find a function that outputs a certain value and change the output... I don't know, something like that, maybe.
Does this make sense?
PS: On a related note, I've started to study JavaScript now... I know, I'm all over the place, huh. But this time I'm doing something new, I'm trying really hard to stay focused and track my progress, So I asked ChatGPT to help me come up with a roadmap for learning fullstack JavaScript web development, and I posted it here; but this roadmap by itself is still way too linear, so I don't intend to follow the track point by point necessarilly, instead I'll do my best to apply the principles stated above, while using that roadmap to keep track of which topics I'm learning, which need more work and so on, even if the progress is not linear.