I recently read (yet another) column in the journal Communications of the Association of Computing Machinery about deficiencies in programmer education, that reminded me of a recent paint job for which I'd recently paid "professionals". The connecting point is a certain lack of meticulousness, precision, and professionalism that we now seem to accept in most professions. This lack goes back to how crafts people are trained.
In software, as in many crafts on which our daily lives now depend, the problem is that beginners are quickly taught the rudimentary skills, and then exhorted to creatively solve problems as presented. If a program appears to give the correct result for expected input, then it gets an "A" grade. Similarly, if a paint job looks to be the right color at completion, then it also is judged superlative.
However, what if the input is different than expected? What will the paint look like after a few seasons? What will happen when someone tries to add on to the current code/coat? That is where the basic training process fails. Code written to accept "2 + 2" and return "4" might take "7 + 3" and possibly return "10" or "4" or "21" (fellow geeks will see how). What happens when (not if) the input is "G + #"? Likewise, a perfect paint job over a dirty surface won't last a season. If it does last that long, then it may peel when the next coat of paint over it dries.
What is missing is a basic principle of craftsmanship: Depth of knowledge. The best painter on my recent job had decades of experience. But all he really knew was how to lay color on a clean surface, and basic prep work. He didn't understand enough about architecture to know what did or did not require caulk (he sealed sashes to frames, and left gaps between frames and siding). He didn't know that many surfaces should not have been painted with latex, like hinges and sash runners. He didn't know the implications to longevity of using a brush versus a roller.
I would have thought that he might have learned these things in his first couple of jobs, or years, or decades of practice. But one aspect is overlooked in training these crafts-folk: Temperament. Certain people have the curiosity and meticulous dedication to understand every aspect of a task, while others (the majority) just do as they are told, at best. But in America, everyone is created equal. One cannot discriminate.
Back in the bad old days of exclusionary guilds, only those who showed the necessary aptitude were accepted to apprentice. Only those who proved themselves adept moved on to journeymen, and eventually mastery. One therefore knew that any carpenter could make solid chairs, and a random tinker could permanently fix a leak. Now, anyone who can pony up the price of the tools, the schools, or union dues can call himself a programmer or a painter or what have you, and hang out a shingle.
I freely admit that I am a self-taught programmer, and painter, and carpenter, and plumber, and electrician, and so on. But I've got the borderline OCD tendencies to read the full manuals (Kernighan & Ritchie, NEC, whatever) and I like to play with things to find out their limits. Part of my self-education is also to find and work with or study from someone who got good results, to see how it is done.
The point is, a true craftsman has the temperament to know what he is doing, plus several levels of abstraction on either side. A painter should know what pigments actually are, beyond the color they produce. That way he can choose paint either that is safer around kids, or better at preserving wood (generally complementary characteristics). A painter should know how different binders work, to choose a paint that is better for metal, or vinyl, or wood. But to my chagrin, given the universe of things that I think every painter should know, few that I've hired even knew the questions for, or even that there was an issue to wonder about (2nd or 3rd orders of ignorance).
And this is part of why our civilization is coming apart.
Note: Earlier posts here on similar themes: Incompetence as the Basis of Civilization and Incompetent people don’t realize that they are incompetent.