Sunday, November 4, 2012

Structure and Interpretation of Computer Programs

If you are learning about computer programming, you should hear about the book, Structure and Interpretation of Computer Programs by Harold Abelson, et al (1996).  This book (SICP) has made a positive impression on some people.  Here is a Wikipedia article on the book.  The point of this book is to influence the thinking process, to stretch the mind.  But it is not going to teach you how to write useful code.  It uses a form of Lisp, called Scheme, which is available for free download from MIT.  I can report that the Windows installer works and the Scheme interpreter launches successfully on Windows 7.  If you want to work through this book, there is free support material available at this website:  http://www.mitpress.mit.edu/sicp/.

Eventually, the Structure and Interpretation of Computer Programs was replaced by How to Design Programs (HtDP) by Matthias Felleisen, et al (2001).  This book continues the MIT tradition of using the Scheme language.  Here is a Wikipedia article on this book.  Again, the emphasis is on stretching the mind rather than teaching a useful programming language.  Theoretically, the student is taught by this book to design software.  This is a very important  point.

Not every programmer can design software.  There are programmers, paid to write code for a living, who are incapable of designing software.  Here is one definition of a software hack: software that is not designed.  There is a synonym for a software hack:  a kludge.  To be fair, some people can hack-out decent code.  Also, some programmers can carry a complex design in their heads so that they do not feel the need to document the design.

Returning to the topic of teaching computer science at MIT, I found evidence that MIT does have a programming course for students that have no experience writing software.  This particular class uses the Python programming language. However, I find it hard to believe that a student majoring in computer science at MIT would be taking this particular course.  I have seen no evidence in the internet of MIT continuing to use How to Design Programs, but I have discovered that the authors have a 2nd edition in progress (2012):  http://www.ccs.neu.edu/home/matthias/HtDP2e/

How to Design Programs by Matthias Felleisen is a current book that is worthy of your consideration if you want to be a good programmer.  But you need to learn languages for producing software products (Java, e.g.) from another source.  Scheme and Lisp are not production languages, i.e., languages used to create significant products.

In closing, The Structure and Interpretation of Computer Programs (2nd Ed.), might be out of print, but it has left a lasting influence.  It is an engaging book to read.  You can also purchase the Instructor's Manual if you are going through the book on your own.

Robert

Here is a blog post by a high school student that briefly mentions SICP.  People are still studying this book.