Some years ago I made several attempts at learning Lisp and the reason I ultimately gave up was because the Lisp community is sort of like the Amish people of programming communities. It attracts a lot of oddballs. Some reasonable people, but mostly stubborn, insistent oddballs that hold strange beliefs.
To begin with, the litterature was pretty abysmal. In Lisp circles "Structure and Interpretation of Computer Programs" is revered as sort of a bible -- yet it lets the aspiring programmer down since it goes on and on without ever providing any information that is actually useful. It is like trying to teach a toddler how to walk by showing them a video of people who precisely describe how to walk. Indeed, all the information is there, but it completely misses the mark since what a toddler needs is to program his brain to correctly interpret sensory input, make sense of it, generate the correct muscle contractions and strengthen the right muscles. In other words, in order to learn how to walk a toddler needs to walk.
Just as a programmer needs to program to learn about programming.
The way you do this is by having a _practical_ approach. By writing programs that do something besides computing fibonacci sequences and demonstrate the elegance of tail recursion. SICP is an exercise in intellectual masturbation. And it is highly improper that old men with funny ideas are let lose on our young in this manner.
At the time I was learning Lisp, much of the litterature was of the same type. Aloof, irrelevant, elitist and extremely proud of it.
Turning to practitioners wasn't much help either. As a new Lisp'er you have this feeling that you are crashing their party. They truly see themselves as superior -- no really, and everyone else is an idiot for not having long since converted to the One True Way.
At one point, in my foolishness, I wanted to write a networked application in Lisp. Of course, I was presented with various ways of _avoiding_ it altogether by means of various silly hacks. Like feeding data in and out of the system by means of files. When I blurted out that "look, this thing has to scale to quite a few users so the overhead of your approach really is a bit too fiddly" people just got really pissed off.
Eventually I was told of an add-on I could dowload, which, after an afternoon of fiddling about, I got to work. I played around with the code a bit and then started looking for sample code on the net. In my foolishness I asked if there happened to be a standard way of doing networking in Lisp. The answer was something along the lines that standards for something like networking was stupid, that sockets were badly designed and that I was an idiot for worrying about the portability of my code between Lisp environments.
Of course I became frustrated and I just gave up. In the time I wasted on Lisp I could have solved my programming problems in half a dozen other languages and been done with it, and I would probably have gained a lot more _usable_ knowledge.
The problem with Lisp isn't the language, or the way one models and solves problems. The problem is the people. I know quite a few very successful systems that were written in Lisp. They're high quality and they perform well -- but the minute their creators are off the stage, the system usually exits, stage left, not too long after them. Remember Viaweb? Ask yourself how come the Common Lisp code they wrote isn't being used anymore. I bet you their answer roughly translates to "because people are idiots". While there is an element of truth in that it still seems to be the main marketing slogan of the Lisp community. And it isn't exactly a good marketing slogan if you ask me.
For Lisp to succeed, the Lisp community needs to grow up. It needs to develop social skills, and I mean that in a *very* broad sense of the term. Lisp'ers need to understand why languages like Java, Python, Ruby, Perl, C++ etc are being chosen time and time again by developers and managers. They need to start thinking about APIs, tools, usable libraries, frameworks, infrastructure and they need to think about generating a higher volume of quality literature that teaches toddlers to walk.
Now, you can piss away another opportunity and pick at my arguments or you can grow up and do something about it.
Lispers are living inside a bubble
Some years ago I made several attempts at learning Lisp and the reason I ultimately gave up was because the Lisp community is sort of like the Amish people of programming communities. It attracts a lot of oddballs. Some reasonable people, but mostly stubborn, insistent oddballs that hold strange beliefs.
To begin with, the litterature was pretty abysmal. In Lisp circles "Structure and Interpretation of Computer Programs" is revered as sort of a bible -- yet it lets the aspiring programmer down since it goes on and on without ever providing any information that is actually useful. It is like trying to teach a toddler how to walk by showing them a video of people who precisely describe how to walk. Indeed, all the information is there, but it completely misses the mark since what a toddler needs is to program his brain to correctly interpret sensory input, make sense of it, generate the correct muscle contractions and strengthen the right muscles. In other words, in order to learn how to walk a toddler needs to walk.
Just as a programmer needs to program to learn about programming.
The way you do this is by having a _practical_ approach. By writing programs that do something besides computing fibonacci sequences and demonstrate the elegance of tail recursion. SICP is an exercise in intellectual masturbation. And it is highly improper that old men with funny ideas are let lose on our young in this manner.
At the time I was learning Lisp, much of the litterature was of the same type. Aloof, irrelevant, elitist and extremely proud of it.
Turning to practitioners wasn't much help either. As a new Lisp'er you have this feeling that you are crashing their party. They truly see themselves as superior -- no really, and everyone else is an idiot for not having long since converted to the One True Way.
At one point, in my foolishness, I wanted to write a networked application in Lisp. Of course, I was presented with various ways of _avoiding_ it altogether by means of various silly hacks. Like feeding data in and out of the system by means of files. When I blurted out that "look, this thing has to scale to quite a few users so the overhead of your approach really is a bit too fiddly" people just got really pissed off.
Eventually I was told of an add-on I could dowload, which, after an afternoon of fiddling about, I got to work. I played around with the code a bit and then started looking for sample code on the net. In my foolishness I asked if there happened to be a standard way of doing networking in Lisp. The answer was something along the lines that standards for something like networking was stupid, that sockets were badly designed and that I was an idiot for worrying about the portability of my code between Lisp environments.
Of course I became frustrated and I just gave up. In the time I wasted on Lisp I could have solved my programming problems in half a dozen other languages and been done with it, and I would probably have gained a lot more _usable_ knowledge.
The problem with Lisp isn't the language, or the way one models and solves problems. The problem is the people. I know quite a few very successful systems that were written in Lisp. They're high quality and they perform well -- but the minute their creators are off the stage, the system usually exits, stage left, not too long after them. Remember Viaweb? Ask yourself how come the Common Lisp code they wrote isn't being used anymore. I bet you their answer roughly translates to "because people are idiots". While there is an element of truth in that it still seems to be the main marketing slogan of the Lisp community. And it isn't exactly a good marketing slogan if you ask me.
For Lisp to succeed, the Lisp community needs to grow up. It needs to develop social skills, and I mean that in a *very* broad sense of the term. Lisp'ers need to understand why languages like Java, Python, Ruby, Perl, C++ etc are being chosen time and time again by developers and managers. They need to start thinking about APIs, tools, usable libraries, frameworks, infrastructure and they need to think about generating a higher volume of quality literature that teaches toddlers to walk.
Now, you can piss away another opportunity and pick at my arguments or you can grow up and do something about it.