Bad Code, Craftsmanship, Engineering, and Certification

Posted in: Software Development Best Practices, Software Development Team Leadership

Robert C. Martin, during his keynote at QCon London 2010, tried to figure out why there is so much bad code written. He offers advice on writing good code talking about a bad code example, Boy Scout rule, functions, arguments, craftsmanship, TDD, continuous integration, pairing, small cycles, patterns, engineering, certification, and other elements contributing to qualitative code.

http://www.infoq.com/presentations/Robert-C.-Martin-Bad-Code

Success Guide For Sun Certified Enterprise Architect Exam

Posted in: Enterprise Java

After upgrading my SCEA certification recently (see this post), I have summarized some key pieces of information and the resources I used to pass the exam below. I hope this helps others pass as well.

The Basics
The place to start is the main SCEA exam page on the Sun site (http://www.sun.com/training/certification/java/scea.xml). You will find a description of the exam objectives as well as plenty of plugs for Sun’s own training courses to help you pass the exam (I have never taken any training directly from Sun, so I cannot speak to their value).

Certification Structure
Remember, the certification is made up of 3 parts.

The first part is an exam and is the hardest part, this is the part you are really doing all of the study for. The exam is a computer administered multiple-choice style exam (the same as the SCJP exam if you have done that one).

The second part is a take home assignment. This part will take the longest and involves presenting a solution (via UML and other documentation) to a business problem. There is no coding involved.

The third part is another computer based exam, but is made up of long answer questions this time. You should plan to do the 3rd part ASAP after you have submitted and passed the 2nd part. The questions in this part will ask about certain design considerations and other decision points from the assignment and why you chose the solution option that you did.

Obviously it will depend on your level of proficiency as an architect and specifically with the JavaEE technologies, but I think you should plan on 3-6 months in prep for the first part, 1-3 months to complete the assignment and then you should be able to do the 3rd part within a month of submitting your assignment depending on how long it takes Sun to review your assignment and you to get scheduled in to take the exam.

Websites
Below is a list of some websites that contain relevant information.

Books
I have read all of the following books at one point or another. They are all mentioned as recommended reading at various places in the official Sun documentation for the exam.

Some Notes on Upgrading
If you have previously passed the SCEA for an earlier version of the JavaE/J2EE specification, then you can complete a modified version of the SCEA certification to upgrade to the latest version (currently JavaEE 5). The upgrade certification process only requires you to sit and pass the first part of the normal certification – the multiple choice exam. You do not need to re-do the assignment or the long-answer exam.

When I sat the upgrade exam, I noticed that a significant proportion of the questions were related to web services. I suspect that this is because the first time I sat the exam, web services were not officially part of the JavaEE stack and so perhaps the upgrade exam is tailored to cover only the newer parts of the specifications – but I cannot guarantee that this is the case.

Do you have other resources that you would recommend? Let me know in the comments.

Twitter Recap for Week Ending 2009-06-01

Posted in: Social Networking
  • #JavaOne book signing schedule available http://bit.ly/10ZIlm #
  • @gorkeyv – your precious Pre is available on bestbuy.com for $849. why dont you run out and get one. right now? http://bit.ly/MGN3Z #
  • I think my #TweetDeck is going to meltdown trying to follow the #JavaOne related tweets this week. #
  • My little one’s 18 month birthday today. Wife and I are celebrating with cupcakes and a Mendocino Brewing Co. White Hawk IPA. #
  • @gorkeyv who cares about the #pre. the real question is, will you be smart enough to buy a new #iphone in july instead? in reply to gorkeyv #
  • #DMB new unreleased album now on Pandora in its entirety. http://bit.ly/18csV #
  • @gorkeyv the revolution train left the station a long time ago and #Palm never bought a ticket to ride. #
  • @aiku1337 I believe Sun Certifications are free if you are attending #JavaUniversity on Monday, otherwise it is $79 for #JavaOne attendees in reply to aiku1337 #
  • Woo Hoo! Reached 150 connections on LinkedIn. World domination is surely just around the corner now. #
  • Palm Pre in iPhone class, but Palm is running on fumes says Mossberg. #palm #pre #iphone http://bit.ly/CX9K8 #
  • @crunchgear says Palm Pre is an also-ran. #palm #pre http://bit.ly/VskcZ #
  • Netflix just sent me Horton Hears a Who! #
  • Netflix just sent me The Black Crowes: Freak ‘n Roll into the Fog #
  • Family Blog Update: Where’s Callum? http://bit.ly/xGomM #
  • Happy Birthday @alicia_s. BTW, you are so totally old! #
  • Family Blog Update: Why are there no lights? http://bit.ly/gJE7E #
  • Netflix just sent me Death Bed: The Bed That Eats #
  • RT @JavaUp: JavaOne Party Planner http://ff.im/3oC1d #
  • Basking in the glow of passing my SCEA exam on Friday afternoon! #
  • Welcoming @michaelpallas @chungsean @srabon and @briankous to the Twitterverse. #
  • #javaone hell week officially begins. flying SNA to SFO today, hope to catch some of the Glassfish Unconference this afternoon. #
  • In Admirals Club @ SNA. Check-in was as dehumanizing as usual. #
  • Family Blog Update: Party Time!…. http://bit.ly/Ryr02 #
  • Checked into hotel. Room is on the 29th floor. Should be entertaining in earthquake country. #
  • Checked in @ #javaone. First load of swag is in the bag. #
  • They are handing out hand sanitizer as part of the swag @ #javaone registration. #
  • At the Glassfish Unconference. Approx. 60 people here by my count. #javaone #communityone #

Upgraded My SCEA Certification

Posted in: Enterprise Java, Software Development Best Practices

I am happy to announce that yesterday afternoon I passed the exam necessary to upgrade my Sun Certified Enterprise Architect certification to the JavaEE 5 standard. I was previously certified for the J2EE 1.2 standard.

I have been working with a study group, but I am the only one who was upgrading, everyone else is working towards passing it for the first time. So I am the first one that is done.

Good luck to my study pals!

Certification or Craftsmanship

Posted in: Software Development Best Practices, Software Development Team Leadership

Just posted my $0.02 on this topic over at the JavaLobby on DZone.

http://java.dzone.com/news/certification-or-craftsmanship

Are you hiring a hacker, a coder or an engineer?

Posted in: Software Development Team Leadership

There are many types of developers who work in the IT industry. When it comes time to hire a new developer it can be tough to figure out which kind of developer you are interviewing. When I do an interview I try to place the candidate in one of 3 categories – hacker, coder or engineer.

The Hacker

How to spot one:

  • Has been coding since they were 12, but have no notable credentials (no college degree, no professional certifications etc)
  • Believes all problems can be solved with some kind of “script”
  • Is unable to answer questions related to emerging industry trends
  • Appears uninterested in training opportunities
  • Their answers will be 1 or 2 words in length and no matter how much you coax them, they will not expand on them
  • Has an unhealthy fascination with the game World of Warcraft, to the point it will probably affect their performance as an employee

When to hire one:
Hiring a hacker is always a gamble for a development role. Often they make better sys admins than actual developers, since they are quite comfortable working all-nighters in dark rooms (as long as there is a supply of energy drinks and pop-tarts). They can also thrive in a QA role where automation of repeating tasks is a key skill (hackers also tend to like to break things).

When not to hire one:
A Hacker can become a rogue and distracting element in your development team. If you are looking for a team member that will have a focus on quality and meeting deadlines, a Hacker is not for you. If you want an employee that will work a regular schedule that doesn’t include them showing up at 11am looking like they have had no sleep, then a Hacker is not for you. These are the kinds of employees that you find out have been running a personal ecommerce site piggybacked on one of your corporate servers for the last 6 months.


The Coder

How to spot one:

  • Probably has a degree, but has no professional credentials (no certifications etc.)
  • Can answer common programming questions, maybe even understands Object Oriented principles, but probably struggles to answer big picture architecture questions
  • Probably cannot answer questions related to emerging industry trends
  • Doesn’t have a strong interest in getting training, attending conferences or expanding their skills in general
  • You will have to work to get them to expand on their answers beyond 1 or 2 words
  • Their references are probably positive
  • They like to play World of Warcraft at least a couple of nights a week

When to hire one:
A Coder is usually a good hire if you are simply looking to increase your development bandwidth. They will be able to contribute to a project in terms of pumping out code, but will need a solid design or requirements to follow closely. You will also need to make sure there is an Engineer close by to keep an eye on them.

When not to hire one:
If you are looking for a people leader or a technology leader, a Coder is not for you. Also don’t expect to be able to have a philosophical discussion about the state of the software industry with a Coder.


The Engineer

How to spot one:

  • Has a degree, maybe even an advanced degree, but is not a new graduate. To be an Engineer, some real world exposure is needed to shake off the bad stuff they learned in college and develop their own ideas.
  • Has a strong opinion about industry trends
  • Asks questions about training opportunities and budgets for attending industry conferences
  • Can name some tech authors they like or industry luminaries they agree with
  • Asks questions about what development processes and tools are used at your company
  • May not be able to answer every low level code or syntax question you throw at them (this is not a concern, Engineers are usually thinking at a higher level and know how to quickly find the documentation about the API they want to use if they need to)
  • Is reasonably articulate and their answers are usually more than 1 or 2 words in length
  • The interview will be much more of a conversation than an interrogation
  • Are aware of the game World of Warcraft, but don’t seem to have time to play it because of all of the tech books and journals they are trying to keep up with

When to hire one:
In general, the Engineer is the employee you are looking for. Just like in sports where you have franchise players, a good Engineer or two on your team can make or break a whole company. They are going to push the envelope in terms of the pace of development, introducing new tools, technologies and ideas and also the basic way in which the team operates. If you are working on projects that require novel solutions to be created, you will need an Engineer, as a Coder will not bring this kind of skill to the table. Also if you want to be able to increase the number of tasks you can delegate, the Engineer is for you.

When not to hire one:
Depending on the project you are working on, an Engineer can sometimes be a bit like having a sledgehammer in your hand when all you want to do is tap in a small nail. If you are working on small simple projects, or the work is generally a matter of taking a set of pre-defined requirements and pumping out a solution that requires little thought, then an Engineer may become bored quickly and you will find them moving on soon. Also expect an Engineer to have a solid idea of how things should work to be effective. Do not expect to mold an Engineer – you should be hiring them to help evolve your team, not to persuade them to the way you do things now. Additionally an Engineer will be aware of the going pay rate for someone with their skill set, so do not expect to get them cheap.


Conclusion

Not all developers are created equal. When you have an open requisition for a new developer, be aware of what kind you are truly looking for. If you need an Engineer, but only have the budget for a Coder, you need to take a hard look at what the longer term implications for your team are if you don’t have the Engineer. Once you are in the interview, make sure you have questions set up to help you quickly determine what kind of developer you are talking to. And never forget what an unusual amount of influence the World Of Warcraft will have on your hiring decisions!