In this multi-part series, I look at software engineering as a separate discipline from Computer Science. For the software professional’s daily practice, I believe SE is a better degree, and I explain why. I decided to pursue a master’s degree in SE as opposed to CS. Earlier posts are found at:
Part One | Part Two | Part Three | Part Four | Part Five | Part Six | Part Seven
In my experience, most people who graduate with an undergraduate degree in Computer Science intend to become programmers. And who can blame them? Here in Seattle, a.k.a. “Silicon Valley II,” the best graduates of Computer Science programs around the country come here to work at Google, Microsoft, Amazon, Facebook, Expedia, and umpteen other well-known software, internet, or media companies. They get paid one of the (if not the most) highest starting salaries of any just-out-of-college worker and they often receive a nice signing bonus, stock grants, and other incredible benefits.
If you ask programmers what they do they often say they write code. They might say they “develop software.” Or they might be a little more specific and say the language they use to write the code. “I write Python.” There’s also the short and concise, “I’m a dev.”
A programmer, or a “dev,” is far from an “engineer.” What if you asked someone what they do and they said, “I engineer software.” That phrase should evoke something else entirely, something more. It should call to mind phrases you have heard like “engineered precision,” “an engineering marvel,” or “a masterwork of German engineering.” When someone says they engineer software it implies that this person is engaged in deep, broad thought about what they do and that they pay attention to every detail, bringing together many disparate elements into one well-thought-out and fully-formed product.
In other words, engineering is about leaving no stone unturned, leaving nothing to chance. For something to be well-engineered it has to have been thought through to a very deep degree, by someone who is well-respected in their field and who exercised craftsmanship and care in its construction.
Since that doesn’t sound like software, let the laughing commence.
But I want to beg the question: “What if?”
What if when we thought about software we could imagine applying the term “well engineered” to it? Many people believe this is impossible, but some of us don’t. There have been examples of well-engineered software. Look at the Mars Rover. I just don’t think we’ve set the bar very high. And most of the people “writing code” do not think of themselves as engineers. They are limited to thinking of their involvement with a product at the level of code. They don’t think about the big picture.
But the big picture…engineering a piece of software from top-to-bottom…that is the concern of a software engineer. And if programmers could move from programmer to engineer, then we could make strides toward transforming society’s view of software. To me that would be very valuable.