Maybe you've been in the situation of being looking for a job or recommending someone in your company, and when reading job descriptions, you found all these terms: Software Developer, Engineer, Programmer, Back-end, Front-end, Embedded, and others. You ended up thinking, what's the difference between all of these terms that sounds almost like a marketing campaign, and why they seem to be just the same or very similar.
Often recruiters don't have a bright idea of what's the duties for each role, or perhaps the companies have blurred the lines for each kind of position. To get a clear picture, let's visit each definition in detail.
According to Wikipedia,
A software engineer is a person who applies the principles of software engineering to the design, development, maintenance, testing, and evaluation of the software that make computers or other devices containing software work.
As you can see, the previous definition covers a broad range of duties, which goes from development or programming to configurations, testing, maintenance and other concerns related to software. In this way, a Software Engineer is a more general term you can find, and by extension, it applies to the other definitions we'll cover next.
Let's retake a look at the Wikipedia's definition:
A software developer is a person concerned with facets of the software development process, including the research, design, programming, and testing of computer software.
You can see a Software Developer as an engineer who specializes in the first 4 phases of the Software Development Life Cycle (For a complete and formal definition, take a look at IEEE's Software Engineering Body of Knowledge SWEBOK):
- Software Requirements
- Software Design
- Software Construction
- Software Testing
Programmer is just an informal way of referring to a Software Engineer or Developer, who of course writes computer programs. Sometimes it's used to describe a person with knowledge of a particular programming language but hasn't completed a degree in computer science or comes from another related career rather than CS.
This one mainly is a source of confusion to many people (including me once upon a time). Perhaps the word computing make many of us think of it as a synonym of software or just the use of a computer to get work done. Some others even think that's about repairing computers, which is, in fact, a professional duty rather than engineering.
To clear our minds, let's read the following definition,
Computer engineering is a discipline that integrates several fields of electrical engineering and computer science required to develop computer hardware and software. Computer engineers usually have training in electronic engineering (or electrical engineering), software design, and hardware-software integration instead of only software engineering or electronic engineering. Computer engineers are involved in many hardware and software aspects of computing, from the design of individual microcontrollers, microprocessors, personal computers, and supercomputers, to circuit design.
As you can see, it's the cross point for two different but still related disciplines, Software, and Electronics Engineering. (Recently I wrote a post about moving from Electronics to Software Engineering you can read here )
Another significant source of confusion, maybe by the complexity and interdisciplinary nature of Systems Engineering. It's easy to get lost on what are the functions of this kind of engineer, and many of those duties are present in other engineering roles.
According to Wikipedia Systems engineering is an interdisciplinary field of engineering and engineering management that focuses on how to design and manage complex systems over their life cycles.
Systems engineering deals with work-processes, optimization methods, and risk management tools in such projects. It overlaps technical and human-centered disciplines such as industrial engineering, mechanical engineering, manufacturing engineering, control engineering, software engineering, electrical engineering, cybernetics, organizational studies and project management. Systems engineering ensures that all possible aspects of a project or system are considered, and integrated into a whole.
This engineering field goes far beyond the responsibilities a software engineer has. System engineers are responsible for creating whole systems like electrical appliances, cars, airplanes and other very complex systems.
Similar to the case of Software Developer, a Software Designer is a professional in Computer Science who specializes in the design stages of the SDLC. Companies often use the term to make emphasis on the analytical skills like algorithm design, statistics, architecture and other high-level abilities rather than implementation skills like programming language proficiency.
In a software development team, a software analyst is the person who studies the software application domain, prepares software requirements, and specification (Software Requirements Specification) documents. The software analyst is the seam between the software users and the software developers. They convey the demands of software users to the developers.
A Software Analyst has knowledge and expertise in programming but is not part of his daily basis. Analysts are more focused on the subject domain of the project he's working on and communicating well with other team members.
SW Quality Assurance Engineer (QA)
A software quality assurance engineer is involved in tasks that include software design, writing source code, control of source code, reviewing code, configuration management, change management, program testing, integration of software, and release management process.
The main difference from a software developer is that QA engineers perform tasks related to later phases of the SDLC of the project,
- Software testing
- Software Maintenance
- Software Configuration Management
A web developer is a programmer who specializes in or is specially engaged in, the development of World Wide Web applications, or applications that are run over HTTP from a web server to a web browser.
In Web development, there are 3 traditional classifications, depending on the sub-specialization area,
All the development involving code that runs on the client side or the browser. These include the visual interface, styles, and behavior seen by the user when enters a website direction on the browser.
Back-end development refers to programs that run on the server side, including database management, web APIs or any data processing task that a user never sees directly.
Full-stack development covers the 2 previous ones. A Fullstack developer is proficient in the back-end as in front-end development, having the skills needed from both.
Electronics engineering, or electronic engineering, is an electrical engineering discipline which utilizes nonlinear and active electrical components (such as semiconductor devices, especially transistors, diodes and integrated circuits) to design electronic circuits, devices, microprocessors, microcontrollers and other systems. The discipline typically also designs passive electrical components, usually based on printed circuit boards.
Electronics engineers usually have programming skills in low-level programming languages, which lets them become easily in Software Engineers, for instance in Embedded Software Development.
Embedded Software Engineer
An Embedded Software Engineer is a Software Engineer who specializes in developing programs to control machines or devices that are not general use computers, but for specialized computer systems with time and memory constraints.
Embedded Software Engineer vs. Software Developer
As an additional reference, this article explains the main differences between an Embedded and Software Developer.
Thank you very much for reading this blog, I hope you found it useful and hopefully cleared some doubts. See you next time!.