Reading01: What is Computer Science
The precise role of computer science is open to much debate. As the domain of software development has progressed over the last three quarters of a century, the most appropriate way to categorize the discipline has not always been obvious. Is it an art, a science, or an engineering discipline? Does it matter? Compelling arguments can be given for each, so throughout this post I will detail why I think computer science is an engineering discipline – just one of a different sort than we are used to. However, I will ultimately explain why I think the distinction is essentially irrelevant.
The relevant entry for the word “engineering” in the Webster dictionary gives a two part definition: engineering is (a) “the application of science and mathematics by which the properties of matter and the sources of energy in nature are made useful to people” and (b) “the design and manufacture of complex product.” Using the dictionary definition as the standard of proof for whether software development is an engineering discipline leaves a relatively simple task. For part (a) of the definition, I think it is quite difficult to argue that software engineers do not “make the properties of matter and sources of energy in nature useful to people.” Sure, if it weren’t for the electrical engineers who build and design the necessary circuitry and chips, cell phones would not exist. But neither would they exist without the computer programmers who developed the operating systems and software to allow average humans to interact with these machines at ease. Thus, computer scientists qualify as engineers according to part (a). Part (b) is even easier to deal with. Software developers design and release complex products on a daily basis. Just look at the code required to run Facebook or power a self-driving car if you don’t believe me.
It could be argued that since computer scientists are dependent on the work of other engineering disciplines (especially electrical engineers) for their work to be possible, they are somehow less qualified as engineers. Though I think this argument is shallow and ignores the fact that collaboration among engineers of different disciplines is commonplace (just think about what is required to build a skyscraper), I do think it underscores the idea that electrical engineers (and even the “computer engineers” responsible for hardware and very low level software development) are a more traditional sort of engineer than the software engineers of today. The difference between software engineers and the more traditional engineering disciplines is that the traditional engineers work more closely with the raw elements of the earth, while software engineers work more with the products of other engineers (though all engineers today use software products, so this might be somewhat circular). Thus, while I definitely do consider software developers true engineers, I will concede that a concrete distinction between them and members of the other classical engineering disciplines.
In the end, though, I think this argument is somewhat unimportant. Rather than getting caught up in semantics, I believe both traditional engineers and software engineers should look at their respective shortcomings and strengths and look to the other to improve. Collaboration between engineers makes the world a better place.