The Good Old Days
I remember the first time I wrote a single line of code. It was in MS-DOS 6.0 in QBASIC back in 1995 on my first computer. My first “Hello World” program was awesome. I could not help but feel a sense of power when I learned I could actually “tell” the computer what to do. Back in 1995 the internet was slow and programming resources were scarce or hard to find. I taught myself everything from the Help contents.
Each day I opened QBASIC was like an adventure. “What can I do today?” I would wonder. I remember teaching myself, and not quite understanding, arrays and data types.
I also grew up playing video games and wanted to make games like Final Fantasy VI. I wound up making small text adventures and very primitive graphics and animations (wasn’t everything pretty primitive back then?).
Did I care or think about program structure? No. I just wanted my programs to work. Plus I wrote a lot of spaghetti code (GOTO ftw!)
Did I apply “scientific” principles to my programs? Nope. I didn’t even know there was such a thing as that.
Did I think about testing? Not in the sense that we do today, at least. I did manage to use the debugger, but I really didn’t know what I was doing.
In my vain pursuit of a career in video game development, I obtained a Computer Science degree years later.
Professionally, I have performed manual and automated testing, written test plans, peer reviewed code, written my share of code, designed projects from the ground-up, and done front-end development.
When I was a child, learning QBASIC and basically just tinkering, I was a programmer.
Today, as a professional with a BS in Computer Science, I am a software developer. I think.
What Am I?
What is the difference between the three titles? Well, Wikipedia states that a programmer is
[A] person who writes computer software.[Wikipedia]
A software developer is
[A] person concerned with facets of the software development process. Their work includes researching, designing, implementing and testing software.[Wikipedia]
A software engineer is
[A] person who applies the principles of engineering to the design, development, maintenance, testing, and evaluation of the software and systems that make computers or anything containing software work.[Wikipedia]
I write computer software. So, I’m a programmer. But wait, I also research, design, implement, and test software. So, I’m a software developer, right? I also am concerned with “making…software work”. Isn’t that the point? We all want the software we develop to work correctly.
The label “software engineer” has always been a troubling one for me, and I am not alone. Edsger Dijkstra has this to say about software engineering:
A number of these phenomena have been bundled under the name ‘Software Engineering’. As economics is known as ‘The Miserable Science’, software engineering should be known as ‘The Doomed Discipline’, doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter ‘How to program if you cannot.’.[Edsger Dijkstra On the cruelty of really teaching computing science]
So, what am I? Does it matter what I call myself?
After doing a bit of research on the topic, I think the term “Software Developer” best fits me.
How about you? What are you? Am I just splitting hairs? Let me know in the comments!