Reginald Braithwaite has posted some remarkably insightful comments that puts the choice of programming languages in a new light. His basic thesis is that its not really about features at all. Its really about signal-to-noise ratio—expressing more idioms in fewer bits.
I believe that programming is an idiomatic activity. We learn idioms and then apply a kind of pattern-matching to recognise problems that can be solved with an idiom we already know. Some idioms are easier to express than others in each programming language.
Sure, all languages are Turing Complete and therefore equivalent in theory, but in practice you might find that the only way to express an idiom from Language A in Language B is to write a A->B compiler or interpreter in B.
So let’s talk about idioms instead of so-called features like syntax. What does it mean for one language to be “higher level” than another? To have a “higher level of abstraction”? My own interpretation is simple:
One language is higher-level than another if it expresses more idioms in fewer bits than the other language. Or fewer lines of code. Or fewer symbols. There’s a really simple language idiom for this: Programs in a higher-level language have a high signal to noise ratio.
Don’t miss the part about meta-programming.