Engineering Software
13 Mar 2021 - Thomas Depierre
What is an engineer? And engineering? The question is legitimate and pretty hard to answer. It varies from country to country based on how the profession developed and the type of contraption that proved particularly central to their society. Most of Europe will talk of military engineering and the capability to build siege contraptions and to bend the landscape to your military needs. The USA would talk of bridges and rails.
Let’s look at how the Conference of Engineering Societies of Western Europe and the United States of America defined “professional engineer” in 1961.
A professional engineer is competent by virtue of his/her fundamental education and training to apply the scientific method and outlook to the analysis and solution of engineering problems. He/she is able to assume personal responsibility for the development and application of engineering science and knowledge, notably in research, design, construction, manufacturing, superintending, managing and in the education of the engineer. His/her work is predominantly intellectual and varied and not of a routine mental or physical character. It requires the exercise of original thought and judgement and the ability to supervise the technical and administrative work of others. His/her education will have been such as to make him/her capable of closely and continuously following progress in his/her branch of engineering science by consulting newly published works on a worldwide basis, assimilating such information and applying it independently. He/she is thus placed in a position to make contributions to the development of engineering science or its applications. His/her education and training will have been such that he/she will have acquired a broad and general appreciation of the engineering sciences as well as thorough insight into the special features of his/her own branch. In due time he/she will be able to give authoritative technical advice and to assume responsibility for the direction of important tasks in his/her branch.
https://en.m.wikipedia.org/wiki/Engineer
This is pretty lengthy and basically the core of it is “applying originally and independently science to solve problems, usually in a group setting, in a continual manner, responsibly”. What this means in practice is that you learn a ton of science and maths. And then you try to find ways to make it work in your budget constraints through experiments, luck and bodges. And you keep it safe through gut feelings and trusting other engineers.
My experience has been that things get messy. That you need dozens of back and forth between prototypes and production lines until you reach something you can get to the market. And then discover that you were wrong all along and need to redo it all, hopefully after learning something from the process.
My experience has been that the best way to know if something will work is to go to the production line and find someone to build your thing. All your formal methods and simulation tend to break pretty fast. Oh and whatever your estimates for mass production were, you are off. By at least a year and an order of magnitude.
If you are reading that, you are probably working in software. What i described here is my experience in mechanical, electronic and civil engineering. And what I learned in engineering school. If that does not look like what you imagine engineering to be… well yeah. It is not.
But you may also think that it looks a lot like how writing software looks. Except that in our case, changes are relatively easy to do, just a few lines of text, and need little time. Tests are cheap. And we have an infinitely malleable process that can work in infinitesimally small chunks. And you would be right.
What that means is that the arguments that we see used a lot to say that writing software is not engineering…. basically says the opposite. We do not use formal methods ? Them neither. We barely test? You should see what QA looks like for your car.
Writing code and testing it in production is the most refined form of engineering that exists.
This post is part of a serie of two. It is, partially, a satire of the arguments I keep seeing about the relationship between engineering and writing software. My own position is that yes, writing software is engineering, but that the discipline called Software Engineering has nothing to do with Engineering. I also do not think that software engineering is “superior” to other forms of engineering. This is the argument of both side pushed to the extreme.