Tim on Leadership

Musings on Management and Leadership from Tim Parker

There are No Great Java Developers

Let me rephrase just a little.  If you learn only Java you will never be a Great Developer.  Let's face it, Java was designed to be a simple language from the start: a language anyone with half a brain could learn and code in. It's not that Java doesn't have its place, because of course it does.  But you would not design a complex operating system in Java.  or even do bit twiddling in Java.  Why not?  The language wasn't designed for it.

This isn't a knock directly on Java.  James Gosling designed the language for a specific purpose and it worked fine for what it did.  The mistake was trying to use Java as an all-purpose language.  It just was not designed for it.  Sure, it's got OO and a bunch of other neat stuff, but it isn't a complex high-level language like C or C++.

Back in the days when I was at school (pre Java!) we learned a complex language: C.  It allowed bit twiddling.  It allowed pointers.  It allows recursion.  It allowed functional programming.  All stuff that was quite complex.  And it lead to those who couldn't wrap their minds around those subjects (they failed Computer Science because of it), those who just got it (they became mediocre or good programmers, depending on their level of understanding) and those who really got it and could do anything with the language (the Great developers).  All the stuff that made C complex, made it hard to master, and made it difficult to write Great Code with, all made C great.  Wanna write an operating system like Linux?  You use C.  Wanna do bit-based operations?  Use C.  Want to write really clever functional code (like the stuff that powers Google), and you use C.  Not Java.

That's why the Great Developers are those who learned C or a similar high-level language.  Those who learned Java as their main language never really get a chance to be Great.  They don't know how to handle pointer-based hash tables.  They don't know the value of pointers, and they don't know how to tell a good Java developer from a Great Java Developer because, quite simply, anyone can write solid Java code. 

Which, curiously enough, is why most universities now use Java as their basic teaching languages.  Universities in Canada that started with C as their base language experienced a 70% failure rate in the first year as those students who thought real programming was as simple as writing BASIC code suddenly came face-to-face with data structures, normalized databases, and (gasp!) pointers.  Pointers may not be used in 99% of the code you write, but you have to know how to use them to be a Great Developer.  To correct the failure rate and supply a constant stream of Computer Science graduates to industry, Java became the language of teaching at practically every University in the country.  And the Great Developers disappeared.  Until they learned a real language.