Software engineering

I’ve had some doubts about my field of software engineering over the last few weeks, almost to the point where I had trouble working on anything. It started with some articles I read online about differences in programming languages which had really strong opinions on which languages were really bad. I thought about this for a while, then realized that this can be generalized to most activities related to software development, from design to implementation. It came as a hard wake up call: you have this idea that what you’re doing is scientific but then you realize that you’re unable to objectively justify your decisions.

After meditating on this for some time, these are the conclusions I’ve come to:

Engineering is guessing, with style

This sound kind of strange but what I’ve found is that, if the answers were obvious, it wouldn’t be called software engineering, it would be called software manufacturing. It actually goes much deeper than that: if software choices, whether they are about languages, frameworks, tools or implementations could be decided by numbers, I’d be out of a job, replaced by a machine. The fact that so much is debatable in software engineering reflects its very nature as knowledge work.

By guessing I mean educated guessing, obviously those years of experience and putting yourself through school pay off, but it is still guessing and, in my opinion, what engineers do.

Engineering is about results

On the other hand, it is still engineering, not art. What this means is that, as an engineer, your goal is to solve practical problems (I believe art is oriented towards more metaphysical problems). Thus, some measure of validation is implied in engineering: an engineer’s job is to come up with hypotheses to solve a problem and test them to choose the most suitable one. This is necessary not only to confirm that the problem is solved but to create validated learning, thus building the engineer’s and his or her organization’s knowledge, leading to better and faster guess making the next time around.

Conclusion

Engineering is neither a completely by numbers job, nor a subjective field. It is actually the result of a balance between an engineer’s creativity, his ability to create new solutions based on his intuition and past experience, and fact checking to confirm the validity of these new solutions.


Share this

Tweet Share on LinkedIn