Don’t you dare compare surgeons and programmers!
My recent blog post has recently generated a lot of controversy. After it was featured on HackerNews, my blog received more than 5,000 hits in the course of a couple of days. I never expected that my reflections on the nature of programming interviews and introductory Computer Science education could prove of interest to so many computing professionals.
Quite a few readers of the blog chose to comment, both on the blog itself as well as on various other sites (e.g., YCombinator). Most of the comments were quite positive, complementing my approach to teaching job interviewing skills from early on. Nevertheless, a consistent theme that runs through the comments is that my analogy of comparing experienced surgeons and Computer Scientists is ill-conceived.
As a professor, I was a little disappointed that my correspondents chose to focus on the obvious “the way things are: a professional’s experience and background matter a whole lot in medicine, but are completely discounted in computing–so your analogy is wrong.” In essence, the comments focused mostly on how things are rather than on how they can or should be. It would be more interesting to explore deeper questions such as (1) why is this analogy inaccurate? (2) are we happy with the status quo or do we want to change the situation? (3) what can we do as IT professionals for our profession to enjoy as much prestige and admiration as medicine and law?
Let us explore some of these questions by examining some of my correspondents’ arguments.
“Not all CS Ph.D.s are good programmers.” Of course not! Not all cars can handle off-road well. There are different makes and kinds of cars, and some of them cannot be taken off-road at all. The same applies to CS Ph.D.s. Although getting a Ph.D. in CS is a grueling affair, not all CS careers involve extensive programming. Also Ph.D. programs differ in their quality and reputation. One’s Ph.D. work can be concerned with designing and running users studies, and not involve a significant implementation effort. However, in my analogy, I was talking about CS Ph.D. holders whose background and experience is similar to mine: a Ph.D. in computer systems from a top 10 institution. All of my grad school colleagues who pursued systems research were top notch software developers. Furthermore, all my current Ph.D. students have exceptional Software Engineering skills. If they did not posses these skills, they would not choose to work with me.
Thus, the question is “why a systems-oriented Ph.D. degree from a top 10 institution is not considered a valid proof of the holder’s programming proficiency?” I think one issue is the relative ignorance on the part of the general populace of what it entails to earn such a degree. In my Ph.D. institution in the systems area, it took 6.5 years on average to get a Ph.D. Furthermore, each candidate had to implement state-of-the-art systems that contributed new knowledge about computer system design and implementation. My own Ph.D. dissertation is backed up by close to 100K lines of code, which on average can be on the low side. (I also worked as a commercial software developer for four years prior to grad school, but this is besides the point.) And yet, for people with my background and experience the ability to write code is routinely questioned.
“To practice medicine, one must be certified.” Should we certify computing professionals? Major technology companies offer their own certifications, but those are not universally recognized. If software is of vital importance to the modern society, do we want to require a certification for people producing software for a living? If we are to require a certification, should it be another government function? Or an institution similar to Certified Public Accountants would be more appropriate? Should we as a profession have both oral and written portions of board exams? Would such certifications be trusted by employers? Would have a certification process improve the quality of the IT workforce?
“A medical doctor’s job recommendation is rock solid.” The argument goes that when evaluating a job candidate, one can fully trust the recommendations of the candidate’s former co-workers in case if they are medical doctors; the recommendations of fellow programmers are not worth much, as they can be easily fudged. Why is a recommendation from a colleague is treated so differently? Does our profession suffer from a serious integrity problem?
“Medicine is learned through apprenticeship” Isn’t, ultimately, programming also learned through apprenticeship? How many fresh college graduates are immediately ready for the challenges of industrial software development? I am sure there are some, and I had them among my own students. But in reality, new professionals learn a whole lot during their first couple of years on the job from more experienced programmers. How can we claim that programming is not learned through apprenticeship? Would it be beneficial to make the apprenticeship component more formal? If we do so, what procedure should we follow?
“When practicing medicine, human lives are at stake” Software systems are at the very foundation of modern society. While the domains in which human lives are directly dependent on software are relatively few, software affects vital facets of human existence. Shouldn’t the job of a Software Engineer be afforded an appropriate level of respect by the society? What can we do as computing professionals to elevate the status of computing? Is it the issue that computing is too young as a discipline? Will the problem take care of itself once computing matures?
If I missed any important arguments, please let me know, and I’ll append this discussion.