Archive for March, 2011|Monthly archive page

Portfolios are better than certification

In Software Engineering on March 29, 2011 at 12:29 pm

A few days ago Martin Fowler posted an item on his website about certification and whether certification correlates to reality. This got me thinking about certification efforts that have gone on in the past and that are currently being considered. I keep coming back to the same question—is certification worth it? Put another way, does the certification for software developers makes sense?

Many years ago, and I do mean many, I decided to become a Certified Data Processor. The CDP is a certificate that was issued by the Institute for Certification of Computing Professionals. The ICCP still has a presence and offers updated certification. Even when I was a consultant I never placed CDP at the end of my name. I don’t know whether it was important or not. To me it was like any other exam, such as the SAT or GRE, that I looked at as an intellectual challenge without very much use, except to get me accepted into a school I wanted to. I’m not sure it really said anything about whether I was qualified. The ICCP has newer certifications, but these are approximately equivalent to the ones in effect when I took the exam. In fact they indicate that “holders of the previous certifications qualify for the current certifications.” Does this mean that knowing how to draw a flowchart indicates that I can create a UML diagram? So what.

The ACM and IEEE have been working on certification programs for quite a while. IEEE offers exams that, when passed, enable professionals to claim certification. And yet, this has not caught on. Why not?

Last week in a department meeting we had a brief exchange about certification. There are certainly different viewpoints among faculty members. When we consider macro software engineering which involves very large projects, often involving hardware systems, the set of skills seems to change more slowly than those required to be a competent micro software engineer. Heck, the projects often take years to get to release. The macro software engineer will typically spend more time on project management of the whole system, scheduling, validation, verification, process, and so on. These are certainly necessary and valuable skills. But does one need certification? And, if they do, does this have anything to do with the software developer trying to build a particular module?

At the micro level things change much more rapidly. New languages, new technology, and new practices that enable one to deal with changing environment pop up regularly. Should we have certification specialized for web developers, embedded software developers, IT applications, and so on? If so, where do we draw the lines, and can we keep up with all of the advances?

When I was at Rational the RUP was a framework that we felt described the process of building software. Those companies that succeeded using RUP were those who understood that the framework needed to be specialized and customized. Those who attempted to apply all the practices and advice in the 3000 or so Web pages were doomed to fail. The fact is, that one size does not fit all. We must consider the context—project, people, environment—in order to be successful in a software development project.

There’s another, more practical reason why certification will not work. There is just too much software that needs to be created and not enough people to do the work. Will the lack of certification really cause a company to not hire someone who can get the job done?

So, if not certification, then what?

Portfolios can correlate to competence

A few years ago Pete McBreen penned his book, Software Craftsmanship. If you haven’t read the book you should. McBreen likens software developers to craftsmen of previous centuries. We learn through a series of apprenticeships. Just as someone who wanted to be a jeweler would sign on with a master jeweler as an apprentice, new software developers begin their career by learning from master software developers. The apprentice jeweler might spend years to become a master jeweler, he might just as well have become an apprentice for different master jewelers, and become a journeyman. So too, one software developer might become a master and specialize in one type of software development, while another might become competent in several areas and become a modern day journeymen.

With this model in mind, I believe there is a better way of determining who can build the next generation of our software. If you are looking for jewelry, a piece of art, a house, or any number of things that require customization in craftsmanship, you don’t look for certification. What you do is look for a person with a portfolio that indicates she is capable of producing the type of artifact you desire. The same approach can be used to find software developers.

I encourage my students to begin putting their portfolio together early in their academic careers. As they proceed through the university they should add to the portfolio so that when they graduate they have something to show prospective employers about what they can do by  showing what they have done. Then, as they advance in their careers they can add to this portfolio and decide whether they want to be a master of a small set of skills or a generalist. There are some—but few—who can be masters of everything.

This approach, in my opinion, makes much more sense than looking for certification. Certification simply means—in the way it has been and is being implemented—that the person has learned how to pass one or more tests. The portfolio lets you see a body of work and will often show how the person has advanced. This let you fine people who not only have a set of skills, but more importantly showed that they can learn and apply those skills.

Isn’t this what we really want from our software developers?