Wednesday, January 13, 2016

CS: Art, Engineering, or Science?

Several articles included within the first reading assignment ask the question “What is software development?” Is it science, engineering, or perhaps even art? In my opinion, computer science and software development are not engineering disciplines. They do not have several prerequisites needed to be included within the engineering field. Instead, software professionals engage in what I prefer to think of as “artistic science.” As an electrical engineering student, my opinion may contain some bias, but I'd like to make a few points to help illustrate my claim.
Traditionally, engineering has been defined as the manipulation of physical laws with natural materials in such a way as to achieve a beneficial and finite result. As Stack Exchange founder Jeff Atwood mentions, “Traditional bridge-building engineering disciplines are based on God’s rules—physics. Rules that have been absolute and unchanging.” Software development does not fit within either of the above definitions. Physical laws like gravity, mass/energy conservation, quantum behavior, and even time-dilation have no bearing upon software development. They are important, however, for the electrical engineers who create the hardware necessary for software developers to ply their craft. Furthermore, software development does not rely on naturally-found materials to achieve an end. All a software developer needs are creativity, knowledge, a development environment, and a good mechanical keyboard. With these immaterial and/or unnatural inputs, a software developer can, like engineers, set out to achieve beneficial results. However, unlike the results of good engineering, software is never a finished product. Ian Bogost from The Atlantic points out that “today’s software development is iterative.” Unlike bridge-building, where the first iteration can be the only iteration for 50 or 100 years, software developers are free to continually improve their products. They are free to keep developing. This final reason alone certainly explains why computer programmers should be called developers and not engineers.
                Although software developers should not be classified as engineers, they can be classified as scientists. The iterative nature of coding very closely parallels the experimental processes scientists use. Inherent within scientific experimentation is a need for repeat-ability and stable boundary conditions. Software development relies on the very same. If computers did not offer repeat-ability and stability, software development couldn’t take place. Furthermore, like scientists, software developers rely on mathematics to inform their work. Without discrete math and the mathematics of binary logic, code developers would not be able to create a product which computer hardware could run. Clearly, software developers rely on the principles of scientific experimentation in their work. Consequently, they can be considered scientists themselves. However, computer science involves another element: creativity. Great software is great artwork, and creative computer scientists are also creative artists. Like artists, computer programmers have the ability to apply creative thinking to a blank canvas (or blank source file, as it were) and create something truly beautiful. No one would argue that Windows and MacOS weren’t works of art when they first came out. They beautified the computing experience, just as works of art beautify the human experience. Facebook changed human discourse in a way not unlike great art forms can. So, to fully describe the field of software development, it must be thought of both as a science and as an art.
                With all of the above taken into consideration, it becomes evident that software development is not a form of engineering, but rather a combination of science and art. It does not create physical or finite results in the way engineering does. Rather, software development is a scientific exercise which requires artistic creativity and discipline. In short: computer science is an acceptable term, software engineering is not.

No comments:

Post a Comment