Lisp as an Alternative to Java
norvig.com
norvig.com
----norvig 449 days ago------
Peter Norvig here. [....] In terms of programming-in-the-large, at Google and elsewhere, I think that language choice is not as important as all the other choices: if you have the right overall architecture, the right team of programmers, the right development process that allows for rapid development with continuous improvement, then many languages will work for you; if you don't have those things you're in trouble regardless of your language choice.
----edw519 448 days ago----
[....] Someone should write a program that automatically posts this paragraph [Norvig's] at the top of every language war thread. I think they should write that program in php :-)
----poet 449 days ago-----
An approximation of some of Norvig's recent thoughts (Feb 2010): "(1) It just turned out that when Google was started, the core programmers were C++ programmers and they were very effective. Part of it is a little bit of culture. (2) Early Lisp programmers (Erann Gat) at Google actually noticed that other programmers were equally or more productive. It has more to do with the programmer; we're getting to the point where language choice is less important (as opposed to 20 years ago). (3) Lisp is optimized for a single programmer or a small group of programmers doing exploratory work... If I want to make a change in a weekend I'd rather do it in Lisp than anything else, but by the time you get up to hundreds of programers making changes are not a language problem but a social one. (4) Libraries." Paraphrased from: http://www.youtube.com/watch?v=hE7k0_9k0VA#t=03m20s.
Just because A > B > C does not mean that C does not contribute to the result and can be dismissed. C may be less important than A, but that doesn’t mean it’s unimportant.
Specifically, assuming you have a sane process for hiring people and a sane process for choosing a language (e.g. we are not talking about the gap between “I CAN HAZ CODES” programmers and Norvig, nor are we talking about the gap between Brainfuck and Lisp), the contribution of A to the result is not so many orders of magnitude greater than C that you can ignore C.
And:
A > B > C. Fine. But are these independent variables? No, we know that the language affects (for better or worse) your ability to attract and retain certain developers. So A and C are not independent. Likewise, certain architectures are just plain hell to implement with certain languages, so B and C are not independent.
Solving for the maximal result of A, B, and C does not mean choosing A first, then B, and then C. It means choosing the best combination of all three at once.
Update: Nothing I’ve said here disagrees with Norvig, caveats are warnings not to oversimplify, not suggestions the advice is incorrect. Also, http://paulgraham.com/pypar.html
Let's be very very very honest here. Geeks like to try the latest coolest cutting edge. Don't forget to add the allure of working at the coolest hottest startup in Silicon Valley (or the "chance" to be able work, given that you mastered a specific technology) for street-cred and if they're lucky, IPO or big $$$.
How many times you see/hear/meet people switching jobs just because they don't want to be perceived as "behind the time"? (When in reality Google, Microsoft, are still moving forward with old-school technology).
Personally, I felt that there's Fire and Motion (http://www.joelonsoftware.com/articles/fog0000000339.html) going on in the so-called "hacker/startup" community.
At the end of the day, there are some developers becoming the victim of Fire and Motion being executed by a small group of alpha-nerds that write the initial code in their preferred cutting edge technology and left the company for another cutting edge green-field software development, leaving the "legacy 2 years old code-base filled with hacks" to the next group of developers that try to catch up the boat.
OK, enough ranting. Now, can we move on from the whole programming language war conversation?
The might have been mighty good Lisp programmers, but if they had to "notice" that, instead of knowing it all along, they probably have drank too much of the Lisp kool-aid.
Really, if Lisp is so productive, how come very few things of major importance have come in Lisp? Besides Emacs and/or Viaweb.
99% of stuff we use is made, well, NOT IN LISP (including variations on the Lisp theme, from Scheme to Clojure).
If something was that much more productive, wouldn't it have surfaced in, you know, actually producing things?
I understand that Lisp has a smaller developer population, but even so, if it's so much more productive, where are all the cool usable tools made in it, by some talented guys? I can mainly/only find some internal tools at that or this facility, or Lisp used for extension language.
Opinions?
I still like (J)Ruby a lot but the runtime performance of Clojure is better and the two languages seem, to me, to be equally "agile" - both are a pleasure to code in.
I'm curious to know if anyone wrote test cases for their code. I didn't see any here, but maybe they are in a separate file or weren't allowed to be submitted to the study.
Surprisingly, people still got work done.
Reinforced concrete did not exist back in the day. Surprisingly, some people still got work done.
It's tempting to be dismissive of modern development practices (TDD, for example) using the argument that a lot of great software was written before it existed. If the icons of the past could write Unix without TDD, why do we need it to build a CRUD app? This is an extremely poor argument against improving development practices.
People were getting building done before reinforced concrete, doing particle physics before synchrotrons, and designing mechanical devices before CAD. Since we have had these things, however, each of these fields has advanced significantly due to their use. It would certainly be possible to design the complex solid forms of something like an iPad without CAD, but it would be much more difficult and expensive. It's the same way with development practices. Modern development approaches, in many cases, significantly reduce the cost and risk of software development.
And unit-tests don't require writing unit-tests for everything.
I'm sure some do. For others, a lot of people claim they do, but there is precious little empirical evidence to support the claim. Many practices associated with Agile are poster children for that second group, including TDD.
I actually like the achievements of each of these fields better, way before those technological advances.
Reinforced concrete architecture sucks compared to the marvels of times past, particle physics were more interesting back in the day of the Copenhagen boyz, and I like pre-cad mechanical devices, from cars to watches, better than what we get today. But that's just me.
It is even more tempting to be dismissive because there is no evidence to support the notion than TDD is in any way helpful, and there is evidence that suggests it does not help at all.
IEEE Standard for Software Unit Testing
Approved December 11, 1986
That said, most of the arguments for Java around improved speed might apply to any language that runs on the JVM, though someone else might want to chime in here (I'm a little out of my depth trying to talk about how Lisp, Ruby, etc are implemented on the JVM).
Clojure gets around this by having all its functions implement a standard interface, and Java 7 has sorta seen the light (still no closures, but they can kind be emulated).
JRuby just suffers.
http://web.archive.org/web/20000531154721/http://www.norvig....
The distance between C# and Java is much, much smaller than between lisp and any member of the C family (except objective C).
Overall C# ends up being a much more expressive language. Though obviously C# and Java are closer than C# and Lisp.
Also, even if you couldn't, flippantly dismissing "elegance and purity" as a "shitty attitude" is not very constructive.
The work on the ANSI CL standard started then in 1986 using the ANSI standardization process. An intermediate language description (not a work of ANSI) was published as CLtL2. The ANSI CL standard then still took a few years more work to finalize and publish a standard document.