
#68 overall
How to Design Programs
edX
6 recommenders · 6 threads · recommended in 5 years, 2013–2025 · score 7.4
A systematic introduction to programming based on the book How to Design Programs (HtDP), taught in Racket/Scheme with an emphasis on design recipes and step-by-step planning. Offered on edX (UBC course) and as part of an edX MicroMasters software development track, with a Coursera version also mentioned.
Commenters call it the best intro for beginners because it teaches systematic design habits instead of tinker-until-it-works coding, and one says it is free to audit.
Programming Languagesbeginnerfreemiumvideo lectures#htdp#racket#scheme#design recipes#functional programming#beginner
Recommendations by year
20062026
After probably more than 10 years postponing to find what HTDP (how to design programs) is all about I'm now convinced that everyone should go through that book (or an online course) and apply the newly found knowledge in real life.
See the edx links in one of the threads above. Take the course; Actually DO what Gregor repeatedly says in videos and you'll find what you missed.
The best intro I've found is the edx course HtDP which is now a micromasters track https://www.edx.org/micromasters/software-development it's free to audit instead of paying for the verified track (which gets you TA help). He could conceivably do the first 2 courses in that track then learn whatever you're doing or finish the whole track by next year.
The author is trying to eat an elephant and doesn't know where to begin. They are trying to learn too many things at once without a foundation to build on.
Start by developing fundamental skills: learn your environment, your editor, your debugger, the syntax of the language.
It's like learning to cook. You need to develop safe knife skills, and learn the best way to cut and portion vegetables. Learn to oil and use a pan and thermometer to thoroughly cook, but not burn, your food. These are fundamental skills that can be learned through observation, but must be practiced through trial and error.
This is how you learn, but is a terrible takeaway for learning to build software.
See here for another way:
How to Design Programs
https://htdp.org/
"The typical course on programming teaches a “tinker until it works” approach. When it works, students exclaim “It works!” and move on. Sadly, this phrase is also the shortest lie in computing, and it has cost many people many hours of their lives. In contrast, this book focuses on habits of good programming, addressing both professional and vocational programmers."
"By “good programming,” we mean an approach to the creation of software that relies on systematic thought, planning, and understanding from the very beginning, at every stage, and for every step. To emphasize the point, we speak of systematic program design and systematically designed programs. Critically, the latter articulates the rationale of the desired functionality. Good programming also satisfies an aesthetic sense of accomplishment; the elegance of a good program is comparable to time-tested poems or the black-and-white photographs of a bygone era. In short, programming differs from good programming like crayon sketches in a diner from oil paintings in a museum."
It uses a language so simple that you can learn most of it in well under an hour[0], and with a proper editor few syntax errors are even possible. It leads you quickly to the important parts of conceptualizing, designing, specifying, implementing, and testing programs. Like cooking an entire meal, these are more fundamental, but higher level, skills that you can carry on to the other platforms that might draw your attention.
I highly recommend reading books over watching videos, but here is an online course that uses the book:
https://www.edx.org/learn/coding/university-of-british-colum...
[0]: https://courses.cs.washington.edu/courses/cse341/03wi/scheme...
Yes it does.
Scheme is not what makes SICP challenging. The sheer density of concepts is.
HtDP is a bit repetitive and gets a bit boring over time.
While some things overlap, I would recommend to first work through HtDP (or better through this online course https://www.youtube.com/channel/UC7dEjIUwSxSNcW4PqNRQW8w/abo...) and then work through SICP - especially if you try to learn programming by yourself.
What would one recommend after HtDP (for someone who is a complete beginner)?
As I've just about come to the end of the wonderful course on edx using this book, I have been considering what I should use for the next step.
SICP seems to be a common recommendation however I've read a few comments on the difficulties with math and other things seeing as the book was originally written for MIT students.
Seeing as how highly regarded SICP is should I try it even though I consider myself to be weak at math?
One of many benefits of so-called education is in significantly reduced amount time wasted on clueless assumptions and ignorant guesswork. The list makes sense, especially HtDP => ProgLangs => FP + Types "road".
btw, there is a wonderful course based on HtDP2 on Coursera by Gregor Kiczales - the guy who wrote AMOP (yeah, almost no one know what is it.) This course is such a rare example of teaching thinking and doing transformation in your mind instead of coding and copypasting that I sometimes watching some lectures for a better night sleep.))
Another nice idea is to google who Matthias Felleisen is and why he is famous guy. Then, perhaps, one could be able to appreciate what academic guys could do.
Thanks for sharing. Nice. I'm not a programmer but I have taken many courses all over the web (I think I only lack practice). This talk reminds me of the Edx course on functional programming using DrRacket. As the talk suggests about the boring and bureaucratic aspect of the recipe design, I think that's exactly the reason why I couldn't finish that Edx course twice, though I am convinced that this design/recipe methodology to learning to program, is the right solution (which is absent from the pedagogy of a lot of courses). This talk makes me want to try and take that edx course again, the third time!
For anyone else looking to take a course like that, Coursera has a course on htdp right now: https://class.coursera.org/programdesign-001/class