Computer Science Curriculum
Pedagogical philosophy
Broadly speaking, the CS program’s pedagogical philosophy is to support the inquiry of students in contexts that make sense to them. Students learn well by working together on team projects. The abstract concepts of computer science are more compelling when they advance some goal that is shared by a group of peers, and where abstractions are connected to accessible artifacts.
In the early courses of the curriculum, projects are often small, enabling a student or team to verify or correct their understanding of a fundamental concept quickly. The end of the Software Design course marks the first extensive team project, comprising the final third of the course. On reflection, many students have described this project as a defining moment, where they prepare themselves to invest in other team project experiences throughout the curriculum.
In the middle of the curriculum, students plunge into areas that require more background. Here they become acquainted with standard core topic areas in computer science, such as algorithms, systems, languages, and theory, which they will need to take on projects with more impact. At St. Olaf, we include computing ethics among the required core topics, focusing on a practical method of socio-technical analysis.
The upper-level curriculum includes the Senior Capstone — a one-semester course that features a modest team research project, an ethical analysis of that project, and multiple forms of communication about students’ work throughout the project.
Together, the determination and creativity of our students, combined with specific knowledge of the faculty in their respective research areas, help to create an effective learning community.
CS major
The major begins with foundation courses that present fundamental skills and an introduction to CS problem solving through hands-on experience. The foundation and subsequent core courses are intended to span many of the expectations for an undergraduate computer science major curriculum set forth in the ACM/IEEE 2013 guidelines, and advanced courses and electives provide options for depth. Several themes appear throughout the major: breadth-first introductory courses; team collaboration (often interdisciplinary) and project-based learning; development of communication skills; thoughtful, structured analysis of ethical and social issues in computing; and undergraduate research, beginning with project-building skills in early courses and continuing through more advanced experiences.
A student arranges for a computer science major by completing an individual plan in consultation with a computer science faculty member or CS program director.
Required CS courses (6 courses):
- Introductory course in CS (either 121 or 125) or prior relevant experience,
- Introduction to Data Structures in C++ (CSCI 221),
- Hardware Design (CSCI 241),
- Software Design (CSCI 251),
- Ethical Issues in Software Design (CSCI 263),
- Analysis of Algorithms (CSCI 353).
Required mathematics courses (2 courses):
- Linear Algebra (MATH 220),
- Discrete Mathematical Reasoning (MATH 234).
Upper-level electives (3 courses):
- At least two of CSCI 273, CSCI 276, CSCI 379, CSCI 333.
- See the CSMaP for a list of other electives.