- The Scheme Programming Language Third Edition by R. Kent Dybvig
How to Design Programs by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram KrishnamurthiStructure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie Sussman
Addendum 6/26/8:
The difference between learning a programming language and learning how to program is now clear enough to me that I had to revise this post to clarify its intent and correct its content. As such, the title has been changed, and only one book has been recommended.
Have you read/done the exercises in all these books? I have a little background in C.S. How does HTDP compare with SICP? I assume HTDP may be less rigorous, but is it safe going through HTDP without also doing SICP? Any info will help me in deciding which one to go with as I don’t think I have time to do both.
Re: Boyd, Have you read/done the exercises in all these books?
In this order:
The Scheme Programming Language: Read all and done all of the exercises.
Structure and Interpretation of Computer Programs: Read some and done some of the exercises.
How to Design Programs: Currently reading and doing all of the exercises as I go along.
Re: Boyd, How does HTDP compare with SICP?
People have discussed this question a lot on the PLT discussion list. Based on what I have read, and what other folks have to say, here is my take:
SICP is a wonderful book for studying many delightful facets of computer science which happens to use Scheme. Its approach is unique and broke a trend of terrible CS books in education, it is also a lot of fun. Two things about SICP: you need to have a certain skill set to get through the problems, and the book doesn’t focus on teaching you “how to program”.
HTDP is a book that teaches you how to program, and happens to use Scheme.
In the process of studying Scheme and Functional Programming, I became fascinated (and obsessed) with learning about what it means to be a “good programmer” in terms of tangible skills (part of my study path involved clarifying both my strengths and weaknesses). Hand in hand with that, I wanted to find out how you teach other folks those skills. As such, I am reading HTDP.
Re: Boyd, I assume HTDP may be less rigorous, but is it safe going through HTDP without also doing SICP?
From what I have seen so far, they are really two very different books. Look at this this way:
TSPL: Learn the Scheme programming language
HTDP: Learn how to program (foundational stuff)
SICP: Explore the delightful foundations and essential abstractions of computer science
Now some people dive straight in to SICP and plow through it. Statistically (based on my small sample size of talking to folks of course), SICP is generally a much more difficult than HTDP. At the very least, that was my experience.
Both are great books but based on my experience (see previous comment) I would recommend HTDP to most folks; either way one needs to put in the time.
Since you are going to make such an investment I would recommend that you read Felleisen, Findler, Flatt, Krishnamurthi’s “The Structure and Interpretation of the Computer Science Curriculum”, they talk specifically about the two books, and would better give you insight about choosing between the two based on your wants and needs:
http://www.ccs.neu.edu/scheme/pubs/fdpe2002-fffk.pdf