Levels of abstraction
Its not about the number of characters in your code that matters when you are choosing a language for productivity. Sure, I would rather write something in Python than in C, if I don’t need to worry about performance. But its hard for me to translate my ideas into Haskell, which results in even shorter code. Using that metric, one could argue that writing GZipped code is better, but think of the trouble you need to go through for that. Here is where I believe Lisp/Scheme really shines through. You can just program by “wishful thinking” as Hal Abelson says. Previously, I was under the impression that lisp was just another language. I was looking at a lisp code and saying to myself, I could implement the same in Python in the same number of lines, so what is the big deal?. Recently, I started reading “Structure and Interpretation of Computer Programs” (SICP) (If you haven’t read SICP, you should start reading it, it is the best book in expressing the idea of abstraction to programming). This book made me realize what is meant by the statement, “lisp has no syntax at all”. There is absolutely no friction in translating your idea into code, when you start thinking at the right levels of abstraction. I don’t get why lisp isn’t as popular as it should be, probably because most people don’t get abstraction. But at the same time, much of what is written about procedural abstraction in SICP is applicable to any programming language with lambdas and first class functions. So even if you don’t intend to use Lisp/Scheme, I would suggest getting a copy of SICP.

