Last month I expressed my concerns with the current trend of recruiting young folks, especially women, to be trained to write programs so they would have a useful trade with which to enter the world of Work.
I mentioned that while I have nothing against teaching anybody the art and craft of programming (in fact, I believe it fosters creativity, confidence and perseverance), I do worry that these short training courses have the potential to do more harm than good.
Why would I think such a thing?
Because, as the old saying goes, “A little learning can be a dangerous thing.”
Writing a single short program to do a simple application is a creative, rewarding and relatively straightforward process. But the creation of real-world software is no longer a simple proposition; it requires a well-oiled team of individuals writing code that works well together.
While it is possible to teach team skills to novices, it is very, very difficult (near impossible, I think) to teach one how to write programs that are correct, efficient and reliable.
To be correct, the program must represent an accurate solution to a problem, and this is the most difficult and important part of the problem-solving process.
In many cases we can end up with a solution to an entirely different problem than the one we wished to solve or other unintended side effects.
For example, suppose the problem is to keep food from spoiling, then one solution is to design and implement a refrigerator. I begin by identifying a list of requirements or specifications for the fridge; e.g. “The finished product should be capable of cooling food down from temperature X to, say, temperature X-32 in Y minutes” and a host of others concerning power, efficiency, size, weight, etc.
But no matter how hard I try, I cannot write a complete set of specs (if I could I would have to include unlikely ones such as: “When the user opens the door the food should not fly out of the fridge.” The best I can hope for is the final implementation adheres to my set of incomplete specifications.