My road to Lisp
It's been a long time coming.
~1985 | BASIC | Grade 5, just some loops and print statements |
~1987 | LOGO | Grade 6 or 7, Turtle graphics |
~1990 | Pascal | Grades 11 & 12, first formal programming education |
Sept 1994 | C |
Comp. Sci. 100, Pointers and free() are my friends. K&R2e becomes my favorite programming book. |
Summer 1995 | C++ |
Read a book on C++ and was repulsed by ugly syntax. I gave it an honest try. |
~2000 | Java | Read a book on Java and was repulsed by the required OOP. "main" is in a class?!?!? |
May 2005 | JavaScript | Just a simple script or two. |
May 2005 | PHP | Weak typing is neat. Started wanting a framework for web applications... |
Nov 2005 | Ruby | Thanks to Rails, I literally forgot, in under a week, all the PHP I had learned in six months. |
Jan 2006 | JavaScript (again) |
In ernest this time with the rhino book. |
Feb 2006 | Java (again) |
Read another book on Java and started to like really like the ideas of OOP. |
Mid 2006 | Stumbled on Paul Graham's page about Arc. Lisp? 1960? Just functional programming? Who wants that? | |
Nov 2006 | Reading books about writing compilers | |
Feb 14, 2007 | Perl |
Read the camel book. Could a language be any uglier? |
Feb 16, 2007 9:28 PST | Steve Yegg's entertaining language comparison Maybe I really do need to find out about this Lisp stuff. Thanks to Timothy Bennett for the link after my complaining about Perl. | |
Feb 16, 2007 | Lisp (finally!) | 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. |
July 2008 | Scheme |
Structure and Interpretation of Computer Programs finally enters my programming life, changes it permanently, and replaces K&R2e as my favourite programming book. |
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
Have something to write? Comment on this article.
Andrew,
I don't know how many blog articles are linked before they exist but I'm taking a gamble and predicting that this link will work in a couple days.
Peter,
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.
Have fun lisping!
Have something to write? Comment on this article.
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