Software Craftsmanship:
Time To Pay The Piper
As the son of two educators, and as an aspiring educated person myself, I am interested in and appreciative of Jason Gorman’s focus on the topic of educating software craftsmen. His recent (and well worth reading) blog article A Proposed Grading Structure For Programming Practices presents some valuable insight into the challenge of training good programmers. But he then goes on to propose a solution which, to my ears, sounds like a certification scheme. A very rigorous certification scheme, granted, but a certification scheme nonetheless.
Scoring A Blue Note
The main problem I have with this is that it is not so much a solution as a way to measure the problem. I suspect it would confirm what we already know: that there aren’t that many really compentent programmers out there.
Jason points out that university-level music students have more of an element of practice as a criterion for graduation than do computer science (a.k.a. “programmers”). This is an excellent point. In fact, it’s brilliant. But to take the analogy still further, there are other aspects of music education which are instructive for software developers. First, few career musicians honestly expect that four years of university will be anywhere near enough training. They expect to start in childhood and continue to learn throughout their careers. Second, they spend many, many hours in one-on-one training with master musicians. And finally, they perform, and they lead in performance. They write compositions to be performed by other musicians. Sometimes they direct those performances.
So There I was, Educating A Yak
Now I have to ask: if universities have failed to spot these similarities between music and programming, and some other environment already mirrors many of these aspects, then why, oh, why would we want to use the dire need of the software development industry as an excuse to prop up and rehabilitate miserable university CS programs? This would be yak shaving writ large. It’s not that some universities couldn’t become part of the solution —some would. Some already are. But with so many un-degreed programmers making their way in software craftsmanship, and so many degreed programmers reporting that their degree was of little help in that pursuit, shouldn’t we be open to the idea that the universities will not be the epicenter of the solution to this problem?
Full disclosure: I say all of this as a man who chose not finish a degree, and whose major was not computer science in any case. Like many, many other programmers, I found my way into computers from another field. Naturally, it is interesting to me that so many excellent programmers came from other fields. I also am intrigued
that among the programmers with computer science degrees (in my observation), few wholeheartedly point to their CS degree as the linchpin of their success.
A Question of Kind, Not of Degrees
The plain fact, as I see it, is that universities have not figured out how to educate programmers. Perhaps the field is too young, and the topic changes too quickly. So instead of being served exclusively by experts in computer science, the field is being served by bright people from a wide array of other fields. I rather think that the diversity of backgrounds is, in point of fact, the very strength of the programmers that we do have. For the job isn’t simply to understand computers, but to marry computers to the real world. For that we must have people who not only understand computers, but who also understand something about the real world, at least some small part of it. And in my experience, the knowledge about the world ends up being as important as the knowledge about computers; in fact, if anything, the knowledge about the world is more important.
The problem for any proposed grading structure is that the overall field is incredibly broad. Any grading scheme would, of necessity, have to constrain itself to the part which concerns computers. And in the interest of focusing on computers, the problems to be evaluated would have to be relatively simple: easy to grasp, easy to model, so that knowledge of the real world is eliminated as a variable, and knowledge of computers alone is tested. I won’t say this is without value. But it’s not enough to assess good programmers. Not nearly enough. Consequently, a grading scheme would not only fail to solve the problem, but it would provide only a limited evaluation of the problem.
Breaking The Mold
When we look at the process involved in creating a master musician, we cannot fail to appreciate that it is a process which stubbornly resists the genius of Ford, of Taylor and of Dewey. So far as I know, no-one has managed to mass produce master musicians. Even in places where they are turning out huge numbers of them, we can see, on closer inspection, that there is an incredible amount of careful attention given to each one.
So it is with software craftsmanship: this is a pursuit in which we are hand-crafted by our mentors and by ourselves to become something which has a value which resists commoditization. This is an expensive and time-consuming process. It requires time, access to mentors and access to significant problems upon which to work and learn. The environment that provides all three of these things best is not the university. It is much more likely to be a successful software development company which has a committment to software craftsmanship and an internship program. Frankly, once a young programmer has gone through all the internship and apprenticeship needed to become a software craftsman, a series of stepped examinations will all be a bit redundant, for they will not (or should not) matter nearly as much as a solid commendation from a master craftsman with whom he has worked.