Lately we've had some internal discussions about training and certification. As part of those conversations, we recognized that we are generally certification light, and decided to get direct experience on the exams themselves to use as input to our discussions. To that end, I took (and passed the SCJP) exam last week. Here's my experience.
Some background: I have been programming in Java for over 13 years - since JDK 1.0.2 (warning - time warp). I've used every version of the language, up to and including 1.6. While I don't write code daily anymore, I still spend time coding and consider myself up to date as a programmer. Over these 13 years, I have peaked into the corners of the language from time to time and have read the JLS, books on the VM implementation, and managed to get most (though certainly not all) of the Java Puzzlers. But I never bothered with certification for myself and didn't give much weight to SCJP on a resume.
My prep was pretty minimal. I took two practice exams from Sun one evening to get used to the format and identify trouble areas. I brushed up on the couple areas I fell down on and signed up for an exam the next week. The exam at the test center had some fill-in-the-blank type questions that weren't on the practice tests, but otherwise the material was pretty similar. You learn your exact percentage score and a pass/fail evaluation immediately after clicking the final submit button.
I've got mixed feelings about this exam, and its value as a certification. On the positive side, the exam certainly establishes a credible entry-level bar for Java knowledge. I don't think it'd be possible for a junior developer to pass without having actually used the language for non-toy projects and put in some significant exam prep. I also think the exam will be a bit easier for those with firm CS grounding, rather than coders that learn just enough to solve the immediate problem at hand. (My personal bias is towards those with a CS background, because I think it's easier to learn coding than CS on the job.) This is also a required exam for the other, higher-level Java certifications (which I've yet to take but seem decent.)
The exam topics are a mixed bag to me. Some of the API content is either highly specialized (I hadn't heard of NavigableMap) or the type of stuff most people's IDE (or the online javadoc) gives them. The threading questions were low in level and (in the interest of small code size) often did decidedly odd things to test knowledge about concurrency. Such topics mean that exam-specific study is required and some topics are unlikely to be encountered by developers on a daily or weekly basis.
I have two major objections to the exam. First, there is a ton of what I'll call "are you a compiler?" questions. Many questions are of the form: does the above code (a) not compile do to error at line x, (b) run, but give runtime exception at y, or (c) give output z. Who cares? We have compilers for a reason, and modern IDEs are extremely helpful to the neophyte and seasoned veteran alike. I agree that it's important, for instance, to know that you cannot decrease the visibility of an overridden method in a subclass, but any attempt to do so will cost a developer what, 5 minutes? And finding that error, among other gotchas on question after question is very aggravating. My second objection is that, in order to test specific language features, the example code is full of antipatterns and bad style. Tools like checkstyle and pmd would light up at the code in the exam, pointing out all sorts of problems. As an experienced developer I found it frustrating to have to manually sort that stuff out, and I wouldn't expect a less experienced person to need that knowledge to start coding on any of our teams.
. .
Tuesday, November 17, 2009 | Posted by Todd Parnell at 2:02 PM
Labels
genetics
family health history
standards
agile
cancer
diagnostics
exchange
health IT
personalized medicine
software
23andMe
AGBT
Big-O
DNA Sequencing
DTC
FDA
HIMSS
ISO 21090
LIMS open source framework
NHIN
SCJP
bio-it world
bioinformatics
biorepositories
biospecimen locator
certifications
cleverness
coding
disease
efficiency
electronic health records
employment
genome
government
health insurance
healthIT
integrating data
interviews
java
meetings
ontology
rare disease
rework
science
scrum
training
work
Our Bloggers
-
Andy Evans
aevans@5amsolutions.com -
Will FitzHugh
wfitzhugh@5amsolutions.com -
Brent Gendleman
bgendleman@5amsolutions.com -
J Ireland
jireland@5amsolutions.com -
Dan Kokotov
dkokotov@5amsolutions.com -
Todd Parnell
tparnell@5amsolutions.com -
Leslie Power
lpower@5amsolutions.com


2 comments:
Yours is an interesting take on the SCJP. Missing is any commentary on how one might apply the "SCJP" test to filtering candidates. When looking to toss resources onto the giant scrap heap of souls we've all seen in large IT shops, it can be a perfectly valid way to eliminate people unfamiliar with the technology. However, when searching for a super-star, looking away from the SCJP can be beneficial. I'd much rather hire a creative Python jockey and hand her a Java book if she were a great problem solver.
You can teach an idiot to pass the SCJP exam. It's hard to get the truly exceptional people to even take it.
Sonoran - I didn't touch on using the SCJP as a hiring filter because I don't believe it is applicable to 5AM's current hiring needs. We are not today, nor will be ever be, a scrap heap of souls. We are a a small but growing company looking for high-quality, passionate software engineers. I think your comments about superstars and their lack of credentials is spot on. 5AM's hiring engine is still small enough that we can screen without resorting to purely mechanical means. We do have a coding portion during our interview process, and we use that to identify candidates unfamiliar with the technology.
Post a Comment
Thanks for commenting on our writing. Since our open blog doesn't require that you create an account to blog, we may respond to your note via comment. You're also welcome to contact the writer directly via email (see right side for contact info).