I think I figured out why good Java developers are so hard to find
goodgroovy.wordpress.com
goodgroovy.wordpress.com
(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.
Ah, you missed my favorite languages. :-)
I hate programming in any 3/4GL language - lot of typing and too hard to reuse.
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.
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 ^_^.
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 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...
Also: does anybody know why Java core classes don't have examples in the documentation? (compare: http://ruby-doc.org/core/classes/String.html )
yep. I was hoping they would add closures before I graduate but it doesn't look like it.
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)
This is the case for almost EVERY great developer: They're language agnostic. The language is never important.
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.
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.
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....
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.)
Of course, in C(++) you can design much more memory-efficient data structures through pointer arithmetic. But that's independent of GC.
> 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.
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.
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.
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.
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.
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.
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.
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.