I was having a conversation with a young fella just yesterday and he asked me what I did for a living. I answered with my usual response — I’m a Software Engineer.
His reply was a common one, “So you’re a programmer?”
He certainly meant no ill-will with the assessment. It’s a common misconception. Still, I can’t help but cringe when that’s the word used to describe what I do for a living.
I have a Bachelor of Science degree in Computer Science from Texas A&M University.
It was awarded to me by the Dwight Look College of Engineering in College Station, Texas.
That’s right, the college of engineering.
I’ve been able to program since I was in fourth grade (no lie, QBasic for the win!). But engineering? That’s an actual professional skill.
In my opinion, programming is little more than a trade skill.
While it’s not as easy as digging ditches (intellectually speaking), it’s also not exactly rocket science.
Kids in elementary school are taught to program on a rudimentary level, and kids in high school could likely program as well as me — and I have a degree and 6 years experience.
I’d be lying if I said I didn’t spend a lot of time programming.
I absolutely do spend a lot of time programming, just like an architect spends a lot of time drawing plans.
But I am no more a programmer than an architect is an artist. It is simply something that I must do to convey my real skill — engineering.
Dictionary.com has a number of entries for the word engineer. Three of them are worth noting:
1. to plan, construct, or manage as an engineer
2. to design or create using the techniques or methods of engineering
3. to arrange, manage, or carry through by skillful or artful contrivance
My job is not to write code and make little programs go. My job is to solve problems. My job is to understand complex systems, design within the bounds of said systems, and provide a product that will perform with utmost efficiency and grace.
I would love nothing more than to give up programming and just sit around designing software. Engineering software systems is a much more challenging endeavor.
Having to program is all part and parcel to the whole job description, but that doesn’t make a software engineer equivalent to a programmer. It merely means that a software engineer can program.
Programming is the art of implementing a solution to a problem. Designing those solutions, however, is the domain of the engineer.
The whole computer ‘field’ of jobs is sort of amorphous and unregulated. You have the IT side of things – sys admins, computer support – and you have the software-creation side of things – software engineers, developers, etc. But it’s all sort of lumped together – even though a developer is, in most cases, completely unqualified to take on a sys admin role, and vice versa.
In all this lump of computer-ness, you have people that went through 6 months of on the job training, people that went to 8 years of school (PhD in CS), and everything in between.
There is no licensing, just your word that you are capable of everything you claim to be capable of. And it would be a difficult thing to license – if I was a licensed “web developer” 5 years ago, that wouldn’t be very impressive by today’s standards. With such a quickly evolving field, who would be in charge of updating licensing standards? It’s just not feasible.
So – for those of you not in computer fields – please don’t ask me to fix your computer. I write software for a living. I’m really not into diagnosing and replacing failed hard drives …
To make things even more complicated, what about the degree of Computer Engineering. How is that different from Computer Science? Does it matter? I took 4 years of programming in college and was a “software engineer” for Exxonmobil for almost three years, but these days I couldn’t program my way out of a paper bag. I guess its just as well, the only engineer I really wanted to be growing up was the locomotive kind. /train “woo woo chugga chugga chugga woo woo!”