44 comments

[ 3.1 ms ] story [ 73.8 ms ] thread
Good points. But why the quotes around the HN post title?
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).
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.

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.
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.

> 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.

Probably true of Scala/Groovy, but definitely not for JRuby or Clojure. Only ~32% of Clojure developers even know Java, according to the recent community survey.

I'd bet that while they don't self-identify as "knowing Java," a large proportion of the other 68% would be happy trawling javadocs and getting javac (or Eclipse) to do the right thing. I would argue that's "knowing Java" well enough to get a job writing it, if they wished.
Well... I can read Java decently and browse javadocs just fine, but the parent was explicitly talking about writing Java, which I've never done and would probably be pretty bad at. I think this is quite common among Clojure developers.

    writing Java, which I've never done and would probably be pretty bad at
Something tells me that you could still get a job doing it, it just might not be a job you particularly wanted :-)

Seriously, though, clojure devs are a funny group. Clojure isn't anybody's first language at this point, and for the majority it's probably not even their third or fourth language, so they're already selecting for people who not only can, but choose to and enjoy learning new languages which are demonstrably deeper and have more details to learn than Java. Not only that, the language was specifically designed to be easy to learn.

What I've found trick with Java isn't the language, though - it's the ecosystem. Just trying to figure out which way is up in a Tomcat installation, for instance, is an absolute bear.

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.

(comment deleted)
(comment deleted)
Article:

      asked you to create a website that had some dynamic content, but they 
      only had a $10/mo budget for hosting
ME:

      Java hosting is actually cheaper for ME.
Yeah, thanks for missing the point and judging me, you obnoxious schmuck.

Here's a newsflash: not everyone is living in the US or in Western Europe and can afford EC2 hosting as a student.

And here's a free tip, since you have some opinions on doing startups: you don't buy useless crap for a startup that survives on a salary or on a small loan, even if you are a spoiled brat ;)

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.
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.
Good anythings are hard to find. People are always asking if anyone knows a good mechanic, accountant, lawyer, dentist...etc.
And then when they find it, they don't want to pay for it.
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.

> 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.

Ah, you missed my favorite languages. :-)

I hate programming in any 3/4GL language - lot of typing and too hard to reuse.

I always get this sort of reply to my hiring-related comments.

Basically, I don't get to pick what open positions my department is hiring for. I can't micromanage the projects that aren't my own, but I do get to interview people for those projects. So that's what my experience is based on.

Trust me, if I had my own company, I would not be looking for Java or C++ developers.

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.
No, we would do Scala if we hired Scala people.
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 ^_^.

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.)

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.

naturally blew the stack.

You mean the heap, right? The GC isn't going to help you with running out of stack. And the solution is usually to tell java to increase the default max heap limit.

>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.

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".

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

I agree for the most part. I make my college programming projects fun by finding uses for the Reflections API.

Check out 'invoke'. http://download.oracle.com/javase/1.4.2/docs/api/java/lang/r...

That's cool, but the sad part is that this is a common feature with most other languages and not just some added library. Still great that you show what's possible :)

Also: does anybody know why Java core classes don't have examples in the documentation? (compare: http://ruby-doc.org/core/classes/String.html )

the sad part is that this is a common feature with most other languages

yep. I was hoping they would add closures before I graduate but it doesn't look like it.

Um... reflection is a core feature of Java, and has been since Java 1.1
Oh sorry then, I don't use Java a lot these days...

It just seemed weird to me that I had to include it. I'm used to this functionality being available without any additional steps because it is implemented in something like an "Object" class.

(Lots of Ruby these days)

A coworker and I were just talking about this, and we decided that it was probably due to the fact that a lot of documentation in Java and .NET is auto generated based on the code comments, which are highly standardized and strictly enforced. Most languages have tools for generating documentation based on code comments, but in Java and .NET you usually end up with a lot of "Here's the signature of the constructor for this class, and here's a list of methods and members." It's lame, and often pretty useless.
Worse than being verbose, Java is limited. It doesn't have the barely insulated connection to the bare metal of the machine that C/C++ has (allowing you to do damn near anything if you code it well enough) because Java is designed to be "safe". But on the other hand it doesn't have any of the more sophisticated programming techniques like first class functions (and thus higher order functions, etc.) The result is a language which requires cumbersome patterns (often inexpertly applied) just to get any regular work done. Stuff that in more sophisticated languages could be refactored down to elegant systems.
'...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.

yes, that's what I was trying to express
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.

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.
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.
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.

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....