Agile Zone is brought to you in partnership with:

Kirk is a software developer who has filled most roles on the software developer team. He is the author of Java Design: Objects, UML, and Process (Addison-Wesley, 2002) and he contributed to No Fluff Just Stuff 2006 Anthology (Pragmatic Bookshelf, 2006). His most recent book, Java Application Architecture: Modularity Patterns with Examples Using OSGi was published in 2012. Kirk is a DZone Zone Leader and has posted 77 posts at DZone. You can read more from them at their website. View Full User Profile

Certification or Craftsmanship

  • submit to reddit

About 10 years ago I recall studying profusely so that I might pass my Java programmer's certification exam. I purchased a copy of an exam cram book that had sample questions similar to what I might encounter on my certification test. I recall dealing with questions like the following:

  • Can an abstract class be subclassed?
  • What interface does TreeMap implement?
  • What is the output of the following code snippet?
  • Identify the compile errors in the following code snippet.
  • What are the different access qualifiers?

I'm sure many of us are familar with these questions, as well as others of similar ilk. Of course, I'd taken similar exams prior to this for a variety of technologies, but the Java certification exam was the last one I've taken. I'd come to the realization that time spent studying for these exams is largely a waste of time. I was no better at developing software systems in Java after taking the exam than I was before. I simply possessed a bunch of useless knowledge that I could have easily gotten by looking at reference material.

The skill that I needed to develop enterprise applications could only be obtained by developing applications. It could be found no other way. There are no shortcuts. Making mistakes and fixing them. Discovering new ways of doing things that worked better than what I had done before. Knowing what assumptions I could make, and those I could not. The reality is that certifications exist largely to sell training courses, while the marketing that surrounds them leads organizations to believe they are relevant. A while back, the agile alliance issued their public policy denouncing agile certification. They state:

Knowledge is a wonderful thing, but businesses pay for performance. Performance requires skill.

A skill is not as simple to acquire as knowledge: the learner has to
perform the skill badly, recover from mistakes, do it a bit better, and
keep repeating the whole process. Especially for the interrelated and
interpersonal skills required of Agile software development, much of
the learning has to take place on real projects. It is that learning
that a certification should vouch for.

And unfortunately, it is that learning and skill that certifications do not provide nor account for. In fact, this is exactly why the software craftsmanship movement has begun to gain so much traction. Through trial and tribulation, a software craftsman has obtained the practiced skill required to develop great software. Of course, it's easy to dilute the notion of craftsmanship if we are not careful.

Tom DeMarco also published an open letter to Cutter IT Journal expressing his dismay with certification. The debate on certification certainly is not new. But with the Scrum certifications, among the many others that abound today, the debate is still relevant. Where do you stand on certification? Would you rather work with a craftsman or someone with a wall plastered with certifications?

By the way, if you stand on the side favoring certification, and would like to get an agile certification, then maybe you should visit Agile Certification Now to get started.

Published at DZone with permission of its author, Kirk Knoernschild. (source)


anshul agrawal replied on Fri, 2009/03/20 - 11:12am

My view on certification is that its a personal choice. And person should take a certification to broaden his knowledge not mearily for earning another paper. Also while preparing for a certification  you come to know about section which you don't come across while developing an application

Mike P(Okidoky) replied on Fri, 2009/03/20 - 11:48am

I've seen the biggest idiots pass the certification exam. Some people are good at memorizing stuff, and can therefore pass the test with ease. But being creative, invent solid solutions, and write good code? Forget it.

Much better to write a nice little open source app, and show that off. Any employer you want to work for will recognize your quality.

Jeroen Wenting replied on Fri, 2009/03/20 - 12:38pm

Well said Mike, but that's in large part because of the nature of the exam. Make it similar to the SCJD exam and all those idiots fail and fail hard.
But yes, expertise will always trump rote learning when it comes to knowing what to do.

Ray Walker replied on Fri, 2009/03/20 - 4:26pm

I agree with your assessment on certification, however, I think it's not an either/or choice.   Look at something like the medical profession.  Multiple levels of certification where the certification is only a basis for a given field as residency (i.e. apprenticeship) is the higher form of training.  So, I think certification has value but only at a very low level.  

 Ultimately what you want in a programmer is someone with a breadth of knowledge, backed by reputable certification, with hands on trial-and-error experience over an extended period.  What is lacking in most programming environments is good mentorship.

JeffS replied on Fri, 2009/03/20 - 4:37pm

I'd like to do the SCJD project (and take subsequent exam), but the SCJP is a prerequisite.  And I can't stand taking multiple choice, true-false tests.  I have the Sierra/Bates SCJP study guide, bought when I was seriously considering getting Java certified.   But what really annoys me about it are the following:

1.  Half of it is exam tips - getting to know the "tricks" the exam writers put in to make the taker think they're being asked about one subject, but the code example does not compile because of an access violation, or something.  While it's good to get in the practice of finding such subtleties when coding, it's less than useless to get good at exam tips and being aware of the tricks the exam writers put in, in terms of becoming a better developer.  To me, that kind of stuff is a big waste of time.  Back in the my college days, I always hated that kind of stuff.  It was like "do you want me to get good at taking exams, or do you want me to actually learn and apply stuff?".


2.  The book admits that you'll see horribly formated code due to the limitations of the exam software.  WTF!??  There is absolutely no excuse for that!  If you want to test my ability to read badly formatted code, that's one thing.  But to have badly formatted code simply because the software you use to give the exam screws up the formatting, then don't waste my time.

3.  Rote memorization is no way to become a good developer.

4.  Subtleties, rules, libraries, etc, about the language are good to know, but nearly impossible to have entirely memorized.  Plus, the compiler, the JVM, online docs, and manuals, are all there to assist you.

5. Knowledge is useless if not put into practical application.  All cert exams should be oriented heavily towards application of skill, creativity, and knowledge.  That's why I think the SCJD, which has you write an actual application (with preset criteria), and then write an essay to justify your design choices, and then take a brief exam on the concepts, makes total sense.  The web component and business compenent, as well as the architect exams, should all do the same.  Red Hat has it rigth - they have you actually do stuff (set up/configure servers).  Spring has it kind of right - they have you take a week long class (which presumably has you write code, and configure, and deploy).  Those are certs of value.

6.  Sun is about to be acquired by IBM.  SCJP will have less meaning.  Future certs will likely be altered.

Tony Sintes replied on Fri, 2009/03/20 - 10:44pm

I am a little conflicted on this one.

First, for me, certification was done 10 years ago. I own my own company now, blah, blah, blah... If I ever had to interview and someone gave me those kinds of questions I would simply get up and leave and except the fact that I was interviewing for the wrong position.

That said, some kid out of college, low level stuff, the drive to get certification does show some interest in at least trying to get some kind of credentials. In some ways, I do believe that it shows that you care. Heck, even if you don't care it shows that you realize that you have sketchy credentials (even if you are great) and that you're willing to take the tests. Honestly, if you are so great, the 2 hours and the $100 to take the test shouldn't really matter. Just do it, get it done, shut up, and move on.

And, I do believe, when you start out, it does force you to learn some esoteric details at a deeper level than you would left to on your own (for a good majority of people). At least early on, they did push me a little and helped me keep out of trouble at night :) I was also required by my employer so that we could be a certified Java center. (I did refuse the weblogic certification since I never used it in practice)

All in all, my final analysis is that certifications make a poor a predictor of programming ability (they may show effort, but not ability). I knew someone who was a certified Java programmer but still did instanceof checks on all method parameters to make sure that the parameters were really of the type in the method declaration.


Artur Biesiadowski replied on Sat, 2009/03/21 - 3:30am

What suprises me is assumption that taking the certification exam (and preparing for it) will make a you a better developer. Certification, if at all, is there to prove you are a good developer, not make you one. As with every possible test, it is possible to cheat and artificially improve your scores by studing the exam-oriented topics instead of topic of the real domain. Unfortunately, it is not considered 'cheating', but 'preparation', so it is a norm and expected scores are inflated to accomodate this preparation.

Same if for example true for IQ tests. With bit of training you can 'increase' your IQ by 10 point in short time. Does it mean you are smarter (let's forget the exact relation or lack thereof between IQ and real smartness) ? No, it means that you got better at solving certain subset of logical puzzles, which happens to be used for measuring IQ. Of course, this skews the IQ test.

Same can be thought about code metrics (but 'cheating' is easier to detect there). You can probably consider that certain density of comments is better than lack of them. With same assumption as above, you can insert 20% of empty comments in your source code to make it better...

Preparation for exams/certifications is just a way to fill out inflated expectations and will make you better only in solving particular exam (of course, there are exceptions, but I'm speaking about general trend here).

Now, as far as 'usefulness' of the questions is concerned... I look at them from other side - from recruitment side. I'm guilty of asking some of similar questions to people on interviews. One major difference is that they were not able to prepare for that with answer book - so my expectations were for normal, every day work knowledge.

When I'm asking question like 'can abstract class be subclasses', I expect a person not to only tell me the answer, but also mention that probably I wanted to ask if it can be instantiated or maybe I meant final class? Continue with differences between abstract classes and interfaces etc. This is all working knowledge, showing that somebody IS using java with some understanding. If he fails at basic step of not understanding what abstract class is or what subclassing means... no go.

Same goes for access qualifiers. I would probably not go into details of package/default access, but I expect people to know when to use public/private/protected, especially for constuctors ("Why would you make constructor private?" is quite reasonable question I think).

And as far as TreeMap is concerned... In job I was recruiting for, we were breathing collections classes every second. Half of the problems were about using proper data structures to have everything working in reasonable time. My expectation was not to know about Map interface - my exectation was to explain exactly how the hash collisions are represented inside buckets in HashMap and what kind of tree is used inside TreeMap, when it is rebalanced etc, why you can pass number of threads to ConcurrentHashMap etc. This knowledge WAS needed every day in work and if somebody is not aware about distinction between collection interfaces and implementation classes, there is nothing to talk about with him.

To reassume:

- I would not expect exams to make you better programmer, just to check how good you are

- preparing for certification with book is cheating and acceptable just because everybody does it and results are judged assuming you have prepared in this way

- 'stupid' questions on exams are in many cases smart questions, just too easy to memorize by clueless people preparing from book, so they are made more tricky/confusing to increase the difficulty

-  things which are not reasonable when asked in a/b/c/d test form, can be good starter for involved discussion in real interview

Arul Kumaran replied on Sat, 2009/03/21 - 5:14am

You are spot on. Nothing beats hands on experience, but certification canbe handy for beginners with no experience. Just one certification would do for beginners. I would not get obsessed with it. I believe it is important to build good researching, analytical, and problem solving skills and continue to apply it in technology and business.

Craig Dickson replied on Sat, 2009/03/21 - 1:06pm

You can either view certifications as a way to kick start your knowledge on a topic, or to validate your field experience on a topic you are well versed in. Either way, external validation of your skills is always a good reality check for yourself and good resume fodder. You will never miss out on a job because you have a certification, but it might just be enough for your resume to rise to the top of pile of poorly formatted, so similar they blur together resumes a hiring manager has to pick through. As a commenter stated above, if you are genuinely a real world tested developer and are certain of your chops, you have no excuse to not take the exam.

With a team I am working with right now (and I have done this at other companies as well), we have worked through as a group in getting the SCJD and SCWCD certifications. We meet once a week for two hours - 1 hour is given up by the company, the other hour counts as lunchtime (people bring brown bag lunches and eat during the session). The company buys a study guide for everyone and we work through a chapter a week - people are expected to pre read the chapter and we do a quick review and then spend most of the session working through the end of chapter questions and any open questions people have. At the end of the review sessions, everyone sits the exam and if they pass, the company re-imburses them for the cost of the exam. This setup emphasizes the fact that both the company and the developer get something out of the process

You will not find a cheaper alternative for training for your team, especially in these economic times. You will help to standardize the knowledge and skill levels across your team. You will expose your team to areas of the technology that they might not use in their day-to-day work (e.g. the bit manipulation facilities in Java are usually pretty foreign to most JavaEE developers, threads are another good example). In the case JavaSE 5, preparing for the exam served as a way for the team to learn the new features (eg. generics, autoboxing etc) and then apply them to their work. It also promotes a good group dynamic and helps with team cohesion.

This team has now decided to split into two groups, one group is working towards the Java Architect certification and the other group has decided to pursue the Adobe Certified Expert exam for Flex (a new technology that has been introduced at the company recently).


JeffS replied on Mon, 2009/03/23 - 12:04am

I have a question regarding the value of getting a [b]Sun[/b] Certified Java Programmer cert, when it is looking like IBM is mostly likely acquiring Sun. My concerns are - Are the Sun certs going to continue to exist? If so, in what form, and, what will they be called? Sun as a company will no longer exist (maybe something like "IBM, Sun division"), so will the cert be called "IBM Certified Java Programmer". If so, will recruiters / hiring managers know that a SCJP will essentially be an ICJP? Will a cert that has "Sun" in the title still hold weight in the market? These are real concerns. The SCJP is a hard test, and has a lot of annoying testing tricks, and bad code formatting due to limitations in the testing software, etc. But the study process is valuable, and having a cert certainly can't hurt (and might help). But it's an investment in time and effort (and a little money). It's reasonable to expect a return on investment. Will that ROI be removed when IBM acquires Sun?

Jeroen Wenting replied on Tue, 2009/03/24 - 1:53am

Artur, the problem is that certification exams test the wrong things. They should test professional skill (thus, whether you're good at your job) but instead most test the ability of the candidate for rote learning.
That's why SCJP holds no real value, despite the knowledge gained from seriously studying for it having great value. It's just too easy to pass for many by cramming a few lists of terms and definitions in the last few days before the exam. That's also why SCJD has more value, in that it does test actual skill more.

Jeff, what IBM will do is anybody's guess but I'd not be surprised if Java will disappear as a supported standalone product and instead be offered exclusively as a part of the WebSphere platform. That won't immediately kill off OpenJDK but that one won't survive for long without the massive flow of cash and resources that Sun now provides. It will of course also mean the end of Java certification except as a part of a larger WebSphere certification system.
Were I at this time contemplating what path to take in my career, which technologies to focus on for my professional development, I'd not choose Java at all, period. The future is looking much too bleak right now. I'd probably choose .NET instead, or forego a career in software development completely and look seriously (if computers were a must) at something like a job as a BI analyst or BPEL architect.

JeffS replied on Tue, 2009/03/24 - 11:40am

Well, I don't see the end of Java, under IBM's stewardship, as you state.  If IBM does try to make Java some sort of WebSphere exclusive technology, they'll effectively kill Java, and in turn maginalize WebSphere (along with services gravy train that goes with it).  Oracle and Google and everyone else using Java as part of their technology stack will fork OpenJDK, and that will be the new standard.


That said, Java is naturally moving toward more of a legacy status.  Nonetheless, that still means tons of Java jobs in the future, due to the shear size of the existing code base. 


For example, in spite of Cobol being "dead" or "legacy", there are still tons of Cobol jobs, needed to maintain the billions of lines of Cobol source (which would be too expensive for most organizations to migrate).  Add to that, "all the cool kids", are moving to more modern languages.  So that leaves the mainframe veterens in a good position, in terms of available jobs and job security.  


I do agree with you that SCJP and SCJD and SCJWC, etc, will all die in the present form.  I'm not going to bother with 'em, not at this point.  4 or 5 years ago, there'd be some value.  But with the IBM/Sun thing, nope.


As for .Net - due to the shear volumne of Microsoft shops, and MS's commitment to .Net, there will be plenty of .Net jobs.  I currently work for a mostly MS shop (a software company that targets the Windows platform), and I already use .Net in doses (most of our source is C++, combined with some VBA scripting).

Domagoj Klepac replied on Tue, 2009/03/24 - 3:01pm

I haven't found certifications useful, both as an employee and an employer. In Java world they simply don't matter. From employee standpoint, they are a plus, but real experience and work you can show will determine if you get the job. From employers standpoint, certifications don't really guarantee anything, except maybe that person has the most basic Java skills. When I'm interviewing, I even tend to view certifications as minus, especially if person has nothing else to show. 

There is only one certification source I accept: Java Black Belt got it right and they're great resource. Curiously, in Microsoft camp, certifications are almost necessary. Different culture I guess.

Ryan Nelson replied on Tue, 2009/03/31 - 12:38pm

I'm going to take the opposite view. Kirk's comments that preparation is a "waste of time" involving "useless knowledge" that made him "no better at developing software" seems very wide of the point to me. I particularly love this line:

"The skill that I needed to develop enterprise applications could only be obtained by developing applications."

Without getting too juvenile, let me just say: "Duh."

This misses the point of certification, in my view. Full disclosure: I've passed the SCJP twice on two different Java versions, the SCWCD, and am in progress on the SCJD. So you could say I am a believer in certs. Here's where I think Kirk goes wrong:

Certifications are not intended to certify skill or talent, ability or judgment, except at a very rudimentary level. They do not exist to mint good developers, any more than possessing a drivers license makes you a good driver. Many, many drivers with valid, legal licenses exercise extremely poor judgment on the roads. Does that mean a license is a "waste of time" full of "useless knowledge"?

So what does a certification demonstrate? Let's use the most popular cert as an example: the SCJP. Sun's certification website says it is for programmers interested in "demonstrating proficiency in the fundamentals of the Java programming language" and that certification "provides clear evidence that a programmer understands the basic syntax and structure of the Java programming language." That's it. None of this "good enterprise application developer" gobbledegook.

The SCJP is intended to show basic competency. It's no more complex than that. If you think your resume already shows that, then it's not for you. Ditto the other certifications.

Personally, putting a cert on a resume is the least of the benefits. I find that studying for a cert drives me to learn the concepts better. It forces me to learn aspects of the language I would otherwise probably not have the motivation or curiosity to learn. And yes, that means using study books and other literature. I see nothing wrong with that.

Is it possible to "cheat" and just do rote memorization? Yes, of course. Who among us hasn't done that in high school and/or college to get through a course? And what our parents always told us ended up being true ... the only person really cheated in doing so was ourselves. I seriously doubt that Kirk is "no better at developing software" as a result of taking a cert, unless this is the route he took. Or unless he knew it all already, in which case: what was the point?

If you're honest in your preparation, it's hard to see how you come away from the SCJP or SCWCD or whatever certification you choose without a deeper, more comprehensive knowledge of the fundamentals being tested. And that is always a good thing.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.