We’re all scientists to some extent, right? That’s the question I’ve been asking myself lately as I try to navigate the distinction between being a scientist, an engineer, and a software developer. Have you ever wondered if these distinctions are arbitrary, or if they reflect some deeper reality? Here’s my take:

A scientist is just a person that approaches problems in a scientific way. According to me, the scientific way to approach problems is to begin with careful deductive and inductive reasoning, and follow up conclusions with experiments The goal of experimenting is to provide evidence against a general conclusion, and to provide specific details about the context under which a valid conclusion is sound. Some scientists go the extra step and create public reports on their conclusions. Their reports might be verbal or written, it doesn’t matter. What really matters is that the scientist records the details of their reasoning processes and the experimental procedures that were used to infer to their conclusions.

Engineers are a lot like scientists in that they approach problems scientifically. However, unlike a scientist, engineers work with (usually) a specific subset of all of the possible conclusions that are known to have a basis in reality, and they do so under certain experimental conditions. In so doing, engineers end up designing structures that maintain the truth of a conclusion in adverse or even independent experimental conditions. Thus, an engineer is a like scientist that’s learned experimental procedures, learned what parameters control a specific object, and usually, have some experience in designing and building new structures and contexts for objects to work in. 

Finally, a developer. A developer is someone that implements solutions to well-defined problems. Developer have experience implementing structures designed by engineers that are useful or desired by other people, including the developer. Developers may be scientific, but - in my opinion - they ought not be made responsible to the same demands as scientists or engineers. Most importantly, developers should know how to implement, and they should be able to do it quickly. That’s, I think the main distinction: time. When I’ve got some more of that, I’ll follow up by telling you how I think time & money factor into the distinctions I’ve made.