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 …
You will get it wrong, and have to take up minicab driving or, if all else fails...
...become a glorified recruitment consultant.
"since you can learn Java on a $200 sub-notebook there isn’t much in the way"
This is about as relevant as affirming that you can lean Quantum Field Theory using a USD 100 telephone sized textbook.
Yes you can.
Just need some time.
And even after that, you may still be lousy.
Wait up, I gotta make the office tour, see what the guys have coded up NOW... FFS!!
Written by a City headhunter and it shows. Not all firms that employ developers have such an obsession with real-time programming and making sure every nanosecond of processing time is 100% utilised.
Surely the single most valid reason for avoiding Java now would be Larry Ellison ?
, <-- A comma. Aren't they nice.
"The first draft of this piece ended on the “No.” above"
And they didn't proof the second one?
Good, honest article, but the English is a little painful in places.
? ← A question mark, aren't they nice?
Before criticising others' use of grammar, it'd be wise to make sure you're using punctuation correctly yourself. :-)
i love your articles
high frequency trading experience
Did he mean low latency trading experience instead?
The author doesn't get it...
Its not long lasting partly due to the fact that everyone can learn it ?
I think the author has a very narrow minded opinion on the matter. If this situation were so dire for the market then why did all major players in the field started opening up their development environment and made it available for free? Both the environment as well as all the information you might need ?
Funny how he talks about PowerBuilder; I lived that era. And it was in that era when you'd need to pay quite a few bucks if you wanted to pick up on, say, a C or C++ compiler from Sun. Fortunately for us we had gcc which would also run excellently on Solaris, so no need for heavy investments. But still; that was the situation back then.
A few major exceptions, as I mentioned earlier GCC but also Java was pretty much opened up. You could grab the JDK, look into (and download) the JDK documentation for SE, EE and even several tutorials if you wanted too. All courtesy of Sun Microsystems.
Wait... Could it be possible that by opening up the language in the way they did it became more popular? Naaah....
But isn't it surprising that in the mean time major other companies, Microsoft being my example, have also stepped up onto this "opening up" bandwagon? I'm interested in C# as well as VB but don't feel like coughing up big bucks for Visual Studio. SO I got the Express versions, and can tell from personal experience that you can do a lot with those! I even build a few (very simple!) extensions for PowerShell. All free of charge!
Quite frankly I don't think companies like MS, Oracle and others would open up their development environments if it would become a liable risk of the language becoming overrun and / or obsoleted a lot sooner than if they kept it locked away.
If the author lived the PB era as he claims and has witnessed all this himself as well then I can't understand how he came up with this particular opinion.
I think his point wasn't that Java will go away
just that the demand for Java programmers has been growing slower than the rate that they're being churned out. IIRC, 10 years ago Java was a trendy programming language that no-one really took seriously. It was slow and needed a VM, it wasn't "real" programming because it didn't have the tough stuff like C, etc etc.
In the long run, this will push people away from Java (as there isn't a career in it) so, eventually, Java's popularity will be it's downfall.
A Guy Who Knows VB
Probably will still have good demand.
By the time these guys find out they went to a saturated market, or one that is slowly dying (VB), the Java devs have taken all the good jobs.
@VB knowing AC :-)
Also a very good point indeed.
I'll be honest; I read the article several times yet only after reading your comment did I notice this option as well.
Its a good theory but with a flaw. People might be "pushed away" from Java due to the market being full, but that doesn't automatically make the demands on the market go away. So then the demand will remain the same whereas the availability decreases. Basic economic theories tell us that in those situations the prices will go back up again.
SO then I wonder... Would it be the language dying or the market simply correcting itself ?
I'm skeptical here. I mean; people have predicted the end of Java from 2000 and up now, and here we are; 2011 and its still going strong (note: being a Java fan makes me biased. But knowing Oracle and the way they handle business I doubt Java7 would have seen the light if they weren't convinced that there's still a market for it).
You will need VS...
My (admittedly few years ago) experience with VB.NET was that you can't do much more than 'Hello world' with the basic tools. I actually had replies on forums to requests for help saying 'No VS - ouch, can't help you buddy'.
I would have preferred to use the basic tools to keep the code clean. I think it was called ASP.NET Web Matrix.
Sad bit was that the company I worked for paid for VS which I installed on the dev server - and that broke .NET on that server to the extent it didn't work at all. So I then re-installed . .NET 1.1.. same machine .... installed .NET 2.0 .. rewiped machine then installed ...couldn't move app....zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Only Failed Programmers Gamble
If you are any good you can be productive with a new language within a week, and count as an expert within 3 months. So why choose 1 new language and hope someone wants you, when you could learn all the currently popular, syntacticaly inbred languages, with little effort.
The only thing to fear is that someone creates a language someone with an mba might be able to fathom, then the world is in serious trouble and i'm out of a job.
No risk of that, mate
MBA's can't even fathom English, so something that tries to abstract a problem is well beyond their means.
That's why they made LabView, isn't it? So that you can "code" without learning how to "code"
Or, my alternative theory is that a psychotic artistic son of a plumber got his hands on an early Macintosh computer.
Try telling that to a recruitment consultant...
Try explaining to a recruitment consultant that you have spent n years coding in one language (just not the one they have on the job spec in front of them) and that the syntax of one language isn't really that different to another and that it would only take a few weeks to switch from one to the other and maybe 3 months to learn enough of a framework to be fully productive. They will tell you that they need someone with n years experience in language x.
Personally I blame the recruitment consultants for the perceived lack of skills in IT in general as they don't seem to understand the inherent flexibility that these skills imply.
Again a superb article
Dominic, I have to hand it to you, yet again you have put into an article the things I have been saying for a long time but nobody else seems to "get".
The important thing that is lost on most recent graduates is that the language doesn't matter - you can write both brilliant and appalling code in any language. A good programmer will write good code in whatever language is thrown at them with relatively minimal learning curve steepness. What makes a good programmer is thinking about the problem in the right way, not the details of the language libraries and APIs.
You also hit a nail squarely on the head when you said that it is deep understanding of what goes underneath that makes a good programmer. It is the lack of that deep understanding that has lead to situations where supposedly knowledgeable developers are perplexed by the very concept of writing code for an embedded system with 64KB of RAM because all they know is Java (I have personally seen this happen).
And that's before we even get to the epic fallacies that everybody seems to have bought into for some inexplicable reason, such as:
- "Java is as fast as C++"
(only ever corroborated by some atrociousky badly written code)
- "doubles are as fast as floats"
(without ever actually stoping to consider that SIMD (SSE, NEON, etc.) can handle 4 floats but only 2 doubles per operation, and that's before considering double the memory I/O that is required)
- "The compiler can optimize your code better than you"
(something nobody has actually managed to demonstrate in a non-trivial case)
What concerns me is that I was "taught" some of these fallacies in my Computer Science degree 14 years ago - thankfully I have been programming since I was 6 and knew well enough not to listed in most such cases. But if the extent of misteaching was such back then, it terrifies me to think what it is like today. It is no wonder that we are achieving no more today with 3.3GHz processors than we did 20 years ago on 33MHz processors.
My Amstrad Alt-836SX (which I believe is 16MHz) runs Word just as well as my regular multicore monster. Okay it's Word 6 rather than Word 2007, but barely anyone uses the features that were added since 6...
It boots (into Windows 3.11) faster, too.
On a related note, we had a recent comp-sci grad come in for a job interview recently. He mentioned that he was used to low system specs, having been programming since his first bedroom computer (about 850MHz... made me feel old!), so we walked him about to show him some of the things he'd be coding for. Wintel here, Linuxxy stuff there... and 8 bit microcontrollers running at a few hundred kHz (rated to work at extreme depths). He didn't believe you could run a program with just 68 bytes of RAM- "what, like the C64?" "no, that had a thousand times more memory." "...?"
'- "The compiler can optimize your code better than you"
(something nobody has actually managed to demonstrate in a non-trivial case)'
Ah yes. The FORTRAN argument. Back in the day, it was always said that a "compiler" (which was a largely theoretical concept at the time) could never generate instruction level code that was as efficient as hand-optimised assembler. This was hugely important back when every byte of memory and every CPU cycle was precious.
What was proved was exactly that. The clever bit was that the FORTRAN version of the complex mathematical logic chosen for the test was developed in a couple of days rather than weeks, was only marginally slower and......gave the right answer(!) For the first time it was shown that actually the hardware cost of running the end results was not necessarily the whole story.
So the actual answer here is no, the compiler cannot optimize your code better than you, but it can certainly do it far more quickly than you can and the improvements you can get may well not be worth your time getting them.
Move on a few decades and we do seem to have lost the plot though. Any evidence of god-awful performance is inevitably greeted with "chuck hardware at it".......
Java is not yet as fast as C++. But in theory, Java can be faster than C++ because of adaptive optimization. In the future it will occur.
Also, large stock exchanges with extreme throughput and low latency are written in Java. For instance NASDAQ's system. Thus, if you know what you are doing, you can get among the worlds fastest systems developed entirely in Java, rivaling other systems in C++
You clearly have a fundamentally flawed understanding of how compilers work if you think Java can match, let alone beat C++ in performance in a normal JVM paradigm, especially due to a buzz-word compliant marketing ploy of "adaptive optimization". With GCJ you may be able to mostly match the performance of G++, but there is no scope for beating it. And with a JVM in the way, you are going to be at a significant disadvantage because of the additional abstraction layer that is in the way.
Your mention of stock exchange systems is also flawed because you are comparing a large, complex system with an uneducated guess, and thus you cannot possibly be using it to corroborate your statement.
How many low latency trading systems (as opposed to the exchange systems) are written in Java? You know, the ones for which hedge funds get factory pre-overclocked servers? None, perchance?
Take a look at Haskell
A truly beautiful and pure language that has little CV fire power, but will open your eyes to other languages and FP.
re: Take a look at Haskell
> will open your eyes to other languages and FP.
anything not to look at Miranda....
Knew some PowerBuilder refugees that left the escape bit too late and had to jump to PocketBuilder, a fate apparently worse than death! Mind you, didn't SAP release a major update to PowerBuilder just last year, complete with .Net nastiness?
C++ on a cheap netbook
I would imagine the system requirements for learning C++ are similar or lower than Java. All you need is a cheap netbook, gcc and emacs. As opposed to a cheap netbook, javac and emacs.
Even many, many aeons ago Borland (when they were still Borland) used to provide a free command line compiler for C++
I remember dicking about with it a bit using a basic text editor (possibly even notepad), an old "Hands on C++" textbook probably from the early 80s looking at the graphics on the cover, and writing some tiny little automation programs that ran from the command line; nothing impressive or really worthwhile I was just tinkering for the sake of tinkering :)
The biggest bar to entry was simply getting C++ to do anything useful with the Windows GUI (MFCs *shudders*) - and the same thing can be said of Java (though the Netbeans platform helps).
This was a fairly depressing article to read.
Not sure if there was that much value in it either.
A friend of mine has recently gotten into IT recruitment, he told me that it was down to him being pretty poor at development.
I guess this says it all...
..."as a C++ developer turned City headhunter".
Those that can't do, recruit.
The full version
Those that can, do,
Those that can't, administrate,
Those that can't administrate, teach
Those that can't teach, recruit.
"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."
Frankly, the author sounds like he needs a course in proof reading (I'd love to see if his job ads are as illiterate as his writing for El Reg), and a change of medication from what I suspect is currently the powdery Bolivian marching kind.
And little wonder the author is a recruitment consultant and not a programmer. If you want to get the better paid programming jobs that aren't in niche industries, then you need to know how to program in the large. While knowing about the hardware is useful, it wont help you design large scale systems as much as knowing and understanding frameworks and how to exploit their features. That goes for almost all programming outside the relatively specialised areas such as embedded work.
Doesn't matter if the language is C++, Java or something functional like Scala - the approaches to building large scale systems are similar, taking in areas such as layered caching, event notification and so forth. Any decent programmer should be able to pick up one of the current crop of popular languages quickly - C++ possibly excepted.
Proof reading is for editors. Unfortunately, button pressed a little early on this article - punctuation cleaned up.
Certainly there is zero use for
-compiler/parser construction approaches
and all that is a waste of time if you can learn a language with a 1 pound coffe cup and a 200 pound netbook and a seven inch screen.
Thinking deeply, why bother with computers ? Formalized Handwaving (aka banking) is a better investment until the day they nationalize the whole mad show. Which is not far in the future, apparently.
poorly written, but I thought quite good..
(not saying I am brilliant at English language structure (this for example) but I think I have a right to point out that this report needs smoothing over!)
anyway, continuing from the header.
... and I have been thinking of the idea of the death of Java for a while. Not since Oracle took over but only recently with all the companies bitching patents at each other, with Java being a core part of many physical (none-java) objects and software it's likely that because of the patent war we could all loose out (due to cost of using it or getting sued - THANKS ORACLE!)
So is C# the answer? I hope not, I hate M$s way of thinking a lot of the time purely because it always contradicts itself and I have OCD of consistency in code.
But as one poster put - 3 days and you can learn the syntax of a new language, 3 months and you should be confident, especially if your in industry as your 'life' depends on it.
So while there is demand, stick in that field until it starts to dwindle. While there is demand, you may as well keep switching jobs every couple of years until things start to dry up. You should of made many pay rises to keep you happy, then if there are less/no more jobs in that field then stick with what you have for as long as you can until the project dies, then just update your CV with the new language you have learnt in that less-intense time of the project and move on....
At least that's the way I have planned it.
IMO, specialist jobs are good/great money but are in poor/less locations so I would not advise to jump to that without serious consideration. You could end up at a dead end where for your next job they ask what have you been doing, then you state X, which they have never heard of and chuck your CV in the bin. So nice idea, but I would be a bit cautious... but if it's a custom open source JVM then I think your probably in an even better place... maybe,... how long is my string method?
It makes better sense this way
I mis-read the by-line as "Dominic Connor is a quaint headhunter in the City".
The article makes a whole lot more sense this way.
Economics and Pay is mostly common sense and obvious
Especially to anyone who THINKS much lol.
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 !!!
Guido van Rossum has sometimes had a beard; does that mean that Python will be partially successful?
If there wasn't that warm, fuzzy felling of
your teeth being pulled, while coding java.
Just for starters:
-Java 5 being incompatible with Java <ofTheDay>.
-non-trivial Java programs taking eons to just boot, while informing you that they just loaded HyperDataSuperDuperFramework
-tons of stacktraces instead of proper error messages
-stupid incompatiblities between Eclipse and the 225 plugins you need to code the accounting system of the day
No, Java is a regression if compared to Ada, ObjectPascal and in some ways even to C++.
RE: colin the aardvark
Well, that was a nice broadcast from teh "We Luv Java Instead of Women" Club. Now for something different....
ARE YOU CRAZY!?!?!?
"....Java's development policy at Sun was 'conservative.' ..." Really? For years, every time I started up a browser, why then did I get yet another 100MB Java update to add to the already bloated installation, and that was the machines without SDKs on? If that was "conservative" then I'd hate to see your idea of "progressive".
".....Java used to be slow...." Java was slow back on 486s, when C and C++ flew on the same systems. Java is still slow today, even on good systems. As soon as I see an app is written in Java I expect it to be portable, but I also expect it to be rediculously slow. Good C code will trounce Java, and C++ will make it look positively sonambulant. It is telling that M$'s .NET offering is massively faster on Windows, to the point where I really wish the Mono team would get a move on and give us full .NET on Android, beacuse then Java is as good as dead.
it's not about Java it's about blah
The problem is most definitely the headhunter angle, go on blame everyone else for not being able to get what you want Dominic, let El Reg give it the Oxygen and hey presto, add "journo" to your CV...that's what you really wanted wasn't it?
Possibly the worst Register article ever
"The only difference between good and bad courses is whether you do _real programming_ in C++, Haskell, F# etc as well"
I can see why you might take offense
but I read the "as well" as meaning that it is OK to learn Java, and "real programming" also can be done in Java.
On the topic of teaching programming: Some years ago we decided to use C in the initial programming course (Imperative programming). This allowed us to ditch the object-oriented overhead of Java which was used before. We go on to teach them algorithms and data structures in C, complete with structs containing function pointers. The latter paves the way for understanding what objects actually do for you. They also learn to clean up any mess they leave behind. Object oriented programming is then done in Java. Later courses include functional programming (I think in Haskel), and parallel programming and concurrency.
This is just the main programming track of the curriculum, other tracks focus on software engineering and architecture, database theory, operating systems, compilers, etc. Many of these skills might never be used in practice, but they do give better insights, and mean you have learned to learn difficult topics.
The best reason to learn a programming language is to learn new ways of thinking about problems. It does not help to learn 15 subtly different OO languages at university, it is important you learn different programming approaches. Once you have learned a style well, it is trivial to learn another. I learned programming in Pascal, the switch to C was quite trivial; I started OO programming in C++, learning Java was quite simple.
Thanks for this well-written defense of a proper computer science education. Knowing how things basically work in modern computer/software systems is a skill which will be useful for the student until he/she reaches retirement age. Even if one does not do operating system design, it is very helpful to understand the Principle Of Operation when something needs to be fixed or is too slow.
The same can be said about parsers/compilers, networking, relational databases, graphics programming and object-oriented analysis.
One an even more general level, what makes the West so rich ? It clearly is a proper education system and many well-trained professionals, from the firefigther to the carpenter. Dumbing-down computer science education will make our economies poorer.
One line summary: You need to learn new skills. I'd like to read this guy's opinion on the religion of the pope and the activities of bears in woods.
My first programs were written in raw 8080 machine instructions, in hexadecimal. Then I learned assembler. Then I quit. I could see the way this was going.
I keep reading articles about the lack of skilled Java programmers both in the UK and the USA and I've never understood it. As Dominic says, there are thousands of highly qualified Indians out there.
The only problem is that all their CVs look the same so it's really hard separating the wheat from the chaff.
Last time we interviewed, there was one guy earning £40k up north somewhere who couldn't answer our basic threading question or the simple "given x denominations, what's the smallest number of coins required to make y" programming test.
PS: I only really noticed Dominic after his "rogue trader" article but quite a few of his older posts are worth a read.