For the past few week, I’ve been learning LISP on weekends, this being a part of my new ‘Two programming languages a year’ resolution (I plan to learn Haskell later this year and FORTH and Clojure next year). While I was mostly inspired by Paul Graham (if you don’t know who he is, you should probably jump off a roof), I also wanted to have a look at what has kept LISP alive for sixty years. I was not disappointed.
The coolest thing about LISP is the way you express your program as a tree. While it initially feels a little counter-intuitive, this counter-intuition is the same one one feels when switching to Linux from Windows – “Where is my C: drive? Where is my start menu?”. As you write more code, it becomes difficult not not to think this way.
While most people will disagree with the statement above and talk about how the macro system is really the coolest feature of LISP, I think S-expressions naturally lead to the
defmacro construct. Such a construct will not have been possible in languages like C and Java, simply because the programmer does not have any access to the underlying representation.
Currently I’m following this fantastic book called ‘Practical Common LISP’ and working on a Limp / SBCL stack. Once I’m done with ‘Practical Common LISP’ I’ll move on to ‘On LISP’ by Paul Graham.