Advice From A JUG Leader II – Debate Breakdown
It’s been a week since I posted “Advice From A JUG Leader – Learn a Different Language” and it seems to have ruffled at least a few feathers in the Java community. As the article has been re-posted and bounced around on Twitter, I have had some opportunity to interact with some members of the Java community who have strong feelings about the content. None have called for my death, and the debate has been almost entirely polite thus far.
I think and sincerely hope that the Java community understands that the impetus for writing this article was an observation that many in the Java community are simply not aware of the trends in the industry, and by the time those trends become standards it is too late. These are the people that, if the train does come, never heard it approaching. My purpose is not to predict or encourage the demise of Java, as that should not and will not happen. The Java community is deeply loyal to Java, perhaps even to a fault, and I hope these articles serve as a wake-up call that the most important loyalty should be to your career as a software professional and to neither an employer or language.
I have noticed from these mini-debates is that defenders of Java, at least in my interactions so far, seem to primarily be highly experienced developers that perhaps have the most invested in Java. As I mentioned in my original article, I don’t expect known Java experts to feel any changes. At least a few of the comments seem to come off as rants against youth (“go play your Xbox“?) and startup culture and not a defense of the language’s health itself. I haven’t seen the younger generation of Java pros, but I know they are out there. I don’t seem to see Java enthusiasts attacking faults in the alternative languages or praising Java for a superior feature set.
Some comments seem to admit that Java has some shortcomings just like other languages, but it’s what we have for now. That is good enough for some people – particularly those that have been in Java for a long time – but not good enough for many developers who want to work with the best available. The arguments so far have been, in no particular order:
Argument #1 – Don’t Use Alternative Languages Because The Languages are Unproven, and/or Only Startups Use Alternative Languages
“And, don’t forget, 70% of startups will fail within the first ten years. So, I’m not inclined to base my decisions on the faulty and unproven ability of start-ups to make sound business decisions for themselves.” – Comment from TSS reader, click for full context
Some of the languages are more proven than others obviously, but we can’t ignore the fairly regular news regarding established firms transitioning to alternative languages and platforms or taking a polyglot approach. I would hardly call companies like Twitter, YouTube, foursquare, LinkedIn and Google immature startups at this point. If you are going to argue that there are plenty of other shops that use Java, we all know that. The point is some startups (those most apt to use these alternative languages) have made bad decisions (as have large firms), but to call the languages themselves ‘unproven’ at this point would not be accurate. No guilt by association here.
Businesses don’t make decisions, people do. I don’t think we should fall into the trap of lumping together the decisions made inside of some startups as any proof of language relevance at this point. When a host of startups fail due to their language choice alone, that conversation can be had.
If you were around back in the late nineties there were a lot of technology startups with funny sounding dot-com names. Many of these companies were using a three or four year-old programming language called Java. They could not have predicted that Java would grow to be as popular as it is today.
Note: Python is older and Ruby is about the same age as Java, Scala has been around for 9 years, Clojure for 5 years.
Argument #2 – If You’re Bored With Java, That Is No Reason To Branch Out
“Becoming “bored or frustrated with Java” is a pretty poor excuse for branching out. As a professional, I’m not paid to feel entertained and broadened in my horizons. I’m paid to get things done as efficiently and as well as I possibly can… Go home and play your Xbox to relieve boredom. Don’t make your employer pay for yet another language learning curve so that you feel less bored and frustrated.” – Comment from TSS reader, click for full context
Simply being bored with Java could be enough for someone to look for other alternatives. I think the bigger issue is that technologists who pay attention to developments in other languages are envious of the features that other languages provide. Today, I feel that a smaller percentage of the Java community explore alternative languages based either on less curiosity or less opportunity. As the Java community at large is exposed to these other languages more and more, I would expect you will see many more defectors. The early adopters of Java were the most curious C++ or C developers who were looking for something different and stumbled on Java, and the most curious of Java pros stumbled on these other languages over the past few years.
Argument #3 – The Assumption That Most or All Of These Alternative Languages Will Be Dead In 5-10 Years
“If I’m off learning optional languages, I’m falling short of what I get paid to do. What’s more, I may have decided to do some development in one of the latest and greatest languages that, in a few years, will fall by the wayside, and now I’ve left my employer with a bunch of projects that will have to be re-written into a language that is currently active and supported.” – Comment from TSS reader, click for full context
Many of the early adopters of Java, as I mentioned in my article, have already been exploring some of these alternative languages for some time now. Often they were not initially paid to do so. Could some of these languages be dead in 5-10 years? Sure. Most of the languages I’m thinking of when I talk about alternative languages are already 5 years old, and some much older. Even the young Ruby/Rails combo has been around for over 5 years.
Did people make the same assumption about Java back in the late nineties?
Argument #4 – Look At The Evidence That These Alternative Languages Are Not Being Adopted/Used/Sought After
Some defenders of Java have been pointing me to various statistics as proof that these alternative languages are not being used, not being sought after by employers, or not being adopted. I would cede that none of the current crop are even close to Java in terms of popularity today. I was sent to this link from Networkworld.com that says Java developers are the “most difficult tech pros to land, followed by mobile developers“. I wonder where the demand for mobile developers was three years ago? Would mobile development be a valuable skill to learn at this point?
As a recruiter, I’m also having a bit of a harder time finding Java developers now. One of the main reasons for that is pretty simple – a lot of the people that I know that used to do Java work aren’t interested in doing Java work any more. Over the years I’ve met a fair amount of experienced Java developers that were dying to get a job doing mobile work, Ruby work, Scala work, etc., but I’m not finding too many Ruby or Scala programmers with five years out of school looking for their first Java job. Maybe it’s just me, but I don’t see that…ever.
Another link was given to the Tiobe Index, which is pretty widely used to highlight trends of language popularity. It is based on search engine hits. All indexes like this have some obvious flaws. If you read Tiobe’s Definition, the phrase “Java programming is dead” will actually improve Java’s position in the rankings. So absorb these ratings with that in mind. They measure chatter, which could be positive or negative.
Well, the takeaway from this graphic, for me anyway, would be that Java dropped significantly and Objective-C seems to be gaining popularity dramatically. But this could be some anomaly in a given month.
“Java has slid only recently and barely while the much touted JVM languages aren’t even on the radar” – Comment from Dzone.com reader, click for full context
The green line that is Java seems to be trending downward on a fairly regular basis since ’02. I’m not sure I’d refer to a 10 year decline as ‘recent’ in the technology industry. Again, I don’t think the Tiobe index is the ultimate indicator, but I wouldn’t point someone to this statistic to support an argument that Java is healthy.
Objective-C wasn’t listed in 1997, was ranked #46 in 2007, and now stands at #3 on the index. If you had picked up Objective-C a few years ago, say in ’07 when it was not entirely popular, you would probably be doing well today as the demand for iOS work is quite high and the supply of developers is quite low. In ’97, Java was #5 – one spot behind VB and two spots behind COBOL.
The arguments against learning a new language or using a new language in production were probably the same back in the late nineties when Java was still new. People surely came to the defense of C and C++ saying that we didn’t need a new language then. It’s progress and subsequent resistance to change, and in the technology industry change can sneak up on you pretty quickly if you aren’t paying attention.
I feel that many in the Java community may not be paying close attention.
If you were a C++ programmer messing around with applets back in ’96, you’ve already been through this transition once. What I’m hearing now from experienced folks is that these alternative languages are for start-ups, “Trix are for kids!“. I know quite a few gray haired former Java developers that are getting paid to write code in other languages now, and I think they would tell you that the alternative language market isn’t just for kids. Were you using Java in a start-up back in the day – were you one of the kids?
My purpose in writing these posts is to make a certain element of the Java community aware of what is out there, and that in my opinion now is an opportune time based on external market forces to explore other languages. This is not an attack on Java as a language or on the people that choose to write in Java. I’ve dedicated much of the past 12 years to the Java community and I don’t intend to change that now. I expect that I will be involved with Java professionals for several years, helping them to find jobs and scheduling great events for my JUG. I chose to change the focus of my business beyond Java, and my suggestion to Java professionals would be to at least consider and research doing the same.
Its good to learn different languages. But selection of the language for a project can not be judged by popularity or expertise. You don;t use java to write high performance CAD application and you dont use C++ to write enterprise application (you can, but not worth doing it). You have choices in some languages like using Ruby instead of PHP or Python or blah blah.
I don’t think Java language iteself is perfect (I see C# better). But Java has more choices when you are about to write enterprise grade application.
If you are experianced java developer then you can learn any other language quite easily. So no need to wrorry about new things. C++ developers are still there and doing great job. I am waiting for ObjectiveC to be used in enterprise grade application. May be we will have spring for ObjectiveC, Hibernate for ObjectiveC?
Stop trying to teach pigs how to sing, it wastes your time and it annoys the pigs.
I think Java will get new momentum with the introduction of closures in JDK8. 95% of all Java developers I’ve met don’t know what closures are. Once they understand it, they will become crazy about it like all the people in the Groovy, Ruby, Scala, Kotlin, Ceylon, etc. camp. It will then be very important to learn the new things in JDK8 (like default methods as well) as fast as you can in case you don’t already know them. Otherwise you will quickly end up in the second Java league. Nevertheless, having exposure to other languages is always good to broaden your horizon. Here in Europe it will be seen as a plus on your CV. There aren’t really any jobs for Ruby or Groovy. Unhappily …
Oliver – Thanks for the comment, and I agree that the Java community will be excited to have closures. Closures have been in discussions for a few years now, and were originally proposed in ’09 I believe. It is my belief that developers who already know about closures today (that 5%) are the early adopters of these other languages you mention, and that 5% are evangelizing those languages to the 95%. Those 5% are the influencers of communities, and when JDK8 comes out (2013?), how many of those 95% will still be part of the community? Obviously the large majority will probably still be doing Java work, but I think the Java community wants/NEEDS to keep those 5% now and whatever other percent they are going to lose in the interim. They are tired of waiting.
I’m a java developer and have been playing around with Groovy for the past 3 years. Currently, I’ve delved into ruby & python, but my day job is still Java. I have a special affection for Java, especially when I remember the first years when I started coding in Java in the late 90s. I’m getting a similar feeling now when I do languages like groovy, ruby, python. And now, when these alternative languages are brought up in a discussion, the other excuse I hear is that they are slower than java. Hmmm, reminds me of the days when people used to say java was slower than C++, ergo don’t use java.
The other added benefit of learning and experimenting with ruby/python is the cost to actually deploy your personal project. If I build a small web app in Java for a couple customers, deployment to a VPS will be much more expensive than deploying a ruby/python app. I had that experience building a java app that had only about 4 customers using it in a subscription basis, and just to deploy the app I needed over 512MB of RAM, and ideally 1G for it to keep running smoothly. For a python app I’m building at the moment, 512MB of RAM is more than enough.
Finally, the last point that I really enjoy about ruby/python is the development speed. Running tests in ruby/python are so fast, that my work flow is a little different when coding with these languages compared to coding with java. My concentration & focus are barely broken. With Java, I loose focus quickly. Although the tests run fast, the time it takes to start the jvm, compile , run the test and shutdown, breaks my concentration. I would have to wait 10 to 15 seconds for a test that runs in less than 1ms in java, while In python/ruby I only have to wait 1-2ms for a test that takes the same time to run.
I had high hopes for Java, but seeing how all these features are constantly being pushed back, I’m afraid that by the time Java includes the features we love so much from the alternative languages, it might be too late. Keeping up is always harder than pushing the boundaries, because it means you are always behind.
Roberto – You hit on several key points. When Java developers learn of features in other languages, they get an itch that needs scratching. It becomes worse when Java developers are waiting for features in Java that are already available in other languages. I too am afraid that by the time that Java is able to implement some changes to stay competitive, the itch will be too strong and developers will have made moves to other langs. Many other good points you raised, thanks for the comments.
Thanks for putting this out there. Obviously everyone is different, and that makes the world go around. I disagree strongly with Argument #2, but that’s just me. I spend at least 8 hours a day developing, and to do that, I need more than to be just paid, I need to be interested.
Harry – Thanks for reading. Based on your comment, it sounds like you are actually agreeing with me. The arguments listed here are things that I tend to disagree with, and are just things I heard after posting the original article. If you feel you need to be interested, then it sounds like if you were to become bored with Java you might move on to another option.
To the #2: “If You’re Bored With Java, That Is No Reason To Branch Out”
THE problem with that argument is that “being bored” contradicts with “get things done as efficiently and as well as I possibly can…” these two things are not compatible. It’s not only emotional problem that boredom will prevent you from “being in the flow” and be satisfied with the work. More importantly, “boredom” means you have to do repetitive and ultimately inefficient things. If you can get results “as efficiently and as well as you possibly can” then you will not bored. If instead of getting directly from A to B you are forced to do A->C->X->Z->B on every step then you are bored. Those inefficiencies standing between you and final result that provides gratification. The less results you have the more you bored.
So here is the final advice: do not learn anything except Java so you will be oblivious of better ways of doing things thinking you already most efficient and ultimately you will be happier. Otherwise if you learn new approaches it will sadden you since doing same in Java will seem baroque and less efficient to you.
Interesting advice. Maybe you are correct that the developers that are happiest with their primary language are the ones that don’t know about the great features of other languages. Ignorance is bliss.
Well, irony implied…