Sam Gendler
Posts: 1
Nickname: ideasculpt
Registered: Dec, 2005
|
|
Re: The departure of the hyper-enthusiasts
|
Posted: Dec 22, 2005 12:02 PM
|
|
I try to buy into the hype of the latest and greatest, but it always fails me, usually sooner rather than later. I've been doing web programming since 1996 or so, and I've used just about every technology available for doing so (except for ASP.net). I've written raw cgi in C and perl and apache modules in C. I was a very early adopter of Zope. I've written entire web servers. I've written a dynamic content assembly language that was built on top of the python C library. I've done several web projects in raw python. And I've done a fair amount of java, using a multitude of frameworks, mostly struts, but now a Spring/Hibernate/Tapestry combination.
The thing that ALWAYS seems to fail me when I use frameworks in the interpreted languages is SCALABILITY. Not just execution scalability, but development team scalability, too. At least with raw code, you can have as many programmers as you want on the project, you can use source code control, track revisions and bugs, and you can find talent in the labour pool that is familiar with your technology platform. Zope has never allowed easy (or any) integration with revision control, and it was a pain in the neck to work in for teams of developers, even when the bulk of the work was built as a pure python 'Product.' Ruby looks to have similar issues. And if you need a high performance web application that could scale across many hosts and databases reliably, forget it. Finding talented python developers, in general, can be a challenge, let alone finding ones with zope experience. The same issues are true of Ruby/Rails. It doesn't lend itself to team development, there is absolutely no scalability built into the system, and you will definitely find yourself writing a lot of buttress code yourself, as there is no ecosystem of available libraries and best practices in place. If you are at home building convenience apps for yourself, it isn't such a big deal to have to modify the development framework itself in order to get the job done. But when you are developing commercial software or services, the last thing I want to be doing is modifying my development environment to suit.
Rapid development platforms like Zope and Rails are great for workgroup apps that are developed by one or two people and which evolve slowly over time. They are a royal pain in the neck for robust enterprise wide or large public website development. Imagine building MySpace, or even my.yahoo in rails, for instance.
The same was certainly true of Java when it came out. I remember playing with Java in 1996 and being impressed with the language syntax and object orientation. Then i tried to write something that was fast in it and realized it was hopeless. It also didn't support functionality I needed, such as asynchronous I/O or Multicast until at least 2000. At the time, I was writing very high performance web and proxy servers for a fortune 500 company, and there was no way in hell that Java was up to the task. The same was true for a number of years. Even the whole J2EE thing didn't work that well for high performance apps initially, even if you didn't use EJBs.
Slowly but surely, however, the web development ecosystem was built up in Java (in large part by the efforts of open source developers. All the best java tools and frameworks are open source, in my opinion), and now, it is my platform of choice for large scale development, and nothing else comes close.
One of the early reponses mentioned Spring, and I have to say, the difference between web app development with and without Spring is extraordinary. Throw Hibernate into that mix and the Java platform is transformed. I can't imagine needing actual EJBs for the bulk of my projects. Not when Hibernate provides 90% of the EJB functionality, integrates will with J2EE features, and gives a whole lot more control over the mapping process than EJBs do. Sure, you still write a fair amount of code that you wouldn't have to in other languages, but it isn't an enormous difference (and I still code in vi, not with eclipse, so nothing is doing my typing for me), and it certainly isn't prohibitive. With Spring (and suporting frameworks) providing most of the connecting code for common patterns, DAO, transactions, logging via AOP, web service abstractions to the service layer, Hibernate providing ORM easily and effectively, and a clean ui framework (which I'm still waiting for. Tapestry gets the job done, but I'd rather see something like Wicket become fully mature. It's just not there yet), Java isn't lacking much over any other language. More importantly, it executes at least an order of magnitude faster than the interpreted solutions AND has very effective support for real clustering solutions.
Maybe eventually, something like Rails or a Python equivalent will catch up or even surpass Java's functionality for large scale development, but right now, they are no closer to being useful than Java was in 1998 or 1999.
So you talk about the hyper enthusiasts leaving, but the pragmatic programmers, who just want to get the job done as easily and effectively as possible are still relatively new converts to the language, as it is only recently that it has been worth getting enthused about. Prior to the first model 2 web frameworks (struts) becoming available, Java didn't offer enough functionality to make me leave the RAD environment of python or zope and it didn't offer enough performance to make me leave C/C++ programming behind for the high performance/scalable stuff. Now, the feature set is so much stronger than anything available in the C world that it is worth the very small execution efficiency disadvantage, which is irrelevant in any context I can think of, these days. That same feature set also makes it a great platform to jump to for rapid development. Sure, it isn't 100% as effective in that arena as something like Rails might become, but it is nearly there (with about the same margin there as Java has with C on the performance side), and it offers real scalability to boot. Right now, Java offers the absolute best of all worlds - developer efficiency, runtime efficiency, scalability, a large talent pool, and a ton of supporting software and I don't see that changing any time soon.
In late 1999, I thought Zope was going to revolutionize web development. It was so much better, faster, and easier to use than anything else out there - until you tried to solve a really hard problem with it, when it became a royal pain in the neck. The Z-shaped learning curve was no joke. I tried so hard to use it for several years and it almost always let me down eventually. At best, Rails is where Zope was in 1999 in terms of maturity, and it is not at all clear that it will ever have more of an impact than zope did. It's a really neat idea, but CAN IT SCALE???? I hope so, cause someday, I'd like to use it. For me, the last 2 years working mostly in Java have been revelatory, and I'm not going anywhere anytime soon.
--sam
|
|