There are a lot of programming languages out there and people are always confused about the programming language they should use to develop their applications. We see a lot of people asking the question “Which programming language should I use?“.
And there are many fresh graduates and new programmers who want to add another programming language to their resume and they too are confused about which one to learn.
There is something called the TIOBE Programming Community Index which lists programming languages based on their popularity. Here is how the list for April 2009 looks like:

As you can see, Java leads the rankings. It has been at the top for some years now. Since Java is being used for a large number of applications in the corporate world, you can see that there are more requirements for Java programmers than say, Python programmers.
Many graduates and wannabe programmers see all those hiring ads for Java programmers and they come to the conclusion that Java is the programming language they should go for to get a better job because it is the hot thing now. They see all these statements from elsewhere which say something to the effect of “there will be 190,872,452 requirements for Java professionals in 5 years” and they decide that once you learn Java, your life will be changed forever, for good.
Wrong!
There are a couple of things that can go against you when you select Java as your programming language. First, more requirements means more competition. If there is a requirement for a million Java programmers (I am totally making up all these numbers) there is a chance that there are a million Java programmers. You have tighter competition. Comparatively, there are fewer requirements for Python programmers, and this means that there are less number of people using python, and this means that there are less number of people who know python, and this in turn means that you have less competition. So essentially, your chances of getting a job are the same regardless of the programming language you specialize in. You may even land up on a job in Ada or Pascal (There are many big corporations which refuse to move from legacy systems).
The second thing that can go against you is that since there are a lot of qualified Java programmers, the companies that hire you can afford to pay you less. If you don’t take the job, somebody else will, and he will be equally qualified as you. Compare this to a programmer working in Ruby. If you are a Ruby programmer, there are a not much awesome Ruby programmers and companies know this and they will pay you well.
Another problem with running with the crowd is that you will not get an exciting job in programming languages like Java. Most of the interesting startups and companies that work on interesting stuff have moved away from Java and they are using programming languages like Python or Ruby to build their cool products. You want to work in those companies that build something that people use, rather than work in the under-belly of a giant corporation that churns out software like a coke factory.
Paul Graham observes:
if a company chooses to write its software in a comparatively esoteric language, they’ll be able to hire better programmers, because they’ll attract only those who cared enough to learn it. And for programmers the paradox is even more pronounced: the language to learn, if you want to get a good job, is a language that people don’t learn merely to get a job.
If you want to stand out from the crowd, you have to do stuff that stands out from what the crowd does.
If you want to do something other than spoiling your life doing the same thing a million others are doing, do yourself a favour and learn an exciting new programming language that can change the way you think and write code. Learn Python. Learn Ruby.
I say, Learn Haskell.

2 short comments:
1) The message shouldn’t be “Don’t learn Java”. The message should be to learn many different languages (including Java) to make yourself a more diverse and valuable programmer. A really great programmer will have a thirst for learning different languages.
2) You say that “you will not get an exciting job in programming languages like Java”. I program Java at my job and work with such technologies like RFID, GPS, location tracking, and temperature monitoring devices. Now, exciting is subjective, but I consider that to be pretty exciting. Isn’t the exciting part really more about the job than the language? Couldn’t my job be to build an online registration application in Ruby? I don’t consider that to be particularly exciting and the fact that it’s in Ruby doesn’t make it any more exciting.
I do not agree with the author.
First of all, with Java you and your company will make a lot of money. Java is good because of all the tools, frameworks and such that make life a lot easier.
Second of all, clients will NOT be very happy to have their software written in language that is known only by a bunch of programmers that will hardly agree to maintain it for a reasonable price.
Third of all, haskell programmers are hard to find… Yet.
But all that doesn’t mean you shouldn’t learn anything besides the language that helps you make money.
Java is not my favorite language either, but I dispute the notion that you can’t write exciting things in a boring language. The vast majority of Google’s web services are written in Java and C++, and they offer incredibly useful services. Google Docs, for example, is written in Java.
> more requirements means more competition
So what? If you are the best in your field, there is no stopping you. Smart programmers are very much resistant to this *competition* you talk about which more so applies to *stock* programmers.
> the companies that hire you can afford to pay you less
I get the feeling that what you are describing here are entry level Java programmers since if a company needs the best, they *have* got to hire the best; no bargaining there.
> If you want to stand out from the crowd, you have to do
> stuff that stands out from what the crowd does.
This doesn’t necessarily require you to learn a new language. I’m sure that Teracotta, Hadoop etc. do make their authors stand out from the rest. IMO, it’s the concept which is interesting; languages just play their parts as an instrument in achieving the end goal.
> If you want to do something other than spoiling your life doing
> the same thing a million others are doing, do yourself a favour
> and learn an exciting new programming language that can change
> the way you think and write code.
I would rather put this as “If you plan on becoming a better programmer, code for fun. No matter the language, no matter the scale. Expand your horizons, learn something new each day; be it a technique or a programming language which changes your outlook towards creating software in general”.
I can pretty much understand what you were trying to convey but it seems that your blog post ended up on a different note altogether.
I agree, but for different reasons.
Although the distinction must be made between Java and JVM. One of them has a future.
Your premise rests on several faulty assumptions.
Programmers don’t just learn one programming language, we learn many. Nobody should put all their eggs in one basket. Specializing in an obscure language that few companies actually use can really hurt your prospects. I programmed for over five years in LabVIEW. I’m an expert in that language, but since not many companies use it, there’s not much demand for that expertise.
Money isn’t the only reason we learn a particular language, so demand for programmers of a particular language is not the only thing that’s driving supply. Python is widely known as a fun language to program in, so the supply could very well outweigh the demand.
There are “cool” jobs in Java, if you’re good. I work in robotics (military applications) and we currently program everything in C++ and Java.
One point you don’t consider is the amount of resources available for learning and eventually mastering a language. There are hundreds (thousands?) of books written about Java. There’s excellent documentation online, and there’s a huge pool of talented Java developers to draw from when you have questions at sites like Java Ranch, Sun’s Developer Forums, and Stack Overflow. The resources available for more esoteric languages are understandably limited.
Finally, Java isn’t just about the language. More and more it’s about the JVM. Languages like Groovy and Scala are leveraging existing Java technology to make sure the JVM is going to be relevant for a very long time.
I say, learn Java, then Haskell.
> Although the distinction must be made between
>Java and JVM. One of them has a future.
Sounds like a win win for java.
I doubt it. I think both of them have no future.
Sure, JVM is hyped now, but what will become of it in the long run?
Java used to be great many years ago too…
Learn Brainfuck! By your own logic, it should earn the most, have the least competition and you’ll program the most interesting things in it.
Or maybe not…
In my country (India), new graduates are any way abandoning Java in droves, because the opinion that Java jobs (includes J2EE, Struts, Hibernate etc.) demand years of experience has gained currency. Instead the students are opting for Microsoft’s .Net.
So it’s strange when I still see Java’s predominance in discussions about mainstream/enterprise programming languages on the internet. Even this blog post talks from this perspective while advising to abandon Java!
In any case, most students will learn Java any way because it is included in most University curricula.
And I agree with an advice which I saw on a technical news site some weeks ago, that those who are starting out should learn –
1) A mainstream server side programming technology (used much in production) which is mostly a choice between the Java platform, .Net and PHP.
2) Client side programming technologies like Javascript, CSS, XHTML, Flash/Flex/Adobe Air, Silverlight
3) A dynamic and/or functional language as an insurance policy for the future, since these languages may not be used in production yet, but they at this point seem to have an inevitable future.
Abeer V. Dey,
As far as I know, PHP cannot be used to build large scale enterprise web applications.
Of course the point of this whole article was that you should add new and fresh languages to your tool set instead of hanging on to some old “classic” language that is thought by many as the “job fetching language”
Facebook.com is written in php. How is that for a large scale application?
[qoute]As far as I know, PHP cannot be used to build large scale enterprise web applications.[/qoute]
Are you joking. I currently build ERP system same as SAP.There’s lot of module.I would said it php was the best language ever.Even it was lack as vb.net strict type.If fast and easy to write program asap.How much time you considering writing java module.I seen programmer java doing code and other language.If you know OOP ,is dam easy.The create enterprise solution problem back log is how you manage your server setting,give some ohmmm.Mastering your database skilll.My experince said java programmer suck!.Sorry ya java programmer.Net bean and glassfish installing already taking my 500 mb per installation.Is this good?Oracle instance using java taking minumum 250 mb per instance.For optimize more ram.Is this good.Tell me why java is good to install in my laptop.
For business purpose,is not your language but is really matter how bisness logic are.Fail to understand business logic.you fail to code what ever language you write.
I said: “As far as I know, PHP cannot be used to build large scale enterprise web applications”
When I am wrong, this “As far as I know” part always comes to my rescue.
I like the last paragraph:
“For business purpose,is not your language but is really matter how bisness logic are.Fail to understand business logic.you fail to code what ever language you write.”
Niyaz,
Yes, PHP doesn’t have a reputation for large scale enterprise applications yet, but it is used in many, many smaller web based projects. So it is mainstream, and it’s best to learn it along with a mainstream enterprise technology like Java or .Net so that one can do both small scale projects and large scale projects (in fact ASP.NET and JSP do the same thing and PHP is another widely used option).
Asp.net for erp application.Try to install sharepoint server in your laptop.And tell me how much footprint the ram Require.Please tell me you will instal SAP netweaver 7 application + server(Java Server).Tell me how much foot print required.Tell me if you install Apache Tomcat + jboss application.Tell me how much required to install Cold Fusion Server and also how much footprint ram requeire for their search engine.How much required.Tell me how much footprint if you install apache + php + mysql/postgress.Who win?
In the end is about optimization of sql statement and the application server.I know ,most of the company didn’t ever care about it.Build bloated field aka 100 field per table?Normalize please.
The true best application was console based but in the mean time the customer always request changes?How do you want to do in other language.Compile back .dll file?Restarted server Tomcat each time request.
Niyaz…
I agree with you on most of the points discussed here. We’ve been battling with java from our college days isnt it.I can only describe it as frustrating technology.Felt like being lost in a jungle with all those frameworks.
Few quick questions
Ruby (on and off the rails) => Does it scale..?
…
Python (with or without django framework) => google Appengine …?.
Groovy => Show me a killer app. I’ll be convinsed.
LAMP =>
Well i personally feel that java programming is a headache. Try network programming in python. You will soon come to know the difference.
Well when i can do almost everything with python that can do in java with a clean, readable, no finger-numb-making. Then there is no use to get back to java at personal level.
But as many have said about business requirements so i am also to do java.
N for php. Php is just a web technology. Python is full-flegded programming language.
I can only disagree.
I loved learning java and generally pay little attention to what the ‘world’ is doing when I make my decisions. I decide only what is most interesting for me and what *I* consider best, not what someone tells me.
@silky,
“I decide only what is most interesting for me and what *I* consider best, not what someone tells me.”
That is exactly my point. Everyone is doing something doesn’t automatically make it what you should also do.
‘Java’ was just an example I used (and apparently a lot many people took it seriously. I should have anticipated this)
@silky
Gud. . Noone is asking u to leave ur java. . V r jst suggesting take a look at other options too. . They can be interesting enough. Rest is upto u. But once more no one is telling u to stop doing java. .
Language should be just a way to take your ideas into implementation. i don’t care if its java/php/C or for that matter python. Though you wanted to give this message, the way you mention java being a boring language is certainly pi**ing for those who have written great code/applications in it.
Besides when selecting language one needs to consider the tools and ease of development too. A particular thing(OS native level access for example) that can be done in C is not appropriate to be done in java. Certainly there are things that you can do rapidly in java and probably aren’t worth your effort in C/python.
I would also like to point that PHP can be whole lot more than what you think. I know of big web giants running the entire frontend logic in PHP. Now i won’t name who, because all that is supposed to be hidden from the user.
idiots, .NET is the way to go
the author is sort of convincing. Fearfully,In the years to come what prospects do they hold for java or .NET? wouldn’t there be bounty number of them fighting over few jobs waiting with their baffling experience leading to a saturation for java and .net market in near sometime? yet why are most people reluctant to choose to learn other languages that are as good comparatively? is it simply the blatant fact that nothing is comparable to java and .NET??!! if so what next?
[...] shops as the primary language. It will take you a long way in most situations. At the same time, I have some objections with using the language from a startup programmer point of view. Read the discussions here [...]
I say, learn something else.
If you base your language choices on learning the least possible for the most desirable pay, I would recommend a career in HR or day trading instead. If you still insist on being a coder, I would ask only that you first take a job for a few months cleaning toilets so you know how the rest of us feel when we have to deal with the consequences of the glut of morons writing code in the most heavily marketed all-in-one solutions d’jour for corporate leadership that would rather listen to the nice salesman than their own people.
Whatever you do though, stay the hell away from the front end of the web. It’s not for people who don’t want to learn anything after college and if you’re truly that mediocre, you’re better off with something that can hide your code behind a compiler.
A couple things I’d like to point out to address old comments.
Facebook is a PHP app. I think it can handle corporate buzzwords like ‘enterprise.’
Google Docs is a triumph of JavaScript not Java. A rather bloated and messy triumph but still more of a front end accomplishment than a back end one IMO. But yes, the merged user experience is badass, whatever they’re doing that with.