I am particularly skeptical of the author's suggestion that developing a domain-specific language would be one of the ways to teach general thinking skills through programming. Absent an example to prove me wrong, I would think that writing a DSL is so laden with task-specific minutiae that those parts of the job that extend general thinking skills would be highly diluted.
On the other hand, I think programming helps with one thing: programs are, in some sense, half-way between the physical world of discrete objects, and the abstract world of words and symbols. I have seen it suggested (but I cannot find the reference) that all abstract reasoning developed from an ability to mentally model the physical world. If so, then programming may be a stepping-stone from the latter to the former (though only if it is taught as such; most programming instruction makes programming the goal, not a waypoint (which is not surprising))
It's all about how you approach it. The vast majority of texts present programming largely the same way, but obviously that way just won't click with some people. These people might be much better with visual programming languages to begin with, for instance.
You can explain to them an example code and they would nod and say they understand, but when it comes time for them to write code, they can't.
I've seen many people try hard to learn programming but fail miserably no matter how much they try.