The Value of Technical Certifications
One of my developer’s today passed his Sun Certified Business Component Developer exam successfully. As with most certification tests it makes a lot of assumptions about the world that are a bit odd. For one it assumes that there would be a component market in EJBs and that you might buy such a component. Then you would have someone setup the security roles and define the users of said application. Later a deployer would wrap it up into a good old EAR file and do the deployment. As the developer pointed out,
“Gheesh, I don’t care about the roles, all of them just equal me at the end of the day.”
Another small point was that while he studied up on Entity beans and the joys of CMP versus BMP he’s never actually used one in a real application. Turns out he’s only built a few stateless session beans for any real application.
My mileage on this has run about the same. I got the whole Sun stable of certs about 3 years ago. Everything from Sun Certified Java Programmer to Sun Certified Enterprise Architect. The Enterprise Architect always made me feel special. In practice on actual applications I’ve dealt with a handful of stateless session beans. Not even a simple message driven bean yet, though I expect I’ll build one of those in a real application someday since JMS is a pretty nice way of handling asynchronous requests.
For all practical purposes a good bit of the material I picked up has never been terribly relevant. Spring and Hibernate have been a lot more useful on real world applications. Still I don’t really regret taking the time to study and pass the certs.
For one, all the certs I acquired made me a lot more valuable as a consultant at least on paper. Clients often latch on to certs as a way of evaluating a consulting organization and I’m sure it helped us land a few jobs. I’m sure it also helped land my current management position as my new employers recognized they hardly ever saw certs like SCEA from candidates, so it may have gotten me over the resume hurdle into an interview.
Second, even though the material for some of the certs wasn’t directly applicable to anything I’ve worked on it did force me to know the entire area better. Some of the things were trivial. Why in the world the Sun Certified Web Component Developer focused so much on writing custom JSP tags I’ll never know since I’ve always found JSTL good enough. The SCEA design problem forced me to nail down my UML a lot better as well.
Third, the consulting companies I’ve worked at considered it a rite of passage to pick up a few certs to prove oneself. Some of them explained that they averaged 3.2 certs per developer and similar stats to include on marketing pieces. And they could use it as a concrete item that showed you were dedicated to improving your skills at annual review time.
When my developers come to me to ask about picking up some cert I usually pass along some advice. I almost always offer to pay for it and the associated training materials. It shows some real motivation on their part. I point out that merely getting a cert won’t make them an expert, but it will help them by setting a concrete goal in improving on a given technology. I’ve often counseled my developers who were new to Java that the Sun Certified Java Programmer Certification was a good way to get up to speed on the language including some of its dustier corners like inner classes. For more advanced developers certs like IEEE’s Software Developer cert or the Sun Certified Enterprise Architect might be more their speed. Finally, for those looking at more PM skills I point out that the PMP is pretty much a requirement in that world. That one I give a big grain of salt though since I find the PMP to focus far too much on waterfall style project management techniques over Agile approaches like Scrum.
I may go ahead and go through the rigor of studying for Sun’s Certified Developer for Java Web Services cert soon and see if I can challenge any of my developers to take it with me. I find the WS-* specs to be really convoluted, but we’re finally getting to the point where we’re ready as an organization to start putting up quite a few web services in front of our legacy mainframe system.
Glimpse of Microsoft Implementing Scrum
Since my ScrumMaster training class is in Seattle of all places, it would appear that many of my fellow classmates are Microsofties. Should be interesting to see how Scrum adoption is going in their shop especially given the uproar from MS recently defining TDD as write a bunch of tests upfront for a class you’ve already written and then get them to pass one by one. At least they went to the trouble of removing it after some uproar. Still a lot of people still can be impressed when you mention that Microsoft is doing Agile/Scrum.
I remember using this a lot when I worked at a consulting company that mainly did ATG Dynamo implementations. Well if Sony, Reuters, and Sun can use it, it certainly will work for you.
ScrumMaster Training This Week
I’m headed off to Seattle this week for some certified ScrumMaster training with Ken Schwaber. I should be able to glean a lot of ideas off the fellow participants experiences as well as Ken’s. One of my biggest questions is how to go about integrating Scrum when many of the projects we work on are small from a developer perspective, typically just two developers.
Array Length Error in Programming Ruby 2nd Edition Page 49
Came across a minor oversight in a Ruby example on pg 49 of Programming Ruby. The test code checks that you can find a song in a list which is just wrapped into an array of song objects. It worked find until I used a negative test case to search for a song title that shouldn’t be in the list.
def testFindBySongTitle assert_equal(@song1, @song_list.with_title("Love Song")) assert_nil(@song_list.with_title("love song")) end
I got the familiar red bar and an error
1
|
Exception: undefined method 'name' for nil:NilClass
|
. So I stared at the code for a bit looking for something funky:
class SongList def with_title(title) for i in 0..@songs.length return @songs[i] if title == @songs[i].name end return nil end end
As it turned out I noticed it was actually iterating over the length of the array and since Ruby arrays are zero based indexes, I really needed to add the familiar
1
|
length -1
|
.
class SongList def with_title(title) for i in 0..@songs.length - 1 return @songs[i] if title == @songs[i].name end return nil end end
So once again a negative test case came in handy. I went ahead and submitted it as possible errata.
Some Ruby Conventions
I came across Ruby Conventions for Java Programmers a while back, but still fairly helpful. Every language has its own idioms.