Job titles are important. It is interesting how many people give little thought to their title, or even their job description, and are then confused when they don’t see the success they expect. While there are many different ways to dissect this topic, I’m going to work through a particular distinction that has an increasing relevance in the field of software: the difference between science, development, and engineering.
If you browse the web, read blog posts on career development, or even look through college program descriptions, it is not uncommon to see the three terms somewhat mixed. You will see a “Software Development Engineer” position requiring a “Computer Science” degree, or a “Data Scientist” role requiring many years of “Software Development” experience. This mixing is a result of a lack of understanding of the three disciplines and their unique contributions to the creation of software solutions. By better understanding these differences, it is easier to identify where your expertise and passion lies and, consequently, where you should focus.
Let’s start with the definition of “science.” The Merriam-Webster Dictionary has several definitions, but the most relevant to this discussion is 3a:
“knowledge or a system of knowledge covering general truths or the operation of general laws especially as obtained and tested through the scientific method.”
To simplify the term, science is the production of new knowledge. Computer science, specifically, is concerned with the creation of new algorithms, new fundamental techniques for understanding or manipulating data, and better tools for utilizing these algorithms and techniques (such as compilers). In a deeper sense, Computer Science is also interested in the fundamental ‘why’ and ‘how’ of computation, and overlaps with information theory and decision theory in those pursuits.
Second, let’s look at “development.” Again looking to Merriam-Webster, we find definition 1:
“the act, process, or result of developing.”
This definition is only useful if we also define “develop,” where we will use definition 2b:
“create or produce especially by deliberate effort over time.”
By understanding both definitions, we can discern that development is the process of creating or producing something by deliberate effort over time. In the software world, this is implementation — the actual process of taking the time and putting in the effort to implement a solution.
Finally, for “engineering” we again find multiple definitions, but will go with 2a as the most useful:
“the application of science and mathematics by which the properties of matter and the sources of energy in nature are made useful to people.”
In other words, engineering is taking knowledge (produced through science) and applying it to real problems. For software, this is the design and architecture of systems, or the creation of solutions, by leveraging the algorithms and tools that exist in the industry.
For the sake of better understanding, let us consider an example. In the very young field of applied machine learning, you will find all three roles present. A machine learning scientist will be focused on the creation of new models, new parameter sets, and new algorithms for solving machine learning problems. An engineer in machine learning will take the new algorithms and models developed by the scientist and will create products, develop data pipelines for training, wrap the models in operational constructs, and produce something customers can use. A developer will focus on the actual implementation of the designs and systems created by the engineer.
Of course, in reality, no successful person in software will find themselves in one exclusive role. It is common for engineers to also be developers, and for scientists to have some engineering and development responsibilities. Nonetheless, it is important to understand the different focus each has, the different contributions they make, and the different passions driving each discipline.
By looking at these three definitions, you can begin to see the different ways that a career can progress and the different types of skills required in each specialization. You can also begin to understand why someone who is a strong engineer might not be a strong scientist, or someone who is a particularly talented scientist might not be a great developer. Each of these areas requires a different way of thinking, a different mindset, and a different perspective on the world.
Which of them is the best fit for you? If you can answer that question, you can begin to guide your career towards the roles and opportunities that are the best fit and, as you do, you will find your passion and truly excel.
Justin, of The Aspiring Principal