Wednesday, June 20, 2007

Programming Languages

Recently I've started a personal project to learn Lisp. Why Lisp? That is certainly a good question. My experience with Lisp is limited. My only other exposure to Lisp was in an undergraduate class on Artificial Intelligence. In that class we wrote a simplistic expert system for plant identification. The class and the project were interesting, but the thing I remember the most was Lisp's unusual syntax, and the apparent ease and simplicity of writing programs in it. It was the first programming language that I worked with that had automatic memory management. Eventhough I liked Lisp, I did not pursue it further at the time.

At the time it seemed that all the programming jobs were in C or C++. Most of the programming classes that did not explicitly teach a particular programming language were taught in C or C++, much like Java is the default teaching language in many places today. I pursued C/C++, that's where the money and the jobs were. Well in my software development career so far I've seriously used C or C++ only in one project. I've used Korn shell, SQL, PL/SQL, Perl, Cold Fusion, PHP, and of course the latest and greatest kitchen sink of computing languages, Java. In a fit of dissatisfaction with a Java project at my previous employer, I half heartedly searched for criticism of Java. I didn't expect to find any real substantiative criticisms. Boy was I wrong. I came across all sort of criticism, and some of it pretty damning. The worst criticism of Java that I came across, was that it was designed specifically for the mediocre programmer, that it was limited and watered down by design. In effect it was designed to be used by dummies and that this was acknowledged in a round about way by one of the language's designers. The criticism went into a fair amount of detail to support that view. In effect this means that there is a glass ceiling on what I can do using Java. That's when I decided to look for another language to learn, a language that does not have those limits, a language that the language designers themselves use. I thought about pursuing Perl in greater depth, or learning Ruby or Python but I always came upon comparisons between those languages and Lisp. Comparisons in which those languages do not quite measure up to Lisp's power, elegance, utility and so on. With limited time to learn and master any given language, I decided to learn Lisp. I had some experience with it and had liked it. Why learn a language that comes up short? Learning Lisp may not translate directly to my current job, but it might give me more insight into programming and programming techniques in general, and there is always the part about learning something just for the pure joy of it.

No comments: