October 8, 2007

Language features don't matter.

My personal philosophy on programming (what, you don't have one?) has lately veered towards the view that programming language features are completely irrelevant. The view doesn't stop there, because I think they are completely irrelevant only when you have a language with enough meta-/reflection/self-description facilities to allow you to implement those features yourself. In my opinion, such a language has a quality I like to call "not getting in the way of what you want to do," which I think is the only nice thing to be said about programming, programming languages, and computers in general.

That being said, programming language features sure are convenient. They are most convenient when they have developed as a result of real programmer experience. I think the pinnacle of such "features derived from sweat and tears" (programmers don't often bleed) is Common Lisp. The people that contributed to X3J13 (you can find a list in the HyperSpec: http://www.lisp.org/HyperSpec/Body/chap-0a.html) include some of the best programmers of their time, and collectively represent decades if not centuries of programming experience, drawing on systems like Maclisp, InterLisp and Lisp Machine Lisp and coming from institutions like the MIT AI Lab and Xerox PARC. So I was real glad to find this page by Abhishek Reddy this morning that does a very good job of describing some of the many features that come with Common Lisp. I think it's a pretty good overview for beginners and those interested in Lisp.

1 comment:

Unknown said...

I'm glad you liked it. :-)

I have to agree that a language's feature-set isn't its chief defining characteristic. Especially so for an extensible language like Lisp.

What's interesting about Lisp's features, though, is that they demonstrate its more abstract traits nicely. For example, LOOP is a macro extending CL-sans-LOOP with a little domain-specific language. That kind of extensibility is hard to convey, I think, without such a well-implemented exhibit.

Other characteristics like Lisp's interactivity, reflexivity, etc. should also be evident in the remaining features.

Plus there is the advantage of having the heavy lifting already done for you, as you noted.

I wish I could have described the language explicitly at a still higher level. Maybe in a future piece.

Nice blog, by the way!