In the process of designing the computer science curriculum for Oxy, I came across the Liberal Arts Computer Science Consortium (LACS). Made up of a number of computer scientists at multiple liberal arts colleges across the country, the group published a paper in 2007 with “a model curriculum for a liberal arts degree in computer science”. The paper first identifies what they consider the discipline of computer science, before suggesting the following twelve-course computer science major curriculum:
- Introduction to Computer Science
- Data Structures
- Foundations of Computer Science
- Computer Organization
- Software Development
- Programming Languages
- Theoretical Foundations of Computer Science
- Math Elective
The paper helpfully goes on to provide a list of topics for each course, as well as the suggested number of hours spent on each subgroup of topics. All in all, the paper is a fantastic resource for faculty thinking about curricular issues in computer science.
My first reaction is that the two course core sequence that I see in many computer science curricula is reflected here, validating my investigations.
My second reaction is that I strongly disagree with this curriculum.
My biggest complaint in this curriculum is that nowhere in it is any connections to other fields even mentioned. The paper does provide a “partial list of possibilities” for the electives, of which only five of the sixteen have anything remotely interdisciplinary – Artificial Intelligence, Bioinformatics, Computational Science, Natural Language Processing, and Simulations and Modeling. It was ironic to me that the paper emphasizes that the curriculum was designed with the liberal arts in mind, and explicitly mentions how the “social and ethical issues” of computer science must be worked into all courses in the curriculum. By “social issue”, the authors suggested privacy on the internet; by “ethics issue”, the authors suggested the responsibility of the programmer to produce correct code.
It was around this time that I realized perhaps I’m not a true “computer scientist”.
To me, the interesting and worthwhile parts of computer science is the computational thinking, which Wikipedia defines:
The characteristics that define computational thinking are decomposition, data representation, generalization/abstraction, and algorithms. By decomposing a problem, identifying the variables involved using data representation, and creating an algorithms the result is a generic solution. The generic solution is a generalization or abstraction that can be used to solve a multitude of variations of the initial problem.
Getting students to think computationally, and be able to apply that skill to novel problems, necessarily requires them to have experience with the many disciplines that use and are informed by computation. Just for a informal talk to students today, I made the following list (quoted verbatim):
- Physical sciences need simulations, analyses, and visualizations
- Social sciences need it too
- Humanities increasingly use digital techniques
- (Interactive) digital arts
- Philosophical questions
Precisely one of these extremely broad categories of disciplines show up in the curriculum: the physical sciences, and then only as a minority of possible electives. If we stretch the definition of “simulations and modeling”, maybe we can include the social sciences, but that still fails to fully account for the breadth agent-based simulations and their value to sociology, economics, or even environmental science. The digital humanities has an ongoing debate about whether computational techniques can truly determine the authorship of an unknown play (or other such related questions). Computational arts – both passive animation and interactive gaming experiences – are blossoming and is one of the more vibrant industries.
And the philosophical questions! Are people Turing machines? How do simulations provide scientific insight? How is technology changing society? To what extant should we delegate life-or-death decisions to computers? These are the topics that a liberal arts education should prompt students to think about, and I do not see any trace of this in the proposed curriculum. What I see instead are courses on theory that even computer science students are bored by, and courses on the engineering artifact that is the modern computer. I am not saying that these courses should not be taught, or even that they should not be required as a category of necessary knowledge for computer scientists, but I am not sure I can justify them, in and of themselves, being required for all students.
Here’s the response I expect to get: “But the curriculum you’re suggest is more about the uses of computing than about the computing itself; doesn’t that mean it’s not a computer science curriculum?”
Maybe, and maybe because of that I am a bad computer scientist.You see, while I think parsers are cool and operating systems are clever, I really care more about computing as a way to formalize and make concrete how we reason about processes and representations. Computer science does this in the same way that (for example) critical theory allows us to understand structural causes and pressures (eg. discrimination) from a perspective not offered elsewhere. Sure, sometimes this methodology is turned on the computer itself, and there is much to be understood there, but to do so by foregoing its use on the majority of the external world is the wrong direction for a major at a liberal arts college.
Perhaps I might simply say that my ideal computer science curriculum is one designed for a renaissance man’s view of education, and leave it at that.