This is mostly a copy/paste of an article I wrote in my blog, I hope it's OK to post it here.
One year ago I became certified as a
Java Programmer. This year, I took advantage of the free voucher program that Sun offers to its employees to pass the Java Developer certification.
The Java Programmer certification tests the understanding of the language, and of its core APIs. The Java Developer certification is the next level. It tests the ability to complete a full project. I was given an assignment and had to work on it at my own pace (there's a one year time limit). Then I submitted my work, which was reviewed by an assessor. At the time of submission, I also had to take a written
test at a Prometric center, where detailed questions about the code were asked. This written test is mainly to ensure that I was the one who wrote the submitted code.
The assignment is not 100% precise on all aspects, and I had to make choices. This decision-making process is also part of the grading
The Database part of the project must implement a Java interface that is specified in the assignment. The assessor runs some automated tests against that API, and the tests must pass. As Sun do not publish these automated tests, I wrote a lot of unit tests to make sure all aspects of the API were covered and worked.
It is not specified in the assignment if logging should be used. From what I saw on the JavaRanch forum, some people remove all logging code just before submission, to be safe in case there's a problem in the logging code itself. I decided to keep it, because that's what we do in "real" applications: we don't remove logging before shipping. It is possible that it lowered the score I got on the General Considerations part (see below).
I generated some UML diagrams (with NetBeans) to clarify the relationships of the different interfaces and classes, and included it in the Javadoc. I felt this made the overall structure easier to understand.
It took exactly 4 weeks after submission and written exam, to get the results.
There are different possible assignments, the one I got is known as Bodgitt and Scraper 2.2.3.
It took me 3 months to complete the work, and I estimate the time spent on it to be around 100 hours. On these, about 50 hours were the actual code writing, testing, documenting and debugging, and 50 were on doing research: on the different design
patterns that could be used, on trying different locking strategies to compare performance, on trying the different network approaches and comparing them, and trying different tools to generate UML from code,... This takes time as it forced me to look for solutions that were not familiar, and this is one of the great strength of the certification : to learn new ways of solving problems, not on relying on the same solutions over and over again.
In the written exam, they asked which solution is chosen on a particular problem, and why the other options were not adopted. This means different options must be evaluated. Answers like "I used RMI because it does the job, and it's the only technology I'm familiar with" is not the best answer.
Here's the detailed scoring report I received:
This report shows the total points that could have been awarded in each section, and the actual number of points you were awarded. This is provided to give you per-section feedback on your strengths. The maximum possible score is 400; the minimum to pass is 320.
* General Considerations (maximum = 100): 90
* Documentation (maximum = 70): 69
* O-O Design (maximum = 30): 30
* GUI (maximum = 40): 31
* Locking (maximum = 80): 80
* Data store (maximum = 40): 40
* Network server (maximum = 40): 40
I got the worst score on the GUI part. This is a confirmation that GUI design is better not done by Developers, but by real Designers :-) .
Being involved in commercial Java projects on my daily work at Sun, I can tell that what is asked by the Java Developer certification matches closely with what is expected from a working professional. For example, it would be risky to try this certification without using some kind of Source Code Management tool. It is also critical to develop correct Unit Tests in parallel with the code, as well as overall tests. Good code documentation is essential, as well as end-user documentation. The ability to deliver all that is tested by the certification.
Thanks to all of you on this forum for the help.
Marc