
I think I figured out why good Java developers are so hard to find - ebenezer
http://goodgroovy.wordpress.com/2010/10/14/i-think-i-figured-out-why-good-java-developers-are-so-hard-to-find/
======
jrockway
The problem is that only 10% (or something) of programmers are any good. Not
10% in each language community, but 10% overall. When you put out an open
position for Java, you are attracting everyone that knows Java -- Java is big
for "programming as a career" because there are lots of certifications, and
it's mandatory for all college students. So that 10% isn't going to apply to
Java, it's going to be 99% people looking to advance their career (read:
collect money for clicking buttons in Eclipse), and 1% of people that are
actually good at programming.

(Honestly, my resume claims I know Java. I do. But I would not be a good fit
for your position because I hate Java with a passion. Even though I might
interview well and be interested in collecting your huge salary, that just
means I am advancing my career, not being a good programmer. And that's what
you don't want, but what the word "Java" encourages.)

If you pick a less popular language keyword to search on, though, you might
get better results. We added the keyword "Scala" and got a lot better resumes.
Nobody learns Scala because they think it's "good for their career". They
learn it because they like programming. That's who you want to hire.
(Incidentally, this does make it good for your career.)

I've found that this works in a variety of language communities; C++ is
popular in industry, so ask for C instead. Java is popular, so ask for Scala
instead. OO Perl is popular, so ask for Moose instead.

This is not as good as knowing who you want to hire and just asking, but in a
field with 1000s of landmines, you want to minimize your chance of blowing
your leg off. Yeah, you are going to eliminate a lot of great Java programmers
when you search only for Scala. But the people that you do interview are a lot
more likely to be good at programming.

~~~
hga
Don't you get bait and switch problems when you tell your interviewee or new
hire that they aren't going actually be doing any Scala? I myself would ...
not be pleased.

~~~
jrockway
No, we would do Scala if we hired Scala people.

~~~
hga
Well, to the extent you're appearing to give ebenezer or others in this
situation help (it appears I misread your intent) then it's not useful as
advice.

It is perhaps not interesting to say that if you offer people more interesting
jobs at a more interesting place, you'll get more interesting (i.e. useful)
people ... interested in you ^_^.

------
rb2k_
I think it's because Java is just plain and simple a boring language.

Most people would agree that Java is a tad verbose and over-patternized. It
doesn't do any "fancy" stuff like functional programming, it doesn't have a
lot of "sexy" libraries and the community arround it is pretty much stuck in a
fixed big-enterprise mindset ("I don't care that it's easier to do it with
tool x or y! We can't maintain anything else but Z!") and a lot of Java
developers have only experiences with Java which limits the way they try to
solve problems.

The worst example of this was when I had to witness a friend of mine having to
code a prototype for a handheld device in Apache Struts because "that's what
we know and we can enhance if you're not there". He had to basically implement
most UI interactions in Javascript so it was even close to usable.

If you would ask any Ruby/Python/Scala/Erlang/... developer about other
languages or new technologies (noSQL databases, node.js, ...), chances are
they will at least know something about it because they love their craft. Most
"only Java" people I've met so far simply aren't particularly interested in
anything that isn't directly related to their work.

p.s. this doesn't mean that there aren't great developers that use Java, I've
met some amazing people that are fluent in Java, but for them it was just
"another language" that they used, not "the language".

~~~
Dylanlacey
'...but for them it was just "another language" that they used, not "the
language"'

This is the case for almost EVERY great developer: They're language agnostic.
The language is never important.

~~~
rb2k_
yes, that's what I was trying to express

------
discreteevent
Why is he limiting his scope to people with only three years experience? There
can only be one reason.- cost. This kind of mistitled post has been around for
years. "I can't get good developers" should read "I can't get good cheap
developers". To put it politely, its misinformation and I am surprised at the
ranking it got here on HN.

------
scrame
If you are hiring a developer who has been working professionally for 3 years
and is applying for a junior position you should not be surprised that they
don't know sql.

------
bad_user
I'm not buying it.

About hosting: I'm in the process of creating a startup. I've chosen Java
precisely because I do not have enough money and can only afford a single EC2
or Linode instance. I cannot do too much load-balancing with my current
resources.

I first learned Java after seeing how PHP was limited to web development, and
not doing a very good job either, at the time having to write my own framework
of reusable stuff because everything sucked.

About video games: that's what got me into programming. I used to do all kinds
of shit in Turbo Pascal and then C++ (with the Allegro framework). TPascal was
very limited, compiling for the 286-standard mode, and I had to deal with
"conventional" memory, extended memory and the 64k segment limitation when
allocating arrays. I also had this whole library for graphics rendering,
written with inline assembly, by me.

It is no wonder kids today don't appreciate the current state of the art,
since they take those tools for granted.

Today if I were to go back to video games as a hobby, I would choose Java.
That's because I want performance without going too low-level. Pygame is nice,
but just as I felt about PHP, I don't want to be limited by what the Python
interpreter can do.

The reason you won't find good Java developers, is the same reason you won't
find good developers in general.

And WTF are you thinking requesting Java experience? This I'm only expecting
from incompetent HR people. In 3 months since you got that job opening you
could have retrained someone and be done with it.

------
julsonl
Java has a huge open-source ecosystem that you could search for contributors
with junior level skills. And some projects are interesting enough to warrant
hobbyists to play around with them just for the heck of it. For example, I'm
looking to start studying computer graphics and I'm looking into playing
around with JOGL instead of getting my hands around C++ (not that C++ sucks,
its just that I wanted to ease myself into it). I'm getting pulled into non-
Java JVM languages though, so Java doesn't look all too promising for me as a
hobby language. At the very least, you could look into somebody having Clojure
or Scala skills, they'll probably have knowledge of the JVM and Java would be
just easy for them to pick up.

~~~
weaksauce
openGL is not that hard and has bindings in most popular languages. I don't
know why you would limit yourself to java to learn OpenGL when there are nicer
languages to use. But the languages do the same thing so if you actually ship
something you are ahead of most people out there.

------
heyrhett
Good anythings are hard to find. People are always asking if anyone knows a
good mechanic, accountant, lawyer, dentist...etc.

~~~
jrockway
And then when they find it, they don't want to pay for it.

------
DjDarkman
Okay I may get bashed for this but: Java feels that it is intended to restrict
the programmer, because apparently the programmer is stupid and we need to
restrict him so that the programmer will not make mistakes(think mandatory
exception handling as an example). Java forces it's class-y style on you.

Creative people don't enjoy being locked down, they wan't freedom and
expressing power like what they can get with JavaScript and jQuery and they
don't want to be saved by Java.

~~~
hga
Well, worse, it's explicitly designed to implement programs you've already
designed in full (there's a Gosling quote to this effect).

It might be good for that niche, but as you note it's rather restrictive in
its quest for safety (although GC is fine by me) and another thing that falls
out of this is that it's not so good for things that need to change. It was
designed for things like set-top boxes, appliances, etc., not what we're using
it for today....

------
lukeschlather
I had the idea to build a photo mosaic program rolling around in my head for a
while, and was looking at a handful of languages to use for it, as a fairly
recent college grad. I did look at Java, since there's a lot going for it on
an abstract level. However, I looked at step one (Read in a bunch of images
and scale them down so they fit in memory) and naturally blew the stack. So I
was left with two choices:

1\. Learn how to micromanage Java's garbage collector so it actually freed
images I'm done with...

2\. Use a language that manages memory directly:
<http://github.com/lukeschlather/ImageWeave>

For less ambitious projects, I use PHP (if off-the-shelf solutions exist) and
Python (if I need to build it.)

~~~
thomas11
There is no need, nor even a way, to "micromanage Java's garbage collector".
Once the heap size approaches the limit, GC runs and it will free what can be
freed. So as long as you design your data structures in a way so that they
don't hold on to objects you don't need anymore, you should be fine.

Of course, in C(++) you can design much more memory-efficient data structures
through pointer arithmetic. But that's independent of GC.

~~~
vlisivka
Micromanagement of GC is possible using Soft/Weak/Phantom references, see
[http://weblogs.java.net/blog/2006/05/04/understanding-
weak-r...](http://weblogs.java.net/blog/2006/05/04/understanding-weak-
references) .

> Of course, in C(++) you can design much more memory-efficient data
> structures through pointer arithmetic.

Yeah, you can reinvent the wheel in C++, C or even in ASM.

------
bartl
>I’ve been looking for a junior java developer with about 3 years of
experience who knows java and sql. That’s it.

Maybe that is the problem? Good programmers will never stick to just one tool.
But if they know more than just Java, they'll expect to be paid more.

------
davidnelson
funny, I was bummed python came before java on app engine. and what about gwt?
that's java! who would want to write their javascript in javascript anyway ;-)

and yes, I agree that the mindset of learning new things in your free time
(and bonus for open sourcing work) is the way for a software engineer to stay
gainfully employed. worked for me.

------
shib71
Good points. But why the quotes around the HN post title?

~~~
ebenezer
Edited. Sorry. I didn't want to give the impression that _I_ thought I had
figured out why good Java developers are so hard to find (I didn't write the
post).

------
etherael
Interesting coming from a blog titled I love groovy.

I take from that the guy writing it already realises the value of alternative
JVM languages and is even a big fan of one, so why hold fast to pure Java? If
you want to find good developers on the platform, maybe broaden your scope
beyond the aspect of it you're having trouble with. I know plenty of people
that use JVM languages and very few of them that wouldn't avoid using pure
java if at all possible simultaneously.

~~~
pvg
This doesn't help as much as you might expect. To be a decent JVM-hosted
language developer, you still need to be a reasonably handy Java developer,
even if you aren't writing pure Java. You need to know a fair a bit about the
basics of the JVM, the core Java class libraries, the Java ecosystem in
general. So, a junior Java developer, which is what the author is looking for
in the first place.

~~~
etherael
Perhaps I explained my position poorly.

As an example, I could qualify for this role due to my experience with Groovy
and thus Java by extension, but I wouldn't be interested in it because I
wouldn't be satisfied in any position where I was restricted to pure Java.

