Monday, February 05, 2007

Why Java might lose against Ruby (or Python, or PHP ...) in web development

There I said it...

There I said it, Java might lose its rank in web development. Sun GPL'd Java and integrates scripting languages. Ruby is going on with JRuby, Python has it's JPython pendant, nowadays PHP runs/compiles on Java. But that is not enough, Java may lose the struggle for the #1 internet language.

I always thought that a language like C# will accomplish the task to overthrow the "heir to the throne", but that was a little bit naive and sounds ridiculous: Java and .NET are way too similar for that. Lisp? SML? OCaml? Haskell? No, these languages need (damn) good programmers to complete the task, and there are not enough good people out there. To shift the workload needed in IT-business kind of standardized people are needed (no offense meant!): People only thinking in mathematics, functional programming and definitions, or simply only programming recursions seem to be the wrong way to work this load. The industry needs standard tasks to be done in standard ways by standard workers. If it wouldn't be that way, no-one would program Perl/PHP/Java/C# or similiar languages/scripts any more, they would program such complex algorithms like Shell-sort in only four lines (as I did in SML more than one and a half decades ago).


The three frontier war

Many people are complaining about Java, it is fighting a three-frontier-war. The arguments:
  1. Java is losing against Perl or PHP because they "get things done". Perl is "quick in programming". PHP is a starters programming language, fast and simple (be honest: nearly no good known project uses PHP5 with objects and Exception-handling) and, moreover, it's good for small to medium sized projects and has (like Perl) not to deal with the (typing and casting) overhead of strong typing.
  2. Java is losing against Ruby or Python because they "get things done faster". Ruby on Rails seems to rock for (small to medsize) projects and Python seems at first glance to be a good replacement for all.
  3. Java has, because of the mature kind and popularity, to match (or: to be a target of comparisons) with functional programming languages like Lisp and Haskell, for example, which "know what the programmer wants" without explicitely explaining it by syntax.
I do not even mention runtime behaviour, everyone knows that C (or even C++ compared to an old JVM) is magnitutes faster than Java and everyone thinks that Java still is slow. So, Java is dead, isn't it?

Let us, just for a minute, forget the discussions and the pro's and con's of the points mentioned above, all this was discussed endlessly all over the internet before. Let us not talk about the verbosity of Java programs compared with dynamic language A or the fact that programs can be written so much more elegant using language B, because in B there are not all those conventions which clog the programmer using Java.


Who is killing Java?

Though having the best intentions, Java programmers are killing Java. I know that sounds weird, but I watched that for nearly 5 years now. The fact that Java people, (better: Java software / better: Java frameworks) cannot simply "be simple" discourages. And directs programmers and projects got the train: Ruby on Rails, as an example, is the exact opposite by just being simple. Just "getting the thingies done" is what people want to see after endless fussing around with XML and EJB, hoping that it will work out anyhow. Having hundreds of pages of documentation explaining complex frameworks, who cares? Ever started a new experimental web container in Tomcat and not simply copied the web.xml without exactly knowing what's in there? It got far too complicated.


The world is watching

Continue doing complicated stuff and you will see the people running away from Java. The problem about Java is not the language, the problem about Java is that Java does not provide a "simple start" anymore, not with all the programmers using these fancy frameworks nowadays. I'm not talking J2EE - that is too complicated, too. But that's only interfacing, at least partly. Looking at the frameworks deriving from J2EE and even if you have an IDE like NetBeans or Eclipse installed, you cannot have a web/http-service up and running in 2 minutes. Too much configuration - which needs too much knowledge of how to be configured. And, yes, surely, you cannot simply talk to a database, that would not be 1337 enough, you need a second (third, fourth ...) layer like EJB/Hibernate etc., all XML / annotations configured. At least we can do it, who bothers if we need it? And who cares for SQL, anyway? There are so much frameworks, why bothering with the simple thingies 'round there?

C'mon. I heard of a project where four (practicvally immutable) database tables had to be filled with logging informations and they used the XML-ORM-Mapping iBatis framework for that. Be honest, ever heard of the word "overkill"? Nooooo, you are right: Better configuring it using XML, or even better, let the software write the configuration! Write your makefiles in XML (including self-injected file commands). Keep it unreadable, that's a kind of job-security, too! Why typing some 10 lines of code when we simply may let the preparser generate it by configuring all in fourty lines of XML?

Never mind. Just keep on killing Java.

Labels: , , , , ,

 

12 Comments:

Blogger Michael said...

We looked at using Java for a web application we were planning. Wow! Much too complex to even know where to start.

While I don't have the Java experience to fully validate your point, Java certainly does seem to have a problem with complexity.

With a tiny bit of help (i.e. a good book) it's easy to get up and running with RoR.

...Michael...

6:08 PM  
Anonymous Anonymous said...

"loose" != "lose"

5:33 AM  
Blogger Raffaele Castagno said...

Why have you completely excluded Groovy and Grails from your analisys?

Groovy can be the killer app, since it takes the best of both worlds (java, and dynamic languages), offers java-like syntax, and complete compatibility with the JVM. With _complete_ I mean: you can use all the existing java codebase, libs, existing projects, etc. JRuby, and similar projects, will never reach the same degree of integration, because they are alien to the JVM.
Also, you didn't mention that groovy is backed by companies like Oracle and IBM, and that some companies in the fortune500 hase Grails sites in production.

Also, it's meaningless talking about "java vs C" when the topic is "web development". And is inconvenient, since Ruby is far slower than java. Oh, yes...with the latest versions of JVM performances are comparable to C in most of the more common tasks.

Also, you didn't mention that Java is the best thing that happened to Ruby: JRuby is going to be faster and more reliable than the original implementation, and more widespread among various platform.

Anyway, as someone else said: java is dead like in COBOL, not like in Elvis.

Anyway, you should really give a try at Grails: hibernate, spring, and some other stuff, all hidden under the hood of a dynamic language like Groovy.

5:39 AM  
Blogger antych said...

You seam to have no clue about PHP. People do use PHP5, OOP and exceptions. It's also sued for complex enterprise application.
Sure there's lots of poor apps and shitty 'developers' to make you believe otherwise, but just because there are so many of them, doesn't mean there are right.

6:17 AM  
Blogger willCode4Beer said...

Kind of missing the point.

Ok, lets face it, the programming language is the simplest part of what we developers deal with. Java/PHP/Ruby/Haskel/Scala whatever, it doesn't matter, they're just tools.

The hard part is solving problems, the code (in whatever language) is just our expression of the solution. We spend 90% of our time trying to solve the problems. So, even if you're dev language was twice as fast, you'd really only gain 5%.

Java started out as very simple. Then people decided it needed functionality. With that came complexity. Any platform will become more complex as functionality is increased. This is just history repeating itself.

The idea that having a language thats really easy doesn't mean you will find success with lower grade developers (this is what MS did with visual basic).
Good developers are GOOD because, they are good at solving problems not, because they know some programming language.

7:58 AM  
Anonymous Anonymous said...

take a look at RIFE (http://rifers.org/) and you will see that rapid webapp development is possible in java as well.

The screencasts will give you a good overview of the possibilities: http://rifers.org/theater

8:17 AM  
Anonymous Anonymous said...

What you've just said is one of the most insanely idiotic things I have ever heard. At no point in your rambling, incoherent response were you even close to anything that could be considered a rational thought. Everyone in this room is now dumber for having listened to it. I award you no points, and may God have mercy on your soul.

10:59 AM  
Anonymous Anonymous said...

Rife? Are you kidding? I just went through a few of their tutorials and its exactly what the author was talking about. A xml configured mess that doesnt make sense to a normal web developer. It looks functional, and useful but the abstraction technique they chose just isnt as smooth as Struts, Rails, or ASP.NET

11:16 AM  
Blogger Unknown said...

Hehe. This is why people turn off anonymous posting on Blogspot. May god have mercy on your soul? He must have forgot to write a smiley face after that.

11:18 AM  
Anonymous Anonymous said...

I like the smell of my own farts.

-Dan Denman

10:30 PM  
Anonymous Anonymous said...

man, do not ever compare between script languages and full OOP language, and we know that java is the top, by away, I am PHP developer.

8:20 AM  
Blogger Lia said...

Thanks for sharing those informations. Those informations can be helpful and it is also has an interesting idea that we may use.

Lia | php web programmer

11:05 PM  

Post a Comment

<< Home