Structure and Interpretation of Computer Programs, SICP
In this semester, I took an optional course titled “Declarative programming.” I was so thrilled about it because of two reasons: First of all, I’d already been enchanted by the whole idea of functional and declarative programming since I was fooling around with languages like Erlang, Haskell, and Prolog (although the last one is technically a logic programming language). Secondly, I was eager to experience the presence in class of one of our well-known instructors, Dr. Towhidi.
The reference book for this class was also notable, the renowned Structure and Interpretation of Computer Programs (or better known as SICP). Norvig, in his famous must-read article, Learn programming in ten years, recommended this book for those who want to choose computers as a life career.
“SICP is probably the best introduction to computer science, and it does teach programming as a way of understanding the computer science … The book is challenging and will weed out some people who perhaps could be successful with another approach.”
This book may not make you an almighty coder who can do some fancy stuff with just a couple of lines of code (although in some chapters, it will), but it can teach you something far more valuable: good habits in thinking and coding. It reminds me of a statement that one of the pioneers in software engineering, Kent Beck, says about himself: “I’m not a great programmer; I’m just a good programmer with great habits.”
The programming language used in this book is Scheme. It’s somewhat old and incredibly small (parentheses, blanks, and lexemes are all the elements you have, and a pair of data is the only data structure). Despite that, it will amaze you when you see how complex tasks can be accomplished with such simple elements.
All these cool things are best accompanied by the fact that Coursera presented a course in functional programming that its syllabus is based on this book. The only difference is that this course has chosen the Scala programming language over Scheme, which is much more sophisticated and has a rise in usage (it supports OO programming).
Final word: Don’t miss the chance if you have the opportunity to attend a class that teaches this book, or if you have enough time and know yourself as a person with iron determination, try to take the course on Coursera. Unfortunately, in my opinion, it’s not a book that you can get the best of by reading by yourself.