computer science: art, engineering, science?

Computer Science is a science. Interested parties methodically explore novel concepts in an effort to further the frontier of accepted practice.

Software development is an art. Developers use tools to create something that can be enjoyed by others, whether for function or for purely aesthetic reasons.

Software engineering is a third field dealing with software that requires a certain level of rigor, robustness, and reliability.

So when you sit down at your computer to type out some code, you could be doing any of the three, perhaps simultaneously. To me, there are clear distinctions between the three that I will elaborate upon and that are often blurred or misrepresented by others.


Computer Science lives primarily in the halls of universities. Student of computer science begin by learning the basics of programming – pointers, basic structures, memory allocation. They build up to knowledge of data structures, operating systems, algorithms, and more, but ideally, they fundamentally understand how their program will run, all the way down to the transistor – the (current) basic building block of a computer.

This breadth of understanding enables them to pick a spot and dive deep – to investigate a novel concept. This could be developing a new algorithm for a known problem or using known algorithms for new applications. There are metrics (e.g. temporal and spatial complexity) to evaluate findings like in other fields of science, and peer review is an important aspect of successful research.


Creating an app on your mobile device to count how many hops you make on a pogo stick is not science – it is software development, an artistic expression. Millions of lines of code are probably written everyday* by people seeking to create a new app, a new website, or a new way to animate a cartoon character.

Developers may roughly follow a scientific method, hypothesizing about what might work, testing out a couple of different solutions, and then implementing one, but there is a notion of software development lingering in the back of every software developer’s mind: everything can be rewritten. If your new app crashes, find the bug, fix it, and release an update. If your website does not lay out properly, adjust your formatting and hit save – next time someone loads the page, it will be different. As Ian Bogost notes in his piece in The Atlantic, software developers are often treated to the ease of rapid repair.

This is a major distinction from engineering. An engineer of a bridge cannot try out one support scheme and easily replace it if the bridge cracks – safety and a lot of money are at stake. An engineer designing the brakes of a car cannot go with “the best he’s got,” he is responsible for meeting a certain standard set by someone who figured out how good car brakes should be. It’s okay if your pogo stick hop-counting app crashes after you hit 100, it’s frustrating at worst.

*Didn’t look this number up but I can’t imagine it’s more than an order or two of magnitude off.

But there is software that is undeniably engineered. That bridge designed in part by civil engineers may also contain a monitoring system that ensures there is never too much weight or that detects small fractures in the material. The car brakes need to deal with frictional heat, but they are likely also controlled in part by the car’s central computer. Whoever writes the software for the bridge and the car is definitely an engineer. He is subject to the same safety standards as the other engineers.

Bogost had two points suggesting that software development is growing increasingly informal. He implied that its growing informality discounted it from being an engineering discipline. While his first point about ease of rapid repair was sound (if limited to certain types of development), I disagree with his second point – that software is becoming more isolated.

Marc Andreessen wrote a short paper arguing that software is eating the world, and the evidence is compelling. While there are certain applications of software development that stand essentially on their own, it is naïve to say that software development as a whole is becoming isolated when, in fact, it is becoming more and more integrated into all aspects of our lives.


So writing code doesn’t necessarily make you an engineer, a scientist, or an artist, but it could make you any or all of them.

 

 

 

 

Standard

One thought on “computer science: art, engineering, science?

  1. Pingback: CS4Some | pat73hat

Leave a comment