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