#103 overall
Systematic Program Design
edX
5 recommenders · 6 threads · recommended in 4 years, 2013–2018 · score 4.3
An introductory edX course from UBC on systematic program design, based on the How to Design Programs (HtDP) text and taught in Racket. It covers a step-by-step method for defining purpose, describing data, writing examples, and then writing code.
Commenters call it a good, more accessible companion to HtDP than the book, and a sound way to learn the design method from scratch.
Programming Languagesbeginnerfreevideo lectures#racket#htdp#design recipe#kiczales#intro programming
Recommendations by year
20062026
The first edition of HtDP is available as a video series titled “Systematic Program Design”: https://www.youtube.com/channel/UC7dEjIUwSxSNcW4PqNRQW8w/pla...
I took it when it was on edX and found it much more accessible than the first edition of the book (which I started and never finished when I found the video course).
It's presented by Gregor Kiczales, who gives a compelling introduction here that explains the rationale behind HtDP, and is what lead me to take the course: https://youtu.be/dJbpHukiQ7I (it's fine to start from ~2 minutes onwards).
I still find myself using the process he outlines (defining the purpose of functions up front, describing the data they work on, and giving examples before writing code). I'd describe it as a sort of, “extreme inline readme-driven development[1]”.
If anyone did this course and has since read the second edition of HtDP, I'd love to know what more it adds.
[1]: http://tom.preston-werner.com/2010/08/23/readme-driven-devel...
Second Edition is online and follows Racket's versioning:
http://www.ccs.neu.edu/home/matthias/HtDP2e/
I have a hard copy of the first edition. The square format single column layout reduces readability. But the methodology seems to be based on sound engineering principals.
I'd probably recommend Kiczales's Systematic Program Design MOOC as a good extension of the HtDP program methodology. https://www.edx.org/course/how-code-systematic-program-desig...
'Newbie' covers many experience levels - from afraid to turn the computer on to moving beyond Excel pivot table macros. People need different degrees of handholding.
Not necessarily my favorite, Coursera's Programming for Everybody [1] moves forward very very slowly. Great for some people, drying paint for others. It is taught in Python.
A course I think is great is Coursera's Introduction to Systematic Program Design [2] based on Felleisen's How to Design Programs introductory text. It is possible to register for the last session, from a year ago, and complete the work on your own. It is taught in Racket.
Another course that takes a learn-by-making approach is Coursera's Creative Programming for Digital Media & Mobile Apps [3]. It is beginner friendly and really encourages "getting into it". It is taught in Processing, and in some ways I think Processing is the ideal language for an introductory course in Software Engineering - it is pared down like Racket's student languages, provides just a pinch of Java pain, facilitates the production of really interesting output, and the environment provides a fast edit-compile-run loop.
For a person who is more oriented toward scientific or mathematical problems, Coursera's R Programming [4] might by a good fit.
Among the various Python Courses, I would probably go with Udacity's Design of Computer Programs: Programming Principles [5] because it is taught by Peter Norvig.
All that said, a book may be better than an open-enrollment class for many people, and there's a lot more variation.
[1] https://www.coursera.org/course/pythonlearn
[2] https://www.coursera.org/course/programdesign
[3] https://www.coursera.org/course/digitalmedia
[4] https://www.coursera.org/course/rprog
[5] https://www.udacity.com/course/cs212
First, don't refer to them as noobs unless you are trying to degrade them. Second, I recommend Introduction to Systematic Program Design on Coursera. It matches the same intro course for which CompSci students pay Universities thousands of dollars across North America.
This is excellent review, no doubt, by a well known scholar.) The only problem is that there are so many books and so little time.
So, to get a quick and productive crash-course I would recommend just a few selected resources.
* SICP based course CS 61A by Brian Harvey (Youtube)
* HtDP2 and a wonderful course based on it - Introduction to Systematic Program Design by Gregor Kiczales (the author of The Art Of Metaobject Protocol)
* Armstrong's thesys armstrong_thesis_2003.pdf and his Programming Erlang book.
* Programming Languages course by Dan Grossman (also on Coursera)
* Two Scala courses Martin Odersky
* The classic Haskell tutorial http://www.haskell.org/tutorial/
* ANSI CL and On Lisp books by pg.
This is a very decent start in my opinion. "To learn quickly read only the best ones".
Allow me to suggest Coursera. They have nice courses about FP. Somehow in simple -> difficult order.
Systematic Program Design by Gregor Kicsalez (I believe influenced by HtDP). Programming Languages by Dan Grossman. (50 50 HtDP SICP and Brown University material)* Functional Programming using Scala by Martin Odersky (influenced by SICP).
In case you can already do the SICP exercises without issues then you won't need these, but otherwise, the deadlines and automatic grader were great ways to keep a regular pace in learning.
*) this course focuses on semantics, and language design, the problems are not hard applied problem solving, that's why I put it in 2nd, but they can twist your mind quite a bit when dealing with different meta-levels.