What is computer science? This is a highly debated topic right now which has led to an attempt to categorize this degree/profession/field/discipline/thing. A few of the attempted categorizations of computer science are science, art, and engineering. I personally believe computer science is both an art and a form of engineering. I have nothing against calling it a science, but I also have nothing for it. Science makes me think of biology, chemistry, psychology, etc. Of course, computer science can be applied to all of those subjects, but I would not group computer science with them. On to the defense…
Why is computer science an art? Well, I think there are multiple reasons and no clear answer. It’s hard enough to define art, so I am going to do my best to define computer science as an art. First of all, there is plenty of room for creative expression in computer science. You could give 100 programmers the same task and odds are none of their solutions would be the exact same. This is one thing that always stood out to me in art classes growing up. Often, the entire grade at my school would be working on the same art project for months at a time. Once finished, none of our projects would look the exact same. Each picture had a uniqueness defined by the artist, and I believe that phenomenon exists in code as well. Creativity can be suppressed in corporate settings where code structure is clearly defined, but so can the creativity of art – just think of all the periods of censorship that have occurred throughout history.
Like art, computer science also has the ability to produce beautiful results. There are many instances that I have felt and admiration for the beauty of computer science, but the one that always stands out to me is CSS Zen Garden. Zen Garden is a demonstration of the capabilities of programmers who design websites using CSS.
Along with creative expression and beauty, art tends to have the ability to bring things to life. Many computer science applications also involve bringing things to life. This capability leads some people to believe the ability to code is somewhat of a super power. We can create robots and machines that can think and learn. Several of the produ
cts we use on a daily basis are plastic/metal objects that are brought to life by software. One example of this is Roomba, a robot that will do your vacuuming for you. Another obvious example of computer science bringing inanimate objects to life is the field of computer graphics, specifically animated movies. Companies like Pixar have disrupted the film industry by leveraging computer science to produce memorable movies and characters. Some of the most recognizable film characters are animated – Woody and Buzz Lightyear from Toy Story, the Minions from Despicable Me, and Elsa from Frozen. These characters were all brought to life by programmers.
Moving on to engineering… can computer scientists call themselves engineers? Yes. Take a moment to read the Merriam-Webster definition of engineer
A person who has scientific training and who designs and builds complicated products, machines, systems, or structures : a person who specializes in a branch of engineering
I don’t see how you could deny a computer scientist the right to associate with the definition of engineer. Although one can learn computer science on the internet, a scientific training to become an expert is still necessary. Even self-taught computer scientists develop their skills by studying material, practicing on their own, and applying what they have learned to solve problems. In order to solve problems, computer scientists first design potential solutions. In fact, a common job title in the industry is Architect. The title is given because there is a systematic process that takes place before teams of computer scientists build complicated products or systems that are beneficial to consumers.
One counter argument to my claim comes from the traditional responsibility of engineers to ensure public safety and make reliable products. Skyscrapers, bridges, power plants, and elevators are built to meet specific standards and failure to meet them could result in endangering the public. As a result, this type of engineering is highly regulated and failures are rare. In computer science, there is little regulation as to what code reaches production. Bugs are often found in software releases that lead to significant failures such as data leaks. Many people use this to discount the engineering qualities of software engineering, but I refute this argument. What if you had highly skilled civil engineers trying to break bridges? I bet they could find ways to cause the construction to fail and harm the public. That’s what computer scientists are facing – other highly skilled computer scientists who spend considerable amounts of time trying to break software. Computer scientists are responsible for maintaining their software, just like engineers are responsible for maintaining skyscrapers, bridges, etc. Thus, I think this counter argument is flawed and my defense further supports the classification of computer scientists as engineers.