Rant: lisp is not C. Get over it.
Posted: Tue Sep 09, 2008 6:05 pm
I've just read yet another "objective" dissection of lisp's faults. Here are my responses to the non-issues that turn up time and time again:
The syntax/parentheses.
This is lisp's main strength. It's only a problem if you're expecting lisp to be like, well, something that isn't lisp. If you want syntax, pick a language that has it. But if you can cope without the overhead of memorising dozens of arbitrary rules to distract from writing code, and can manage your agoraphobia when confronted with total flexibility, keep learning. You may just figure out why, after almost fifty years, nobody's bothered to make a serious effort to hamstring the language with something it doesn't need. (I know there's at least one package that adds syntax, but how heavily is it actually used?)
Here it is again, in shorter form: with lisp, you're not wasting mental effort jumping through the hoops of something that produces an AST; you're directly manipulating the AST itself. Lisp source code is fundamentally different from C code, because you're working at a different level.
There are too many choices.
Oh, you poor darling! Having to actually evaluate different options, and choose among them! Having the freedom to select the implementation whose tradeoffs suit you best!
Gosh, that'd rule out Java, C and C++ as well, then.
It doesn't cater to beginners.
This one bugs me even more than whimperings about the parentheses. Heavens to Betsy, how could we possibly allow the inequity of a language that doesn't have a short learning curve?! How grossly unfair, how incredibly mean, to revel in a full-strength language that doesn't hobble itself for sake of the inexperienced! Won't somebody think of the children?
Ferpitysake, people, grow up! If you want a language to learn programming with, it's not like yer menu's exactly sparse: python, perl (if you must), ruby, even shell are right there. Lisp is a language for grown-ups. It's like Unix: they both assume that you know what you're doing, that you want the power, and that you can handle it. If you want a language that stunts itself to protect you, Java and VB are right over there. No, it's not as easy to learn lisp as it is to learn, say, Python - but having climbed that hump, I can tell you that I'm very glad it's there. I'm not glad it's there because it keeps people out, but because it keeps the power in.
The standard hasn't changed for ages.
It's not stagnant - it's mature. Just like the bolt-on syntax, nobody's found sufficient motivation to put in the time and effort to produce a new standard. Variants have come and gone (Dylan, Arc and Goo) but the politics-not-art that is Common Lisp is still the main branch because we still like working with it. As Paul Graham asked, what theory fits these data?
<my favourite feature> isn't part of the core language.
Fine. Throw yer tantrum. Now take another look at the language: if you don't actually need network I/O (web libraries, whatever), you don't need to add the overhead to the runtime. But if you've actually bothered to learn the language, you'd have understood that once you've loaded the library, it is part of the language with which you're working. Batteries? We have entire power stations! And the funny thing is that when the need for a new library arises, that new library is often pretty quick in appearing.
The weirdest part about this is that often the same people who complain about library X not being present, also complain that they want a small core to the language. The source-code to the core can be covered by the average hand; is that small enough? All the rest of CL is the included set of batteries!
Now, understand that I'm not claiming the language is faultless. I'm just sick of hearing repeated complaints about things that aren't actually problems, from people who want lisp to be just like their favourite language, so that they don't have to go to all the work of learning something new.
Maybe lisp isn't for mere mortals. I've certainly met plenty of people who just can't handle non-trivial degrees of abstraction, so maybe it's simply that your brain needs to be *this* evolved to get onto the ride. If so, so what? You can pillory me for being arrogant, but I'm blessed with a mind that can handle a full-power language; should I be denied that tool just because some people aren't able to get their heads around it? If that's the case, we'd best close down the F1 Grand Prix, because Joe Sixpack will never be able to drive at Michael Schumacher's level.
Then again, maybe I should start trolling in the F# forums, complain loudly that it isn't lisp, and look surprised when it goes down badly...
The syntax/parentheses.
This is lisp's main strength. It's only a problem if you're expecting lisp to be like, well, something that isn't lisp. If you want syntax, pick a language that has it. But if you can cope without the overhead of memorising dozens of arbitrary rules to distract from writing code, and can manage your agoraphobia when confronted with total flexibility, keep learning. You may just figure out why, after almost fifty years, nobody's bothered to make a serious effort to hamstring the language with something it doesn't need. (I know there's at least one package that adds syntax, but how heavily is it actually used?)
Here it is again, in shorter form: with lisp, you're not wasting mental effort jumping through the hoops of something that produces an AST; you're directly manipulating the AST itself. Lisp source code is fundamentally different from C code, because you're working at a different level.
There are too many choices.
Oh, you poor darling! Having to actually evaluate different options, and choose among them! Having the freedom to select the implementation whose tradeoffs suit you best!
Gosh, that'd rule out Java, C and C++ as well, then.
It doesn't cater to beginners.
This one bugs me even more than whimperings about the parentheses. Heavens to Betsy, how could we possibly allow the inequity of a language that doesn't have a short learning curve?! How grossly unfair, how incredibly mean, to revel in a full-strength language that doesn't hobble itself for sake of the inexperienced! Won't somebody think of the children?
Ferpitysake, people, grow up! If you want a language to learn programming with, it's not like yer menu's exactly sparse: python, perl (if you must), ruby, even shell are right there. Lisp is a language for grown-ups. It's like Unix: they both assume that you know what you're doing, that you want the power, and that you can handle it. If you want a language that stunts itself to protect you, Java and VB are right over there. No, it's not as easy to learn lisp as it is to learn, say, Python - but having climbed that hump, I can tell you that I'm very glad it's there. I'm not glad it's there because it keeps people out, but because it keeps the power in.
The standard hasn't changed for ages.
It's not stagnant - it's mature. Just like the bolt-on syntax, nobody's found sufficient motivation to put in the time and effort to produce a new standard. Variants have come and gone (Dylan, Arc and Goo) but the politics-not-art that is Common Lisp is still the main branch because we still like working with it. As Paul Graham asked, what theory fits these data?
<my favourite feature> isn't part of the core language.
Fine. Throw yer tantrum. Now take another look at the language: if you don't actually need network I/O (web libraries, whatever), you don't need to add the overhead to the runtime. But if you've actually bothered to learn the language, you'd have understood that once you've loaded the library, it is part of the language with which you're working. Batteries? We have entire power stations! And the funny thing is that when the need for a new library arises, that new library is often pretty quick in appearing.
The weirdest part about this is that often the same people who complain about library X not being present, also complain that they want a small core to the language. The source-code to the core can be covered by the average hand; is that small enough? All the rest of CL is the included set of batteries!
Now, understand that I'm not claiming the language is faultless. I'm just sick of hearing repeated complaints about things that aren't actually problems, from people who want lisp to be just like their favourite language, so that they don't have to go to all the work of learning something new.
Maybe lisp isn't for mere mortals. I've certainly met plenty of people who just can't handle non-trivial degrees of abstraction, so maybe it's simply that your brain needs to be *this* evolved to get onto the ride. If so, so what? You can pillory me for being arrogant, but I'm blessed with a mind that can handle a full-power language; should I be denied that tool just because some people aren't able to get their heads around it? If that's the case, we'd best close down the F1 Grand Prix, because Joe Sixpack will never be able to drive at Michael Schumacher's level.
Then again, maybe I should start trolling in the F# forums, complain loudly that it isn't lisp, and look surprised when it goes down badly...