Please note: This is NOT the most current catalog.

Computer Science

(Mathematics, Statistics, and Computer SCIENCE)

Director, 2014-15: Olaf Hall-Holt (Mathematics, Statistics and Computer Science), computational geometry, computer graphics and vision

Faculty, 2014-15: Richard J. Allen (Mathematics, Statistics and Computer Science), bioinformatics, programming languages, intelligent tutoring systems; Richard A. Brown (Mathematics, Statistics and Computer Science), parallel and distributed computing systems,interdisciplinary applications of computer science; Charles W. Huff, Jr. (Psychology), social psychology, ethical and social issues in computing; Steven C. McKelvey (Mathematics, Statistics and Computer Science), operations research, wildlife modeling; Matthew P. Richey (Mathematics, Statistics and Computer Science), computational mathematics, software engineering (on leave)

Computer science (CS) is the academic discipline that focuses on creative computing-related problem solving. St. Olaf’s CS program employs “hands-on” personal experience to build up invaluable technical and analytical skills while learning powerful computing concepts in a liberal arts context. Beginning with the introductory courses, the program’s curriculum draws connections with applications in other disciplines ranging from the natural sciences to the humanities. The program offers an authentic and satisfying education in the concepts and practices of computer science; the courses below represent national expectations for an undergraduate computer science curriculum. Undergraduate research appears throughout the program, from foundation courses that develop valuable project skills to advanced courses such as the senior capstone seminar. St. Olaf is a national leader in incorporating instruction in parallel and distributed computing throughout the CS curriculum. The program also incorporates a distinct liberal arts perspective, including emphasis on teamwork and communication skills, examination of ethical and social issues in computing, and collaboration in upper-level interdisciplinary projects.

Although CS differs from other computing areas, such as programming, information technology (IT), and information systems (IS), the study of computer science serves as excellent preparation for careers in such fields, because the concepts of computer science provide insights into all forms of computing. While specific computing systems come and go, the principles of CS endure for the long term, and persons with awareness of those principles can perceive them in all forms of computing. The increasing effectiveness of computing in nearly all endeavors makes CS concepts relevant in almost every setting. The program's emphases on development of creative problem-solving and analytical thinking abilities, interpersonal skills, and ethical analysis and awareness enhance any career, whether one becomes a computing professional or an occasional user.

overview of the major

The CS Program emphasizes the concepts and practices of computer science, as well as applications to other disciplines. The major begins with foundation courses that present the nature of CS through hands-on experience. The foundation and subsequent core courses together span the national expectations for an undergraduate computer science major curriculum, and advanced courses and electives provide options for depth. Several themes appear throughout the major: breadth-first introductory courses; team collaboration (often interdisciplinary); development of communication skills; thoughtful, structured analysis of ethical and social issues in computing; and undergraduate research, beginning with project skills in early courses and continuing through advanced experiences such as CS 390: Senior Capstone Seminar.



A student arranges for a computer science major by individual contract with the computer science faculty. This provides some latitude for choice according to individual interests and background and allows the computer science faculty to update the curriculum easily as the field of computer science evolves. Most contracts adhere to the guidelines below, which derive from prominent national recommendations for undergraduate computer science majors.

Foundation courses: one of Computer Science 121 or 125; Computer Science 241 and 251, (with the lab 252); one of the proof-writing courses (fall 2014) Math 282 or Math 252 or Math 244.

Core courses: Computer Science 253; Computer Science 263; either Computer Science 276 or 333; and either Computer Science 273, 284, or 300 with parallel and distributed computing.

Electives and capstone: Computer Science 390 and two approved electives.

These guidelines represent four levels:

  • choice of introductory courses (Computer Science 121 or 125) and three “second courses” (Computer Science 241, 251, and a proof-writing course) that may be taken in any order (note that the foundation courses offer non-majors a variety of one- to four-course samples of computer science);
  • core courses in standard computer science topics, including algorithms and data structures, ethics of computing, computer languages, and computer systems;
  • a deeper exposure to selected aspects of the discipline of computer science through electives; and
  • a senior-level capstone integrative experience (Computer Science 390).


Other fieldS

Certain courses in computer science can count toward other majors and concentrations. Majors: mathematics (Computer Science 315, 333. Concentrations: linguistics (Computer Science 121, 125, 251, 276, 333); mathematical biology (Computer Science 125, 251, 315); also certain courses in other fields can count toward a computer science major: Mathematics 244, 252, 282 (fall 2014); Physics 130, 246. Check with the relevant programs for limitations and details.

The computer science program offers many opportunities to participate in undergraduate research, often integrated within courses, or through extracurricular activities such as summer research. Ongoing efforts in high-performance cluster and parallel computing, graphics, 3D computer vision, and declarative approaches to language design provide a foundation for many student projects.

Collaborative interdisciplinary projects apply computer science to many fields across campus, including environmental studies, linguistics, management studies, physics, and history.


Students considering graduate study in computer science should pursue opportunities that add both breadth and depth in their majors. Standard course offerings provide breadth, in that taking all foundation and core courses plus Computer Science 336 collectively includes material from all 63 required units in the current ACM/IEEE national curricular recommendations, plus over 20 optional units. Graduate-school-bound students are strongly encouraged to pursue undergraduate research involving computer science, and to take courses beyond the minimal major requirements.


Courses in computer science satisfy the following general education requirements: AQR, WRI, ORC, IST, and EIN. See the Class and Lab Schedule for details. No more than one of the two introductory courses, Computer Science 121 and 125 may be taken for credit toward the major.

117 Gateways to Computer Science

Students engage fundamental concepts and diverse capabilities of computing and also explore the many layers of computing, including information, hardware, programming, application, and communication layers. The course focuses on algorithmic thinking and the representation and analysis of algorithms. Students investigate ideas through technical and non-technical reading introducing them to computer science and programming. The course is intended for all students. Does not count toward the computer science major.

121 Principles of Computer Science

This course introduces students to computer science (CS), a field devoted to creative problem solving with computers, and its applications to other disciplines. Students explore fundamental concepts, including iteration, recursion, object-oriented software design, algorithm efficiency, levels of naming, parallel computing, and computing ethics. Students apply these concepts daily in hands-on homework exercises relevant to fields in the arts, humanities (including digital humanities computations), social sciences, and natural sciences. Includes a team project applying CS to a chosen discipline. No prior experience with programming is expected or required. Offered each semester. One of CSCI 121, CSCI 125, CSCI 251counts toward linguistic studies concentration.

125 Computer Science for Scientists and Mathematicians

This course focuses on handling data: visualization, finding patterns, and communicating with data. The primary tools are Python (for transforming data) and R (for visualization and classification). Students work individually and in teams to apply basic principles and explore real-world datasets with a sustainability theme. Prerequisite: calculus or consent of the instructor. Counts toward statistics and mathematical biology concentrations. One of CSCI 121, CSCI 125, CSCI 251counts toward linguistic studies concentration. Offered each semester.

241 Hardware Design

This course explores modern computer hardware, emphasizing trade-offs among architectural choices and examining representative examples. Programming exercises explore how these topics relate to five high-level programming languages. Topics include virtual machines, overview of computer organization, forms of parallelism, machine-level implementation of programming language features, memory organization, digital logic, microprogrammed and RISC architectures, multi-core architectures, performance enhancements, assembly programming, and architecture of networks and their protocols. Prerequisite: CSCI 121 or CSCI 125 or consent of the instructor. Offered annually.

251 Software Design and Implementation

This course provides an introduction to the structure and creation of computer software, using the C++ programming language and emphasizing object-oriented programming and structured collaborative software-development methodology. Concepts and skills are applied in a substantial team project. Topics include object-oriented programming, specification, programmed memory management, indirect addressing, tools including UML, team software process, requirements analysis, software design strategies, and elementary ethical analysis of software systems. Prerequisite: CSCI 121 or CSCI 125 or CSCI 241 or PHYS 130 or MATH 252 or permission of instructor; concurrent registration in CSCI 252 is required. Counts toward mathematical biology concentration; one of CSCI 121, CSCI 125, CSCI 251counts toward linguistic studies concentration. Offered each semester.

252 Software Design and Implementation Lab

Students investigate the implementation of software using strategies and concepts presented in CSCI 251, explore standard technologies for creation and management of multi-module software systems, and carry out stages of structured team software project, through hands-on computational exercises and with direct support provided in a small group context. Prerequisite: concurrent registration in CSCI 251. Offered both semesters.

253 Algorithms and Data Structures

This course surveys standard algorithms and data structures with emphasis on implementation experience and complexity analysis. Topics include algorithmic strategies, fundamental computer algorithms, stacks, queues, lists, trees, hash tables, heaps and priority queues, compression, and decompression. Prerequisites: MATH 282 (MATH 244 or MATH 252) and CSCI 251, or consent of the instructor. Offered annually. Counts toward neuroscience concentration.

263 Ethical Issues in Software Design

The software we design has real effects in people's lives. This course explores the ethical and social considerations inherent in computer-based systems, develops skills in thinking about those considerations and in collecting data to determine their effects, and expands students' abilities to integrate these issues and skills into software development procedures, largely through an extensive team analysis of a "live" software project. Coursework uses extended case studies and surveys topics such as professional and ethical responsibilities, risk, liability, intellectual property, privacy, and computer crime. Prerequisites: CSCI 251 and completion of BTS-T, or permission of instructor. Offered annually.

273 Operating Systems

This course examines the features of modern operating systems, including detailed consideration of Linux and other example systems. Projects range from system-level programming and multithreaded network programming to kernel modifications. Topics include operating system principles, implementation as system calls, process scheduling and dispatch, concurrency, inter-process communication, low-level memory management, device management, file systems, security and protection mechanisms, and scripting. Prerequisites: completion of or concurrent enrollment in CSCI 241 and CSCI 251, or permission of instructor. Offered alternate years.

276 Programming Languages

Students study features commonly found in computer programming languages and construct their own interpreters for an example programming language incorporating various language features they study throughout the course. Topics include programming language semantics, programming language translation, parsing, implementation of control structures and memory structures, abstraction mechanisms, and language translation systems and types. Prerequisites: CSCI 241 and CSCI 251, or permission of instructor. Offered alternate years. Counts toward linguistic studies concentration.

284 Mobile Computing Applications

Mobile devices are now overtaking desktop computers as the most common way to connect to the Internet. This course explores mobile computing technology by creating applications for the Android platform, including a final team project. The course introduces Java language and provides exposure to graphics user interfaces (GUIs), event-driven programming, APIs, databases, SQL query language, and agile team programming methodologies. Prerequisite: CSCI 251 or permission of the instructor. Offered alternate years.

294 Internship

This is an intermediate-level version of CSCI 394.

298 Independent Study

300 Topics in Computer Science

Recent and planned topics include parallel and distributed computing, computer graphics, relational database systems, and real-time systems. May be repeated if topics are different. Offered alternate years.

315 Bioinformatics

Students study computational problems arising from the need to store, access, transform, and utilize DNA-related data. Topics from computer science include: exhaustive search; algorithms (including dynamic programming, divide-and-conquer, graph and greedy algorithms) for fragment reassembly, sequence alignment, phylogenetic trees; combinatorial pattern matching; clustering and trees; and hidden Markov models. Prerequisites: CSCI 253, or one of CSCI 121 or CSCI 125 and one of BIO 125 or MATH 220, or permission of instructor. Offered alternate years. Counts toward neuroscience and mathematical biology concentrations and mathematics major.

333 Theory of Computation

Students learn about formal languages, automata, and other topics concerned with the theoretical basis and limitations of computation. The course covers automata theory including regular languages and context-free languages, computability theory, complexity theory including classes P and NP, and cryptographic algorithms. Prerequisite: a proof writing course (such as Math 244 or 252) or permission of instructor. Offered alternate years. Counts toward neuroscience and linguistic studies concentrations.

336 Logic Programming

Students learn a widely-used style of programming based on first order predicate logic. Topics include declarative programming, Horn clauses, declarative and procedural semantics of logic programs, clauses as relations, goals, backtracking, and resolution. Programming projects and exercises use Prolog, the most significant logic programming language. Additional topics include the relationship of Prolog to logic and applications to artificial intelligence. Prerequisite: CSCI 251 or permission of instructor. Offered alternate years.

350 Advanced Team Project

This course is devoted to team research/development projects, employing established software development methodologies. Projects frequently have an interdisciplinary nature, involving consultation with faculty and/or students in other fields, and taking advantage of the particular backgrounds of team members. One or more research papers, posters, etc., on results are ordinarily expected. Prerequisites: one core course with implementation in computer science or permission of instructor. Offered alternate years.

Mathematics, Statistics, and Computer Science 389 Research Methods (0.5 credit)

Students focus on writing scientific papers, preparing scientific posters, and giving presentations in the context of a specific, year-long, interdisciplinary research project. In addition, this weekly seminar series builds collaborative research skills such as working in teams, performing reviews of math, statistics, and computer science literature, consulting effectively, and communicating proficiently. Exposure to post-graduate opportunities in math, statistics, and computer science disciplines is also provided. Open to students accepted into the Center for Interdisciplinary Research

390 Senior Capstone Seminar

Class members participate in undergraduate research, including readings from the research literature, team development of project software, ethical analysis of their project applying CSCI 263 principles, documentation practices, and writing a research paper for public presentation. Prerequisites: major in computer science with senior standing, and completion of or concurrent enrollment in computer science core courses, ordinarily including CSCI 263, or permission of instructor. Offered annually.

394 Internship

Students gain experience in computer-industry positions. Projects have included contributions to team programming, implementation of solid modeling (NURBS), documentation, business applications of computing, and applications of computer graphics in medical research. Internship experiences (whether for credit or not) are strongly encouraged for anyone considering a career in computing.

396 Directed Undergraduate Research: "Topic Description"

This course provides a comprehensive research opportunity, including an introduction to relevant background material, technical instruction, identification of a meaningful project, and data collection. The topic is determined by the faculty member in charge of the course and may relate to his/her research interests. Prerequisite: determined by individual instructor. Offered based on department decision. See also Computer Science 350 and Computer Science 390. May be offered as a 1.00 credit course or .50 credit course.

398 Independent Research

Recent projects, usually executed by individuals and coordinated with ongoing undergraduate research projects, include cluster-assisted computer vision for robots, parallel computing in computer science education, and middleware for interdisciplinary web applications.