Empirical Software Engineering

I found this American Scientist article rather interesting, though flawed. It's titled: Empirical Software Engineering - As researchers investigate how software gets made, a new empire for empirical research opens up.

Software development is quite logical and tends to attract programmers of a mathematical mindset. Innovative programs can be valuable so programming also attracts creative talent. But the code produced by programmers, unlike the works produced by mathematicians or fiction writers, can be embodied in computers. Given life so to speak. (Some AI programmers believe this quite literally.) Therefore, since life can be studied scientifically -- so can code. And such study can be labeled a "soft" science, for example, like biology. Embodiment means that reviewing code can be qualitatively more than just a peer review or literary critique. I see nothing wrong with looking at code this way.

But this can be taken too far. A seemingly similar point can be made about software development processes. The methodology for generating code (that performed by programmers, not compilers or byte code generators) is certainly embodied. Thus, software development can be labeled software engineering and comparisons can be drawn between the methods programmers use developing code and the design methodologies used by engineers in the various "hard" engineering disciplines. For example, it is very common to draw an analogy between object-oriented design and the design of mechanical structures, systems, and components.

Anecdotally, being both a professional mechanical engineer and a professional programmer, this is not an analogy I would ever draw. IMHO, there are advantages to having a hard engineering background in software engineering, but it's more fundamental than drawing analogies between methodologies.

Further, computing, the activity of using computer hardware and software, can be labeled computer science and an analogy drawn between the knowledge used by the hard engineering disciplines (i.e., scientific knowledge) and the knowledge acquired by computer scientists. It is not at all clear to me that this is a good analogy to make.

Thus, my complaint with the American Scientist article can be seen in the first sentence: "Software engineering has long considered itself one of the hard sciences." The authors basically agree and argue that a new empire for empirical software engineering is opening up. However, I don't take the analogy between software engineering and hard engineering very far. I certainly would never equate them.

Besides, this conflates science and engineering. Science is the acquisition of scientific knowledge. Engineering is the application of scientific knowledge. Engineering is not science. So not only is software engineering not hard engineering, it is not a hard or soft science.

But flawed terminology notwithstanding, the article had some interesting things that I will get to in my next post.

No comments:

Post a Comment