January 16, 2008

I'm not tired of Java yet

Rick Hightower posted an interesting follow-up to Zed's rant against Ruby on Rails. There are a lot of insightful comments in this discussion, and one in particular caught my attention:

People are tired of dealing with Java's many idiosyncrasies
I've been reading this a lot these past years but I've yet to see any evidence of it.

Come to think of it, this statement is mostly coming from bloggers, but...

  • They don't speak for all Java developers (actually, they represent a very tiny fraction of them).
  • They need to drive traffic to their blog, and nothing achieves this goal better than posts titled "Java is dying" or "Ruby has won".
I've been programming in Java for more than ten years. I have studied a lot of languages, and I keep learning new ones just out of curiosity. I even use some of these exotic languages here and there as the need warrants. Yes, some of these feel really good to program in (Ruby and Groovy for example), but at the end of the day, I still like Java. A lot.

Sure, there are things in the language that bother me, but it's true for any language, and as a whole, I always enjoy going back to my favorite Java IDE and leverage its superb features to write code that I find is elegant and that achieves a goal.

Whenever I use a non-Java language, I always have this nagging feeling in the back of my head that something is going to hold this piece of code from ever becoming mainstream or used by a lot of people. It can be because the language is slow, or that it needs an interpreter. Or that it will be hard to deploy my program on a user's machine. Or that this language was created before OO became mainstream and its support for new paradigms feels retrofitted and creaky.

Or that its support for floating point is very poor. Or that its thread API is primitive and the author of the language keeps saying that it's no big deal and that you can do without that. Or maybe it doesn't have any Web framework that supports internationalization, a clean MVC model or out-of-the-box testing. Or I want to write a client application that leverages its host operating system but all that it offers is an ugly-looking user interface and leaking metaphors.

None of these defects take away the pleasure I derive from sometimes straying off the beaten path and writing code in an exotic language, but it does set my mind into a mode that tells me that this piece of code will never be promoted past the "toy" status.

Toy listings are great for sniped blog entries, but a mainstream programming language they do not make.

Whatever your favorite language is, be it Scala, Ruby, Python or Groovy, I'm with you. I really am. I understand the warm glow you feel when you write code in your language because I feel it too. But what you need to understand is that there is very little chance that your language will displace Java in any way in at least the next five years to come.

But please, keep posting cute code snippets that show how great your language is, because I love to be challenged in the way I think and indirectly, Java benefits from all these great ideas that keep being posted in the blogosphere.

Posted by cedric at January 16, 2008 08:01 AM

Comments

Well spoken! Fully on your side here.

Posted by: Matthias at January 16, 2008 08:46 AM

Good post. I have to say I'm sick and tired of reading endless posts about how Java is dieing. It isn't the be all and end all but within its problem domain it is an absolute joy to use and I've enjoyed my eight years (so far) with it more than any other language I've worked with and I've worked with quite a few. It would be surprising if something didn't eventually come and take Java's place but that something is not here yet as far as I can see.

Posted by: at January 16, 2008 10:29 AM

It's been a long time since I programmed in Java but nowadays it seems to be always playing catch-up as far as language features are concerned.

See in how short a time .NET/C# has evolved.

Attributes support from 1.0

Generics built into the run time itself in 2.0

All the cool lambda stuff, extension methods, linq etc in 3.0

All these in such a short span of time!!!

At some point Java has to evolve and integrate new language feature quickly or soon you'd be working with an less expressive antiquated language.

Companies can't move away since they already have such a huge investment in Java.

I do not know if C# has been delegated to the toy status yet :-)

Posted by: Ajai at January 16, 2008 11:01 AM

Ugghh...The comments may be interesting but the actual blog post is a bunch of sh-ite.

If rails is a ghetto, java is a third world country getting a new infusion of american "democracy".

Maybe not that bad, but there are certainly a higher proportion of bozos.

Posted by: Jesse Kuhnert at January 16, 2008 11:13 AM

Now that's a pretty good post, no matter what Jesse is saying :).
Honestly, what I am tired of is not the fact that some people keep saying "Java is dead", but of the people that cannot point out what they mean by "Ruby kick ass" or "I *heart* Perl". I couldn't agree more with Cedric related to the artificial buzz created for the sake of attracting traffic to a blog or website. I mean, just take a look at how people like Obie Fernandez and others are arguing about this topic. Honestly, there are lots of people of my age that are tired of this language crap and we are only a bunch of "bozos" that are barely starting to dream about our IT careers.
I am sick of hearing "ProgrammingLanguageX rules because I only code ProgrammingLanguageX and I rule, so ProgrammingLanguageX's gotta rule". I must say I would expect people working in IT to have a broader view. Now I've seen projects using a language/technology only because it was the only know-how in the team - that's crap. IMHO, being mature about IT means that the programming language is merely a tool meant to make you more productive on the project you are developing. No offense guys, but no matter what you are going to post on your blogs, I will still like to use bash and cron-jobs to schedule a task, .NET for a desktop application and Java for a server-side component (maybe even some C++), if ofcourse I am able to decide about this.
I agree that any programmer is more productive in a language or another, but my belief is that proving your skills in IT means getting the right tool for the right job. And that is what I cannot conclude from many of the Ruby/Python/Perl/Groovy/etc crap: "ok it's better, but why and for what?"
I really can't believe sometimes how people with background and experience don't seem to get the basic there-is-no-one-size-fits-all thing.
What I don't agree with is "there is very little chance that your language will displace Java in any way in at least the next five years to come". The problem (as far as my tiny little brain can see it) is that people making you feel this way are not making their point in a mature way. They should be concerned about "on which segments (if any) will it be more reliable/productive to replace Java with Ruby/etc" and not "Kill Java. Death death death. Ruby/etc rulez.
My best regards.

Posted by: Cosmin Marginean at January 16, 2008 12:52 PM

I agree that Java is not dead.
I'm a Java developer myself (during daytime at least) but i don't share your undivided enthousiasm.
I think every job deserves evaluation of which language is best for it - and sometimes that's not Java.

Posted by: elise at January 16, 2008 01:19 PM

Sometimes it's not about displacing, it's just about complementing. For example, Groovy complements Java very well. You could use it selectively only in certain areas (i.e. writing DSLs). Furthermore the tool support for Groovy is very good so you don't notice whether you're developing a class in Groovy or in Java. Well, at least that's how it is with IntelliJ and the JetGroovy plugin.

Posted by: Manuel Palacio at January 16, 2008 01:38 PM

Grrr, only 5 years?

Posted by: at January 16, 2008 02:03 PM

Absolutely right, when you're talking about Ruby, Python or Groovy. Toys.

But Scala...? Note that none of those sources of "nagging feelings" are relevant, because most of them are concerns about moving away from the JVM, rather than the Java language. However, Scala compiles down to JVM bytecode, just like Java. Therefore the runtime performance and deployment characteristics are exactly the same as for Java. Likewise, support for floating point is the same as Java... threading is the same or better (check out the Actors API). Web frameworks? All the ones available to you as a Java developer, plus liftweb which was designed specifically for Scala. GUI? Swing or SWT, just like Java.

Nobody sensible is claiming that the Java Platform is dead. Far from it. But Java-The-Language does, I believe, have a chance of being displaced as a primary language for new development for the JVM.

Incidentally, say this as another Java developer with close to 10 years experience.

Posted by: Neil Bartlett at January 16, 2008 03:29 PM

"I've been reading this a lot these past years but I've yet to see any evidence of it."

Ok, let me provide you some evidence!

I hate type erasure! It makes my life miserable on a regular basis.

I program a good bit in ActionScript and Ruby, as well as Java. I often find myself missing closures in Java. Not just like, "oh this would be nice here" but "grr this is going to force me to write an interface, an extra abstract class, and all together an extra 200 lines of code because I can't use a closure!"

I write a lot of infrastructure code that is used by other people to make their lives easier. So maybe that exposes me to things like this more often, but whatever. There's your evidence Cedric!

Posted by: Michael at January 16, 2008 03:49 PM

Good post. Well said. And you didn't touch on the enterprise aspects, where the Java-killer languages are far behind.

Posted by: Andrew at January 16, 2008 05:11 PM

That puts it.

I think Java is an all-purpose language. We had a discussion some 6 month ago about Ruby on Rails and the ease you can write WebApps (such as Blogs etc.) with it. One of us stated a sentence I cannot forget since then: "Such frameworks and languages (be it Ruby, RoR, PHP, ...) are there to make easy things really easy and really complex things impossible."

My bet is on Java, be it old, verbose, kincky or something else, it gets the work done.

Posted by: Georgi at January 17, 2008 10:58 AM

Your comments about other languages might have been opposed to Java ten years ago. And they did, remember when you were trying to convience people that Java had a brillant future, they told you the same. The only difference was that C++ was the way to go at that time.

Posted by: Casa at January 17, 2008 12:08 PM

Casa....

All true. Except Sun spent 5 years whipping java into shape and making it a compleate platform.

MS did the same with C#.

Whos investing that kind of eng $$ in these new languages?

Ruby, Python, etc, etc... all have some really cool features. But they are missing the complete platform and/or need serious work on performance.

Java is slowly (which is good) growing the best of those features. What are people going to complain about when java 8 has closures and auto-getters/setters? Other than apple being a year behind with their release..

I'd bet actual money that the java language and platform is going to be a significant presense for a very, very long time.

Posted by: dave at January 17, 2008 03:06 PM

I agree. Java will be around long after all these so-called "dynamic languages" are long forgotten.

This "expressive language" trend is perpetrated by young programmers with no experience, but it was started by 80's holdovers who learned programming before OOP and IDEs.

With a tool like IDEA or Eclipse I really don't care how verbose Java is. In fact I like it verbose, because it makes code really easy to read and maintain.

And don't even mention Scala. The syntax is unusable (who the hell puts the type after the variable name?) and its only a toy language designed by academics.

Posted by: Ahmed Hassan at January 17, 2008 10:55 PM

Python is a toy?? The main language of Google. Used to build more than 200kloc aviation systems. Please divide your feelings and the reality.

Posted by: Artur S. at January 18, 2008 12:54 AM

Since I have learned how to use closures I would feel tremendously restricted in my programming expression if I had to use a language missing them.

Java is retarded beside most of other VM languages out here. It would be valuable to fix it.

Posted by: batiste at January 18, 2008 01:03 AM

"The syntax is unusable (who the hell puts the type after the variable name?)"

ZOMG! You are right. It is absolutely ridiculous to put the type after the name! You would need to be some kind of superhuman to get used to it.

Posted by: Asd at January 18, 2008 02:24 AM

@Ajai
C# can afford to add features anyhow because you cannot compare the high volume of java projects, libraries, frameworks out there with C#. Being relatively younger language to Java, it can afford add many more things but java is always concsious of protecting existing codebase which is still a good thing.

Posted by: dabar at January 18, 2008 04:44 AM

Come to think of it, this statement is mostly coming from bloggers, but...

* They don't speak for all Java developers (actually, they represent a very tiny fraction of them).
* They need to drive traffic to their blog, and nothing achieves this goal better than posts titled "Java is dying" or "Ruby has won".

--

In a blog posting defending Java, the irony in these statements is amusing :)

Posted by: Brian at January 18, 2008 09:40 AM

@arthur

There are three official languages at google, c/c++, java and python. Python is mainly used for deployment scripts plus for example code.google.com forums, while java is used in many server side applications developped after the main search site, such as gmail, google base, etc

I personally agree that python'snot a toy but google is certainly not an example of java dying.

Posted by: Christian at January 19, 2008 03:36 AM

I've been programming in 2GL (directly entering codes corresponding to CPU instructions), then I moved to 3GL (assembly, then C, then C++ then Java, since the last century already).

When people tell me that "Java is dying" I answer them: "yes, and it's impossible for you today to make a money transfer without having Java involved in the process at one point or another, you've probably got a JVM in your pocket [> 95% of cellphones run Java], and you'll soon have Java in your living room, because Java is *part* of the Bluray specs. So if you think Java is dying you better wake up and open your eyes to the Java world, because the world won't change to accomodate your views".

I don't know how's the state of remote debugging and remote profiling in the toyish languages. Oh, and I'd sure miss the code coverage reports directly integrated in my IDE.

:)

But yup, Java is dying.

Posted by: at January 19, 2008 10:07 PM

I used to program in Cobol, and then I learned Natural Adabas, and then I learned Turbo Pascal. And then I learned C, C++ and VB, roughly all at the same time, strangely enough.

And then I learned Java, and then I learned C#. And now I'm learning Groovy. I still program in Java, C# and Groovy. Thing is, all these points about language X dying are benign. So what? If your language is on the up and 'mine' (not that I own any language) is on the 'down', so what? I'll learn whatever I need to to get the job done. This language X stuff is like saying my dad can beat up your dad. Just dumb.

To the post about C# having evolved so much quicker than Java. Totally agree. Closures. Absolutely. Why aren't they in Java already?! But, I do feel you're being a little disingenuous when you consider that MS rode the back of all the lessons learned by Sun. At one point you could almost do a Search and Replace on a Java program to generate a C# program, such was the similarity between the API's. I certainly have never considered MS an innovator. That said, Sun, get your butt into gear! Java needs your attention.

Happy blogging one and all! :)

Posted by: Darryl Pentz at January 23, 2008 04:34 AM

M$??? While I'm still not sure after how I feel about Microsoft...I think I'm still bitter after all the cumulative hours of life lost working with technologies like VB or SQL Server or ASP.NET...I did not work with these technologies very long but at any point I came across them, it was more than long enough.
I've now worked with Java technology for a bit more than 10 years, and for the past 3, I have been working on the .NET platform. I build my .NET applications as if they were Java applications and I'm happy that I'm not the only one. Spring.NET and NHibernate just reached there first production versions as I was getting involved with .NET.
What I've learned is that Microsoft Research seems to be crushing. F# is very cool and while I have not been looking at it in depth, I understand that it is loosely based on OCAML. I've also heard that F# was used to build all of the code/services that manage the statistics for the Microsoft live site.
What I see in Microsoft today is more itneresting to me than the M$ of yesterday. Not only is Microsoft creating technologies like F#, they are hiring people like Simon Peyton Jones and they are working hard to participate and build a community....I'm not sure this makes me like Microsoft anymore, but I do like the contribution they are making. F# is the first language that will take functional programming ideas into the main stream. From what I understand F# will support imperative and functional programming. I'm impressed with what I've seen coming from the M$ world as compared to the past.
Scala is Java's F# but I don't see it being as readily accepted. I think I see a bit of revolution as time goes on, but it may never be a major one...The revolution is that there will be a greater use of languages such as Erlang,Haskell and F#, but they will likely never take the place of languages like C# and Java.
The simple imperative nature of Java and C# is and will become the language that ALL members of team use to develop together on a project. However the more time goes on the more we will see systems and applications require more specialized languages and programming styles. Applications will become even more polyglot than they already are. Perhaps you might have a distributed transaction manager written by senior team members that talks to JEE backend components.
While I am happy to see Java's rightful place defended learning one of these languages can only make you a better Java programmer. I've been learnign a bit of Haskell as time allows....Learning the concepts behind these languages may even help you avoid being paid the same wage as a pizza delivery boy as our proffession continues to deal with the pressures of offshoring.
I'm sort of bouncing around but though Java is like an old friend I think it a find time to learn
one or two new languages...If only to become a better Java programmer.

Posted by: DanielHonig at January 29, 2008 10:08 AM

M$??? While I'm still not sure after how I feel about Microsoft...I think I'm still bitter after all the cumulative hours of life lost working with technologies like VB or SQL Server or ASP.NET...I did not work with these technologies very long but at any point I came across them, it was more than long enough.
I've now worked with Java technology for a bit more than 10 years, and for the past 3, I have been working on the .NET platform. I build my .NET applications as if they were Java applications and I'm happy that I'm not the only one. Spring.NET and NHibernate just reached there first production versions as I was getting involved with .NET.
What I've learned is that Microsoft Research seems to be crushing. F# is very cool and while I have not been looking at it in depth, I understand that it is loosely based on OCAML. I've also heard that F# was used to build all of the code/services that manage the statistics for the Microsoft live site.
What I see in Microsoft today is more itneresting to me than the M$ of yesterday. Not only is Microsoft creating technologies like F#, they are hiring people like Simon Peyton Jones and they are working hard to participate and build a community....I'm not sure this makes me like Microsoft anymore, but I do like the contribution they are making. F# is the first language that will take functional programming ideas into the main stream. From what I understand F# will support imperative and functional programming. I'm impressed with what I've seen coming from the M$ world as compared to the past.
Scala is Java's F# but I don't see it being as readily accepted. I think I see a bit of revolution as time goes on, but it may never be a major one...The revolution is that there will be a greater use of languages such as Erlang,Haskell and F#, but they will likely never take the place of languages like C# and Java.
The simple imperative nature of Java and C# is and will become the language that ALL members of team use to develop together on a project. However the more time goes on the more we will see systems and applications require more specialized languages and programming styles. Applications will become even more polyglot than they already are. Perhaps you might have a distributed transaction manager written by senior team members that talks to JEE backend components.
While I am happy to see Java's rightful place defended learning one of these languages can only make you a better Java programmer. I've been learnign a bit of Haskell as time allows....Learning the concepts behind these languages may even help you avoid being paid the same wage as a pizza delivery boy as our proffession continues to deal with the pressures of offshoring.
I'm sort of bouncing around but though Java is like an old friend I think it a find time to learn
one or two new languages...If only to become a better Java programmer.

Posted by: DanielHonig at January 29, 2008 10:08 AM

Great looking theater, cool concept and good work !

Posted by: voyance at August 21, 2008 04:28 AM

cool story bro.

Posted by: mama at November 23, 2009 01:28 AM

Riveting tale chap.

Posted by: papa at January 3, 2010 12:15 PM
Post a comment






Remember personal info?