I just had to take another one of those stupid “BrainBench” programming tests for a job I’m applying for. (I’m not planning on leaving the place I’m working now, but as a contractor you always have to be ready to jump ship.) These tests are a complete and utter crock of shit. They don’t test if you can program, all they test is if you’ve memorized every obscure and complicated part of the literally millions of lines of Java API documentation out there. A typical question will show you four snippets of code, and ask you which is the correct one. And they’re not localized down into one part of the API that might be relevant to a particular job, either.
One of the questions was about how to set up a cookie handler on a persistent URLConnection. Another was on how to set the line width in a Graphics2D line. And another was on setting up a pipe between a sender and receiver. You know, if I’d needed to do any of those things in my 12+ years of programming in Java, I might have bothered to memorize that page of the API documentation. But I haven’t, so I haven’t. Instead, I’ve wasted my time learning useless things like how to write code so that when you or somebody else comes to add some functionality a few years from now, they can figure out why you did it the way you did it, and can add their stuff without breaking what you’ve got there. And how to debug an obscure exception that only happens after the program has been running for 45 days. And how to structure a program so that it’s fast, reliable, does what it’s supposed to do and doesn’t crash. You know, frivolous stuff like that.
Evidently I’m not alone in my hatred and disgust for these stupid tests. According to The Register, Ken Thompson, co-inventor of Unix and of the C programming language, isn’t allowed to check code in at Google because he refuses to take their stupid C language test. How stupid do you have to be to insult the man who invented the language by asking him to take some test that was probably written by some 24 year old “language lawyer” straight out of school who has memorized every obscure part of the language without being able to use any of it well?
So I’m guessing that I probably did horribly on that test, and that I’m probably not going to get an interview there, and that’s perfectly fine with me because I don’t want to work with people who were chosen because they’re good at memorizing language documents. They probably write horrible code, but think they’re great because they don’t have to stop and think and look things up.
Getting one of the Java certifications is a good preparation for the those tests. And a certification is sometimes good enough to get you past the “knows Java” resume screen.
I will defend those tests a little bit. A good comprehensive grounding in a programming language is a boon; at least it helps you know where to look things up. I’ve worked with a lot of good Java programmers that reinvented a whole lot of wheels, having a good general knowledge of the APIs would have saved them a whole lot of work.
Unfortunately, the Java certifications for 1.5 and 1.6 have gotten away from the bits and bytes level knowledge of Java. It was one of the areas that I have used the most and is the hardest to look up.
Question is: Do you think you __like__ working at a place asking for such a test? Then take the test, else don’t.
I’m not comparing myself to Ken Thompson, but for me “learning to program” means passing an exam at a university which did involve fortran – and that was end of the nineties, when java was still considered new and unproven (and linux still sometimes required you to compile your own kernel to get hardware to work). I think there still is no formal proof that java is __correct__ in terms of computer science, but I may be wrong.
But I’m not a contractor, I live in a different part of the world, and I’m younger than PT.