What I wish I knew when I was taking CIS 61
Many people say I should have been more serious about studying when I was a student.
When I was a community college student, I had been doing rather well in every class--except
CIS 61: Structures and Interpretation of Computer Programs. While I was taking CIS 61, I
became less motivated despite our instructor’s great effort. At that time, I didn’t know the reason
that we ought to study Lisp/Scheme with our textbook Structure and Interpretation of Computer
Programs (SICP)
.
Even today, I don’t like Lisp because it is ugly, slow, and simple. The syntax of Lisp looks too
weired compared to most programming languages we are already familiar with, such as C and
Ruby. Besides, many keywords in Lisp are wordy; in Cojure (a dialect of Lisp), for example, you
use fn
instead of lambda
. If you do your homework or project assignment in Ruby, it would
take less than half of the time compared with doing it in Lisp; in other words, you are sacrificing
your time for writing your code in Lisp--although its execution time is slower than that written in C.
Furthermore, the standard library of Lisp is very limited, and that is
why you are often overwhelmed by a long Lisp code even though it actually has very few
functionalities.
After the semester, I read some notable articles regarding computer programming. Then I
realized the importance of learning Lisp. The quote below is from How To Become A Hacker
(1996)
written by Eric S. Raymond, an open source software advocate.
LISP is worth learning for a different reason — the profound enlightenment experience you will have when you finally get it. That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself a lot.
Here’s another quote from Tour de Babel (2004)
by Steve Yegge, a programmer who knows a
lot about programming languages (if you are a Japanese speaker, I recommend that you should
also read works about programming languages written by Matz.)
It's not sufficient to learn how to write C-like programs in Lisp. That's pointless. C and Lisp stand at opposite ends of the spectrum; they're each great at what the other one sucks at. If C is the closest language to modeling how computers work, Lisp is the closest to modeling how computation works.
In my experience, the two quotes above are both very true. Indeed, I’m assuming only one (or even none) of the students in this class will actually use Lisp by profession in future. But still the knowledge of computation is very useful when you write a code in an interpreted language such as Ruby, R, and Matlab.
Another good thing I should have known is that our textbook SICP
is undoubtedly one of the
greatest computer science books in the universe. When I was taking CIS 61, I hated SICP
since each section in this book contains too much information. But oddly enough, after the
semester I began studying Lisp with SICP again, and found many important--both abstract and
practical--ideas. I have never seen any computer science book like this other than The Art of
Computer Programming
by Donald Knuth. It is no wonder that SICP has been read by many
able computer scientists all over the world.
Lastly, I advise students currently taking CIS 61. This course is not waste of your time or effort. Even if what you learn in this course is not useful right now, it will eventually become your lifelong resource. In addition, I advise you to make friends who are taking this course seriously. Even after you graduate from the community college, they will be your lifelong, good friends.
