Computer Science 2017

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[1], 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.

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.

One might go even further, and ask if Computer Science is really about computers[2] at all! This seems silly–after-all, many, if not all, "computer scientists" use computers[3], 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").

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.

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[4]. 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[5]. 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.

I was raised by liberal arts majors[6]. Fueled by dinner table conversations about contemporary politics, history, and philosophy, I did well in social studies in high school while at the same time struggling to grasp the concepts in math, statistics, and sciences. And naturally, both of my parents played up the virtues of liberal arts degrees and small liberal arts colleges when it came time to apply to college, so it seemed like the obvious choice. However, in my free time in early high school, I began coding and learning the ins-and-outs of building software. Later, as I considered options for college, I realized that I longed for exactness, quantification, and system modeling in my social science classes, and the answer to "why does this matter?" in my math and sciences classes. Meanwhile, I felt I had the power to "change the world" by building software with code (as was happening all around me in the Bay Area at the time), and lacked the power to have any real effect by writing papers and debating politics, albeit with much emotion and behest.

I emphasized in my college search my interest in expanding my horizons, building software, and solving systemic problems. I ultimately chose my school on its merit as a Computer Science school (or at least based on what I thought "Computer Science" was at the time) and the opportunity to meet people from different backgrounds. As I've matriculated through the program, my deeply seeded passion for social studies re-emerged, this time through the lenses provided in my computer science study, and much better for it.

The way I see it, the output of a Computer Science education is:

Ultimately, I find Computer Science to be an extremely effective and well-designed field of study[7]. By studying it, one learns about thinking and modeling abstractly at the system level, concretely at the product and executable levels, and precisely at the algorithmic and theoretical levels, which I found nicely aligns with my own interests.


  1. Incoming Freshman major choice ↩︎

  2. In this case, I'm talking about the device, and not the mostly deprecated job title or the pure "act of computation" ↩︎

  3. But really, who doesn't ↩︎

  4. I've since discovered that this is also true at many other public and private universities. ↩︎

  5. Computer Engineering has the same curriculum as Computer Science with few exceptions at the University of Washington, and Electrical Engineering and Informatics are popular majors for students not accepted into the Computer Science major and vice-versa. ↩︎

  6. My mother earned her BA in Art History from Williams College (perhaps the canonical liberal arts college) and later an MPH and PhD in Public Health/Policy from UC Berkeley. My father studied Sociology at UChicago and UC Santa Cruz as an undergrad and later Law at UC Berkeley. ↩︎

  7. To its detriment, I think the curriculum is not obviously well thought-out to the newly minted student ↩︎