St. Olaf Homepage

Computer Science

Overview

The Computer Science Concentration at St. Olaf is a six-course program that may be earned in conjunction with any academic major. By means of an individualized contract system, the concentration conforms to individual interests and maintains flexibility to evolve along with the world of computing, while focusing on enduring fundamental principles that apply to all computing systems.

Each course emphasizes principles of computer science, always reinforcing concepts with applied programming exercises. Students practice and develop written and oral communication skills. Forward-looking computing technology is explored throughout the concentration curriculum. Internships and other connections with industry forge links between the academic program and contemporary practical applications of computer science.

The complete concentration satisfies basic entry requirements for most graduate programs in computer science. However, the St. Olaf Computer Science Concentration focuses on bringing a liberal-arts understanding of computer science principles -- reinforced by up-to-date applied experiences -- to students in all disciplines, who will pursue all careers in a world of ever-advancing computing technology.

Distribution Credit

All computer science courses count toward the Area D distribution requirement.

General Education Credit

Computer science courses that fulfill general education requirements are listed in the Class and Lab Schedule.

Prerequisites

Prerequisites for computer science courses are found in the course descriptions.

Requirements for the Concentration

A Computer Science Concentration is arranged by an individual contract between a student and the Computer Science faculty. This provides some latitude for choice according to personal preference. For example: Art majors might include independent projects in computer graphics as part of their concentrations, or a Psychology major might participate in a research project in cognitive science, artificial intelligence, or human-computer interaction. Computer science courses taken as part of a semester in Budapest, Hungary, are frequently included in contracts; and internships in industry are strongly encouraged for all concentrators. The contract system also allows the Computer Science faculty to update the curriculum easily as the field of computer science evolves, without affecting students who have already declared concentrations.

Currently, a concentration in Computer Science with emphasis on software normally includes Computer Science 172, 272, 274, 372, 376 and a sixth course that involves computer science in an essential way. The sixth course may be the Seminar Computer Science 378, or a project or off-campus experience such as those above. Except for Computer Science 378, the choice of the additional course must be approved in advance by the coordinator of the Computer Science Concentration.

A concentration in Computer Science with emphasis on computer electronics and interfacing normally includes Computer Science 172 and 272, Physics 232 and 251, either Computer Science 372 or 376, and an additional course approved in advance by the coordinator.

Special Resources

St. Olaf was among the first of four-year colleges to use the UNIX operating system (1975) and to join the Internet network (1988). This tradition of exploring new computing technologies firsthand continues today. For example, St. Olaf has been among the first liberal-arts colleges to vigorously pursue innovations such as the World Wide Web networked information server.

Computer science courses are supported by a dedicated network of Sun UNIX workstations equipped with high-performance color graphics, all fully connected to the Internet network. Additional advanced hardware and software supports seminars and special projects. Some courses and projects have access to specialized equipment in various departments across the campus.

Courses

172 Principles of Computer Science
Just what is computer science, anyway? This course introduces the principles of the discipline through hands-on experiences with a versatile programming language called Scheme. Computer Science 172 presents three different ways of thinking about solving problems with a computer: functional, imperative and object-oriented programming. Students encounter and apply powerful ideas that arise throughout computer science, such as recursion, linked lists, data abstraction and procedural abstraction. In practice, what one writes about a program is often as important as the program itself. There are no prerequisites for this introductory course.

Physics 232 Introduction to Digital Electronics and Microcomputers
Students explore digital logic, digital electronics, and their applications in microcomputers, including assembly-language programming and the basics of computer interfacing. Weekly laboratory exercises are an integral part of the course. Recommended for students in the natural sciences who expect to use computer instrumentation in their careers. Prerequisite: high-school physics and elementary programming experience.

Physics 251 Computer Interfacing
A cross-disciplinary aspect of computing, this course emphasizes communication between the computer and the outside world. Both software (programming) and hardware (electronic) principles are developed, though the emphasis is on the latter. Exercises give general experience with data collection and processing, computer control of apparatus, graphics, and electronic generation of sound. Students use a microcomputer to design, construct, and implement a project from an area of their special interest. Prerequisite: Physics 232, or permission of the instructor. Offered only in the Interim.

272 Software Design and Implementation

Students in this course study the concepts and practices that underlie software development, and apply these principles by writing some software themselves. Using an imperative object-oriented programming language such as C++, Computer Science 272 students design and build programs using methodologies such as object technology, the software lifecycle, prototyping and derivation of provably correct algorithms. The course develops computer-science ideas such as modularization and encapsulation, data structures and standard algorithms. Programming projects emphasize computer graphics and other applications of computing. Prerequisite: Computer Science 172.

274 Computer Organization
This is a course about how computers and computer networks are designed -- what "makes them tick." How can one use digital-logic circuits to build a central processing unit (CPU)? What is a RISC processor, and in what ways is RISC design superior? What is a network protocol, and what protocols underlie the Internet network? Students in Computer Science 274 examine such questions, referring to examples ranging from a simple architecture to Intel's Pentium, DEC's Alpha and the World Wide Web. Prerequisite: Computer Science 172 or permission of the instructor.

294 Internship
Intermediate-level version of Computer Science 394.

298 Independent Study

372 Data Structures
For advanced programming, a person wants experience with the standard ideas for structuring data, as well as a clear awareness of tradeoffs between the various options. Computer Science 372 students learn standard data structures, such as stacks, queues, linked lists, trees and graphs, and study a variety of related algorithms, such as searching, sorting and storage allocation. The presentation emphasizes analysis of costs and performance, in terms of memory space and computing time. Students produce a series of programming projects in order to master the concepts by direct application. Prerequisite: Computer Science 272 or permission of the instructor.

376 Programming Languages
The high-level languages used by programmers offer a great variety of features, and different languages have particular strengths for different programming problems. However, a closer look reveals that programming languages share certain design and implementation principles. For example, programming languages have syntax and semantics, programming paradigms, and run-time representations. Computer Science 376 explores the principles that underlie programming languages and applies them by implementing them -- i.e., actually building an interpreter for a programming language that demonstrates the concepts being studied. Prerequisites: Computer Science 272 and 274, or permission of the instructor.

378 Seminar in Computer Science
Recent topics have been computer graphics, principles of operating systems, artificial intelligence, logic programming, and compiler design. Prerequisites: depend on topic; generally includes one or both of Computer Science 272 and 274 and perhaps additional courses.

394 Internship
Projects have included implementation of solid modeling (NURBS), documentation, business applications of computing (MIS), automated theorem proving, team programming, and multiprocessor tools. Internship experiences in industry (whether for credit or not) are strongly encouraged for anyone considering a career in computing.

398 Independent Research
Recent projects have involved team software development, graphics user-interface (GUI) programming, real-time computing, logic programming and intelligent tutoring systems, relational data bases, computer networks, and operating systems.

Faculty

Steven McKelvey (Coordinator)
Associate Professor of
Mathematics, 1985-
Operations research, wildlife modeling

Richard A. Brown
Assistant Professor of Mathematics, 1990-
Computer science, distributed systems

Richard J. Allen
Professor of Mathematics, 1975-
Logic programming, intelligent tutoring systems

Arnold M. Ostebee
Professor of Mathematics, 1980-
Mathematical physics, computer science

Matthew Richey
Associate Professor of Mathematics, Paracollege Tutor, 1986-
Computational mathematics, software engineering