Some devs are curiously not programmers
This is my logic about the relationships and distinctions between different terms that are often used in the software industry, such as computer scientist, software engineer, software developer, programmer, and coder. These terms may seem similar or interchangeable, but they can also have different meanings and implications depending on how you define and differentiate them.
For example, some people think that a programmer needs to have a certain level of skill or experience in coding, while others think that anyone who writes basic instructions for a computer can be considered a programmer. Another example is that some people think that a software developer needs to know multiple languages and frameworks, while others think that anyone who writes a program or builds a component can be considered a software developer.
So, ending the confusion (or increasing it 😏) for you techies...
Computer science > Software engineering >= Software development > Programming >= Coding
Computer science encompasses software engineering, which either encompasses software development or is synonymous with it, which encompasses programming, which either encompasses coding or is synonymous with it.
In other words:
Coding is a subfield of programming or interchangeable with it, which is a subfield of software development, which is a subfield of software engineering or interchangeable with it, which is ultimately a subfield of computer science.
The deeper logic
All software engineers are computer scientists, but not all computer scientists are software engineers.
Many software engineers are software developers, and vice versa; few software engineers are not software developers.
All programmers are software developers, but curiously not all software developers are programmers.
Many programmers are coders, and vice versa; few programmers are not coders.
Still confused, ha? Let me explain it via storytelling and personas.
A computer scientist who’s not dealing with software engineering?!
Thea Pedersen, Computer vision researcher.
Works at Noopaya since June 2023, and is responsible for exploring and implementing methods to process and interpret graphics and audio using ML and computer science.
Joined the software industry in 2023 at the age of 21.
Writes code in Rust.
Speaks Norwegian, Swedish, and English.
Lives in Stockholm, Uppland, Sweden.
Ankur Gupta, Algorithms expert.
Works at Raxxel since June 2021, and is responsible for implementing, analyzing, and optimizing algorithms for various domains and applications.
Joined the software industry in 2013 at the age of 27.
Writes code in Python and Julia.
Speaks Hindi and English.
Lives in Dublin, Leinster, Ireland.
Thea and Ankur have different backgrounds, titles, and responsibilities, yet both are essentially computer scientists. They deal with the science/math aspects of the system that other employees do not, while dedicating less than 10% of their time to actual engineering.
Computer science is broader than software engineering as it deals with the fundamental concepts and principles of computation, while software engineering applies those concepts and principles to specific software systems.
A software engineer who’s not dealing with development?!
Lorena Moya, Software architect.
Works at Ovnez since February 2022, and responsible for designing and enhancing the app to meet user needs, as well as offering solutions to deep problems in the architecture.
Joined the software industry in 2008 at the age of 33 (career transition).
Writes code in C++, Elixir, and Clojure.
Speaks Spanish, Dutch, and English.
Lives in Amsterdam, North Holland, Netherlands.
Eyal Katz, System designer.
Works at Vexoop since October 2022, and responsible for creating and communicating information system designs using tech specs and diagrams.
Joined the software industry in 2002 at the age of 27.
Writes code in C#, Ruby, and Crystal.
Speaks Hebrew and English.
Lives in Rishon LeZion, Central District, Israel.
Lorena and Eyal have different backgrounds, titles, and responsibilities, yet both are essentially software engineers. They deal with the high-level aspects of the system/app that other employees do not, while dedicating less than 10% of their time to actual development.
Software engineering is broader than software development as it deals with the whole life cycle and structure of software systems, while software development focuses on the creation and implementation of software products or features.
A software dev who’s not dealing with programming?!
Mariam Al Qubaisi, Tech lead for automated testing.
Works at Derqanna since February 2020, and responsible for ensuring code healthiness of automated tests and CI/CD "jobs", as well as raising team productivity in software testing.
Joined the software industry in 2016 at the age of 25.
Writes code in Java and TypeScript (incl. JS).
Speaks Arabic and English.
Lives in Helsinki, Uusimaa, Finland.
Lukáš Novotný, Tech lead for Android app development.
Works at Najben since October 2020, and is responsible for ensuring code healthiness within the native app, as well as raising team productivity in Android app dev.
Joined the software industry in 2012 at the age of 29.
Writes code in Kotlin and Scala.
Speaks Czech, German, and English.
Lives in Berlin, Germany.
Mariam and Lukáš have different backgrounds, titles, and responsibilities, yet both are essentially software developers. They deal with the development aspects of the software that other employees do not, while dedicating less than 10% of their time to actual programming.
Software development is broader than programming as it deals with the whole process and purpose of software creation, while programming focuses on the skill and activity of writing code.
A programmer who’s not dealing with coding?!
Yeo Min-ji, SDK (iOS) integrator.
Works at Galaxana since October 2024, and is responsible for helping clients integrate the SDK(s) to upgrade their own iOS app(s) with hand-picked features.
Joined the industry in 2024 at the age of 31.
Writes code in Swift.
Speaks Korean and English.
Lives in Toronto, Ontario, Canada.
Min-ji is a programmer who specializes in integrating SDKs for clients. She deals with the programming aspects of the software that other employees do not, while dedicating less than 10% of her time to actual coding.
Programming is broader than coding as it deals with the general skill and ability of writing code for any purpose or platform, while coding focuses on the specific task and syntax of writing code in a particular language.
An employee who’s purely coding?!
Luis Reyes, Coder (internship).
Works at Balbalo since February 2024, and is responsible for writing, testing, and debugging code, while constantly learning the programming language and the framework used routinely.
Joined the industry in 2024 at the age of 23.
Writes code in Dart.
Speaks Spanish and English.
Lives in Seattle, Washington, USA.
Luis is an intern coder who handles coding and testing aspects of the software that others do not. He also spends time acquiring skills and accumulating knowledge during the first year of his career.
Use a self-descriptive job title
One of the challenges of working in the software industry is that many different roles and responsibilities fall under the umbrella of “software engineer” or “coder”. These terms are too general and can be misleading, as they do not reflect the specific skills and expertise that each individual possesses. A better way to communicate your value and identity as a software professional is to use self-descriptive job titles that accurately capture what you do and how you do it.
For example, instead of calling yourself a “pilot”, you could use a more specific title like “cargo pilot”, “helicopter pilot”, or “airline pilot”. This way, you can differentiate yourself from other pilots who have different qualifications and duties. Similarly, instead of calling yourself a “physician”, you could use a more precise title like “orthopedist”, “cardiologist”, or “pediatrician”. This way, you can showcase your specialization and expertise in a particular field of medicine.
Using self-descriptive job titles in the software industry can have many benefits, such as:
Standing out from the crowd and attracting more opportunities that match your interests and abilities.
Communicating more effectively with your colleagues, clients, and stakeholders, as they will have a clear idea of what you can offer and what you expect from them.
Growing your professional network and reputation, as you will be able to connect with other people who share your passion and vision.
Advancing your career and achieving your goals, as you will be able to demonstrate your value and impact in the software industry.
Define your roles and responsibilities
Having a self-descriptive job title is not enough if the roles and responsibilities are not well-defined and communicated. This can lead to confusion, inefficiencies, and conflicts within teams. For example:
Tasks can be overlooked or duplicated if team members are not aware of who is responsible for what.
Accountability can be lost or blamed if team members are not clear about what is expected of them.
Motivation and engagement can be reduced if team members do not understand how their work contributes to the overall project or organization.
Unfortunately, the current state of blurred lines between roles and responsibilities is all too common in many tech (software) organizations. This lack of clarity can have a significant impact on the success of a project and the productivity of the team. Therefore, it is essential to establish and communicate clear lines of roles and responsibilities for effective collaboration, accountability, and achieving optimal results. This can help to:
Prevent misunderstandings and ensure that everyone is on the same page.
Stay focused and prioritize the most important tasks.
Resolve issues and conflicts quickly and constructively.
Recognize and appreciate the contributions of each team member.
By having self-descriptive job titles and well-defined roles and responsibilities, you can not only enhance your performance and satisfaction as a software professional, but also improve the quality and efficiency of your work, as well as the relationships and trust within your team.