Who Doesn’t Love Java? (You’d Be Surprised! -and- Part 2 of the Tool/Platform Rants)
Posted by Bob Warfield on September 17, 2007
When Sun’s Jonathan Schwartz announced that he was changing Sun’s ticker symbol to JAVA, I wasn’t surprised that a lot of folks saw it as a silly move (nor surprised to see Jonathan being defensive). Now don’t get me wrong: I like Java. My last gig involved prodigious amounts of gnarly Java code in a highly scalable Enterprise grid computing application. The thing is, I have a problem with the idea that a single language can be all things to all people.
In addition to Java, I’ve used a lot of other languages, and I thought it would be interested to see who else does too:
Google: Created a massive foundation for their massively scalable search engine in C++. The foundation includes MapReduce (a way to employ thousands of CPU’s and avoid the Multicore Crisis), BigTable (their subsitute for a database), and the Google File System. It all runs on a few hundred thousand Linux commodity boxes. To be sure, Google has grown so large they now employ some Java, but C++ is the big enchilada.
Yahoo: Pushed into PHP back in 2002 in order to improve productivity and quit “reinventing the wheel”. Translation: They didn’t want 70% of their coding to be wasted. Their presentation on this decision is quite interesting.
Facebook: The clever fellows at Facebook are definitely technologists (maybe that’s why they got a platform together ahead of their peers) and built a fancy RPC (remote procedure call) core technology that lets them use almost any language they want. Shades of Google core tech commitment, eh? When they talk about what languages are used primarily, Java lands in last place. The pecking order is PHP, C++, Perl, Python, and Java.
MySpace: Built on the Microsoft .NET Stack, so of course no Java there. Are these boys a glutton for punishment or what? Yet it proves that it can be done and that it will scale.
Wikipedia: Like Digg, Wikipedia was also built on PHP.
Amazon: I was surprised and intrigued to learn that Amazon is language agnostic. Like Google and Facebook, they’ve invested in some core technology that lets a lot of languages play together freely. Werner Vogels goes on to say, “Developers are like artists; they produce their best work if they have the freedom to do so, but they need good tools.”
Flickr: Everyone’s favorite photo sharing service relies largely on PHP and Perl, with one twitchy systems programming service written in Java.
Croquet: A massively multiplayer game environment done in Smalltalk. Who woulda thunk it?
There are many more, but you get the point: Some, if not the vast majority, of the web’s biggest movers and shakers have decided not make Java their sole language and others have excluded it entirely! Sure, the immediate reaction is that there will always be some C++ zealots who prefer their language to Java, but that doesn’t change the list all that much. What we do see are a lot of “P” languages: Python, PHP, and Perl. What’s up with that?
Recall Part 1 of the Tool/Platform Rant Series, which talked about how 70% of the Software You Build is Wasted? These hugely successful web properties have taken steps to reduce that 70% waste, and while there are many factors that contributed to their success, I believe a desire for increased productivity played a significant role. The days when these languages were essential for performance are coming to an end too, courtesy of the Multicore Crisis.
There are other ways to skin this cat of over-reliance on a language that’s too low level without giving it up entirely. Who doesn’t feel like technology gave Google a tremendous edge? One can argue that C++ isn’t really the language of Google, rather, MapReduce, BigTable, and the Google File System are their language. C++ is just the assembly code used to write the modules that these other platforms mash up. In fact, it makes sense to think that C, Java, and C++ are all just portable assembly languages. By doing this, Google has been able to focus a much greater proportion of its resources to create a proprietary edge for itself. So have all the others on the list.
It gets more radical: Amazon doesn’t care what language its developers use. According to Werner Vogels:
I think part of the chaotic nature—the emerging nature—of Amazon’s platform is that there are many tools available, and we try not to impose too many constraints on our engineers. We provide incentives for some things, such as integration with the monitoring system and other infrastructure tools. But for the rest, we allow teams to function as independently as possible.
You have to ask yourself in light of all this, when are the Curly Braced Languages most and least appropriate? The decision criteria are shockingly stark:
- You Need a Curly Braced Language When You Are Building Something Totally Proprietary That’s Critical to Your Business And Can’t Be Built With Any Other Language
- Run Away From Curly Braced Languages And Choose Something Else Every Other Time
Another thing: notice the companies profiled above that have created their own Component Architecture Frameworks or Core Technology. Google has core technology in spades. Facebook has a system that lets them write components in any language they choose. Amazon also allows multiple languages so long as a few core functions are adhered to. Isn’t that interesting? These guys want to be Polyglot Programmers, and they’re investing valuable resources to make that a reality. This is all part and parcel of the “meta” thing too. The realization that to fully utilize computers, you must be facile at manipulating the fabric of the programs themselves, and not just the data they are processing. Adopting a polyglot view positions these vendors better to offer a platform, because it means they can allow others to use the languages of their choice. There are a lot of benefits to being language agnostic!
Polyglot Programming is becoming increasingly well accepted in an era when the Curly Braced Languages (Java, C++, et al) bring little to the Web 2.0, SaaS, and Multicored Crisis parties. Those languages are too low-level. There is no support there for multi-tenancy, web pages, security, scaling, or any of the myriad of problems one encounters when building a Web 2.0 or SaaS business. You have three choices: write all of that yourself and pay the 70% overhead tax or become a Polyglot Programmer and minimize the overhead by choosing the best tools for the task and leaving your Curly Braced Power Tools safely in the workshop only to be brought out when some highly custom proprietary work needs to be done.