7 Reasons you should read SICP

7 Reasons you should read SICP

The full name of SICP is “Structure and Interpretation of Computer Programs” by Abelson, Sussman, and Sussman. To me, this should be the must-read book for all computer science students. There are several reasons for this.

The original version is in Scheme language (which is not so popular now): https://mitpress.mit.edu/sicp/

There are two adapted versions for Python and JavaScript:

Python (called as Composing Programme): http://composingprograms.com/

JavaScript (taught in CS1101S Course at National University of Singapore): https://www.comp.nus.edu.sg/~cs1101s/sicp/

Reason 1: Textbook of MIT course

Let’s get to the reality, if you target yourself as a “student” at MIT (though I am not, but you should target high right), you must read the book.

P.S. This is also a text booking in School of Computing in NUS (National University of Singapore) - CS1101S Programming Methodology. I was a student and later became a tutor for this course.

Reason 2: Textbook for “beginners”

The book is written for beginners. It gives you a branch new view of how you should view the programme. Is it just code? No, it is not. It’s a computational process.

P.S I would see you need someone to guide you when you read the book. Although I have said it is for beginners, however, it is not that much suitable for self-learning as some concepts are really vague and need time to understand.

Reason 3: Planning your career path

Wow, reading a book could help me plan my career path! Really? Yes. The book also introduces various aspects in computer science including Algorithm (How can you solve a problem faster?), Programming Language (How you invent and analysis a new language?), Object-Oriented Programming (Used often in real life application as a Software Engineer), Parallel-Computing (Will the computer with multi-cores help you solve problems faster?). Cool! You can try different things in this book and choose your favorite aspects.

Reason 4: Knowing elements of programming

Although this sounds a bit weird, you learn a new programming language by looking at the syntax to see what is variable, assignment and function. That’s all you need to know. However, this point of view is not true in the book. The book tells you the elements of programming and how to combine them together. Here is a quote from the book.

  • primitive expressions and statements, which represent the simplest building blocks that the language provides,
  • means of combination, by which compound elements are built from simpler ones, and
  • means of abstraction, by which compound elements can be named and manipulated as units.

See how clear it is to separate numerous language syntax into three main categories. That is, after you accept this point of view. The rest of the book will tell you how to “play” with the concept.

Reason 5: Mastering recursion

I would say recursion is the hardest part that a student who is new to computer science would face. According to my experience as a tutor in a programming course, 50% student will need at least 3 weeks to understand it. Thought it is difficult, I would say it is an essential skill in CS and you must master it.

Do you know how we teach recursion in NUS? We have our own interpreter for our own invented language (a subset of JavaScript). We disable the for and while loop till the end of the semester, which means everything you want to do using loop must be done in recursion. This is doable actually and our experience tells us this works. If you have some background in CS, you can try this :).

Reason 6: Thinking as an interpreter

The book also introduces how to implement an interpreter for a language. If you have programming experience before, you might just think the programme will just run in this way and I just need to remember. However, have you image what is going on behind the scene.

Let’s look at the factorial programme in recursive version.

1
2
3
4
5
def factorial(n):
if n == 0:
return 1
else
return n * factorial(n - 1)

If you cannot understand, it is OK. But what I am trying to say here is the function actually is calling itself. How could that be possible? You may think, hmmm, that is how we write it. But if you are going to interpret the programme, how would you manage the variable, environment, function calling and etc. Writing an interpreter would give a better understanding of how things go on behind the scene.

Reason 7: Preparing you for future courses

In your future CS course, you will learn more advanced and sophisticated data structure and algorithm. If you master the book, you will find that the concepts and skills introduced in this book are helpful. I would say most likely the help would be “implicit”. You will find that your understanding of certain concepts (e.g. Tree, LinkedList, Divide-Conquer) will be better than people who don’t read the book.

Summary and further notes

In summary, this book is highly recommended for all CS students. In fact, for myself, I just read the book again even I have taken the CS1101S in NUS. I still can find something new. Therefore, I think you will also find out something helpful.

A final note on the target audience for this book in my understanding.

Who should read the book:

  • ALL CS students
  • People who know other heavy languages (e.g. Java) and want to learn script languages (e.g. Python, JavaScript). Assume that you have already know the concepts in CS (because you have already mastered another language)

Who should not read the book:

  • Students who are completely new to CS and try to do self-learning in this book. This is not recommend as the book is “difficult” to understand. You need help or your interests in CS will be brought down by this book :(
  • Beginners (just want to learn and use the language). For example, if you just want to use Python to fetch web pages, you will find the book useless. You can just take some tutorials on-line (e.g. Codecademy)
Author

Xiao Pu

Posted on

2018-02-06

Updated on

2020-11-21

Licensed under

Comments