Computer Science Curriculum
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, helps to create an effective learning community.
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 advanced experiences such as the CSCI 390 Senior Capstone Seminar.
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 (see the CSMaP).
Majors must adhere to the following guidelines, arranged in four levels:
Foundations (5 courses):
- an introductory course in CS (either 121 or 125) or prior relevant experience, followed by
- Linear Algebra (MATH 220), and a subsequent proofs course,
- Hardware Design (CSCI 241), and
- Software Design (CSCI 251) and its accompanying lab (CSCI 252) in any order.
- Core (5 courses) in standard computer science topics:
Algorithms and Data Structures (CSCI 253),
- Ethical Issues in Software Design (CSCI 263),
- a computer `languages’ course (one of CSCI 276, 333 or 336),
- a computer systems course (one of CSCI 273, 284, or the 300-topics course in PDC)
Electives (2 courses) giving a deeper exposure to selected aspects of the discipline of computer science:
- can include second courses in languages or systems,
- A level III topics course (such as Artificial Intelligence or Robotics), or
- courses from outside of CS including a physics course (Electronics), a math course (Computational Geometry), and an MSCS course (Algorithms for Decision Making); and
Capstone (1 course): the senior-level capstone integrative experience.