When it comes to job titles of people who write code, the most common ones are software developers and software engineers. But what is the difference between the two? Ian Brayshaw argues that the two should not be treated as synonyms:
Engineers see the bigger picture. They recognise the importance of understanding how a business works, as well as knowing why they are building something. They will insist upon designing software first so that they know what the final outcome should be.
An engineer is not necessarily a better coder than a developer, but they do make sure that they are involved in every step of the process and they will question what they are doing before doing it.
I do agree that engineers take more responsibility then developers, however I argue that this mostly down to experience, and a drive to get to new levels of understanding. Curious people that keep asking “why” while producing software and learning more over time will inevitably become engineers.
Hartley Brody has a similar view on this. He says hackers, developers and engineers are different phrases for the seniority of someone who produces code:
A hacker can come up with solutions, but maybe they can’t look back after they’ve finished and realize how they came up with the solution. (…)
At some point, you level up and become a developer and a developer understands best practices. They’ve heard other developers say things like “you should put your scripts at the bottom of the webpage” … and you use those best practices to craft solutions but you don’t really understand beneath the best practices, beneath the abstractions. (…)
An engineer is someone who can get things done, craft a solution — they understand the best practices, but they also understand why they’re using the best practices that they are. They move into an understanding of the platform as a whole.
Getting things done and crafting solutions are two key qualities that engineers practice daily. And there is no better way to get there then by practicing these two. Take a problem, code a solution, understand it, learn from it - rinse and repeat with a bigger one.
Following this method, after many-many iterations one gets to being able of comfortably tackle all sorts of complex problems. When getting here then congratulations - you have made it from developer to software engineer.