in reply to The future of software design

I've always make the analogy that Programming is a craft, like Blacksmithing or Carpentry. A craft is somewhere between an art and a science. It has both subjective and objective parts. If it were a science we would already have written a program to do it and if it were an art all solutions would be equally good.
Because it is a craft, the entry requirements for Programming are a lot lower than those of a science. (Any fool can try to build a dresser, but you need years of specialized training to even consider gene-splicing). Combine this with the extremely low cost of raw materials for Programming and you have the grounds for millions of amateur programmers.
But, as a craft there is a huge gap between bad, competent and masterful. The difference in quality, reliability and beauty between the dresser I build and the dresser that Norm Abrams (of This Old House fame) builds will be staggering. It is the same with code. My code (I have formal and informal training and 20 years of experience) is likely to bhe infinately more reliable, elegant, and robust then the guy who just finished '21 days to Perl Programming'.
Or, even the guy who just got his degree in comp. sci., because a craft takes years of practice with a wide variety of projects and continuous exposure to new problems, new tools, and new environments. It cannot be learned in a classroom, it is not a matter of memorization. Good dressers come from years of training and practice. Good code is the same.
That is why most crafts developed with an apprentice system. To train tomorrow's smiths, you started today. With young people willing (or forced) to spend years learning the craft through application and experience not just through lecturing and memorization. And, to finally come to a point, that is what is missing from the craft of Programming, the apprentice stage. A company wouldn't hire an apprentice Carpenter for an important project, it shouldn't hire an apprentice programmer- for the lead roles. A master programmer with apprentice programmers under her is what is needed. But, here is the rub. A company usually doesn't have the means to separate the apprentices from the masters. Resumes and interviews can be faked. Skill sets and experiences can be enhanced, failures and shortcomings can be glossed over.
So how do we fix it? The same way the over crafts did. certification. Real certification, based on both knowledge and experience. And not in a specific technology, in a wide range of technologies. Something in an Apprentice, Journeyman, Master vein. And make the certifications mean something. 1 in 10000 programmers might be a Master. Companies with sense can hire using these criteria, and get what they pay for, and a schmuck with a few books under his belt can't pass himself off as a master programmer.
Boy did I ramble,

-pete
"Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."