Put down the Java manual
...Step away from it now
Apparently, there is a perceived shortage of C# and Java programmers. Certainly a good percentage of all job ads are for these languages.
That’s good if you already have these skills, but a much weaker signal when deciding what to learn if you’re a newbie. As far as I can tell you’re not allowed to graduate from high school in India without at least some skill in Java. And every computing course on the planet is based on it. The only difference between good and bad courses is whether you do real programming in C++, Haskell, F# etc as well.
The Ghost of PowerBuilder
You might not even have heard of PowerBuilder; in the 90s this was sex on CD, recruiters would call me up about it even though it was not on my CV ( just in case I’d learned it since I’d last spoken to them) and money pretty much got thrown at you for it. It still exists, as does Visual Basic, the language that helped lower it to obscurity.
There is now work in porting legacy VB to Java and the unfortunate love child of VB and second-rate CompSci grads VB.NET continues its well earned decline. Loads of skills have gone this way, indeed the VB wave was mostly Fortran and Cobol developers who saw an escape route and grabbed it with both hands.
Java stored procedures went from sex to herpes in about six months, and of course Oracle now owns Java. That would scare me, it should scare you. What is the bloody point of this history lesson? It’s not history, dear - it’s economics. You get paid as a function of supply and demand, but there is a lag. Demand for Java and C# has grown, but supply has been growing for a decade.
Java is a better language
... Like I care. Apparently it’s easier than C++ and as a C++ developer turned City headhunter I accept that and see it as bad. At one stage VB programmers were paid more than C++ guys and it was easier, easy money.
Nothing wrong with that, just don’t kid yourself that it is long lasting, that only comes when there is a barrier to entry. As you can learn Java on a $200 sub-notebook there isn’t much in the way.
You may be a superior Java developer, whatever that means, but it doesn’t matter, since it is a well known fact that the pay and productivity of programmers is often negatively correlated. Yep, you read that right. This is easy to prove: look at your team samples of a dozen programmers has been shown to vary by at least an order of magnitude, whatever measure of productivity you use.
I’d bet money that pay in your team is almost entirely a function of number of years experience with a bit of politics thrown in. For people on the same grade at the same firm it’s unlikely that pay varies by as much as 20 per cent. A factor of ten reduced to 0.2. Short version, you’re a commodity, live with it.
When a skill is new and in demand it is easier to get in, they can’t ask for three years' experience in something two years' old. Actually that’s a lie, they do, but at least you can get in with bare competence, not expertise. One interview I had was literally: “You’re an expert in C under OS/2 aren’t you ? Good we need one of those." The banker interviewing me knew neither technology.
As it matures, the entry level goes up and increasing competition for jobs drives it still higher. So starting off in Java now is like walking up the down escalator: maybe you get to the top, but you will be sweating.
It’s less bad for C# because few universities teach it, but the same logic applies. Is there any hope ? No. As a techie you have to gamble your career roughly five-six times between now and retirement. You will get it wrong, and have to take up minicab driving or, if all else fails, government IT.
Answers you won’t like
The first draft of this piece ended on the “No.” above, but I guess El Reg won’t publish a piece that leaves readers so demoralised. When I made dumb career decisions I found that the fact that I’d studied what really goes on in computers to a deep level got me out of some holes because I could more quickly pick up the new toy. Nearly all IT books are “user” level, even programming ones - which is OK for bits of syntax but you need to spend time on algorithms, database theory and most offensively to Java coders, hardware architectures.
Business skills are also a good hedge and although there are (expensive) formal courses I’ve found that, to talk the talk, a bit of time invested in the trade magazines for your industry can make you sound more useful far more quickly.
But the least welcome advice is that you’re going to have to start learning the next skill before this one starts to crumble under your feet. I can’t tell you when the Java bubble will burst and neither can any one else who is being honest with you.
But when it does, the sheer volume of Java people means that any niche “near” Java will get filled up very quickly as the crowd begins to look for the fire exit.That means you need to look at things that aren’t like Java at all such as GPUs, functional languages, AI etc. That’s hard work and you’re doing long hours already, but if you want to keep being paid twice the average person, that what you’ve got to do. ®
Dominic Connor is a quant headhunter in the City. He is currently looking for a "heroically over qualified C++ guy with high frequency trading experience". You can reach him at Wilmott.com.
You will get it wrong, and have to take up minicab driving or, if all else fails...
...become a glorified recruitment consultant.
While it is true that there are many untruths written about java's capabilities, nonsense like "it's faster than C++" etc, you have to look at the bigger picture.
1) Economically, employers like a saturated market, it makes for cheaper salaries and abundant programming staff; programmers will not 'leave java' once the market is saturated simply because it's the lingua franca taught in universities. Java is the modern cobol - it will be around for decades.
2) Java's development policy at Sun was 'conservative.' This was and still is a fantastic idea. What this means is that you don't go changing the syntax and core features on the whimsical enhancement requests of thousands of nerdy academics trying to look clever. In java's enhancement history, there are innumerous rejected requests from computer scientists and students asking for totally obscure features : "java doesn't have sproutal functor chamferings" or "hyperbolic cheese factoring." These get rejected politely by pointing out the conservative development policy and the fact that quite often, tiny syntax enhancements require major re-architecturing of the JVM and a consequent footprint increase. Computer scientists and programming geeks - If you want Algebraic flumpal loops or Herzian antisoup filters - I don't care, and neither does the java world. Go and use Haskell or Scala or whatever turns you on , java is simply not designed for that.
3) The normal distribution curve of Intelligence . Under a classic bell-shaped curve representing the spread of IQ in society, a far greater 'area' represents people of an intelligence being capable of learning and becoming expert in simpler programming languages like java; another reason for companies to invest heavily in it. What's the point of Haskell if only 37 people in the world can understand it to an expert level? And what about 'cheaper' maintenance programmers - how can a company expect to survive after having its systems rewritten in Haskell / Scala / insert flavour-of-the-month-language only for that programmer to leave after 6 monthsleaving nobody on earth at an employable wage anyway having the fainest idea of how to decipher it ? The problem with computer scientists who extol the virtues of their newest academic language, Sheep++ or Objective-Meerkat or whatever it is this month, is that they assume everybody else in the world is as clever as they are. We're not. This is where simpler programming languages are worth a million times more to a company than obscure mathematical abstractions that only quantum physicists can understand. KISS!! Keep it Simple, Stupid.
4) On the subject of Oracle. 10 years ago, Oracle started rewriting it's own internal software and much of the software it sells in java; their internal investment is enormous; the ranch is bet on java. Oracle acquiring java is not a flash in a pan - it's a logical progression; java will have much stronger stewardship now it's in the hands of a financially successful company with the bucks to look after it.
5) Beards. What people forget is that ALL of the most mega-successful, used- worldwide, destined-to-be-around for 50-years programming languages were all designed by REAL academics with BEARDS. Gosling, Stroustrup, Kernighan + Richie, all beardies. C#? non-beardy. Ada? non-beardy. Scala? non-beardy. These are all destined to ultimately fail. Cobol doesn't count as the designer was female. Objective-C's designer had a moustache, so the language is partially successful in Apple.
6) Finally, a message to all you programming geeks who constantly whinge that "java cannot do so and so." Usually there is a very good reason WHY java was designed to not do so-and-so:
"Java isn't pure OO unlike Smalltalk!"
-> java's designers added primitives for performance purposes.
-> java's designers rejected multiple-inheritance in favour of interfaces
-> java's designers rejected un-castupability-of-objects because of performance reasons
(you cast a reference up, not the object.)
"Java hasn't got programmer-controllable pointers!"
-> this is so developers don't crash the programs they are writing.
-> this is so the language is 100 times easier to read, and quicker to fix.
-> Use pointers and C where they are absolutely needed; libraries, drivers, databases..
"Java is slow!"
- Java used to be slow. Java itself has gotten quicker, but what people forget is that when java came out you were lucky to be running it on 486 - woohoo! Commodity hardware is now both cheaper and orders of magniture faster than what was around in 1993. The maintenance advantages of java now far, far, outweigh any performance gain of faster languages that are much more expensive to maintain, like C and C++.
"Why was java's syntax based on C? why not rewrite it?"
--> C was a minimalistic language with a very clear syntax (except for pointers, which unfortunately make up 95% of code of real world C systems.) Why not keep what is good?
In summary, if there were an olympic games of programming languages, with say 500 events, true - java would only take gold in a small number of them - unlike maybe C or C++ which would get multiple golds. BUT! java would take silver or bronze or come in the top 5 in MOST OTHER EVENTS, whereas things like C or Lisp or Ada would come last or near the back in the events they are not winning gold in. Java is the ultimate compromise language, and the more you get to know java, the more you come to appreciate WHY it's designers left out the 100 features that academics moan about it not having. ( I'm still bitter and twisted that they allowed Generics in it, but there you go.) It is for this reason (among others like the ability to run in a browser in the early nineties) that has led to its ubiquity . No other language can tick as many boxes as java, taking the holistic view: programming features, APIs available, 3rd party libraries available, cost, performance, availability of cheapish programming labour due to preferential teaching in universities, well documented, secure, internet-ready, multithreaded.. built-in exception handling.. cool logo.. and all designed by a cool-looking dude with a beard. It just can't be beaten, and will not be going away for decades - accept it!
thankyou, Java !!!
Surely the single most valid reason for avoiding Java now would be Larry Ellison ?