5 ms·
To Scheme, or Not to Scheme (2009)
- agentultra 14y agoI've found that I've really enjoyed the Little Schemer series quite a bit. I do have SICP which is a great college-level text but for a pure-introductory book for someone who is completely new to programming I would suggest Little Schemer. Either way, SICP or Little Schemer aim to teach a theory of computation. The unit of computation is recursion and they go to show just how powerful it is. I think the fun stems from learning the theory and allowing your mind to toy with the applications of it. Conversely, HtDP is first and foremost practical. I find it boring precisely because its goal is to show you how to design computer programs. There's little creativity involved!
- jamesjporter 14y agoI agree with HtDP being not great. I took a majors level intro to CS class last quarter; HtDP was the text and I found it spectacularly unhelpful.
- tikhonj 14y agoI went through a wonderful course based on SICP and really loved. Partly, no doubt, this was due to my professor (Brian Harvey) who was a brilliant lecturer and very good at designing the course. However, largely, this was due to the textbook, the material and the language. I think Scheme's fundamental advantage over Python is simplicity. There is, essentially, no syntax. Even the fundamental language features are not accorded any especial syntactic status. This makes it clear that the course is about computation rather than any particular facet of it. Moreover, Scheme is truly paradigm. Language like Python and Java are staunchly imperative--they might pay lip service to functional programming, but it's clearly an afterthought. Things like loops and assignment are deeply embedded into those languages. Scheme, on the other hand, is just as happy with procedural code as with functional code. Moreover, it introduces OOP not as a built-in language feature but as a set of useful patterns. This really helps broaden students' perspectives. You can even reuse exactly the same syntax for non-deterministic and logic programming.