In September 2003, I innocently posted Java is the SUV of programming languages? based on the fact that students in 6.171 who’d chosen to use Java were incapable of getting anything done. It created quite a stir in the comments and on Slashdot. This semester is the first time that we’ve taught 6.171 since then. Despite the fact that all the students are expert Java programmers, having used Java to build a big project in 6.170, none have chosen to use Java this semester. It is all Ruby on Rails, Microsoft .NET (C#), and a touch of Python.
Is it safe to pronounce Java dead as a programming environment for Web applications? Who is using Java these days to build great things?
eBay seems to be doing well on a Java platform, for one.
But I agree there aren’t many. And I think the main problem is that – expert Java programmer or not – Java just isn’t for web application beginners. When you are at a stage where you don’t really know how to design a web app (like your students) Java is very unforgiving. (restrictive OO design, no global scope, upvar, NPE where other languages just return empty string, etc)
Someone experienced in both Java and designing web application should not have any problems. I’d be perfectly happy to use it, though I still prefer AOLserver.
Then it becomes a chicken and egg problem; if you have invested a lot of time into becomming an expert PHP/Perl/RoR/AOLserver programmer, why would you switch?
The best reason to do so is the pay levels of fortune 500’s who still love Java and – more recently – .NET. I have been spending a bit of time on .NET 2.0 lately and have to say that if I were asked to design a corporate intranet from scratch, it would be my prefered technology; I was really impressed with it. And in the corporate world, the rates for .NET experts are excelent.
I’d still feel aprehensive about running a Windows server in a colo for a little .com, though.
Relentless, unstoppable, FASHION driven forward progress is the name of the game in software langauges.
In 1995 Capers Jones (Mr Function Points) had 400 languages on his watch list.
In 2005 the list was up to 500 languages.
Recently there was a Macintosh magazine review of 8 scripting languages. Tiny, little ol’ 5% marketshare Macintosh!
In 10 years folks will be moaning & groaning about the brain-dead idiots that wrote these unmaintainable legacy systems in Java.
Just remember… old hardware goes to the scrap heap. Old software goes into production tonight.
In 10 years time people will be “moaning & groaning” about anything written now in any language, this is certainly not specific to Java.
David: I love that expression “old hardware goes to the scrap heap. Old software goes into production tonight”. Had not heard it before! I do worry about these newfangled languages. ASP.NET last time we did a performance test in the class could only handle 5-10 requests per second per 1 GHz CPU, or about what NaviServer was doing with Illustra in 1995 on an 80 MHz Sun. What about Ruby on Rails? What is the production performance like?
A number of large Java applications are written for in-house use, so are not visible to the general public. Our Fortune 500 level company has many web-based Java applications that are running great – no plans to change anytime soon.
I agree with Bas that most programmers always want to use the latest thing. In my career I have changed the language I develop in four times, and that is far less than most people.
The way I see it is every language evolves along this timeline:
1) A new “experimental” language is created that improves on some area of the more popular current languages.
2) The language becomes hip and is championed on the cool websites. Many of the same tired “demo” projects are created with it to show how easy it is to program in.
3) The language gains momentum and people start moaning about the lack of sophisticated libraries, debuggers, development tools.
4) Companies start releasing said development tools and standards teams extend the language and add libraries.
5) Major companies start using the language and spend countless dollars integrating and learning the workarounds.
6) Young programmers start complaining about the complexity and steep learning curve.
7) Someone invents a “simpler” new language to address these issues and the cycle starts over.
I often think that if the industry still programmed everything in C, we would be on our way to becoming a real engineering discipline by now with much lower failure rates.
Its a bit disturbing that Java Web development is always synonymous with J2EE when non Java developers are talking about it. J2EE is great for massive clustered websites with a strong need for proper transaction support all the way through the framework. While I love ruby on rails, I wouldn’t be all that happy to login to my online banking interface and find that it has been rewritten in rails. There are some things J2EE are very good at, and other things… such as hammering out a plain RDBMS backed website, which is not so good at. However, Java is just the language. There is nothing which prevents developers from using Java as a language for web development without using J2EE. One such non-J2EE framework is my own Ravenous project, which has a lot of similarities to Ruby on Rails and other newer web development frameworks.
Phil, here is one link to performance.
http://www.relevancellc.com/blogs/?p=31
Here is why Joel hates frameworks:
http://discuss.joelonsoftware.com/default.asp?joel.3.219431
My take on all these new languages and stuff: People create tools and languages to clone Amazon, Gmail and the likes. Frankly cloning somebody else’s app is stupid and boring. Nobody would do it without the paycheck. But people find amusement in creating and learning new tools. It’s the same reason that my wife wants new jewelry every once in a while.
Java has made it amazingly far through the adoption curve in the corporate IT environment. That fact is hard to overstate, but easy to overlook.
For systems requiring significant back-end integration, Java stands in a class by itself (especially with regard to binary compatibility and ease of deploying into highly concurrent environments), and nothing on the horizon seems likely to change that.
On the other hand, for building “basic” web based applications (portals and the like), there does seem to be a collective realization that “Hey, this isn’t measurably better than it was in 2000!” And in some ways, the proliferation of 1001 frameworks has made things worse.
So it’s really not that surprising that small projects (especially those for university classes) are looking elsewhere.
My guess is that the java platform will just lag increasingly far behind the cutting edge simply because of its maturity. Ruby-on-rails will kick around for a couple of years, and if everyone still thinks its a great leap forward, you will see a JSR for Ruby-on-rails-on-java.
And in some ways you already do see that. How many JSR’s are there out there for various scripting languages? Way more than I can keep track of.
Phil: I think your asp.net perf #’s are waaay off.
It would be great if you can update this post at the end of the semester to summarize the experiences of the asp.net & RoR camps.
CLU-less:
Frameworks are a damn’d if you do & damn’d if you don’t proposition. Once you’ve put in the time to grok the beast, a framework is tremendously powerful. But if you’re a newbie–or worse yet, leaving one framework & trying to learn the idiom of a new one–the learning curve is rather steep. The IBM mainframe, COBOL application I worked on in the early 1980s was just recently rewritten & retired. I’d have loved to see just how mangled it became over the decades from its rather simple start. One of the worst aspects of a (custom) framework is when the original designer inevitably moves on, the folks who come after are not privy to the inner secrets & dark knowledge… tends to get pretty ugly.
Anon: The performance numbers for asp.net (5-10 pages/second per CPU) were for discussion forum pages that made moderate use of the RDBMS. The testing was done by a commercial division of Teradyne that does nothing but test Web applications. It is possible that the students did not set up their servers optimally, of course, but in that case you can just take the numbers as representative of what happens when you let average folks set up SQL Server and IIS/ASP.NET
I’m extremely interested in hearing about how the rails students are doing. The creator of Rails (David Heinemeier Hansson) seems very opposed to the idea of putting business logic in a database – here’s a quote from a recent interview…
“…Rails doesn’t do anything special to support stored procedures and triggers because none of the contributors have found that they needed it. And, frankly, if you think that “seriousness” is a label that is even remotely related to database features like stored procedures or triggers, you’re probably not a good fit for Rails anyway. So I’d happy to see you take a pass on Rails. We’re not out to help people that are not interested in our help.”
The whole interview is available at http://uk.builder.com/architecture/oop/0,39026558,39297360,00.htm
There is still tons of Java web development done on systems that are custom-built or package-sold for the corporate environment. It seems like places where people control the entire environment or are “free” to make their own platform decisions they are picking scripting-type platforms. When you sell into the corporate environment you are kind-of stuck within that ecosystem. I’ve been to lots of clients who say ‘We are a Java (or .NET) shop. It is our strategic platform. We will only choose a product that is based on that platform.’ This also happens when you build stuff that is to be extended or maintained by the customer. They sit around and think that they’ve got all of these Java developers for customizing software so whatever they buy has to be Java. They don’t seem to realize that their Java developers should be productive in Ruby/Python/PHP/whatever in about 2 weeks. There are lots of folks who already have a ton of stuff written in Java so out of momentum their new stuff is done in Java. I guess pretty much all of the same forces that have kept Cobol development going are going to keep Java development going. Java is the new Cobol. I also think that this represents a huge opportunity for competitors who are willing and able to make the platform shift. We’re seeing a slew of companies that aren’t really software companies in that they don’t sell software but their software gives them a huge competitive advantage. Amazaon isn’t a software company but their software is what makes them better than Barnes and Noble. People who realize this and realize the enormous benefits of the new platforms to make better software have huge opportunities in front of them.
(1)Java is the most popular programming language on the planet.<b/> (2) It’s far from the most popular language for developing desktop apps.
<p/> That leaves one place (unless you count things like mobile phones).
I had moved away from Java. But the new Wicket framework, which makes web development in Java much more Rails-like, has gotten me to switch back. It’s about the simplest thing out there…
i don’t understand why people try to reinvent the wheel by implementing from the groun up a “new language” that will solve party a problem, where instead they could write a good library in Java to automate/interpret their task, by also taking advantage of all the existing optimally written libraries in Java. I will agree that Java is suited better for networks while the speed of networks doesnt overcome the perfomance of Java. Though Java can perform very well in other applications too but is not recomended.
What Microsoft did with .Net, C# for example, was too inherit Java’s syntax with some new innovations in the compiling and the real time syntax check.
So, I think that even if other tools are choosen instead of Java just to “save time”, when they will need to implement something which is open source, with perfomance and support from a commercial company they will realise then their choices.
Another factor that allows better adoption for a web language is that a language can supports a wide range of databases. And where MySQL has dominated for the huge number of small-size/less demand apps, it didnt find good database support from TCL. So whenever we need a small addition we go on and develop “new” interpreted languages that copy the past?
I think Google does use Java and it supports SOAP within its applications, so that it wont matter what the language of real languages will be. Anyhow, if its simplicity in implementation that is seekened, XML oriented syntax languages along with W3C XForms, seems to be the future despite the war of Microsoft not to support it even in IE7…
gee bee: I think a lot of the design decisions behind Rails are related to the limitations of the MySQL database it was initially developed with. Since a smallish dotcom can’t begin to afford an Oracle license, it’s probably accelerated the rate of adoption a lot.
Even so, I’ve found that stored procedures and triggers are much more cumbersome to maintain than a “native-language” model using SQL only for storage. And for the relatively simple projects RoR is geared toward, having the model reside outside the database doesn’t incur too much of a performance penalty.
Starting at the top, I don’t think it’s time to call Java dead just because students in 6.171 aren’t using it. Major sample bias there. Having written an application in a previous course doesn’t make you a language expert. I wrote a few LISP apps in my CS days, and I certainly don’t claim to be an expert! But after doing professional Java programming since the language was released, I do consider myself an expert there, and while I certainly could sit down and get a nice DB backed web site up and running really fast, it’s not the strength of the platform.
All that said, if I was taking your 6.171 course, I’d do it in .NET (or maybe Rails, to get my feet wet). The language isn’t really that different, but the tooling is a lot better for putting together moderately scoped applications quickly. I wouldn’t run a bank behind it, but I’d consider it for quite a few other things.
There’s no excuse for the tools to not be better, incidentally. Microsoft is really good at tools, and they had years to learn.
There are a few things that are psychologically appealing about using frameworks utilizing ‘scripting’ (whatever that means) languages rather than java. One is that most of them are open source and java is not which may be a factor for some people. The other thing, atleast in ruby, is the core vision of the language (the ruby way) which feels very different from java and gives the entire library a unified feeling. For me, programming in java always leads to deep, prickly inheritance trees where each class does very little and that is hard to traverse mentally. Ruby and other languages like it have strong support and good syntax for lexical closures and other goodies that make it more expressive for most developers. These things may make a difference and they may affect productivity, I don’t know. I have coded several languages and used many frameworks over the past 8-9 years and I simply feel that languages like python and ruby *feel* better for me as a developer than languages like Java and even C#.
have coded several languages and used many frameworks over the past 8-9 years and I simply feel that languages like python and ruby *feel* better for me as a developer than languages like Java and even C#.
>”Here is why Joel hates frameworks:”
That posting wasn’t *by* Joel (Spolsky, of joelonsoftware.com). But a lot of people seem to have liked it. And then they started thinking that it was Joel’s.
I guess it’s like the process by which a lot of quotes that many people like eventually become widely attributed to Winston Churchill or Mark Twain.
As someone does know Java and Aolserver(ACS no less!), I have to say I’m glad we’re finally leaving the TCL behind. Don’t get me wrong I love TCL; it’s free like the wind, but that was its biggest problem. Brilliant people solve the same problem in different ways in TCL, and it takes a lot of mental effort to sort through it.
Java unifies the thinking. That might seem restrictive, but that’s like complaining that “Math should be more free”, or “Physics should be described in colors, not Math”. Haha, come on. The future of any programming paradigm will always be succeeded by a tighter language that successful climbs up the abstraction layers without sacrificing performance or clarity. Java is that step for this generation. It’s a plus that’s not Microsoft controlled, so we’re not afraid of being shown the door as soon as a cooler technology comes out.
In my personal time, I like dabbling too; I do some fun stuff like wiring together IRC bots to google maps to working to bring Shoutcast feeds into a 3D game to writing Processing applets that tickle and delight the sense; 9 times out of ten, this stuff is reusable, and easily connected. How cool is that!
I think the one thing that is broken is the development process. Java has a huge stigma in that it’s always associated with enterprise this, enterprise that, waterfall, requirements, managers, project managers, SOX compliance, UGH I JUST WANT TO CODE, IT WILL TAKE ME MAYBE 2 DAYS NOT 4 WEEKS TO THINK ABOUT IT. It definitely takes a dedicated Java dev to find other “cool” Java people, people who want to talk about shit beyond specification compliance in 3rd party software, and can actually use OO beyond extending everything. There’s definitely a lot that can go wrong in Java development.
At the end of the day, I want to hit the code running, and not have it be a waste. With free scripting languages, that’s all to easy, with Java, it’s rare.
I strive for convenience; that’s one lesson that Aolserver and TCL taught me for life, and damn if Eclipse isn’t convenient 🙂
Craig (see comment 27 Feb) and many others here don’t get the point about “standards” inside corporate shops.
The question is not how much more productive any arbitrary collection of developers can be using Rails (say) than Java – the true question is “How do I reduce my overall costs for people, skills and tools over time and increase productivity over time”.
People are expensive to hire, and I can’t afford the turnover. More, if I have two languages/platforms/whatever deployed I need two skillsets to maintain the systems – and no matter what you think the fact is that a team of people who know both Ruby and Java (for example) *are* more expensive than the same sized team who only need to know one. And that’s not counting the cost of tools.
Cost of tools is something that many people also avoid in this debate. Just as the major developer cost is not original coding but maintenance, the major cost with tools is not the purchase price, but the cost in time and effort to train, deploy and integrate over the entire lifecycle. If I have a Java shop and decide to take up Ruby, any initial deployment *will* be much less mature than my Java environment and will take at least a couple of years to fully embedd in my business. That cost always greatly outweighs acquisition costs.
So why do corporate shops choose things like Java over Ruby (or even .NET)?
* mature well tested toolsets,
* widespread knowledge in the developer marketplace,
* many competing suppliers lowering costs and increasing function,
ie. factors that greatly lower risk and will keep it that way for years to come. If I run a shop that is converging (we never get there, but we try) on a platform then all my costs go down over time and so do my risks.
This is the real reason why Cobol lasted so long, and why C++ still lingers and why Java will be around for a long while yet. The challenge for platforms like Ruby is to match these platforms and establish and develop a strong deployed base so that they become the entrenched platform of choice.
Not there yet.
Java & J2EE has its strength in Server Side Components and Middle layers(Service brokers), but when it comes to Web Development and Rendering HTML and Javascript JSP has to pick up real good speed to beat ASP.NET, PHP etc. May be Java developers are really worried about a damn good editor and easy usage. I am sure its powerful but Java people spend more time in speaking about its Platform independency and stuffs.. rather than getting in more active involvement in our web development.
Mind you, now Web development is getting to the next level and its getting more asyncronous and got to really pull the socks to run a rat race.
Java is there, but may be people are not exploiting it, or in a dilema as always.
I have been around a very long time, and I have begun to notice a few patterns.
Such as the eternal struggle of management and its henchman to undermine the worth of programmers and the programming arts. Java offers many advantages to management solely because it is a bondage and discipline language.
The individual programmer is concerned with do they work for the “compiler” or does the “compiler” work for them ?
With Java the master is the compiler and the programmer is its servant. This is an advantage to management. The programmers are disposable and replaceable throughout the life-cycle.
The dynamic languages, sometimes disrespected as mere scripting languages return control to the programmer. The very nature of dynamic binding ensures that the compiler can not be master.
JM, you say yourself why Java is dying – “People are expensive to hire, and I can’t afford the turnover”. Most developers I know do not want to turn up to work and perform more and the same old thing, especially when they see ‘cool’ ‘new’ languages being used and hyped up. They start to think “not more java, this is so dull, my career prespects are dying every day I stay at this crappy company. Lets have a look at jobsite.com”.
So to keep those expensive staff motivated, interested and happy, you should be letting them develop and at least experiment with new tools, new languages and new ways of working. If you don’t, your shop will turn into something resembling shops that still use COBOL.
The real reason some places still use COBOL is that they have very few expensive products, and old staff who no longer care abot cool stuff – they just want an easy life, and their paycheck until they retire. C++ still exists partly because it is universal and there are so many different ways of using it, and that most C++ places also use other tools. Note that there aren’t any VB-only, or Delphi-only shops about though.
Java kills the creative process. Thats one of the reasons we went with PHP for things closer to the front end. We do use Java for things that are in the background that wont change from day to day. Image processing etc..
Dont underestimate the time from idea to a rapid prototype. For a programmer, at least me, its very rewarding when that is kept short.