For those of you who don't know, which is damned near everybody, Paul Graham is a Lisp resource of the first magnitude. He wrote the textbook on ANSI Standard Lisp, and his book "On Lisp" covers in more depth how to think in Lisp/write idiomatically in Lisp/be a Lisp native than anything else I've ever written. He really is The Man.
Unfortunately, he hasn't yet learned the central lesson of RMS ... the set of people who want to learn/know/use Lisp is vanishingly small. No amount of proselytizing will convert the vast majority of software developers into Lisp guys. It just doesn't work that way. Eric Raymond (go read everything he's ever written, by the way) noted this same thing about RMS a while back, although I haven't been able to track it down via Google yet.
Mr.Graham also looks down his nose at Java, and C (and C++) to a lesser extent. In fact, in his essay Beating the Averages, he states that there is a continuum of language power/expressivity such that some languages occupy higher places on the lattice than do others. Lisp, of course, sits at the pinnacle. Java comes in for a real beating in nearly every essay he writes.
And yet ... Java is everywhere. How did that happen? I'll posit my opinion, and it's a remarkably simple one:
Java forces you to play well with others
That's it. There isn't any magic ... just the fact that all the bits and pieces are required to fit together without serious blood loss. Sure, you can get libraries written in C with well-documented headers, but they're woefully OS-and-version dependent. C++? The language standard specifies that symbol mangling is implementation-dependent because the committee knew that trying to force one single object model/memory layout on everybody at this late date was going to be organizational suicide ... so you not only have to have the right OS at the right version, but also the right compiler also at the right version. Perl, Python, Tcl, and Ruby are all doing pretty well in places, but none of them have serious corporate buy-in, for reasons which I completely do not know.
Lisp? There's a bit of lip-service paid in the standard to what they call "FFI", but the reality is that Lisp expects everything in the entire world to be loaded (in source form) into the current image. Sure, the libraries you can find/buy will work, but that's because the vendor has to give you the source. Not many vendors really want to do that.
And so we come to Java. Run-time linking works because it's specified in the standard exactly how it has to work, and Sun is quite serious about prosecuting people who call their product "Java" that doesn't hew quite closely to the standard. Hey, look! We can write servlets, and web apps, and SOAP services, and sell the damn things to people using any old J2EE container and we don't give a good goddamn whose container they're using because run-time linking works.
I can sell/give away a JAR file full of Java classes and interfaces with embedded documentation, and my clients can just drop it into their copy of JBuilder, IntelliJ, VAJ, or even EMACS. Compilation works, context-sensitive help works ... it's just shocking.
Don't misunderstand me here ... I don't particularly like the language. It gets in the way far too often for a language that does so little to help you out. The real truth, though, is you don't have enough time to write all the infrastructure and support you can have via download if you just put up with the warts.
I have no doubt whatsoever that Mr.Graham's Lisp-based e-commerce solution is clean, sparse, elegant, tasty, and more absorbant than anything I'll ever write. I, however, can get to the finish line faster than he can because I can download stuff written by IBM (representing untold man-years of effort) and nail it to stuff written by the Apache group (representing more untold man-years of effort) and then nail that to stuff written by Object-Refinery. My finished work product isn't nearly as pretty as Mr.Graham's but it only took me a week. What was your time to market again?
No comments:
Post a Comment