Lisp

My favourite programming language is Lisp, and it is also the one I would most recommend for beginners as well as for the most advanced work. It's not the most appropriate language for every task -- I recommend mixed language programming where appropriate and possible -- but it's a very good general-purpose language, for tasks of all levels of complexity.

Lisp has minimal syntax; programs are represented as lists, each list corresponding to a parse tree node in other languages. Although it takes a little while to get used to this if you've worked with other programming languages, its advantages include that there is a lot less syntax to learn (not a concern to experienced programmers, but a major concern for some beginners).

One of the greatest advantages of Lisp over other languages is that there is no sharp distinction between code and data; programs are represented in memory using the normal data structures of the language, and there are functions to take pieces of ``data'' and treat them as ``program'', which gives great flexibility in structuring programs.

As well as being very good practical programming language, Lisp has a clear connection with an underlying and very general model of how computation works. Eric Raymond recommends learning Lisp even if you will not be using it regularly, ``because of the enlightenment it brings''.

My PhD was Lisp-based, defining a reflective architecture for mixed-language interpreters. This is a kind of task that would be most noticeably harder in any other language.

Most of the Lisp that I write these days is Emacs-Lisp. (Although in some sense notionally an editor, Emacs is actually a Lisp system with a lot of editing facilities built into it, and an extensible editor application built on top of that Lisp system.) I have a large collection of Elisp that I have written myself, that you're welcome to download and use, and modify.

I have started to write a simple Lisp tutorial.

[lisp] [computing]
John C. G. Sturdy
[John's home] Last modified: Sun Oct 28 22:19:18 GMT 2007