I think Coursera Systematic Program Design is largely based on HtDP, if so, I agree it's one of the most balanced introduction to programming, where their definition of programming is more thinking through the problem instead of writing LoC or learning syntax. All this without complex problems (whereas SICP first chapters can drive non-math lovers away)
The course is based on the general principles which underlay HtDP. But HtDP is Matthies Felliesen's particular approach, and Gregor Kiczales (CLOS, Aspect Oriented Programming, The Meta-Object Protocol) has his own points of emphasis.
What both share is a general approach to programming pedagogy - that of the larger Racket community. It includes starting with a simple functional language, BSL, in order to avoid getting hung up on language syntax and to provide better error messages during debugging. BSL prevents FORTRAN in any languages, everything has to be functional. Because it only has
cons
But not
list
BSL programs tend to make structure explicit - don't worry, list is added when appropriate.
At first this seems like a lot more training wheels than necessary, but it allows the course to focus on writing signatures, descriptions, and templates in the first weeks, and pays off handsomely when the material hits recursion - there were very few questions about it in the forums, and the answer when those who couldn't picture it felt stuck was, for now just trust the template.
The big idea of the course is to teach a design method. It does so by looking at recursive algorithms and presenting recipes for applying them. The second theme is functional style programming - and it is dictated by necessity. The third theme is model-view-controller through Racket's "worlds".
I've taken a lot away from it, your milage may vary.
Yeah, I went through the Coursera course. Honestly, it was amazing. I had read through several programming books, but this was systematic. The "design recipes" help you to write clean, testable functions, and to think about your design before you start typing. I actually found it to be one of the best introductions to programming in Haskell. I had read 'Learn You A Haskell', and 'Real World Haskell' but this course made the whole approach to types, and pure functions really click.
I remember two times where learning a language that didn't embed the full paradigm (ADA objects) made me understand it better (Class OOP as in Java), the other one was monads in emacs lisp, so I think I understand your point.
The design recipes felt a little bit dull at first, but for a newcomer it's probably the good rhythm anyway. And now I often 'construct' my function through stubs, tests and then full code. Kudos to the authors.