Admission & Financial Aid

Admission & Financial Aid

Back

Regulations & Requirements

Regulations & Requirements

Back

Amherst College Courses

Amherst College Courses

Back

Computer Science

Professors Kaplan, L. McGeoch, and Rager (Chair); Assistant Professor Valentine*; Visiting Assistant Professors Glenn and Prasad.

*On leave 2016-17.

Major Program. The course requirements for the Computer Science major are COSC 111, 112, 161, 201, 261, and 301, and three additional Computer Science courses numbered above 201. Students with a strong background may be excused from taking COSC 111 and/or 112. It is recommended that such students consult with a member of the Department in the first year. Majors must pass at least nine Computer Science courses, so one or two additional electives are required for those who are excused from COSC 111 and/or 112.

Students considering graduate study in computer science should consult with a member of the Department as soon as possible to plan advanced coursework and to discuss fellowship opportunities. Participation in the Departmental Honors program is strongly recommended for such students. Most graduate programs in computer science require that the applicant take the Graduate Record Examination early in the senior year.

Comprehensive Examination. Each major must take a comprehensive examination during the senior year. A document describing the comprehensive examination, which covers COSC 112, 161, 201, and 301, is available on the department website. Majors are encouraged to take the exam early in the year if they have completed the covered courses.

Departmental Honors Program. The Honors Program in Computer Science is open to senior majors who wish to pursue independent research and to write a thesis. A student may apply to the program by submitting a proposal during the spring semester of the junior year. If the proposal is accepted, the student is admitted to the program, enrolls in COSC 498 for the fall semester, and begins research under the guidance of a faculty advisor. Students in COSC 498 meet together weekly to discuss their independent work. At the end of the fall semester, each student writes an extended abstract describing his or her work. Students whose abstracts show significant progress are admitted to COSC 499 and complete a thesis during the spring semester. A document describing the details of the Honors Program is available on the department website. COSC 498 and 499 do not count as elective courses in completing the major in Computer Science.

111 Introduction to Computer Science I

This course introduces ideas and techniques that are fundamental to computer science. The course emphasizes procedural abstraction, algorithmic methods, and structured design techniques. Students will gain a working knowledge of a block-structured programming language and will use the language to solve a variety of problems illustrating ideas in computer science. A selection of other elementary topics will be presented, for example: the historical development of computers, comparison and evaluation of programming languages, and artificial intelligence. A laboratory section will meet once a week to give students practice with programming constructs. Two class hours and one one-hour laboratory per week. 

Restricted to Amherst College students. Admission with consent of the instructor. Limited to 40 students per class (20 per section). Fall and spring semesters. The Department.

Other years: Offered in Fall 2011, Spring 2012, Fall 2012, Spring 2013, Fall 2013, Spring 2014, Fall 2014, Spring 2015, Fall 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018, Spring 2019, Fall 2019, Spring 2020, Spring 2021, Spring 2022, Fall 2022, Spring 2023, Fall 2023, Fall 2024, Spring 2025

112 Introduction to Computer Science II

A continuation of COSC 111. This course will emphasize more complicated problems and their algorithmic solutions. The object-oriented programming paradigm will be discussed in detail, including data abstraction, inheritance, and polymorphism. Other topics will include stacks, queues, linked lists, programming for graphical user  interfaces, and basic topics in probability.  A laboratory section will meet once a week to give students practice with programming constructs.

 Requisite: COSC 111 or consent of instructor. Both semesters. Fall semester: Professor Kaplan. Spring semester: Professor Rager.

Other years: Offered in Fall 2011, Spring 2012, Fall 2012, Spring 2013, Fall 2013, Spring 2014, Fall 2014, Spring 2015, Fall 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018, Fall 2018, Spring 2019, Fall 2019, Spring 2020, Fall 2020, Spring 2021, Fall 2021, January 2022, Spring 2022, Fall 2022, Spring 2023, Fall 2023, Fall 2024, Spring 2025

161 Computer Systems I

This course will provide an introduction to computer systems, stressing how computers work. Beginning with Boolean logic and the design of combinational and sequential circuits, the course will discuss the design of computer hardware components, microprocessing and the interpretation of machine instructions, assembly languages, and basic machine architecture. The course will also introduce operating systems topics, basic memory management, and topics in network communication. Projects will include the design of digital circuits and the simulation of operating system and network processes.

Requisite: COSC 111 or similar programming experience. Fall semester. Professor TBA.

2023-24: Not offered
Other years: Offered in Spring 2008, Fall 2008, Fall 2009, Fall 2010, Fall 2011, Fall 2012, Fall 2013, Fall 2014, Fall 2015, Fall 2016

201 Data Structures and Algorithms I

This course is the first part of a two-semester sequence examining data structures (ways of organizing data so that it can be used effectively) and algorithms (the methods that can be used to manipulate data). The use of appropriate data structures and algorithms can often dramatically reduce the computational work needed to solve a problem. Topics examined in this course will include proof techniques, run-time analysis, heaps, hash tables, sorting, searching, and divide-and-conquer algorithms. The course will provide advanced programming experience and will emphasize the use of abstraction in program design.

Requisite: COSC 111. Omitted 2016-17.

2023-24: Not offered
Other years: Offered in Fall 2007, Spring 2009, Spring 2010, Spring 2011, Spring 2012, Spring 2013, Spring 2014, Spring 2015, Spring 2016

211 Data Structures

A fundamental problem in computer science is that of organizing data so that it can be used effectively. This course introduces basic data structures and their applications. Major themes are the importance of abstraction in program design and the separation of specification and implementation. Program correctness and algorithm complexity are also considered. Data structures for lists, stacks, queues, dictionaries, sets, and graphs are discussed. This course will provide advanced programming experience. It is not open to students who have previously taken COSC 201.

Requisite: COSC 111. Spring semester. Visiting Professor Glenn.

Other years: Offered in Fall 2022, Spring 2023, Fall 2023, Fall 2024, Spring 2025

231 Programming Language Paradigms

The main purpose of a programming language is to provide a natural way to express algorithms and computational structures. The meaning of “natural” here is controversial and has produced several distinct language paradigms; furthermore the languages themselves have shaped our understanding of the nature of computation and of human thought processes. We will explore some of these paradigms and discuss the major ideas underlying language design. Several languages will be introduced to illustrate ideas developed in the course. Topics will include functional programming, declarative programming, and programming for concurrency and distributed computing. Offered in alternate years.

Requisite: COSC 112.  Omitted 2016-17.

Other years: Offered in Fall 2012, Spring 2016, Fall 2017, Spring 2020, Spring 2022

241 Artificial Intelligence

An introduction to the ideas and techniques that allow computers to perform intelligently. The course will discuss methods of representing knowledge and methods of solving general problems using heuristic search.  It will also discuss the design of algorithms that learn and generalize from experience.  Other topics will be chosen to reflect the interests of the class and may include: communicating in English, game playing, probabilistic reasoning, planning, vision and speech recognition, computers modeled on neurons, and the possibility and implications of the existence of non-human intelligence. Three class meetings per week. Offered in alternate years.

Requisite: COSC 112. Omitted 2016-17.

Other years: Offered in Fall 2011, Spring 2014, Fall 2015, Fall 2017, Fall 2019, Fall 2021, Fall 2022, Fall 2023, Fall 2024

247 Machine Learning

Machine Learning algorithms allow computers to be taught to perform tasks without being explicitly programmed.  This course is an introduction to machine learning and data mining.  The course will explore supervised, unsupervised, ensemble and reinforcement learning.  Topics may include: decision tree learning, rule learning, neural networks, support vector machines, Bayesian learning, clustering, hidden Markov model learning, deep learning.   The material of this course has some overlap with that of Computer Science 241, but it is permissible to take both.

Requisite: COSC 112. Spring semester. Professor Rager.

2023-24: Not offered
Other years: Offered in Fall 2022, Spring 2023, Spring 2025

251 Principles of Database Design

Databases underlie many of the applications with which we interact on a daily basis. They form the foundation behind many websites, telecommunications systems, banking systems, and any applications that need to maintain persistent data. This course will explore the design of modern databases for storing structured data. We will discuss the relational data model and relational algebra. Other key topics will include index data structures, views, transactions, and online analytical processing.  The course will also consider the design of NoSQL databases and the implications of the CAP theorem.

Requisite: COSC 112 and COSC 201. Omitted 2016-17.

2023-24: Not offered
Other years: Offered in Spring 2016

261 Computer Systems II

This course will examine the principles, designs, and policies that are common to a variety of computer systems and their components.  It will examine the structure of systems from mobile and desktop devices to servers and data centers.  Topics will include caching, memory allocation and management, job scheduling, storage, redundancy and reliability, and power management.  Projects will involve the implementation and evaluation of these concepts and structures.

 Requisite: COSC 112 and 161. Spring semester. Professor Kaplan.

2023-24: Not offered
Other years: Offered in Spring 2009, Spring 2010, Spring 2011, Spring 2012, Spring 2013, Spring 2014, Spring 2015, Spring 2016, Fall 2017, Fall 2018, Fall 2019, Fall 2020, Fall 2021, Spring 2022

281 Networks and Cryptography

Computing networks have fundamentally changed the ways in which we use computers. The ubiquity of networks and their broad range of uses have created substantial challenges in the area of computer communication. Not only must data be delivered quickly and reliably from one computer to another, but in many cases that data must also be secure from eavesdroppers. Moreover, the recipient of the information often needs to be sure of the identity of the sender. Encryption can be used to achieve both security and authentication of information. This course will begin with the problem of communicating between two computers, followed by the problem of building generalized networks for an arbitrary number of computers. Networking topics will include layered network structure, signaling methods, error detection and correction, flow control, routing, and protocol design and verification. We will then examine in detail a variety of encryption schemes, how they can be used, and how secure they are. Cryptographic topics will include classical cryptosystems, the data encryption standard, public-key cryptography, key escrow systems, and public policy on encryption. Offered in alternate years.

Requisite: COSC 112 or 201. Fall semester. Professor TBA.

2023-24: Not offered
Other years: Offered in Spring 2008, Spring 2009, Fall 2010, Spring 2013, Spring 2015, Fall 2016, Fall 2018, Spring 2020, Spring 2022

301 Data Structures and Algorithms II

This course continues the exploration of data structures and algorithms that is begun in COSC 201. Topics include balanced search trees, amortized algorithms, graph data structures and algorithms, greedy algorithms, dynamic programming algorithms, NP completeness, and case studies in algorithm design.

Requisite: COSC 112 and 201. Fall semester.  Professor TBA.

2023-24: Not offered
Other years: Offered in Fall 2007, Fall 2008, Fall 2009, Fall 2010, Fall 2011, Fall 2012, Fall 2013, Fall 2014, Fall 2015, Fall 2016, Fall 2017

311 Algorithms

This course addresses the design and analysis of computer algorithms. Topics include: set algorithms such as sorting and searching, graph algorithms, string algorithms, and matrix algorithms. Algorithm design paradigms, including the divide-and-conquer, dynamic programming, and greedy paradigms, will be emphasized. The course will end with a discussion of the theory of NP-completeness and its implications.

Requisite:  COSC 112 and COSC 211.  Fall semester. Visiting Professor Glenn.

Other years: Offered in Fall 2022, Fall 2023, Fall 2024

321 Computer Graphics

This course will explore the algorithms used to create “realistic” three-dimensional computer images. Major topics will include object representations (polygons, curved surfaces, functional models), rendering algorithms (perspective transformations, hidden-surface removal, reflectance and illumination, shadows, texturing), and implementation techniques (scan conversion, ray tracing, radiosity). Students will create images using Pixar's Renderman.

Requisite: COSC 112 or 201 or consent of the instructor.  Omitted 2016-17.

2023-24: Not offered
Other years: Offered in Spring 2012, Fall 2013, Spring 2016, Spring 2018, Fall 2020, Spring 2023

331 Games

This course examines the theory of games in all forms, including traditional non-cooperative simultaneous-play games and their relevance to economics, psychology, and biology; iterated games; combinatorial games such as chess, checkers, and Go; imperfect information games; and stochastic games.  The course also considers data structures and algorithms relevant to games, the computational complexity of games, and the use of techniques from artificial intelligence to compute strategies when it is infeasible to compute the optimal strategy.  Students will have an opportunity to develop games that incorporate AI and theory.

Requisites: COSC 112 and 201. Fall semester.  Professor TBA.

2023-24: Not offered
Other years: Offered in Fall 2014, Fall 2016

342 Mobile Computing and Smart Sensing

This course will introduce mobile and wearable computing and smart sensing. The number of smartphone users in the world is predicted to grow to 2.5 billion in 2019. The Internet of Things, once called the "next best thing," is already here.  Students will learn how to design the next-generation of efficient mobile devices and applications with the user’s interests and privacy in mind. The course will cover different aspects of mobile computing and smart sensing such as ethics, security and privacy, usability, computing in an environment with low resources, and wireless networking.  Students will be expected to identify new applications of mobile computing and/or smart sensors.  They will learn at least one development framework (Android, Arduino) and use it to develop their course project. 

Requisite: COSC 201. Spring semester. Visiting Professor Prasad.

2023-24: Not offered
Other years: Offered in Spring 2017

352 Big Data

The recent explosion in the volume of data being collected and curated by computer systems is making possible a new understanding of human behavior and other natural phenomena.  This dramatic growth is also challenging traditional data storage and manipulation paradigms.  In particular, the growth in the collection and storage of so-called “unstructured” data has precipitated the development of new database technologies.  Unlike traditional relational data storage, these so-called NoSQL databases are optimized for the storage and analysis of hierarchical or otherwise non-tabular data in what are often distributed layouts.  The course will explore this dramatic paradigm shift by examining the inherent limitations of traditional relational databases and how the newer class of databases proposes to address these limitations.  Projects will center around experimental comparisons of relational database operations to operations implemented in the Map Reduce paradigm.  Offered in alternate years.

Requisites: COSC 112 and 201. Omitted 2016-17.

2023-24: Not offered
Other years: Offered in Spring 2015

371 Compiler Design

An introduction to the principles of the design of compilers, which are translators that convert programs from a source language to a target language. Some compilers take programs written in a general-purpose programming language, such as C, and produce equivalent assembly language programs. Other compilers handle specialized languages. For instance, text processors translate input text into low-level printing commands. This course examines techniques and principles that can be applied to the design of any compiler. Formal language theory (concerning regular sets and context-free grammars) is applied to solve the practical problem of analyzing source programs.

Topics include: lexical analysis, syntactic analysis (parsing), semantic analysis, translation, symbol tables, run-time environments, code generation, optimization, and error handling. Each student will design and implement a compiler for a small language. Offered in alternate years.

Requisite: COSC 112 and 161. Omitted 2016-17.

2023-24: Not offered
Other years: Offered in Fall 2011, Spring 2014, Fall 2015, Fall 2024

390 Special Topics

Independent reading.

Fall and spring semesters.

Other years: Offered in Fall 2011, Spring 2012, Fall 2012, Spring 2013, Fall 2013, Spring 2014, Fall 2014, Spring 2015, Fall 2015, Spring 2016, Fall 2016, Spring 2017, Fall 2017, Spring 2018, Fall 2018, Spring 2019, Fall 2019, Spring 2020, Spring 2021, Spring 2022, Fall 2022, Fall 2023

401 Theoretical Foundations of Computer Science

This course covers basic mathematical concepts that are essential in computer science, and then uses them to teach the theory of formal languages and machine models of languages. The notion of computability will be introduced in order to discuss undecidable problems. The topics covered include: regular, context-free and context-sensitive languages, finite state automata, Turing machines, decidability, and computational complexity. Offered in alternate years.

Requisite: None, although analytical aptitude is essential. Spring semester.  Professor McGeoch.

2023-24: Not offered
Other years: Offered in Spring 2013, Spring 2015, Spring 2017, Spring 2019, Spring 2021, Fall 2022

450 Seminar in Computer Science

The topic changes from year to year. For fall 2014, the topic was "Computational Biology." This course examines the central computational challenges that have emerged since the publication of the human genome sequence in 2001.

For spring 2015 the topic was "Digital Text Analysis." Computers allow scholars to examine texts in ways that would be difficult or impossible without them. This course will examine some of the ways that computers are aiding text analysis.

Limited to 12 students.  Omitted 2016-17.

2023-24: Not offered
Other years: Offered in Fall 2008, Spring 2011, Fall 2012, Fall 2014, Spring 2015, Fall 2019

461 Advanced Operating Systems

Computer operating systems are responsible for allowing multiple running programs to share hardware resources.  The policies that dictate how those resources are shared determine the system's ability to provide good performance, fair sharing, isolation between programs, and predictable behavior.  There are many interacting policy choices that determine these properties, and measuring the effect of each requires careful empirical experimentation and analysis.  Research papers will describe and analyze policies that control processor scheduling, memory allocation and caching, disk scheduling and placement, network bandwidth allocation, and power consumption.  The policies may be specialized for different types of systems, such as servers and mobile devices.  We will design and perform experiments to further evaluate the policies, comparing them and analyzing their behavior. Offered in alternate years.

Requisite: COSC 112, 201, and 261.  Fall semester.  Professor Kaplan.

Other years: Offered in Spring 2012, Fall 2016