Weak things must boast of being new, like so many German philosophies. But strong things can boast of being old. -- G.K. Chesterton (@GKCDaily) December 7, 2012
Obviously Chesterton was talking about software; scholars are divided as to whether he was talking about lisp or Debian Stable. -- Phil Hagelberg (@technomancy) December 7, 2012
With respect to technology, things can move fast. It can be hard to sift through what's valuable, and what should be ignored. But there are some things that have not changed much. I think it's worth taking a step back and reviewing these, as it's likely that these are the "classics" of programming.
I just have to start with lisp. It's been around since 1958, and yet, it remains not only relevant, but continues to push the forefront of possibility. The funny thing about it, is that every time I look at it, it gets better.
Lisp is the most important idea in computer science. -- Alan Kay
Arguably, it's simultaneously the most simple, and the most powerful programming language. In fact, its power is driven by its simplicity. Naturally, I'm referring to its consistent, simple, uniform syntax, which engenders macros. Admittedly, new macros are usually not prolific, but when they are necessary and implemented tastefully, it is incredibly difficult to imagine better solutions.
The greatest single programming language ever designed. -- Alan Kay (about Lisp)
It's not just that lisp has survived, it has thrived in recent years under new forms. Clojure has taken lisp, and altered it in subtle but crucial ways. Not only has it become more approachable through small, but important syntax alterations, it adds data structure advancements that imho other languages will continue to emulate for years to come. These persistent data structures simultaneously provide thread safety, and facilitate a natural functional style. Either of these are beneficial; having both is transformative.
You can reach a point with Lisp where, between the conceptual simplicity, the large libraries, and the customization of macros, you are able to write only code that matters. And, once there, you are able to achieve a very high degree of focus, such as you would when playing Go, or playing a musical instrument, or meditating. And then, as with those activities, there can be a feeling of elation that accompanies that mental state of focus. -- Rich Hickey
Having this level of direct feedback is hard to describe to anyone that isn't used to it.
Another item worthy of mention, is sicp. Amazingly, it goes from 0 to forking time in just a few chapters, but there's one particular item that continues to blow my mind. And that is, being able to represent a list data structure with nothing but closures. This isn't a major topic in the book, but I personally think it's worth highlighting because I think it's so profound.
For those that aren't used to this, lists can often represented recursively in functional languages as either an empty list, or a value combined with a list. Cons is often used as the name of a function to construct the value and the subsequent list. car is used for the first element, cdr is used for the subsequent elements.
It turns out that this can be modelled using only functions. No data type facilities are necessary. This is known as "Church encoding". Here's the scheme implementation:
(define (cons x y)
(lambda (m) (m x y)))
(define (car z)
(z (lambda (p q) p)))
(define (cdr z)
(z (lambda (p q) q)))
I'm not trying to argue that lisp is "the one true way". However, I think it would be foolish to ignore any programming technology that has persisted for so many years. We'll see what the next few dozen years will hold.