Posted by Uncle Bob
Watch the following video. It will convince you that we have to do something about the horrible state of software engineering.
Bad Code from unclebob on Vimeo.
How could any team of disciplined professionals have produced a
wretched mess like that? Clearly they were ignorant of good practices.
Clearly they were inexperienced novices. Clearly their priorities and
values were all wrong. If only they had been taught good coding
practices, and good development skills. If only we could have gotten to
them before they made such a horrible mess.
What we need to do is create a certification program that
provides developers with the knowledge and skills that they need. This
program will involve a course that teaches good development practice,
and a certification that they are now knowledgeable developers.
They can use that certification to prove to their employers and their
fellow professionals that they are worthy of being considered true and
clean software developers.
That’s what we need. Right?....
Eagle’s Entrails! Deer Droppings! and Elephant Phlatulence!
I’m sorry, am I being vague? Is my opinion not clear enough? All right then, allow me to elaborate.
What Problem does Certification solve?
Certainly there are certification organizations who have the problem
of dwindling revenues. A new developer certification program would
likely solve their problem.
And just as certainly there are tin-men who need hearts, lions who
need courage, scarecrows who need brains, and developers who need
self-esteem. A new developer certification program might just help those
But who else is served by a developer certification program? Employers?
The Trials of Hercules.
Consider Doctors and Lawyers. When a medical student earns an M.D., or a law student passes the Bar, that’s an achievement. The certification, in those cases is deeply meaningful because the certification is not easily won.
To get it you have to spend many years, and many tens of thousands of
dollars. What’s more, you have to acquire in-depth knowledge and at
least a modicum of provable skill. You have to do something significant.
If we had a developer certification like that, then
employers might find it useful. But I know of no developer
certification program (except for one that I’ll mention later) that
offers proof that the developer has accomplished anything of
significance. Most certification programs prove little more than that
the “developer” paid to attend a 3-5 day course. As an employer, I’m
not particularly interested in the ability of a developer to pay to
attend a 3-5 day course. As an employer I want to know what the
developer can do.
If you were hiring a guitarist for your band, you might be very
impressed with someone who toured with Clapton. You don’t get to tour
with Clapton unless you are talented. But more than just talented, you
have to show up every day, you have to work well with others, you have
to be willing to get the job done under pressure. Clapton doesn’t work
A signed letter of recommendation from Clapton is a certification of significance! Not just anyone can get one of those. That letter will impress potential employers forever after.
As an employer, I want to hire people who have succeeded at working
with others in the past. The more I trust those others, the better! No
developer certification program that I know of (except for one that
I’ll mention later) provides that kind of credible reference.
Over-promise and Under-deliver.
The certification programs that I know of (except for one that I’ll
mention later) make implicit promises that they can’t hope to begin to
deliver. The implied promise is that the certificant has been shown to
have some significant skill, ability, or knowledge. The
reality is that you have to look at the word “significant” through the
wrong end of some very powerful binoculars before it matches the truth.
Indeed, there are certification programs that show absolutely nothing
about the certificant except that they bought a seat in a class.
Notice that I said that the promises were implicit. That’s
the whole key to making lightweight certifications profitable. The
goal is to imply that the benefits of certification are so huge that
people will pay to get the certification. Often that implication can be
as simple and subtle as the choice of words used to name the certification.
Consider, for example, the title of “Certified Development Chief”
imprinted on the certificate of someone who just took a “Development
Chief” course. Who wouldn’t want to be a Certified Development Chief? And if you aren’t a Certified Development Chief, then what kind of Development Chief are you?
A course, a card, and a Bridge to sell.
What significant accomplishment can a developer make by paying to
attend (or even actually attending) an 3-5 day course? How credible a
recommendation about any of the 20-odd students could an instructor of
such a course make? I can answer both questions in two words, with
apologies to SNL. “Jack” and “Cheese”. The accomplishment is miniscule, and the recommendation is meaningless.
So as an employer of developers I think you can take your course and
card and show it to some other sucker. It don’t impress me much. Go
away and come back later when you’ve accomplished the trials of Hercules
and apprenticed under Michaelangelo. And make sure you bring letters
of reference. NEXT!
The one I said I’d mention later.
I’ve got an idea for a certification program that just might work.
Now, bear with me because this is a little complicated. It’s an idea so
revolutionary, so different, so incredibly new that I’m getting giddy just thinking about it.
What if we asked young graduates to actually get jobs as “interns”
for awhile. What if we gave out responsibility to them in small
incremental measures. What if they gradually learned more and more
things while working for us. What if we guided them to ever greater
accomplishments. What if we slowly gave them trials of Hercules to
follows, and had them work with Michaelangelos.
Of course some of our people might leave and go to greener pastures.
We’ll need to replace them. Also, our company might succeed and grow,
so we’ll need to hire more good developers. So what if we…
OK, now hold on to your hat because this is where it gets really
tricky. You might want to get up and walk around a bit, get a diet
coke, eat a twinkie, or something to get your brain working.
Ready? OK, here we go…
So what if we… interviewed ... candidate developers? What
if we asked them what accomplishments they’d achieved in previous
employment. What if we asked them who they used to work with. And…
ok, this is even wilder ... what if we called those references and checked them out?
Are you still with me?
What if we….
Naaaaahhhhh. Dumb idea.
Honestly, I think I’ve wasted your time. It’s a stupid idea. Never mind. We should all just go get certified instead.
Leave a response
I think the word “professional” is a part of the problem. Just because your job is a programmer doesn’t quite make you a professional programmer.
At least I always get the sense that “professional something” means you’re good at whatever it is.
I couldn’t agree more. Even in relatively smart companies that seem to understand the value of clean code, TDD and agile practices I’ve seen cert hiring happen.
Just like maven forces the ideology of building software there should be something for all development practices. For example Joel Spolsky’s test.
Jason Gorman about 1 hour later:
Firstly, your Clapton reference highlights a very real problem with any kind of measure of merit. I’ve played guitar for 21 years and I can tell you that he’s massively overrated as a musician. Now, if you’d said “toured with Frank Zappa”... ;-)
My idea of a great software developer might differ from many other people’s idea of a great software developer. There are many great developers who are considered poor developers by folk who see things very differently. I’m sure many interviews end with both parties walking away thinking the other person doesn’t know what they’re talking about.
So any system of seperating wheat from chaff would have to take it into account that these different schools exist and that there is no widely accepted consensus on anything in what we do at the moment.
Maybe a dozen likeminded people could get together and agree on, for example, what it means to be doing TDD effectively, but as soon as we try to apply that on a larger scale we’re either hindered by these differences or we end up with a lowest-common-denominator qualification trying to please everybody.
As for interviewing people (programmers or musicians): what’s wrong with asking them to play you something? After all, if you were hiring a juggler, would you sit them down and ask them about their juggling history? References are worthless because we all know that employers are reluctant to say anything bad for fear of being sued, and will often give glowing references for someone they’re hoping will move on soon.
The program I’ve been running with the BBC and other clients is entirely built on the premise that one man’s idea of X is different to another’s, and that the only effective way to assess ability is to ask them to “whip it out” (as Zappa famously instructed Ian Underwood in his audition for the Mothers)
I think I will have nightmares about that video :P
I agree with the low value of most developer certificates. But I hope we’ll move beyond what you’re proposing.
I’m all for the Medical/Laws route. The difference in level of education between those and IT is staggering. Here’s how those professions would translate to IT:
Just because you know most the law books by heart (code syntax and libs) doesn’t mean you can practice law (write production code). Just because you’ve spend 6 years studying and practicing medicine (writing compilers and some development experience), doesn’t mean you can do brain surgery without supervision (work on a complex IT project).
Only after years of study, guidance, practice, trials and training on the job can one really enter the profession of IT. If we value our customers and their long term interest, this is the only way we can raise the bar for (production) code quality.
Even Ligeti’s Lux Aeterna is too joyful a soundtrack for this coding quagmire.
Something like Suicidal Angels’s Eternal Darkness would have been more appropriate.
(Yes, I’m being cheeky)
Mikhail about 1 hour later:
FML! Please, tell us how many LoC are there (I estimate 200k). Are you sure the code was not automatically generated?
K. Stevens about 2 hours later:
Must be tiring knocking down so many straw men, though I guess it gets easier when you add the false dichotimy of “certification or intenship”.
Sooner or later, I guessing there will be a parallel of the Professional Engineer exam for software engineers. That would be a certification worth having.
Uncle Bob about 2 hours later:
The code was real, though obfuscated. It was two tightly coupled classes. Total about 30KLOC.
What if we… asked them to show us how they work?
In a previous job I could introduce the TestFirstChallenge as a test for our candidates. It worked really well.
We could also make a codecamp and let people show how they work with others, under pressure… like in “real life”.
Marc Cooper about 2 hours later:
I would have used Nine Inch Nails’, Head Like a Hole.
I agree with Jason and Machiel. We are still such a young, growing, and rapidly changing industry, but the true professional route is the answer; what we do is far too important for it not to be.
In the UK, there is a professional organisation that requires a fairly high level of entry: a degree, a set of exams, n years experience, a few references, an interview with a panel. Full membership gives you Chartered status through one of the major engineering bodies; you become a Chartered Engineer (CEng).
However, it’s been rare, ime, for anyone to show interest in that level of professionalism, let alone demand it.
While businesses continue to delude themselves that IT is a construction job requiring labourers, they will not be motivated to demand high levels of craftsmanship and formal professionalism, and will suffer the consequences. Those that do, and engage equally, will reap significant rewards.
It’s one thing have a recognised achievement, it’s quite another to get others to recognise and understand its meaning and value.
Robert about 2 hours later:
Was the electrician who rewired your house certified? If not, would you have used her/him?
btilford about 3 hours later:
The certified electrician did not rewire your house. His employee did.
Corey Haines about 3 hours later:
Was the painter who painted your living room certified? If not, would you have used her/him? Mine wasn’t. But, they were definitely recommended by someone I trusted.
Picking a specific field that happens to have certifications without an intense comparison of how what they do is similar to what we do doesn’t add a lot to the certification conversation. I don’t think that software development is at all like being an electrician rewiring a house.
Mirko Novakovic about 4 hours later:
Great article – nice humor!
I totally agree, that certifications can not be the main criteria for checking the qualification of somebody. Interviews, references, etc. will be much better for sure.
But I think that certifications will do a good job for showing that somebody has the (basic) knowlegde of a specific topic, where knowledge != competence – e.g. passing the Sun Certified Java Programmer does not say that you are a good Java developer, but you can be sure that the person who has passed the test has knowledge about the basic Java concepts, the API etc.
Same with driver license – can somebody really drive a car if he passed the test for a driver license (and I think this is much easier in the US than in Europe :-))? No, but he has basic knowledge how to drive a car.
Well said Marc Cooper: “While businesses continue to delude themselves that IT is a construction job requiring labourers, they will not be motivated to demand high levels of craftsmanship and formal professionalism, and will suffer the consequences. Those that do, and engage equally, will reap significant rewards.”
I don’t blame the hapless, untrained, spaghetti code developer, I blame the hiring manager and institution that hired him/her and put him to work on production code without investing in training and mentoring. Whether or not someone has a developer certification isn’t going to phase those who undervalue Software Engineering as a discipline to begin with.
Geoff about 4 hours later:
I’ve got mixed feelings on interviewing engineers. Yes you can find out their past experiences and that is useful. But I’ve had to throw in a test (even a simple one) to get a real feeling of their programming skill. Some boast of their OO knowledge and then struggle with a fairly simple application. Is this a common problem or do I just suck as an interviewer?
I’ve yet to interview someone who said they know TDD :)
While I hate to bring the lawyers in, some of us work in places that for legal reasons are specifically prohibited from giving references. All I can do is verify that somebody did work for us during that the period in question.
We don’t need flimsy certifications- we need apprenticeships and residents- just like the medical doctor profession. Sit with me, write your tests and code together. Learn to refactor toward code that communicates intent and minimizes defect risk. Do it for a couple of years. Keep with it, and you will learn the craft. Only then will I vouch for you.
C. Keith Ray about 7 hours later:
Good use of the soundtrack from “2001, A Space Odyssey.” Haven’t heard that piece of it recently.
Madhu about 8 hours later:
I like your last idea to interview candidates. Its better to give a training on OOAD afterwards. After that you can give your book on clean code.
Bob Palmer about 8 hours later:
While I have never used certifications as a hiring criteria (some of my best hires did not have certs), I’ve never hired a developer with one of the higher Microsoft certs (MCSD/MCPD) who ended up being an idiot.
I also agree that references are pretty much worthless. Unless the person is a complete moron, they are not going to provide you with someone who will be a bad reference.
In an interview, I want to see the guys go through coding examples on a whiteboard and observe problem solving – and I want them to do this both with me, and with each of my team members individually. before being put in front of a laptop with a problem to solve.
At the end, my staff and I go over the final code, ask questions, and make our final determination as a group. Our last candidate had a five hour interview process (and he accepted our offer).
The Fibonacci series has come to our aid in quickly filtering out those who aren’t worth the interview effort.
Once into the interview, then we get them to show us code that they’ve written of which they are most proud, and we get them to draw pretty pictures on the board and describe hard problems that they’ve encountered previously.
It’s a recipe for a quick cut to the chase … invaluable.
certificationkey about 16 hours later:
If your future objective is to put steps into Information Technology or you already have started your career in IT field, in either case it’s important for you to get some IT certification. IT certification enable you to represent yourself in front of you future or current employer as a competent candidate whose technical knowhow has been acknowledge by a reliable.George Betay is Working for CertificationKey (http://www.certificationkey.com). Its online resource for Certification preparation with 100% guarantee to pass the certification exams with their guides.
CCDA Certification Training
Bob Palmer about 16 hours later:
I find it stunningly ironic that one of the follow-up posts is spam from a cert prep webstite :D
We have seen very good results by telling candidates that the interview will require that they pair with one of us using Cucumber and RSpec on a simple coding problem (that we send them in advance). We have passed on developers that had an impressive array of credentials and we have found some gems that did not.
The issue that I struggle with is how to help the developers I manage toward professional improvement. I have not heard any alternative to the problem that only a master blacksmith can guide an apprentice to mastery of blacksmithing.
I totally agree that a certification body is not the right answer. I do have some ideas on how a developer could build a portfolio that highlights her skills and demonstrates some of the things she has learned. The portfolio might be useful inside an organization that values a particular set of best practices.
But what are those best practices? I think that someone here has something in mind that could lay out a learning progression aimed toward mastery. I wish that they could share without feeling as if it was presumptuous of them.
Focusing so tightly on strict adherence to TDD and other oxymoronic agile tenets while bemoaning hiring-to-certification made my irony meter explode.
Nick Evgeniev 1 day later:
If you allow me such analogy—programming is pretty much like cooking :)... There are restaurants & fast foods. Lots of people in fact prefer fast foods, so developers are tend to cook hamburgers… And selling hamburgers is more profitable
Oh yes and you don’t need expensive certification to be hired to cook hamburgers. That’s life :)
You said that we need ”... create a certification program that provides developers with the knowledge and skills that they need.” But, isn’t implicit in that the presupposition that they will use that knowledge correctly?
Perhaps those who don’t practice what they’ve learned don’t really have the knowledge; or, perhaps they just aren’t wisely using the knowledge they have garnered.
But, since actions speak louder than words, maybe we should have them show us some of their clean code, refactor some bad code, and truly “walk the walk.”
See, here is what I would like to see—a guide to mastery that isn’t tied to a certifying organization. Let people improve who want to improve. Maybe even create a course of study, and maybe even provide expert-led schools for it (Corey). A certificate would say “hey, you attended”, but lack of one would not say “don’t hire this guy.” It would be a bonus, not a requirement.
We didn’t see the build script, there’s probably a pre-build step to merge all the code into a single file in order to “optimize” compiler speed? :)
The music was perfect for the code in question. Nothing else says “monolith” quite like that!
I don’t see the humor in it. Where is that code from? Somewhere you were paid to consult for or something you dug up on the net? If it was something you were hired to help sort out then mocking it in that way doesn’t seem very professional.
The problem isn’t with the developers, the problem is with the organization that hires, or more importantly doesn’t hire the developers. I’ve been involved in several situations, small companies, and large government organizations where the cost of software development is just a line on a budget sheet, or so tied up in beaurocracy that development teams are left to make due with what they can. They pay for skill when the shiz has already hit the fan and they’re left with no other choice.
If you’re adament about helping people improve, don’t mock the programmers; spite the ignorant businesses who believe more warm seats builds code fast, or spineless managers who don’t bend every rule and risk their necks to break rules laid out in red tape to get and keep the right people for the job.
Who doesn’t interview? I label this as a west coast thing. To be honest i am a bit anti west-coast. But here in the real world I know one maybe two developers with certifications. They both are big about degrees and certs. Most companies interview me a san idividual, the ones who try to test me, I just blow off. Now I am not saying not to have a technical interview, but like you say plenty of people pass tests and give great technical answers but for me it’s all about discussion.
I ask the candidates to tell me about their software project and why the did what they did. I also want to know they understand the business side. I don’t hire resources I hire employees.
First, I think we already have a valid certification process. It’s called an undergraduate degree in computer science. If you think developers coming into the professional ranks are not qualified, I’d recommend getting involved with the accreditation process and pushing it to be expected of all comp sci programs ant universities.
Using the med school analogy, I think our undergrad is a comparable to their med school. With the current state of industry, I think a valid intern/residency program for developers won’t work. How do we know the mentor is qualified? And finally, I’d compare most industry certs to the continuing education that doctors must complete through out their career. they vary wildly in quality too.
with all due respect, one of the major aspects of this post seems pretty ridiculous. has anyone ever skipped the interview process and hired a developer based solely on certification(s)? i agree with the idea that certifications are mostly useless but i can’t overlook the fact that you seem to be suggesting that most people don’t interview candidates.
To me, the real problem is that writing and maintaining such kind of messy code is encouraged and rewarded by the management team.
The programmer who tackles the ‘complicated problem’ will get a bonus; The one who makes the job easier will get more work. That’s the reality in so many IT teams.
I think certifications exhibit that the person has some basic knowledge of the technology. Nobody should solely depend on certifications, however it gives an extra edge to get closer to the interview process.
I guess the problem is also how much you should have to pay to get hired. It’s a little artificial anyway, but how many thousands of dollars should you pay to get past the checklist stage in a job search?
I agree with Michael. The developers that wrote that bad code probably did not have degrees in Computer Science because part of attaining such a degree is passing a software design class where you learn not to do things like that.
Folks in our industry laud the medical profession for requiring competency prior to practice, but neglect to recognize that the founding achievement for such a pursuit is a degree. You have to have a degree in medicine before you can even apply for an internship. A degree in History + X years of “professional experience” doesn’t cut it because its hard to know what the professional experience entailed, whereas a recognized degree program conforms to a known set of requirements.
My hypothesis is that a big part of the problem is due to the fact that our field is so young that most of the older, more seasoned developers and managers don’t have Computer Science degrees, so they are reluctant to accept them as a requirement, because it indirectly implies that they themselves may not be qualified. I think at some point, we as an industry need to make it past that hurtle, and recognize that the founding professionals were necessarily un-certified and accept that in this day and age, someone who is ASPIRING to become a professional developer (rather than someone who is undeniably established through the trials of hercules and/or studying under Michaelangelo) should be willing to invest the time and resources to attain a bachelors degree in Computer Science. Until we come to that point, I think we are setting the bar too low and we will continue to discover these filthy messes in far too many of the codebases that we have the misfortune of encountering.
Tim Ottinger 2 days later:
And yet some of the best code I’ve ever seen has been written by people whose degree had nothing to do with computer programming, or who carried no degree at all.
Perhaps this problem needs to be tackled from another angle. Maybe, instead of trying to modify the hiring policy, we should modify the sacking policy. Apply a sink of swim approach and simply drop anyone, at any point in the employment, who appears to be dropping the ball ? or who isn’t achieving at a level appropriate for their pay. Obviously junior staff on less pay would be given more lea way in regards to skill than a top level Architect, but they should still be expected to still have a high level of work ethic and drive.
Any thoughts ?
Carlos Sirias 2 days later:
I personally believe it is more important the willingness of the professional to learn than what they already know. So we focus on that during our interview process… it’s not the best… but it is a start; actually when we tell people they will pair and work on a master / apprentice relationship… even to my surprise most of them just love the idea and their faces suddenly get brighter… I think the industry is pushing towards this.
Certification. About the only way I can see a useful certification would be to ask a developer to do two tasks:
1) write a set of unit tests against a given spec. 2) write a set of code against the given spec.
Developer passes if: 1) all appropriate cases are tested (not just a % coverage litmus) 2) all implemented code passes test criteria (run through pre-processed unit tests)
Tests can be customized to determine aptitude for various aspects of programming: design patterns, implementation, performance, security, maintainability, etc. Users should be able to update their aptitude and compare against others in their field in a bell curve. Come to think of it, aren’t I just recommending Top Coder rankings, Rails Rumble, MVC Melee and a few other continuous-competition, skill-testing sites?
Multiple choice questions are just rediculous for this and could never work. Board level exams would be nice too. For architect level certs it would be great to give someone a challenge, let them define a solution and then defend it in front of a board of experts. (Jonathan Goodyear and I recommended this to Microsoft years ago).
I must admit I am one of those no CS people who converted into a IT career. But the job I was previously doing was a specialism of Geology which crossed into the world of Civil Engineering. From my experience of these professions (these people are professionals) the degree education was only the start on the long journey of become a recognised professional. As a junior geological engineer I had to keep records of all my work and additional training I had undertaken on a regular quarterly basis. These records then had to be verified, discussed and signed off by a person (lets call him the mentor) who had trod the same path and was a qualified chartered engineer. The mentor was usually in the same company if and more than likely your boss. This record keeping and justifing what you had learnt on the job was part of your personal development plan that had an impact on you bonus if not met.
Before you could become a charted engineer you had to keep many years of records as well as having a formal review by the charter review board.
Yes we do have the BCS, The Chartered Institute for IT, but in my 10 years and 5 interviews in IT have I ever been asked if I was a member or was I working toward charted status? No never.
So the industry does not care about professionalism more realistically the business industry does not care about IT professionalism as it still undervalues the skills and importance IT plays in today’s business.
I think writing a charted for an IT professional will be a hard thing to do due to such wide and varied flavors of IT. But not impossible with the right group of people to do it.
We should at least be able to define a number of core workstreams of IT and define the principles of professionalism for these. You can then put in place frameworks similar to other charted body’s like Geology and Civil engineering to continuously review and feedback people as they strive to become a recognised charted software engineer, infrastructure engineer and any of streams that are defined.
But for all this to work both the business and the IT profession has to value this charted status and make it one of core parts of an IT persons development with companies.
Just on an end note can you imagine a civil engineering company letting a graduate with 5-8 years (unverified) experience design and build a 40 story building? No, yet businesses day in day out allow under qualified unprofessional IT workers to cripple their businesses.
I’ll stop there before I rant more!
I think where we go wrong is calling our certifications, certifications. In fact, we hold no value on developer certifications here. If you have one, fine, but it’s not going to get you any more pay or even a better position. If you compare the certifications in the IT field to certifications in other fields, they are much different. You have to go through a vetting process and sometimes go in front of a review board to get certified.
Microsoft has started to see the light with their “super” certifications. One I just saw recently was the SQL Server Master certification where one of the steps was going in front a panel of your peers and Microsoft employees. This is the review board of law and medical fields.
We really need to go through internships and apprenticeships before giving out any credentials. Even for the basic A+ crap. I’ve seen more PCs get screwed up from A+ techs than I have from the taught yourself to repair PCs crowd. I’ve even seen Network+ people really mangle setups that were not that complicated to begin with. If IT is really becoming the foundation of most businesses today, especially in banking, then why are we still treating the position like it is something anyone can do?
Richard Atkins 3 days later:
I agree there’s no substitute for talking to someone to find out if they have a brain, and if they will fit in with the team you’ve already got (or imagine having, if you’re building a team from scratch). I also agree that product certification like the MS* and Sun Java certs are a waste of time and money.
However I also think certification like what the ACM and IEEE have cooked up in the CSDP is at least worth a look. This is a test of a sizeable chunk of received wisdom in crafting software – the software engineering body of knowledge (SWEBOK). I haven’t yet taken the test (being in a country that is far from the nearest testing centre), and the main concern I have about this cert is that it resembles the PM-BOK from the PMI, which (as far as the PMI cert itself is concerned) is an extravagant way to subsidise the PMI. Even still, the PM-BOK itself is well worth studying if you want to be a better project manager. From the parts of the SWEBOK I’ve read, it too is well worth the time to study. I only hope that the CSDP and PMI resemblance is fleeting.
Regarding the questions about how can you recognise a software organisation on a par with working for the Mayo Clinic, I’m sure there are a dozen companies you can name right now that would give you the same idea of how competent a developer the candidate is (e.g. Google, Microsoft, Apple, CSC), and how well rounded their development experience is likely to have been. There is always going to be a great many more software houses out there than you can keep track of, an anonymous 90% that are going to have a much less well known reputation, just like how hard it can be to find out just how good or bad the local hospital in another town really is. For this reason, more than any other, I think internships will never be an effective way to train developers. In fact, from what I’ve seen of the medical industry, it seems to just be a way to pay junior doctors less than they deserve.
When it comes to choosing whether to interview, unless you’ve got a terrible employment network in your area, you can’t interview every person who sends you a resume. You need a reason (sometimes, any reason) to thin the herd you’ll need to talk to – certifications can be one of those reasons. It’s just up to you whether having one is a no-hire reason or not.
Hi Uncle Bob. I still have high hopes for the Agile Skills Project. It remains to be seen whether it will deliver or be effective, but if we do it well I hope it will be a lot like what Corey suggested: A way for us to talk about what we expect professional programmer/craftsmen to do to continuously improve, and something that isn’t owned by any one person, business, or certification body.
D. Andre Dhondt and I will be leading a session in Norway (XP 2010) to talk about it in detail. Anyone who is interested in participating in the project can start right away: www.agileskillsproject.org
Personally I don’t find certifications to be worth the paper they’re printed on. There is no substitute for experience and that can only be gauged from resume and interview. For general development roles, (junior/intermediate) assessing how well the candidate will fit into the team culture is more important than experience. (They’re expected to be mentored for the skills they need.) For lead roles then the most important factor with experience is assessing whether they have (X * n) years of experience vs. (1 * Y). I.e. it’s generally better for someone to have 5×1 year experience than 1x 5 years exp.
A good case against certification: I worked with a guy we’ll call “D”. D held an MCSD and was damned proud of his MCSD. So proud, that when he wrote code and added a class header, it was “Written by: D, MCSD”. D was a good coder, no doubt, but we hired him because he had over 5 years of experience on a number of different projects. It turned out that D spent something like $15,000 to take a course and get certified, and was now paying off a loan. When it came time to expand the team, D would defend that we should be interested in candidates that had at least MCPs or MCSDs. One day, a resume came across my desk, MCSD + MCSE, “woo”. But only 3 years of scattered experience in-between certifications. I showed it to D and he said we definitely should interview, so I humored him and made sure he was present at the interview.
The candidate came in, dressed sharp, complete with copies of his certifications. At which time we started going through the basic array of technical questions that we had been asking at all interviews. (Plus a couple extras that D had prepared.) The poor guy did not have a clue. No real experience, no application of basic coding practice, only theory they memorized for tests. I was even shocked at the lack of applied knowledge. (Then again, the certs may have been fakes?)
D was stunned, and I don’t think he ever insisted that certs should be the most important consideration for new hires.
On a side note, one of the most talented devs we hired had no certification, I think at the time he only had one or so years of exp. and a college course after several years as a manager of a fast-food joint. The reason we hired him? On his resume he had a website URL which had downloadable code from projects he did on his own time. Well structured, good, clean code, he did damn well at the interview questions as well…
If you want to hire skill, you need to search for it.
Patrick Doyle 8 days later:
Sorry, what’s the problem here? Is it just the immense size of the file, or something more substantial?
The stated goal of certifications for lawyers and doctors is to ensure that only qualified individuals end up practicing those professions. Who wouldn’t that? Right? Similar arguments could be made for any profession, including software engineering.
But the real goal is to limit the number of practitioners so that the ones who make it get paid tons of money. Supply and demand. Limit the supply and prices go up. This is no different than the guild system from the middle ages.
Jim Carole 10 days later:
I’ve held the IEEE CSDP credential for about 8 years. It’s based upon the SWEBOK, which consist of 10 knowledge areas that describe generally accepted knowledge about software engineering.
I don’t judge peers based on upon certification, and I don’t think anyone who knows me would say I’m arrogant or insecure (some preceding comments came across pretty prejudiced).
The credential is good for me because the work involved in maintaining it keeps me looking outside of my current area of involvement.
Anyway, the SWEBOK is worth taking a look at:http://www.computer.org/portal/web/swebok/html/contents
Not all employers are willing to invest the time or effort to get interns, and nowadays they have to weed out a lot of candidates before even granting interviews: to some, it might just make sense to put the resumes mentioning certifications a little higher on the pile.
As a dev with a college degree but not a lot of job experience, I made it my goal to get some cert in 2010, not because I think it’ll make me a better programmer or boost my self-esteem, but because it might help me get my foot in the door and get interviewed. It doesn’t matter what my skills are if nobody ever interviews me, does it?
As long as employers keep looking for the “bad” kind of certificates, as long as employers do not bother putting time and effort into interviewing and weeding out, this problem is going to stick around.
It’s the hiring personell who need education first, then the job applicants will have to follow suit in getting actual qualification instead of certs that don’t mean anything.
Unfortunately there are far too few ace developers on the market, so many organizations don’t have a choice. They need to hire underqualified people, and then looking at bogus certificates in resumes is as good a hiring practice as any other.
I think it is rather difficult to certify developers because good programming is like art. Some one may know all the basics but will make a horrible programmer while some one else who knows the basics well may write the most elegant code.
Resume writing skills have a lot more impact in getting interviews than certifications. How you present skills and details matter far more than the skills themselves. Still, nothing substitutes for experience. The best advice I ever got was from a professional technical writer on resume organization. I’ve never held any certification and never been out of work longer than a week in over 14 years of contract and perm work. Getting that first job was the hard part though. :)
Certification works great for us, I wouldn’t employee anyone based on a degree in computer studies. Out of 60 people in my year only 2 of us produced working code, the pass rate was 100%. A degree rings alarm bells. Anyone that needs 6+ years to learn to program is right out. Oddly Uncle Bob’s thoughts were only ever mentioned in computational aspects of data processing never in programming 101