You said "Certification"?

by Valentin Crettaz.

This article aims at guiding you towards the Java 2 Programmer Certification (SCJP2), although some of the information provided here may apply to other certifications as well. I also would like to provoke some kind of reaction. I'd like you to ask yourself some questions about your actual Java level. Is the latter sufficiently high for getting further or do you need to study more?
To get those questions answered, I'll first explain what a certification really is. Next, I will talk a bit about what advantages a certification can bring. I then enumerate some misconceptions that may arise when people are talking about certifications. After that, I will investigate the dos and don'ts, that is, tips to follow and traps to avoid. Finally, since the main purpose of this article is not to describe in detail every step you should follow to get certified, but to spare you some time by helping you to avoid going the wrong direction, I won't give a detailed speech about preparation tips or where to find mock exams, but I will merely give you some pointers on the web where you can find some outstanding resources.

What is a certification?

To get the ball rolling, let's have a look at the first paragraph on the Sun Education web site:

This certification is for programmers experienced in using the basic syntax and structure of the Java[tm] programming language.
Well, this sentence says it all: a certification is for programmers who already have a good experience in programming with Java and are willing to go further under the hood investigate the intricacies of the language.
A Java certification --and all certifications in general-- should not be seen as a way of learning a field from scratch. It is more geared towards the improvement of one's already-acquired knowledge. With that paper hanging on the wall of the living room, one might be taken more seriously when talking about Java issues or when applying for a programmer position. Some will say, "it's just a paper anyway". I would answer that this paper actually makes a difference. It's difficult to assess one's knowledge of Java (or any other knowledge for that matter), but getting certified brings you one step closer to credibility. There is a difference between saying "I know Java" and actually knowing Java ("I know Java". "Yeah, me too, 'been on vacation there! Beautiful, isn't it?"). I think you got my point.

The Fine Print

Recent discussions (Is Certification really worth it ? and Opinions on SCJP2 test) posted respectively in the Programmer Certification Study and the Programmer Certification Results forums kept my attention. What one can conclude after reading those discussions is that, apparently, some people want to get certified just for fun or to improve their Java knowledge. It also seems that some people think certification is not worth a penny. Everyone's thoughts are legitimate, of course, I won't argue with that. However, I assume that if you keep reading you believe in the value of a certification.

What is a Certification good for?

As mentioned in the previous paragraph, this question has been the topic of many debates. There is an everlasting tirade about how good multiple-choices exams can assess one's knowledge. One party argues that a certification doesn't prove anything while the other party claims that a certification helps evaluate one's know-how. Well, both are right and wrong at the same time. To answer this question, be aware that there are different ways of certifying people. Let's take a peek at the Java example since this is what Javaranch is all about. The Sun Education Center delivers 4 different certifications relating to the Java Language:

The first and the second are so-called multiple-choices exams. They require you to have basic knowledge of the Java Language, to know what it is composed of and how to use its basic building blocks to produce correct Java code. All you need after that is experience on the field, which when acquired, leads you to the next more serious certifications briefly presented below. As you may already know, there is no right way to code. There are almost always many solutions. This is exactly what the next certifications are all about.
The third and the fourth are somewhat harder; they not only require you to think but to think efficiently. You are given a work assignment to fulfill and then you have to face a Java expert and defend your design choices. Questions you might expect during the follow-up exam could be: What are the advantages of using this class instead of that one? What are the consequences of using it over another?
Now, it's clear that certifications like the first or the second less accurately assess one's knowledge since it is a matter of learning. More or less, everyone is capable of learning. However, certifications like the third and the fourth do require some outstanding knowledge of the field since you cannot possibly get certified by guessing the answers or by counting on chance.
This being said, it is obvious that both parties have legitimate beliefs. SCJP and SCWCD are more commonly aimed at because (let's face the truth) they are easier, after all, if you have a good memory and you are good at remembering things you can be a SCJP (or SCWCD for that matter). Assuming what precedes, the first party gets the credit in saying that such an exam doesn't prove much.
Their arguments don't hold, however, against SCJD and SCEA because it would take a miracle for somebody counting on chance or on her ability to remember things to get certified.

Well, to sum up, there will always be people who disagree and that's better that way. Otherwise how would the world evolve? Debates have ever been sources of evolution. No debates, no evolution. Let's just conclude this paragraph by saying that if you are willing to seek for certification, go for it, don't care about what people are going to say about it, the bottom line is YOU want to get certified (or your manager says so). BUT, pay attention to what follows!

Some Misconceptions

The certification path can be applied to many fields of study. Apparently, some people still don't make a difference between a respectable cook and a "grand chef". If you want to learn cooking then you take cooking 101 and learn the basics of cooking. How to boil water to make macaroni? How to melt some cheese to get macaroni and cheese? Then, when you are sick of macaroni and cheese and want to become somewhat more experienced in cooking, you can take advanced cooking lessons where you are going to learn how to make yummy gravies to pour on your 1/2 lb steak or how to make a good stuffed Thanksgiving turkey.
Ever tried to build a house by beginning with the roof? No need to be a PhD to figure out that the house doesn't stay upright long.
Well, the same applies to Java. First, you take Java 101 to learn the basics of the language, and then, only then, you can get further.
That's right, one step after another.
Focusing on SCJP, it is not a way of learning Java at all but more a way of improving what you already know of Java and learning some basic coding techniques that will make you stand ahead of the herd of wannabes. Again, if you try to become a SCJP without knowing the basics of Java, either you fail right away or you might get into trouble once hired and staring helplessly at your computer screen. That's the harsh truth but it needs to be said, emphasized and not be left untold.
Take the certification seriously and don't look at it as some banal professional or academic experience. Moreover, don't seek for certification because a friend of yours told you so or because you want to fancy up your resume with a, well, nice logo. Instead, you should have a profound attraction to the Java Technology itself and also want to promote it.

If you are asking yourself questions such as "What language does the word 'overloading' come from?" or "What is a subclass?", then you probably should hit the books because you are not ready. To pretend being eligible for SCJP, you should at least be comfortable with basic object-oriented concepts on which the Java Language relies, that is you should be able to answer questions like "what is an object?", "what is a class?", "what is inheritance?", etc. If you don't know how to deduce the output of a given code, then you don't know how to read code and you need more practice.
Now, if you don't know why String literals are not garbage collected or why wrapper classes (Integer, Double,...) in the package java.lang are immutable, don't worry because those are advanced topics which you will learn during your certification study.

Another thing I've seen way too much is the ever-present advice "You can count on x% chance during the exam". Two words: forget it! Let's be somewhat realistic here. If you are counting on chance to help you, you are an unreliable person and way off the line. It is true, though, that chance may help but no one should partly rely on it to get certified (the same advice holds for any other kinds of exams).

A further issue is that apparently some people are complaining about the memorizing requirements that the certification study involves. Let's face some facts:

  1. the act of memorizing has never killed anybody;
  2. we all have a brain and we won't even use half of it by the time of our death, so capacity is not an issue either;
  3. And last but not least, time is money and everybody knows that the access time to a human brain is way smaller than the time it takes to open a browser and search the API; the more you know the faster it goes (your manager will be happy), it's that easy. It doesn't mean that you have to know everything by heart, it just means that what is required to memorize for the certification exam are signatures of methods and constructors which are members of heavily used classes.
    Anyway, if you claim to be an experienced Java programmer then you probably wouldn't even complain about this memorizing requirement since you most surely already know what is required to know. The ones who complain are people who need some more learning and are not ready for getting certified yet (If you have arguments against what I just wrote, I'd be happy to hear them).
It doesn't hurt to learn more than required either, just to gain some technical culture.

If you think you satisfy the requirements stated above, then you may safely follow the certification trail further.

Dos and Don'ts

I won't describe any specific method to follow for getting certified, you should build up your own. Everybody is different; hence, everybody works according to a different method.

The first and most important thing is: DON'T SCHEDULE YOUR EXAM BEFORE YOU KNOW YOU ARE READY!!!. That's pure nonsense. How can you know that you'll be ready by the date you have chosen? What you will end up doing is getting more and more stressed because you think you might not finish in time. Stress is bad; it only leads you away from your original goal. Now, you are asking yourself, "how can I know that I'm ready?". Good question! I'll answer that by the end of this article; just keep reading.

The next important thing to do is to organize yourself properly. That means:

Once you have made yourself a nice organized schedule, you can begin the festivities. From now on, no more political talks, I promise. Let's get down to work.

Resources

The first thing to feed into your browser's location field is the following address: http://www.javaranch.com/maha/index.html. This web site has been created by Maha Anna (short for Mahalakshmi Annadurai), an Indian Electronics and Communication Engineer who got certified during the year 2000. She thought that sharing her own certification experience on a website would be a great idea, which it is. She enumerates very good preparations tips, lists a great deal of mock exams and resources as well as interesting discussions which happened at Javaranch. So, I strongly recommend you to point your browser to that web site and benefit from it. Next, I will just elaborate some of the tips she gave.

The next thing to do --which should already be done-- is to get the Java 2 SDK Standard Edition (J2SE) so that you may create your own pieces of code. I'd get the latest stable version which is, as of this writing, 1.3.1, but version 1.2 is fine too. Lots of coding practice is the key to mastering the language. Never underestimate that.I guess I will never manage to emphasize this point enough. Every time you encounter a blurry concept, write some code, compile it, run it, change some statements, re-compile it, re-run it, twist it, re-compile it, and so on until you get the point. You won't always get to the point quickly, though, since some topics are rather difficult. If such a situation arises, that's the moment to point your browser to the Programmer Certification Study forum at Javaranch and ask your buddies for some piece of advice. But, by all means, DO NOT post a piece of code without even trying to compile and run it first. That's pure laziness. Questions like: "what is the output of this code?", or "will this code compile and run?" should be banished. I have noticed lately that an ever-growing number of people in the SCJP forum are aware of that too, and are simply answering a nice and killing "first try, then ask".
Seriously, the practice requirement is very important. The equation is simple: the more you code, the more comfortable you are in analyzing Java code and the faster you are going to spot bugs.

The inseparable companion of the Java programmer is the Java Application Programming Interface (API) documentation. A well-organized documentation containing thorough information about all packages, classes, methods and fields released with the J2SE. It's not something you read sequentially but it is more like a dictionary. Use it. Answers to questions like: "what does the String's method concat() do?" or "which methods are declared in class Thread?" can be found in the API. Time is precious, so stop wasting yours (and other's!) and browse those marvelous API first.
Anyway, if you satisfy the requirements I stated above, you most probably already know all that. You may not know about the Java Language Specification, though, which I'll talk about next.

The Java Language Specification (JLS) is the "best" technical Java reference. On the book's web site, it says:

The book provides complete, accurate, and detailed coverage of the syntax and semantics of the Java programming language. It describes all aspects of the language, including the semantics of all types, statements, and expressions, as well as threads and binary compatibility.
.
Wondering how a switch construct works? how forward references are managed? how class instances are created? and much more. The JLS provides accurate and thorough explanations on all basic foundations of the Java Language. Undoubtedly, THE reference. Be well aware, though, that the JLS contains some cryptic parts which heavily rely on mathematical definitions. So if you are not used to have mathematical books as bedtime readings you may want to either get used to it or look for a more understandable reference presented next. Moreover, the JLS only handles the java.lang package and does not spend time on specific Java packages, like java.awt, java.util or java.io. To get information about the later, you are better off consulting specific books on the topic, the Java tutorial, or books expressly dedicated to the certification which you can find at the Javaranch Bunkhouse.

To briefly conclude, if you want your certification to be worthy, you have to prepare yourself accordingly. Cheating is for weak people and it is not of much help anyway. Work seriously and try to write as much code as you can, this is the only way to learn Java rapidly and efficiently. If you believe in the value of your certification, focus and don't listen to troublemakers. Put all your energy in your study and you'll see that it is worth it.

Written by Valentin Crettaz.
Reviewed by Marilyn deQueiroz, Jane Griscti and Dave Vick.