There is an age-old debate about what qualifies as “Software Engineering” versus “Programming” or “Coding” and it stems from a misconception in many parts of the tech community about exactly what true engineering entails. As software engineers do not generally have the rigorous certification processes in the United States that our civil and other engineering counterparts do, there tends to be a lot of people calling themselves “engineers” when, in fact, they are more like “coders” or “programmers,” not that it is a bad thing by any means. They both have equally important parts to contribute to the field of software development, just at different levels and with different responsibilities.
So, what exactly qualifies someone as a Software Engineer?
Software Engineering is a highly technical field, but also one that is not merely concerned with writing code. Software engineering is typically much more about the process and lifecycle of software development than actual programming. Software engineering is thinking about the long term and big picture utilizing a systematic methodology. In other words, building systems for tomorrow and not just features for today. Software engineers are sort of like technical project managers in that the processes of developing software are established and/or managed by them, but unlike project managers in that they can jump in to help guide, validate and work with code or supervise junior programmers. Different organizations treat software engineers in different ways, but the one thing that always remains the same is that engineers are process oriented first and programmers second.
And a coder, programmer or “hacker” is…?
Let me break this down a little more. Coders and programmers generally refer to the same thing – basically, someone who writes software based on requirements or specifications, whereas “hackers” typically refers to a more “shoot from the hip” and less organized, but more creative, way to produce software or systems. On the software development spectrum, engineers are at one end and “hackers” at the other – but that is not to say you can’t be a little bit of both at the same time. Almost anyone can learn to code in as little as a few weeks because the effort involved in creating software has decreased dramatically over the years but engineering, however, takes much more experience, education and time to get right.
Moving from “coder” to “engineer”
Most young companies begin with a single person creating their product or managing their IT operations. They don’t have the luxury of hiring enough personnel to establish a junior-senior hierarchy. Since coding (or programming, or hacking) is an entirely different mindset than management, all startups typically begin operations without proper engineering processes. It is when things pick up, and the business grows, that there is a need to standardized for the sake of quality, security, stability and predictability. No more can we edit code on the live server through FTP, no more half-baked verbal requirements or seat-of-the-pants scheduling, no more skipping comments and documentation, no more selecting your technology stack simply because you read about it on a blog and it sounded hip, and no more excuses for lacking adequate test coverage. Your business needs to start thinking and acting more methodically if you want to grow without falling apart at the seams.
The move to an engineering-based operation typically starts with the hiring of experienced talent, whether a person or a business, to implement the needed processes. Someone who is familiar with bringing order to the lawlessness that generally is startup coding. In doing this for many other companies, it is something that I can say with confidence can only be learned from a varied combination of education and experience.