Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

To add some detail.

Programming languages live and die by their libraries, i.e. vocabulary. The differences in grammar are in my opinion rather small, when we talk about how expressive a clever programmer can be. Can a person be even more expressive in Lisp? Perhaps but it's not essential. The library support on the other hand is essential. You want to stand on the shoulders of giants for the next step. In all modern languages you can write elaborate, expressive libraries (read DSLs) for your pet problems.

I think my TLDR summarizes the original author's post but if someone disagrees, then we can have a fruitful discussion :)

Disclaimer I use Java and Racket daily.



I actually don't think that's the point of the article - it may be true, but it's not supported by the text or background story. This was written in 2002, and the author's tenure at Google was 2000-2001. That was pre-BigTable, I think it was pre-MapReduce, and it may even have been pre-GFS. Plus, Google's known for it's NIH syndrome - while there are a fair number of third-party libraries in use now, there weren't really in Google's codebase of 2000, which had just dumped many of the early frameworks they'd used for prototypes.

Rather, I think this is more evidence of the old "Good programmers will be productive in any language." The advantage that an expressive programming language like Lisp gives you is that it frees you to think about the problem domain and not worry too much about the details of the machine. However, if you're skilled enough that you've pushed those details into unconscious muscle memory, they don't matter anyway. And a language like C++ gives you the option of dropping down to the bare metal if the need arises.

There are a fair number of Lispisms in early Google code - MapReduce is the obvious one, and there're others that I'm not at liberty to discuss. However, they're Lispisms implemented in C++, where the author took the concept and transplanted them into a language that could give the efficiency needed. This is not a bad strategy - when you understand the concept fully, you're free to tweak it and adapt it exactly as necessary for your problem.

Perhaps not coincidentally, many early Googlers were also programming language & compiler guys before Google. Urs Hoezle (employee #9 and Google's first VP) had previously done StrongTalk (statically-typed SmallTalk), Self (the prototypical prototype-based language and an early inspiration for JavaScript), and the VM that later became Java HotSpot. Jeff Dean got his Ph.D on the Cecil/Vortex compiler, one of the first optimized implementations of CLOS-like multimethods. Rob Pike worked on Plan9 at Bell Labs and invented the Limbo programming language as part of it.


Yeah, I agree that good people can be successful with any tools, but I also think that good people with decent tools are even more successful. And good people will quickly see what is wrong and with what tools they can be expressive enough. And I think modern languages generally fall close to each other.

If you go into a significant company with any significant developer culture, they would have their own libraries and tools, which you would use because then you can deliver. So when those are written in f.ex. Python you would use it. Sometimes this also means that you use e.g. Eclipse though it has numerous problems because at least those problems are shared with most other developers and you don't have to fight them alone.

Google undoubtedly had great programmers pre-MapReduce et al. so they already had great stuff to use.


When you say early code, do you mean code that was replaced or just older code?


Older code, some (but not all) of which was replaced.


Very interesting points. Though in a clarification (http://groups.google.com/group/comp.lang.lisp/msg/fde8853dad...), he wrote: "You said it yourself: it's the library: regexps and database connectivity in particular."

In my own perspective, "all else considered equal", things like macros, CLOS, dynamic variables and conditions system have enormous advantages over say what Python has. But this advantage can be overwhelmed by other factors, since industry programming is a very cooperative venture. (Not just cooperation with coworkers, but also people you've never met.)


I think I half-agree with you. I don't think a great library can ever elevate an OK language to great. However, a poor library can certainly drag an OK language down to poor.

One of the most complicated decisions in developing any new programming language today must surely be where to draw the line separating standard library facilities from those to be provided externally. Provide too little, and you get a zillion incompatible external implementations popping up (C++ and strings; JavaScript and DOM manipulations). On the other hand, go too far, and you get your entire community relying on mediocre facilities, or worse, multiple competing facilities in your own standard (Java and GUIs; D in general). Likewise, if you have a common repository for additional libraries, you can be too restrictive on contributions and wind up with many basics still not covered (C++ and Boost) or you can be too open and wind up with a whole load of substandard or incomplete junk (Perl and CPAN).


Yes, Java is not elevated to great language status by the wealth of libraries. It gets the job done and it is possible to be productive with it, but many times you have to fight it. The language drags the libraries down in this case. In most other modern languages, I would say the libraries are what matters.

Racket has a decent repository (PLaneT) for libraries and easy ways to wrap C libraries.


Exactly. Looking from the other side, I suspect Java's much more comprehensive library caused more programmers to favour it over C++ than Java's garbage collection ever did.

I think the almost symbiotic relationship between C# and the .Net libraries today is an interesting case. It seems clear that several of the language features added to C# (or the underlying .Net execution model, if you prefer) in recent years were motivated by particular ways of working with the libraries. Usually, we see mostly one-way traffic, with standard libraries trying to paper over any cracks in the underlying language.


I think that ease to create libraries is the key here.

I should point that the existence of specific libraries can be seen as a library creation with zero effort. So heavy-library-weight Java can be seen as a very productive language, but only when you use already created libs.

The difference between languages shows when you're on your own, when there's no library or tool under your hand. When you cannot find a giant to stand on his shoulders.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: