Would a Programmer by Any Other Name Smell as Sweet?
Its no secret that High-Tech is glorious field to be a part of right now. I confess, I tend to click on those click-baity listicles you see around with names like, "25 best jobs in America" and "top 14 jobs for Millenials". It is satisfying because I always see my own job as a software engineer ranked right near the top, if not at the very top. It pays well, the work is beautifully challenging, and the demand for talented people is through the roof, beating out even other high-ranking techy jobs, like System Adminstrator, IT Manager, Computer Programmer, Software Developer or....
Waidaminnit (sound of record scratch)
See, through my career, I've used the words Software Engineer, Software Developer, and Computer Programmer interchangeably to describe my job. But I notice that this is not always how they are used. Some individuals will insist that they are a Developer but not an Engineer, while others will say they are an engineer and insist on not being called a programmer. And the popular press tends to treat them as if they are entirely different career paths. I have even seen an article (I can't find it now) claiming that in the next 10 years, software developer jobs were predicted to increase by up to 30%, while programmer jobs were predicted to DECREASE.
With a little more thinking, while I still maintain that they all refer to basically the same job, I have noticed that there are subtle distinctions between what people mean by one title or the other:
Software Engineer
I'm showing my bias here. This is my preferred title. My original background is in Electrical Engineering. I have had people ask me why I left engineering to go into software, and my answer is, I don't think I did. I believe that creating software IS essentially a sub-discipline of engineering, and it will be increasingly perceived that way in the future. Already, it seems to me that universities are either beginning to offer software engineering degrees, or else their computer science degrees are becoming more and more tied to the engineering department. I think the big reason why this one isn't more widely used is that many programmers, particularly programmers who are self-taught or learned on the job, do not see themselves as engineers. But I also think that this is based on a mistaken impression of what engineering is: That it is a dry field, driven by a rigid set of documents, certifications, and standards with names like ISO-18837 and ANSI-92032. But while that is an aspect of certain areas of engineering, for instance, if you are part of a massive government contract, it is not really the heart of engineering. To me, an engineer is just a creative professional who uses a deep understanding of existing science, tools, and inventions to develop new problem-solving tools and inventions.
That said, I occasionally see "Software Engineering" used to indicate a specific group of practices and methods which help large-scale projects avoid becoming teetering towers of Babel. I'm thinking of practices such as continuous integration, architectural principles like SOLID and CQRS, and project management methodologies like Scrum.
Programmer
Programmer is probably the most understandable word when I'm talking about my job with non-technical folks. "Software Engineer" and "Software Developer" are quite a mouthful. But in professional contexts I've noticed that it is unwise to brand myself as a programmer. I think that the word "Programmer" has become slightly perjorative. It can carry an image of an uninspired coding technician; a cog in a huge corporate process machine: a human automaton who translates UML into code. This programmer relies on domain knowledge of one or two specific toolsets (He's a "Visual Basic Programmer" or an "Oracle Programmer"). He grows more and more worried about his job being outsourced to India as his favorite toolset is inched away down the conveyor belt of time towards the incinerator of obsolescence.
Possibly, if designing and creating software is increasingly being recognized as an engineering discipline, then "Programmer" is increasingly being used as a descriptor for Programmers who are distinctly not engineer-like. Thus:
- If "Software Engineer" implies someone with a rigorous engineering education, "Programmer" implies someone without a formal education in software
- If "Software Engineer" implies someone who uses methodical techniques to reduce errors, "Programmer" implies someone who shoots from the hip
- If "Software Engineer" implies someone who thinks about large-scale design and problem solving, "Programmer" implies a mere assembler of code who does not think about design
But I think this is a mistaken dichotomy. There are plenty of over-managed, cog-in-corporate-machine jobs in traditional engineering fields as well. The people in them don't transform into non-engineers, though being in one of them for too long will certainly cause your skills to atrophy. Even programmers with all those negative attributes are still doing engineering, they are just doing it poorly. I think the perceived dichotomy arises because in some large companies, management tries to excercise tighter control over development by forcing it into a framework similar to construction, where there are architects who design and workers who build. But this approach is doomed to be ineffective, because writing software is an intrinsically creative act. The model of the architect who designs/worker who codes is at odds with reality, because in software the code IS the design. Construction is done by the compiler. If the spec received by our programmer was actually detailed enough to be a finished design, it could just be run through a compiler, and the programmer would be unnecessary. But if not, The programmer will need to complete the design, and he will then be participating in engineering.
Software Developer
"Developer" seems to have become a preferred neutral title. The word acknowledges a role in design over mere key-punching, but it avoids haggling over the definition of "Engineer". The only problem is that it doesn't seem like it has the ability to replace "Programmer" in popular lingo. Just "Developer" or "Dev" is too vague to be understood outside of a software company ("You're a developer? You mean like, in real estate?"), and "Software Developer" is an ungainly six-count-'em-six syllables.
Marketing
In short, I think this stack exchange answer sums it up pretty nicely. They're the same thing. We just sometimes make distinctions for branding and marketing purposes
But still, I'd be interested to hear if you think I'm wrong about these definitions, or if you can think of any layers of meaning that I missed.
Header image courtesy of Wikimedia Commons
Subscribe to Axten Software
Get the latest posts delivered right to your inbox