Computer Science
program courses people info activities

Courses

Descriptions
Current
Future

Descriptions

Core Courses
(offered every year or every other year)

Elective Courses

Tutorials

The Computer Science Program also offers tutorials on advanced topics not included in the topics offered during the current semester.

Course Descriptions

Introduction to Computing: Automated Reasoning
Computer Science 111

This course explores the application of computing to logical deduction. Students will design programs that automate many aspects of human reasoning. Topics include natural language processing, natural language generation, automated theorem proving, and verification. Prerequisite: Eligibility for Q courses.

Introduction to Computing: Graphics and Animation
Computer Science 112

This course provides an introduction to the use of computer programming for creating and displaying a wide variety of objects, patterns, and digital images. Students will learn to use a programming language and graphics interface to write algorithms that represent and render two-dimensional and three-dimensional geometrical objects, beginning with points and lines and extending three-dimensional solids. Topics will include applied geometry, coordinate transformations, projection, perspective, object modeling, and basic animation. Prerequisite: eligibility for Q courses. 

Introduction to Computing: Robotics
Computer Science 113

This course introduces students to ideas that are fundamental to robotics and to computing in general. Teams of students will design and build shoebox-sized robots, with guidance from the instructor. These rather minimalist robots will be mobile and will have multiple sensors. The student teams will use a simple programming language to program their robots to carry out simple tasks, and will move to a more robust programming language and more complex tasks by the end of the semester. Prerequisite: eligibility for Q courses.

Introduction to Computing: Understanding the Computer
Computer Science 114

This course examines several fundamental ideas from computer science, from the point of view of understanding the computer as a machine. Over the course of a semester, we will move from the very concrete (digital circuits) through increasingly abstract descriptions of computing machinery. Along the way, we will learn how to decode the jargon of computer advertising GB's, RAM, GHz, and so on. Students will explore the basics of computer programming via several simple assignments. Prerequisite: eligibility for Q courses.

Introduction to Computing: Simulating Reality
Computer Science 115

How do rumors and fashions spread in society? Does a small change in environmental temperature disrupt an ecosystem? Questions like these are explored using computers to create virtual worlds. This introduction to modeling and simulation is intended for students who are interested in creating computer models of objects, processes, and complex systems using computer software. Students will create and run several different simulation model types drawn from a variety of disciplines, including: artificial life, cognitive science, economics, environmental science, evolution, neuroscience, physics, and political science. Students will gain a practical understanding of how to combine mathematical modeling, computer simulation, and data analysis as they use and create software that enables them to build simulation models that answer a practical need and/or scientific question. No prior knowledge of computer programming is required. Prerequisite: strong background in pre-calculus mathematics or its equivalent and eligibility for Q courses.

Introduction to Computing: Semantic Web
Computer Science 116

This course is an introduction to semantically intelligent content management for the World Wide Web.  Participants in this course will construct social networking software, similar in scope to weblogs or facebook, using an advanced content management system.  Strong emphasis will be placed on the development of flexible applications that efficiently store and process data and metadata.  In addition to basic computer programming, various XML technologies will be introduced and employed. Prerequisite: eligibility for Q courses.

Cognitive Science: Languages of the Mind
Computer Science 131

How do brains make minds? Can computers think?  Is my dog conscious? Cognitive science assumes that the brain is some sort of computational engine, and, beginning with that premise, attempts to find answers to such questions.  This course will be taught by faculty from biology, computer science, linguistics, philosophy, and psychology, who will combine their different approaches to explore how humans and other intelligent systems feel, perceive, reason, plan, and act.  In particular, the course will focus on the fundamental importance of language, signaling, and representation at many levels, from the neural to the organismal.  Laboratories will provide students with hands-on experience analyzing neural and behavioral data as well as with computational modeling. 
Prerequisite: pre-calculus or its equivalent and a willingness to engage a broad variety of ideas and approaches from the natural, mathematical, and social sciences.

Introduction to Object-Oriented Programming
Computer Science 141

This course introduces students with prior programming experience to the methodologies of object-oriented design and programming, which are used throughout the Computer Science curriculum. Students will learn how to move from informal problem statement, through increasingly precise problem specifications, to design and implementation of a solution. Good programming habits will be emphasized. Prerequisite: Any Introduction to Computing course, or permission of instructor.

Data Structures
Computer Science 201

This course introduces students to the basic ideas underlying data storage and retrieval. Several standard data structures will be covered, including stacks, queues, lists, hash tables, and balanced binary trees. The course will balance implementation of structures and formal analysis of their properties. Prerequisite: Computer Science 141.

Nonstandard Computation
Computer Science 220

This course explores the physical nature of computation. Standard computation is based on implementation of algorithms for digital computers. In this course we examine alternate systems in which computation can be performed and the different laws of nature that apply to each. Topics to be examined include quantum computation, DNA or molecular computation, generalized time reversible computation, as well as emerging areas such as chaos computing and cellular automata. Prerequisites: Mathematics 111 and Computer Science 141, or permission of the instructor.

Computer Architecture
Computer Science 225

An introduction to the structure and operation of a modern computer architecture. Topics include instruction sets, pipelining, instruction-level parallelism, caches, memory hierarchies, storage systems, and multiprocessors. Assembly language programming is used to demonstrate concepts. Corequisite: Computer Science 201, with Physics 212 recommended.

Discrete Math and Functional Programming
Computer Science 244

This course covers many mathematical concepts of importance to the foundation of the modern computer scientist, employing a functional programming language as a vehicle for computational expression. General discrete mathematics topics will include logic and formal proof, sets, relations, functions, induction and co-induction, number theory, and graph theory. Functional programming concepts will include lambda calculus, type theory, lists and algebraic data types, recursion and co-recursion, and polymorphism. This course satisfies the functional programming requirement for moderation into the computer science program. Prerequisites: MATH 141 and an introductory computer science course, or their equivalents.

Scientific Programming
Computer Science 273

Introduces numerical methods used in the physical sciences, and the C programming language. Common techniques of data analysis, approximation, and numerical solutions of integral and differential equations are developed for their own sake and also as an introduction to available analysis packages. Prerequisites: Mathematics 211.

Algorithms
Computer Science 301

This course covers design and analysis of correct and efficient computer algorithms. Topics include sorting, greedy algorithms, divide-and-conquer algorithms, dynamic programming algorithms, and graph algorithms. Advanced topics in algorithms may be selected from specialized areas of the mathematical and empirical sciences. Prerequisites: Computer Science 201 and Mathematics 231 or 235.

Design of Programming Languages
Computer Science 305

Covers a selection of important issues in the design of programming languages including, but not limited to, type systems, procedure activation, parameter passing, data encapsulation, dynamic memory allocation, and concurrency. In addition, the functional, logic, and object-oriented programming paradigms are presented, along with a brief history of high-level programming languages. Prerequisite: Computer Science 201.

Theory of Computation
Computer Science 312

An introduction to several computational models developed to formalize the notion of an algorithm, the course also offers detailed discussion of primary topics in the theory of computation, including the theory of recursive functions, Turing machines, and several undecidable problems, such as the Halting problem. Prerequisites: Mathematics 231 or both Computer Science 301 and Mathematics 235.

Databases: Theory and Practice
Computer Science 321

An introduction to the design, implementation, and uses of databases. Topics include database design, database models, integrity, concurrency, security, and database query languages. Prerequisite: Computer Science 201.

Operating Systems
Computer Science 326

Covers traditional topics of operating systems, including interprocess communication, semaphores, monitors, scheduling algorithms, deadlocks, virtual memory, and file system design. In addition, discussion may include issues in distributed systems such as the client-server model, remote procedure call, distributed synchronization, transactions, threads, and file servers. Prerequisite: Computer Science 201.

Computer Networks
Computer Science 335

Takes a bottom-up approach to computer networking, covering in detail the physical, data link, MAC, network, transport, and application layers. TCP/IP and OSI reference models are introduced, with examples taken from the Internet, ATM networks, and wireless networks. Prerequisite: Computer Science 201.

Artificial Intelligence
Computer Science 351

Provides a broad introduction to topics in artificial intelligence, including knowledge representation and reasoning, planning and problem solving, and machine learning. Advanced topics may include natural language processing, multiagent systems, and image processing. Prerequisite: Computer Science 201.

Biologically Inspired Machine Learning
Computer Science 352

Examines computation as a metaphor for understanding adaptive systems. Several biological systems are studied and related to abstract models that incorporate elements of their data structures, information processing, and learning. Neuron models, neural networks, and evolutionary learning are studied using mathematics and computer simulation. This course emphasizes information processing, pattern recognition, and associated computational abilities of artificial models, but takes an ethological approach to understanding how natural and artificial intelligent systems adapt to their environment.. Prerequisites: Computer Science 201.

Modeling and Simulation
Computer Science 353

This course provides an introduction to mathematical modeling and the computer simulation of discrete and continuous systems.  Examples will be drawn from the computational, physical, and social sciences.  Students will learn to create mathematical models of systems, design simulation experiments, construct simulations, test their validity, and statistically analyze model output.  Students will complete final projects in which they undertake the modeling and simulation of a system of their choice. Prerequisite: Mathematics 142 and Computer Science 201 or the equivalent, and at least one 200-level course in the sciences or social sciences.

Software Interface Design
Computer Science 373

Focuses in detail on desiderata for good user interface design, including questions of layout, command entry, and display of information. The course centers on event-driven programming, using the Java programming language. Prerequisite: Computer Science 201.

Topics in Computational Complexity
Computer Science 401

Topics for this course may include logic and undecidability, NP-complete problems, co- NP and function problems, randomized algorithms, cryptography, approximation algorithms, and logarithmic space. Prerequisites: Computer Science 301 and 312.

Compiler Design
Computer Science 425

An introduction to the process of writing a language translator. Topics include lexical analysis, parsing, syntax-directed translation, optimization, and code generation. Students complete a project involving design and implementation of a compiler for a simple high- level programming language. Prerequisites: Computer Science 305.

Topics in Advanced Artificial Intelligence
Computer Science 451

This course covers a selection of topics from artificial intelligence, which may include robotics, natural language processing, machine learning, neural networks, genetic algorithms, genetic programming, planning, and computer vision. Selection of topics will be guided in part by student interest and background. Prerequisite: Computer Science 351