Clair and I just chatted today over YM, and from her personal blog I saw her contemplating on learning a programming language. I suggested that she learns either Python, or (Emacs) Lisp. On the other hand, I could also suggest (judging from the comments on her post) that she could also dig in to Structure and Interpretation of Computer Programs by Hal Abelson and Gerald Sussman, just as I’m doing now.
The book, in itself, doesn’t teach Lisp (actually it’s smaller, leaner brother, Scheme) per se: rather, it focuses on the actual process of programming, including the study of computational processes, visualizing its local evolution through abracadabra programming, and general hints on abstraction and programming paradigms. I know, it sounds heavy (even more so with a bit of (lambda) Calculus included
but there is actually a great lot of concepts to be found in this book, I myself even wonder why I didn’t read this, at the first place (judging from my past Net wanderings, I’ve already passed SICP at least thrice, on different occasions).
What even makes me wonder more is that I wasn’t even being aware of learning Lisp, as it subtly inserts itself at every place it needs to be, when you need a procedure definition handy, or when the book illustrates the concepts. I don’t even need to pay attention to syntax (as far as Lisp goes, Scheme’s the most intuitive, especially in its treatment of procedures as `first-class’ objects), so it rather goes into fine-tuning the inner workings of crafting really great computational processes that follow nice shapes, and in turn flows into the actual implementation of the process as a written program.
Oh, I could go on and on praising this book… but, well, you’ve got eyes, right (and if by chance you don’t, there are text-to-speech readers available), so go get a copy and read it!
And if you can afford downloading large files, you can get the video lectures too…