Scott Thompson was let go this week as CEO of Yahoo for falsely claiming to have earned a bachelor's degree in computer science. I need not rehash the events, which played out in the headlines for the last ten days, nor need I enter into the ethics of the matter. But I do have to chuckle at Thompson's choice of embellishment: A degree in computer science is probably the one credential in our field that is well defined and easily verified. Had he instead chosen to claim he was a computer scientist or a software engineer, no hedge fund manager could have ever ousted him for a false claim.
Actually, computer scientist, while still rather undefined, does suggest a course of study in computer science. If you look at the kinds of articles published by computer scientists, they tend to be academic papers explaining research in narrow niches. At least, that's what the field has evolved to. It might have made more sense for computer science to have evolved into the hardware engineering in computers. As Edsger Dijkstra once observed, "Computer science is no more about computers than astronomy is about telescopes." And he's exactly right, the name suggests a principal focus on the hardware, rather than on its actual calling software.
While computer science is a poorly defined term, software engineering is not. Software engineering is accurately explained in Wikipedia as "the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software." As most of you know, it has come primarily to mean the study of quality in software. But in an odd historical quirk, "software engineer" is a title that, in the U.S., can be accorded to most any programmer. There is no formal standard, no certification needed, and in almost all cases the "engineer" need know absolutely nothing about software engineering.
A look through help wanted positions for software engineers shows few openings (to speak of, none) that require anything more than programming experience. The range of experience is more controlled by the word "senior" in the title than by the presence of "engineer." In the listings I examined, I found none not a single one that required experience in software engineering. As such, the title of "software engineer" is something of a conceit, a euphemism for someone with better than code-slinger skills. Or does it require even that?
"Software engineer" is only the latest term to undergo this peculiar disconnection from the reality it implies. In earlier generations, the title of "analyst" was the favored term. In the data-processing world of yore, the entry level was "programmer." When a change of title was needed to reflect tenure, the programmer was elevated to a "programmer/analyst." Then ultimately, an "analyst." This metamorphosis might have implied that programming was an activity the employee had finally left behind. But in fact, most analysts did even more programming than their more junior brethren. Analysis was not often a large part of the job, except insofar as some of positions did require analysis as an adjunct to programming.
While I think the industry would benefit from some kind of requirements for programming titles, I enjoy the looseness of the terms because they reflect a unique aspect of programming: the value of the self-taught individual. It's not considered astonishing that Bill Gates, Mark Zuckerberg, and other famous hackers who dropped out of college still succeeded on their programming chops. And it's not peculiar at all for them to discuss programming with Ph.D.'s in computer science. The industry is based on merit rather than academic credentials. The secondary standing of such academic credentials bleeds into the employment listings, which invariably ask for a computer-science degree "or equivalent." The ill-defined "equivalent" affords plenty of room for candidates with demonstrated coding prowess but lacking the academic formation. In sum, all are welcome to the party. And with that in mind, I raise my pen to you, dear readers software engineers all!