Stumbled on Paul Graham's site again and recognized the nice Arc graphic. After reading The Roots of Lisp once I had a huge smile on my face. After reading it twice I had to pick my jaw off the ground when I realized what functional programming could do.

Studying Math and Physics in university I had one of those great HP 48G calculators with reverse polish notation. It is still my calculator. I'd type something like 2 3 + to compute a sum. Of course, in class we used prefix functional notation all the time like s(2, 3) where s is a sum function. I came to think infix operators like 2 + 3 as a kludge that didn't make much sense with more than two arguments and so why not always use function notation for uniformity? When I found out that in Lisp I'd always write (+ 2 3) that put the huge smile on my face.

When I read Graham's Roots article more carefully the second time and saw that he was building a domain language for the problem at hand is when my jaw hit the ground. It was the (assoc.) function that did it for me. That is really just the infix dot operator in JavaScript. On some occasions I've struggled with the limitations of the JavaScript dot operator. The dot operator is what fires up the prototype chain for property lookup and is what binds you to the built-in prototype-based object-oriented paradigm. I've thought about building my own function to replace the dot operator. Then I could maintain and manage the property lookup chain and have Ruby-style mixins for multiple inheritance. Every time I've thought this I've also thought that it was a little off the deep end. Then I found Lisp and it is a language and community that encourages exactly what I've been wanting to do! I won't be writing my own JavaScript dot operator function and using it for a production website because I don't think it would be maintainable by others. But the feeling of freedom I have as a programmer just by reading one article about Lisp has been transformative! Everyone kept telling me it would be.

It's interesting to look on the list of languages I've learned over 22 years. Now I can see how many of them were Lisp influenced. I also feel lucky that I get to work with JavaScript which is the widest-spread language that is closest Lisp. Even if JavaScript is like a somewhat crippled Lisp in C clothes.

I seem to judge a language by its thickness. C is thin: the K&R book is only 272 pages and so far remains my favorite programming reference book. The OOP languages are thick: books on C++, Java, Ruby always seem to be over 800 pages. It's a good sign to me that the books about Lisp are thin.

The only other time I've been excited about a programming language is when I "got" C pointers. After just a few hours reading about Lisp my excitement about Lisp is much greater. I feel like I have found home.

Comments

Peter, This is inspiring! I've been meaning to take a look at Lisp for a long time. I'd never heard it compared to JavaScript before, which is sort of my "home" language. I guess I'm a little older than you because I was programming BASIC in 8th grade in 1982 on my TI-99/4A. Cheers! -Andrew

Welcome to the family! I started learning programming in Lisp a number of years back, and I've always been sad that I haven't found a way to use it in my daily work. It's a joy to play in, and there are so many things possible that can't be done elsewhere.