Saturday, April 28, 2007

Anyone who knows how to program in Lisp is smart.

After a brief conversation with a co-worker the other week, I came across the following revelation "anyone who knows how to program in Lisp is smart". I think this is an absolute truth, as sure as the sun will rise tomorrow. There are lots of religious preferences out there regarding programming languages (and some others probably fall under this notion), but I think Lisp in particular is in a class all by itself. If you can program in Lisp (and I mean really program), I'd wager that you are in the top 5% of developers (maybe better). Before the trolls get all riled up, I'm not trying to assert the inverse (that all of the top 5% of developers know Lisp), or that your language preference isn't a good one.

Much like most things I expect to write about in my blog, I suspect plenty of people before me have arrived at this same awakening. But given the recent resurgence (or at least an apparent resurgence to me) in Lisp on reddit and news.ycombinator, I think this may be relevant here.

Before I get much further, I should make one thing absolutely clear: I can't (currently) claim to know how to program in Lisp (at least by my standards of what that means). I completed the required Lisp assignment in AI class at the University of Rochester, but no more. I even thought my brother was bit of a nut when he was working on natural language processing in Lisp at Cornell. I think I said something like "what's the point of learning Lisp, you can't get a job doing that." Somehow he managed to get an even cooler job having nothing to do with Lisp. If only I'd known at the time that trying to get a job was not necessary. If only Paul Graham could have been writing 10 years ago instead of starting a company ;)

But back to my point, this isn't meant to be a fanfare about Lisp, or Lisp programmers, more so my intent is to assert the title as a fact and see what value can be gained from it. One of the obvious initial values, and this one may get eroded over time, is that this maybe an efficient mechanism to evaluate job candidates (or co-founders if that's the point you are at). I'm not suggesting this for a filtering mechanism, but rather as a "Resume + 10 Ring" as it were. Of course, to actually apply the modifier you need to make sure your standard for "knows how to program in" is equal to the candidates. Which rather ironically, could be hard to determine if you, yourself, don't "know how to program in Lisp".

Fortunately, this may be easier than it looks. Lisp strikes me as the kind of language that people get passionate about (if they like it (and I suspect that most people that know it, like it)). I think it might be easy to discern fake passion coming from people that just read about car and cdr last week. If Lisp were to become the next "'new' language to know", the buzzword compliant people will quickly turn into babbling idiots when they are guided into a discussion on Lisp, since it's so foreign to every thing they know.

See, I think Lisp is, as designed, an excellent filtering mechanism. First of all, to even begin to learn Lisp (from the perspective of knowing another language... lets say Java), you need to discard all of your syntax and style baggage (Lisp's style is like no other). If you can't cross this hurdle, well, never mind (I'm surprised you got this far into the post). Then you need to get over your tendency to over design and complicate things. Lisp takes a bottom-up, simplify things kind of approach. If you can't learn to think of the world in these terms, you will never understand Lisp. I think these things are the most important traits in being a good developer.

You need to be flexible and open minded about syntax (and other things). You shouldn't over design and over complicate things (one of my major frustrations these days). And, you need to be smart enough to think about the world in a whole new way to be in sync with Lisp. Man, give me a team of 5 people that all have these traits (and I assert by "knowing Lisp" they would), and you can get a lot done (regardless of the programming language (they are flexible, right ;-)).