I've been thinking about this topic for a long time. I was a secondary math and science teacher for 25 years, and I taught intro programming classes whenever I could. Later I wrote Python Crash Course, which was largely informed by my experiences working with students - my direct classroom teaching, and my attempts to find resources for students who were capable of independent learning. I've looked critically at many learning resources over the years.

I certainly agree with the author's main point. Giving people a series of dry lectures or chapters that focus on syntax, without any intentional narrative about what it all means or why we should learn it is not particularly effective.

I'll make a brief comparison to the math materials I've reviewed for secondary education. There are many curriculum resources that are really well structured mathematically - all the math is correct, and each new topic builds on previous topics coherently, and leads somewhere specific in the end. But most of these kinds of resources are fairly dry to students who are not intrinsically motivated to learn math. Then there are many resources that present things in a fun or interesting way, but lack a coherent structure to the math that's presented. These are better at catching students' interest, but they still don't bring students to a place where they understand math well enough to use it effectively in their own lives. There are few curriculum resources that truly do a good job of hitting both of these goals - well structured mathematically, and with compelling topics. It's difficult because the people creating the resources need a really strong pedagogical background and a really strong mathematical background. People often tend to focus on one or the other of these areas.

I see the same issue in how learning resources are developed for programming. There are probably thousands of books that have a table of contents similar to what the author presents here, without a coherent narrative to motivate people through all those topics. Many of these books are technically sound, but they don't carry people through all the topics because there's too little tying all the topics together. Then there are a whole bunch of resources that use a specific compelling topic to grab people's attention; the author uses the example of card games. There are a couple limitations here: if you pick an interesting context, you only appeal to the people who like that subject. Also, you then have to stretch the context to cover concepts that aren't specifically needed for that context. That is, building a card game project brings up many topics and ties them together. But what do you do with important topics that weren't needed? Do you leave them out? Do you present them separately? Do you force them into the context?

One of my big frustrations with learning resources, especially k-12, is that they do a great job of grabbing kids' attention. We've kind of solved that problem - young people are plenty interested in learning to code. But to really gain the ability to build out your own ideas, you need to work through the list of topics that the author of this article presents.

What's the conclusion? There's no one way to teach people to code. We need a variety of resources that address all of these issues in ways that meet the needs of a variety of learners. People who are designing these resources, whether they're developing a book, video course, online tutorial, etc, need to think through these issues and have a clear and intentional approach to how their resource is structured.