A friend of mine who is entering university next year, in his search for a major, asked me why I study Computer Science. Recently, a lot of people don’t seem to need any help finding a reason to study Computer Science , but I suspect that for many applicants the motivation is far different from my own. Despite being sure-footed in my choice, I realized I lacked a well-articulated and convincing answer, so what follows is my best attempt at putting my reasoning into words.

One might go even further, and ask if Computer Science is really about computers at all! This seems silly—after-all, many, if not all, “computer scientists” use computers , much of the coursework can only practically be done using a computer, and some of the curriculum is literally about how computers work. But is the study itself about computers? In this case, I think the distinction is difficult to assert either way, especially when allowing for a broad definition of “computer,” but there exists a fairly solid argument to the contrary supported by the fact that large parts of “computer science” predate the computer device (e.g. “algorithms,” “complexity,” “systems,” “discrete math,” and really even “computation”).

A lot of the confusion, I think, comes from the term “Computer Science.” If we go off the name itself, as any rational purpose would, we might think the field represents the science of “computers.” After all, Material Science, Earth and Space Science, Biological Sciences, and most other things we’d append “Science” to are pretty on the nose. Generally speaking, scientists of all these fields apply the scientific method to their domain. However, without quite a lot of mental gymnastics, it’s practically difficult to apply the defining method to Computer Science.

Ask someone who plans to study Computer Science but hasn’t yet completed coursework outside of introductory classes what “Computer Science” is and you’re likely to hear combination of "engineering," and "math." For those who focus on building software and want to work as a “Software Engineer,” it’s more engineering than math. And for others who embrace the foundations and theory, it’s more math than engineering. Therefore we might conclude that generally speaking, an undergrad CS curriculum is at the intersection of math and engineering.

A Liberal Art

The idea that Computer Science is a hybrid field of math and engineering is probably something that many would agree with. At the University of Washington, the Computer Science major exists under the umbrella of the College of Arts and Sciences and not, as one might expect, within the College of Engineering . This puzzled me at first, mostly because I came into school with various software “engineering” internships and hackathons under my belt and what I thought was a pretty good idea of what “computer science” looks like. Especially when considered alongside other majors, it’s not clear why Computer Science should be bundled with Political Science or English and not with Informatics, Electrical Engineering, or even Computer Engineering . On the surface, its placement within the College of Arts and Sciences is seemingly due to some bureaucratic convenience, as many things at the UW seem to be, more than anything else. Later in my education, it became clear that the assumption that CS belonged elsewhere was probably wrong.

At the UW, the first CS class a student takes after getting accepted into the Computer Science program is ambiguously called “Foundations I,” in which a new admit studies a subject that is as novel to the student as it is difficult. And while it was without-a-doubt my favorite course thus far, boy is it hard. Over the ten week quarter, the class covers predicate logic, bit logic, elementary set theory, automata, context-free grammars, regex, decidability, computability, how to write and defend rigorous proofs, and, just-for-fun, basic complexity theory.

It’s never directly communicated to the student, but the class is abstractly about designing, creating, reasoning about, and proving complex systems. These systems lay the ground work for building models and provide useful tools for logically and rationally reasoning about problems, state, and truthiness. Actual code, it becomes clear, is irrelevant (though perhaps useful) towards this goal. However, because of the pace of the class, very little history or context is given to the tools and paradigms one learns. It’s easy to go through the course, and think that this is about computers, about how computers work, or perhaps about how code works at an atomic level. Towards the end of the quarter, just as the undergrad questions how she found herself knee-deep in existential questions and discrete math—all she wanted was to learn how to write apps, was that too much to ask?!—the big a-ha! moment emerges. The professor told you before, bluntly on the first day, but it didn’t make sense until now. This is Computer Science. And, if you’re masochistic like me and seek out classes at UW similar to the class that nearly drove you to swear off technology and become a luddite, you’ll find them in the philosophy department.

Philosophy is in many ways the root of all liberal arts. Outside of professional schools like Medical school, Law school, or some post-grad practical engineering programs, the highest degree one can earn is the Ph.D.–the Doctorate in Philosophy. With CS this is especially true. Pythagoras, who coined the term “philosophy,” and many other great philosophers were the mathematicians, scientists, and inventors of their time, attempting to formally reason about the systemic universe with the tools available to them–and when none were, inventing new ones. Computer Science has vastly similar objectives, more-so I’d argue than other more traditional liberal arts like English, History, and Politics. The level of rigor in creatively developing, reasoning about, and justifying complex systems found in algorithms, programming language design, and yes, even writing software, can be considered to be an extension of the more logical realm of Philosophy. And, when re-evaluating the curriculum of the Computer Science degree program, it’s clear that these strengths are emphasized far above the ability to build anything. Thus, I’d extend our definition of Computer Science to be a trifecta: the intersection of math, engineering, and philosophy.