Introduction

Introduction

Back

Computer Science

Professors Kaplan*, Rager (Chair), and Spector; Assistant Professors Alfeld, Gardner, Pentecost, Riondato, and Rosenbaum; Visiting Associate Professor Malita.

Major Program. The core course requirements for the Computer Science major are COSC 111, 112, 171, 211 and 311. In addition, a major must complete four additional elective Computer Science courses numbered above 211. 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 171, 211, and 311, is available on the department website. Majors are encouraged to take the exam early in the academic 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 during the spring semester of the junior year. If a student is admitted to the program, they enroll in COSC 498 for the fall semester, and begin or continue research under the guidance of a faculty advisor. Students in COSC 498 meet together weekly to discuss their independent work. By the end of the fall semester, each student writes an extended abstract describing their 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.

*On leave 2022-23

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

111L Introduction to Computer Science Lab

Lab section for COSC 111

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Spring 2024

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

112L Introduction to Computer Science II Lab

COSC 112 Lab Section

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

121 Thinking Like a Computer Scientist

Analytical thinking is inherent in every aspect of computer science. We need to be able to answer questions such as: how do I know that my program works correctly? How efficient is my approach to solving a problem? How does human-readable code get translated into something that can run on physical hardware? What problems are even solvable by computers? In order to study such questions, computer scientists must be able to communicate with one another using a common language, express ideas formally and precisely, and reason logically about these ideas. This course will introduce mathematics as the primary analytical tool used by computer scientists. Topics may include but are not limited to set notation, symbolic logic, proof techniques such as induction and contradiction, and applications of these topics in computer science. Much more important than any individual topic, however, is the experience that students will gain with formal reasoning.

Restricted to Amherst College students. Instructor permission required. This is to ensure that the students who take this course are those students who will benefit most from it, i.e., those students who do not yet have significant mathematical maturity. Prerequisite: COSC-111. Limited to 20 students. Spring semester: Professor Gardner.

2022-23: Offered in Spring 2023

171 Computer Systems

This course will examine the principles and design choices involved in creating general purpose computer systems. Topics will include instruction set architectures, virtual memory, caching, allocators and garbage collectors, threads and synchronization, file systems, virtual machines, and distributed systems. Projects will involve the implementation and use of these capabilities and abstractions. Students who have taken COSC 261 may not take this course.

Requisite: COSC 112. Fall and spring semesters: Assistant Professor Pentecost.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2017, Fall 2018, Fall 2019, Fall 2020, Fall 2021, Spring 2022, Fall 2022, Spring 2024

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.

Requisite: COSC 112. Fall semester: Professor Gardner. Spring semester: Professor Rager.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

225 Algorithms and Visualization

In this course, we will explore how algorithmic and aesthetic principles can be employed in concert to create interactive graphical content on the web. Topics will include design layout and combinatorial optimization, the geometry of color spaces, graph drawing, computational geometry, generative design, and visualization of data and algorithms. In addition, we will consider issues of algorithmic efficiency in performing computationally intensive tasks. We will investigate topics from both theoretical and applied perspectives. Students will code projects using standard web development tools: HTML, CSS, and JavaScript.

Requisite: COSC 211. Spring semester. Visiting Professor Malita and Assistant Professor Rosenbaum. 

 

Enrollment limit: 50

2022-23: Offered in Spring 2023

241 Artificial Intelligence

An introduction to the ideas and techniques that allow computers to perform intelligently. The course will discuss methods of adversarial game playing and of solving general problems using heuristic search. It will also discuss the design of agents that learn either from experience or from a provided dataset. The course will cover both theoretical aspects of AI and practical considerations such as noisy sensor readings. Three class meetings per week. Offered in alternate years.

Requisite: COSC 211. Fall semester: Assistant Professor Alfeld.

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

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, and/or 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-211. Fall Semester: Professor Spector. 

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022

273 Parallel and Distributed Computing

Modern computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. This course introduces students to the art and science of writing parallel programs. We consider two computing paradigms: shared memory and message passing. We will introduce standard libraries for writing efficient code in each paradigm, and create software that is many times faster than any serial (non-parallel) program performing the same task.

Requisite: COSC 211. Limited to 40 students. Spring semester. Professor Rosenbaum.

2022-23: Offered in Spring 2023

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: Assistant Professor Rosenbaum.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023

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 consent of the instructor. Limited to 50 students. Spring semester. Professor Rager.

2022-23: Offered in Spring 2023
Other years: Offered in Spring 2012, Fall 2013, Spring 2016, Spring 2018, Fall 2020

351 Information Theory

Information Theory formally studies how to efficiently transmit and store digital information. 4K video streams, high-quality audio from Bluetooth speakers,  digital radio, and secure Internet communication are all possible thanks to the solid mathematical foundations of Information Theory. This course first  introduces the fundamental concepts in Information Theory including the entropy of a random variable and the modeling of communication channels, and then covers computer science topics where Information Theory plays a central role, such as error correcting codes, compression, differential privacy, communication complexity, data streams algorithms, and pattern recognition.

Prerequisites: COSC-211, and one of: COSC-223 or MATH-360 or STAT-360, or consent of the Instructor. Spring semester. Assistant Professor Riondato.

2022-23: Offered in Spring 2023

355 Network Science

Many phenomena can be represented as networks of interactions between different components. Network science is the discipline at the intersection of computer science, statistics, and physics that studies the structure, formation, evolution, and behavior of such networks, with the goal of understanding the phenomena they represent.

In this course we study algorithmic, computational, and statistical approaches to the analysis of networks of people (both online and offline), web pages, proteins, and physical goods. We cover, among other topics: models of network formation, ways of measuring the importance of entities in networks and algorithms to calculate those metrics, models and algorithms for diffusion of information and diseases, and human-friendly approaches for visualizing network dynamics.

Requisite: COSC 211, and one of COSC 223, MATH 360 or STATS 360, or consent of the instructor. Limited to 50 students. Fall semester. Assistant Professor Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

383 Computer Security

There is an ongoing arms race between hackers and defenders in the cyber world. This course introduces concepts of computer security including exploitation, diagnosis, and protection. Topics will range from program exploits like buffer overflow attacks and privilege escalation to analysis of recent real-world attacks to discussions about the ethics of hacking. We will also cover security protocols such as those for authentication (proving that you are who you say you are), password checking, and cryptography.

Requisite: COSC 171 or consent of the instructor. Limited to 50 students. Fall semester: Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

390, 490 Special Topics

Independent reading course.

Fall and spring semesters. The Department.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2009, Fall 2010, 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, Spring 2024

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. Limited to 50 students. Fall semester: Professor Rager.

2022-23: Offered in Fall 2022
Other years: Offered in Spring 2013, Spring 2015, Spring 2017, Spring 2019, Spring 2021, Fall 2022

452 Seminar in Computer Science: Evolutionary Computation

Evolutionary computation techniques harness the mechanisms of biological evolution, including mutation, recombination, and selection, to build software systems that solve difficult problems or shed light on the nature of evolutionary processes. In this course students will explore several evolutionary computation techniques and apply them to problems of their choosing. The technique of genetic programming, in which populations of executable programs evolve through natural selection, will be emphasized.

Requisite: COSC 112. Limited to 20 students. Preference given to Computer Science majors. Spring semester: Professor Spector.

2022-23: Offered in Spring 2023

498, 499 Senior Departmental Honors

Open to seniors with consent of the Department.

Fall semester. The Department.

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

About Amherst College

About Amherst College

Back

Computer Science

Professors Kaplan*, Rager (Chair), and Spector; Assistant Professors Alfeld, Gardner, Pentecost, Riondato, and Rosenbaum; Visiting Associate Professor Malita.

Major Program. The core course requirements for the Computer Science major are COSC 111, 112, 171, 211 and 311. In addition, a major must complete four additional elective Computer Science courses numbered above 211. 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 171, 211, and 311, is available on the department website. Majors are encouraged to take the exam early in the academic 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 during the spring semester of the junior year. If a student is admitted to the program, they enroll in COSC 498 for the fall semester, and begin or continue research under the guidance of a faculty advisor. Students in COSC 498 meet together weekly to discuss their independent work. By the end of the fall semester, each student writes an extended abstract describing their 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.

*On leave 2022-23

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

111L Introduction to Computer Science Lab

Lab section for COSC 111

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Spring 2024

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

112L Introduction to Computer Science II Lab

COSC 112 Lab Section

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

121 Thinking Like a Computer Scientist

Analytical thinking is inherent in every aspect of computer science. We need to be able to answer questions such as: how do I know that my program works correctly? How efficient is my approach to solving a problem? How does human-readable code get translated into something that can run on physical hardware? What problems are even solvable by computers? In order to study such questions, computer scientists must be able to communicate with one another using a common language, express ideas formally and precisely, and reason logically about these ideas. This course will introduce mathematics as the primary analytical tool used by computer scientists. Topics may include but are not limited to set notation, symbolic logic, proof techniques such as induction and contradiction, and applications of these topics in computer science. Much more important than any individual topic, however, is the experience that students will gain with formal reasoning.

Restricted to Amherst College students. Instructor permission required. This is to ensure that the students who take this course are those students who will benefit most from it, i.e., those students who do not yet have significant mathematical maturity. Prerequisite: COSC-111. Limited to 20 students. Spring semester: Professor Gardner.

2022-23: Offered in Spring 2023

171 Computer Systems

This course will examine the principles and design choices involved in creating general purpose computer systems. Topics will include instruction set architectures, virtual memory, caching, allocators and garbage collectors, threads and synchronization, file systems, virtual machines, and distributed systems. Projects will involve the implementation and use of these capabilities and abstractions. Students who have taken COSC 261 may not take this course.

Requisite: COSC 112. Fall and spring semesters: Assistant Professor Pentecost.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2017, Fall 2018, Fall 2019, Fall 2020, Fall 2021, Spring 2022, Fall 2022, Spring 2024

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.

Requisite: COSC 112. Fall semester: Professor Gardner. Spring semester: Professor Rager.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

225 Algorithms and Visualization

In this course, we will explore how algorithmic and aesthetic principles can be employed in concert to create interactive graphical content on the web. Topics will include design layout and combinatorial optimization, the geometry of color spaces, graph drawing, computational geometry, generative design, and visualization of data and algorithms. In addition, we will consider issues of algorithmic efficiency in performing computationally intensive tasks. We will investigate topics from both theoretical and applied perspectives. Students will code projects using standard web development tools: HTML, CSS, and JavaScript.

Requisite: COSC 211. Spring semester. Visiting Professor Malita and Assistant Professor Rosenbaum. 

 

Enrollment limit: 50

2022-23: Offered in Spring 2023

241 Artificial Intelligence

An introduction to the ideas and techniques that allow computers to perform intelligently. The course will discuss methods of adversarial game playing and of solving general problems using heuristic search. It will also discuss the design of agents that learn either from experience or from a provided dataset. The course will cover both theoretical aspects of AI and practical considerations such as noisy sensor readings. Three class meetings per week. Offered in alternate years.

Requisite: COSC 211. Fall semester: Assistant Professor Alfeld.

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

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, and/or 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-211. Fall Semester: Professor Spector. 

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022

273 Parallel and Distributed Computing

Modern computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. This course introduces students to the art and science of writing parallel programs. We consider two computing paradigms: shared memory and message passing. We will introduce standard libraries for writing efficient code in each paradigm, and create software that is many times faster than any serial (non-parallel) program performing the same task.

Requisite: COSC 211. Limited to 40 students. Spring semester. Professor Rosenbaum.

2022-23: Offered in Spring 2023

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: Assistant Professor Rosenbaum.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023

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 consent of the instructor. Limited to 50 students. Spring semester. Professor Rager.

2022-23: Offered in Spring 2023
Other years: Offered in Spring 2012, Fall 2013, Spring 2016, Spring 2018, Fall 2020

351 Information Theory

Information Theory formally studies how to efficiently transmit and store digital information. 4K video streams, high-quality audio from Bluetooth speakers,  digital radio, and secure Internet communication are all possible thanks to the solid mathematical foundations of Information Theory. This course first  introduces the fundamental concepts in Information Theory including the entropy of a random variable and the modeling of communication channels, and then covers computer science topics where Information Theory plays a central role, such as error correcting codes, compression, differential privacy, communication complexity, data streams algorithms, and pattern recognition.

Prerequisites: COSC-211, and one of: COSC-223 or MATH-360 or STAT-360, or consent of the Instructor. Spring semester. Assistant Professor Riondato.

2022-23: Offered in Spring 2023

355 Network Science

Many phenomena can be represented as networks of interactions between different components. Network science is the discipline at the intersection of computer science, statistics, and physics that studies the structure, formation, evolution, and behavior of such networks, with the goal of understanding the phenomena they represent.

In this course we study algorithmic, computational, and statistical approaches to the analysis of networks of people (both online and offline), web pages, proteins, and physical goods. We cover, among other topics: models of network formation, ways of measuring the importance of entities in networks and algorithms to calculate those metrics, models and algorithms for diffusion of information and diseases, and human-friendly approaches for visualizing network dynamics.

Requisite: COSC 211, and one of COSC 223, MATH 360 or STATS 360, or consent of the instructor. Limited to 50 students. Fall semester. Assistant Professor Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

383 Computer Security

There is an ongoing arms race between hackers and defenders in the cyber world. This course introduces concepts of computer security including exploitation, diagnosis, and protection. Topics will range from program exploits like buffer overflow attacks and privilege escalation to analysis of recent real-world attacks to discussions about the ethics of hacking. We will also cover security protocols such as those for authentication (proving that you are who you say you are), password checking, and cryptography.

Requisite: COSC 171 or consent of the instructor. Limited to 50 students. Fall semester: Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

390, 490 Special Topics

Independent reading course.

Fall and spring semesters. The Department.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2009, Fall 2010, 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, Spring 2024

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. Limited to 50 students. Fall semester: Professor Rager.

2022-23: Offered in Fall 2022
Other years: Offered in Spring 2013, Spring 2015, Spring 2017, Spring 2019, Spring 2021, Fall 2022

452 Seminar in Computer Science: Evolutionary Computation

Evolutionary computation techniques harness the mechanisms of biological evolution, including mutation, recombination, and selection, to build software systems that solve difficult problems or shed light on the nature of evolutionary processes. In this course students will explore several evolutionary computation techniques and apply them to problems of their choosing. The technique of genetic programming, in which populations of executable programs evolve through natural selection, will be emphasized.

Requisite: COSC 112. Limited to 20 students. Preference given to Computer Science majors. Spring semester: Professor Spector.

2022-23: Offered in Spring 2023

498, 499 Senior Departmental Honors

Open to seniors with consent of the Department.

Fall semester. The Department.

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

Admission & Financial Aid

Admission & Financial Aid

Back

Computer Science

Professors Kaplan*, Rager (Chair), and Spector; Assistant Professors Alfeld, Gardner, Pentecost, Riondato, and Rosenbaum; Visiting Associate Professor Malita.

Major Program. The core course requirements for the Computer Science major are COSC 111, 112, 171, 211 and 311. In addition, a major must complete four additional elective Computer Science courses numbered above 211. 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 171, 211, and 311, is available on the department website. Majors are encouraged to take the exam early in the academic 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 during the spring semester of the junior year. If a student is admitted to the program, they enroll in COSC 498 for the fall semester, and begin or continue research under the guidance of a faculty advisor. Students in COSC 498 meet together weekly to discuss their independent work. By the end of the fall semester, each student writes an extended abstract describing their 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.

*On leave 2022-23

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

111L Introduction to Computer Science Lab

Lab section for COSC 111

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Spring 2024

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

112L Introduction to Computer Science II Lab

COSC 112 Lab Section

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

121 Thinking Like a Computer Scientist

Analytical thinking is inherent in every aspect of computer science. We need to be able to answer questions such as: how do I know that my program works correctly? How efficient is my approach to solving a problem? How does human-readable code get translated into something that can run on physical hardware? What problems are even solvable by computers? In order to study such questions, computer scientists must be able to communicate with one another using a common language, express ideas formally and precisely, and reason logically about these ideas. This course will introduce mathematics as the primary analytical tool used by computer scientists. Topics may include but are not limited to set notation, symbolic logic, proof techniques such as induction and contradiction, and applications of these topics in computer science. Much more important than any individual topic, however, is the experience that students will gain with formal reasoning.

Restricted to Amherst College students. Instructor permission required. This is to ensure that the students who take this course are those students who will benefit most from it, i.e., those students who do not yet have significant mathematical maturity. Prerequisite: COSC-111. Limited to 20 students. Spring semester: Professor Gardner.

2022-23: Offered in Spring 2023

171 Computer Systems

This course will examine the principles and design choices involved in creating general purpose computer systems. Topics will include instruction set architectures, virtual memory, caching, allocators and garbage collectors, threads and synchronization, file systems, virtual machines, and distributed systems. Projects will involve the implementation and use of these capabilities and abstractions. Students who have taken COSC 261 may not take this course.

Requisite: COSC 112. Fall and spring semesters: Assistant Professor Pentecost.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2017, Fall 2018, Fall 2019, Fall 2020, Fall 2021, Spring 2022, Fall 2022, Spring 2024

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.

Requisite: COSC 112. Fall semester: Professor Gardner. Spring semester: Professor Rager.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

225 Algorithms and Visualization

In this course, we will explore how algorithmic and aesthetic principles can be employed in concert to create interactive graphical content on the web. Topics will include design layout and combinatorial optimization, the geometry of color spaces, graph drawing, computational geometry, generative design, and visualization of data and algorithms. In addition, we will consider issues of algorithmic efficiency in performing computationally intensive tasks. We will investigate topics from both theoretical and applied perspectives. Students will code projects using standard web development tools: HTML, CSS, and JavaScript.

Requisite: COSC 211. Spring semester. Visiting Professor Malita and Assistant Professor Rosenbaum. 

 

Enrollment limit: 50

2022-23: Offered in Spring 2023

241 Artificial Intelligence

An introduction to the ideas and techniques that allow computers to perform intelligently. The course will discuss methods of adversarial game playing and of solving general problems using heuristic search. It will also discuss the design of agents that learn either from experience or from a provided dataset. The course will cover both theoretical aspects of AI and practical considerations such as noisy sensor readings. Three class meetings per week. Offered in alternate years.

Requisite: COSC 211. Fall semester: Assistant Professor Alfeld.

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

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, and/or 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-211. Fall Semester: Professor Spector. 

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022

273 Parallel and Distributed Computing

Modern computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. This course introduces students to the art and science of writing parallel programs. We consider two computing paradigms: shared memory and message passing. We will introduce standard libraries for writing efficient code in each paradigm, and create software that is many times faster than any serial (non-parallel) program performing the same task.

Requisite: COSC 211. Limited to 40 students. Spring semester. Professor Rosenbaum.

2022-23: Offered in Spring 2023

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: Assistant Professor Rosenbaum.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023

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 consent of the instructor. Limited to 50 students. Spring semester. Professor Rager.

2022-23: Offered in Spring 2023
Other years: Offered in Spring 2012, Fall 2013, Spring 2016, Spring 2018, Fall 2020

351 Information Theory

Information Theory formally studies how to efficiently transmit and store digital information. 4K video streams, high-quality audio from Bluetooth speakers,  digital radio, and secure Internet communication are all possible thanks to the solid mathematical foundations of Information Theory. This course first  introduces the fundamental concepts in Information Theory including the entropy of a random variable and the modeling of communication channels, and then covers computer science topics where Information Theory plays a central role, such as error correcting codes, compression, differential privacy, communication complexity, data streams algorithms, and pattern recognition.

Prerequisites: COSC-211, and one of: COSC-223 or MATH-360 or STAT-360, or consent of the Instructor. Spring semester. Assistant Professor Riondato.

2022-23: Offered in Spring 2023

355 Network Science

Many phenomena can be represented as networks of interactions between different components. Network science is the discipline at the intersection of computer science, statistics, and physics that studies the structure, formation, evolution, and behavior of such networks, with the goal of understanding the phenomena they represent.

In this course we study algorithmic, computational, and statistical approaches to the analysis of networks of people (both online and offline), web pages, proteins, and physical goods. We cover, among other topics: models of network formation, ways of measuring the importance of entities in networks and algorithms to calculate those metrics, models and algorithms for diffusion of information and diseases, and human-friendly approaches for visualizing network dynamics.

Requisite: COSC 211, and one of COSC 223, MATH 360 or STATS 360, or consent of the instructor. Limited to 50 students. Fall semester. Assistant Professor Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

383 Computer Security

There is an ongoing arms race between hackers and defenders in the cyber world. This course introduces concepts of computer security including exploitation, diagnosis, and protection. Topics will range from program exploits like buffer overflow attacks and privilege escalation to analysis of recent real-world attacks to discussions about the ethics of hacking. We will also cover security protocols such as those for authentication (proving that you are who you say you are), password checking, and cryptography.

Requisite: COSC 171 or consent of the instructor. Limited to 50 students. Fall semester: Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

390, 490 Special Topics

Independent reading course.

Fall and spring semesters. The Department.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2009, Fall 2010, 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, Spring 2024

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. Limited to 50 students. Fall semester: Professor Rager.

2022-23: Offered in Fall 2022
Other years: Offered in Spring 2013, Spring 2015, Spring 2017, Spring 2019, Spring 2021, Fall 2022

452 Seminar in Computer Science: Evolutionary Computation

Evolutionary computation techniques harness the mechanisms of biological evolution, including mutation, recombination, and selection, to build software systems that solve difficult problems or shed light on the nature of evolutionary processes. In this course students will explore several evolutionary computation techniques and apply them to problems of their choosing. The technique of genetic programming, in which populations of executable programs evolve through natural selection, will be emphasized.

Requisite: COSC 112. Limited to 20 students. Preference given to Computer Science majors. Spring semester: Professor Spector.

2022-23: Offered in Spring 2023

498, 499 Senior Departmental Honors

Open to seniors with consent of the Department.

Fall semester. The Department.

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

Regulations & Requirements

Regulations & Requirements

Back

Computer Science

Professors Kaplan*, Rager (Chair), and Spector; Assistant Professors Alfeld, Gardner, Pentecost, Riondato, and Rosenbaum; Visiting Associate Professor Malita.

Major Program. The core course requirements for the Computer Science major are COSC 111, 112, 171, 211 and 311. In addition, a major must complete four additional elective Computer Science courses numbered above 211. 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 171, 211, and 311, is available on the department website. Majors are encouraged to take the exam early in the academic 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 during the spring semester of the junior year. If a student is admitted to the program, they enroll in COSC 498 for the fall semester, and begin or continue research under the guidance of a faculty advisor. Students in COSC 498 meet together weekly to discuss their independent work. By the end of the fall semester, each student writes an extended abstract describing their 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.

*On leave 2022-23

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

111L Introduction to Computer Science Lab

Lab section for COSC 111

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Spring 2024

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

112L Introduction to Computer Science II Lab

COSC 112 Lab Section

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

121 Thinking Like a Computer Scientist

Analytical thinking is inherent in every aspect of computer science. We need to be able to answer questions such as: how do I know that my program works correctly? How efficient is my approach to solving a problem? How does human-readable code get translated into something that can run on physical hardware? What problems are even solvable by computers? In order to study such questions, computer scientists must be able to communicate with one another using a common language, express ideas formally and precisely, and reason logically about these ideas. This course will introduce mathematics as the primary analytical tool used by computer scientists. Topics may include but are not limited to set notation, symbolic logic, proof techniques such as induction and contradiction, and applications of these topics in computer science. Much more important than any individual topic, however, is the experience that students will gain with formal reasoning.

Restricted to Amherst College students. Instructor permission required. This is to ensure that the students who take this course are those students who will benefit most from it, i.e., those students who do not yet have significant mathematical maturity. Prerequisite: COSC-111. Limited to 20 students. Spring semester: Professor Gardner.

2022-23: Offered in Spring 2023

171 Computer Systems

This course will examine the principles and design choices involved in creating general purpose computer systems. Topics will include instruction set architectures, virtual memory, caching, allocators and garbage collectors, threads and synchronization, file systems, virtual machines, and distributed systems. Projects will involve the implementation and use of these capabilities and abstractions. Students who have taken COSC 261 may not take this course.

Requisite: COSC 112. Fall and spring semesters: Assistant Professor Pentecost.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2017, Fall 2018, Fall 2019, Fall 2020, Fall 2021, Spring 2022, Fall 2022, Spring 2024

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.

Requisite: COSC 112. Fall semester: Professor Gardner. Spring semester: Professor Rager.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

225 Algorithms and Visualization

In this course, we will explore how algorithmic and aesthetic principles can be employed in concert to create interactive graphical content on the web. Topics will include design layout and combinatorial optimization, the geometry of color spaces, graph drawing, computational geometry, generative design, and visualization of data and algorithms. In addition, we will consider issues of algorithmic efficiency in performing computationally intensive tasks. We will investigate topics from both theoretical and applied perspectives. Students will code projects using standard web development tools: HTML, CSS, and JavaScript.

Requisite: COSC 211. Spring semester. Visiting Professor Malita and Assistant Professor Rosenbaum. 

 

Enrollment limit: 50

2022-23: Offered in Spring 2023

241 Artificial Intelligence

An introduction to the ideas and techniques that allow computers to perform intelligently. The course will discuss methods of adversarial game playing and of solving general problems using heuristic search. It will also discuss the design of agents that learn either from experience or from a provided dataset. The course will cover both theoretical aspects of AI and practical considerations such as noisy sensor readings. Three class meetings per week. Offered in alternate years.

Requisite: COSC 211. Fall semester: Assistant Professor Alfeld.

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

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, and/or 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-211. Fall Semester: Professor Spector. 

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022

273 Parallel and Distributed Computing

Modern computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. This course introduces students to the art and science of writing parallel programs. We consider two computing paradigms: shared memory and message passing. We will introduce standard libraries for writing efficient code in each paradigm, and create software that is many times faster than any serial (non-parallel) program performing the same task.

Requisite: COSC 211. Limited to 40 students. Spring semester. Professor Rosenbaum.

2022-23: Offered in Spring 2023

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: Assistant Professor Rosenbaum.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023

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 consent of the instructor. Limited to 50 students. Spring semester. Professor Rager.

2022-23: Offered in Spring 2023
Other years: Offered in Spring 2012, Fall 2013, Spring 2016, Spring 2018, Fall 2020

351 Information Theory

Information Theory formally studies how to efficiently transmit and store digital information. 4K video streams, high-quality audio from Bluetooth speakers,  digital radio, and secure Internet communication are all possible thanks to the solid mathematical foundations of Information Theory. This course first  introduces the fundamental concepts in Information Theory including the entropy of a random variable and the modeling of communication channels, and then covers computer science topics where Information Theory plays a central role, such as error correcting codes, compression, differential privacy, communication complexity, data streams algorithms, and pattern recognition.

Prerequisites: COSC-211, and one of: COSC-223 or MATH-360 or STAT-360, or consent of the Instructor. Spring semester. Assistant Professor Riondato.

2022-23: Offered in Spring 2023

355 Network Science

Many phenomena can be represented as networks of interactions between different components. Network science is the discipline at the intersection of computer science, statistics, and physics that studies the structure, formation, evolution, and behavior of such networks, with the goal of understanding the phenomena they represent.

In this course we study algorithmic, computational, and statistical approaches to the analysis of networks of people (both online and offline), web pages, proteins, and physical goods. We cover, among other topics: models of network formation, ways of measuring the importance of entities in networks and algorithms to calculate those metrics, models and algorithms for diffusion of information and diseases, and human-friendly approaches for visualizing network dynamics.

Requisite: COSC 211, and one of COSC 223, MATH 360 or STATS 360, or consent of the instructor. Limited to 50 students. Fall semester. Assistant Professor Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

383 Computer Security

There is an ongoing arms race between hackers and defenders in the cyber world. This course introduces concepts of computer security including exploitation, diagnosis, and protection. Topics will range from program exploits like buffer overflow attacks and privilege escalation to analysis of recent real-world attacks to discussions about the ethics of hacking. We will also cover security protocols such as those for authentication (proving that you are who you say you are), password checking, and cryptography.

Requisite: COSC 171 or consent of the instructor. Limited to 50 students. Fall semester: Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

390, 490 Special Topics

Independent reading course.

Fall and spring semesters. The Department.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2009, Fall 2010, 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, Spring 2024

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. Limited to 50 students. Fall semester: Professor Rager.

2022-23: Offered in Fall 2022
Other years: Offered in Spring 2013, Spring 2015, Spring 2017, Spring 2019, Spring 2021, Fall 2022

452 Seminar in Computer Science: Evolutionary Computation

Evolutionary computation techniques harness the mechanisms of biological evolution, including mutation, recombination, and selection, to build software systems that solve difficult problems or shed light on the nature of evolutionary processes. In this course students will explore several evolutionary computation techniques and apply them to problems of their choosing. The technique of genetic programming, in which populations of executable programs evolve through natural selection, will be emphasized.

Requisite: COSC 112. Limited to 20 students. Preference given to Computer Science majors. Spring semester: Professor Spector.

2022-23: Offered in Spring 2023

498, 499 Senior Departmental Honors

Open to seniors with consent of the Department.

Fall semester. The Department.

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

Amherst College Courses

Amherst College Courses

Back

Computer Science

Professors Kaplan*, Rager (Chair), and Spector; Assistant Professors Alfeld, Gardner, Pentecost, Riondato, and Rosenbaum; Visiting Associate Professor Malita.

Major Program. The core course requirements for the Computer Science major are COSC 111, 112, 171, 211 and 311. In addition, a major must complete four additional elective Computer Science courses numbered above 211. 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 171, 211, and 311, is available on the department website. Majors are encouraged to take the exam early in the academic 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 during the spring semester of the junior year. If a student is admitted to the program, they enroll in COSC 498 for the fall semester, and begin or continue research under the guidance of a faculty advisor. Students in COSC 498 meet together weekly to discuss their independent work. By the end of the fall semester, each student writes an extended abstract describing their 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.

*On leave 2022-23

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

111L Introduction to Computer Science Lab

Lab section for COSC 111

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Spring 2024

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

112L Introduction to Computer Science II Lab

COSC 112 Lab Section

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

121 Thinking Like a Computer Scientist

Analytical thinking is inherent in every aspect of computer science. We need to be able to answer questions such as: how do I know that my program works correctly? How efficient is my approach to solving a problem? How does human-readable code get translated into something that can run on physical hardware? What problems are even solvable by computers? In order to study such questions, computer scientists must be able to communicate with one another using a common language, express ideas formally and precisely, and reason logically about these ideas. This course will introduce mathematics as the primary analytical tool used by computer scientists. Topics may include but are not limited to set notation, symbolic logic, proof techniques such as induction and contradiction, and applications of these topics in computer science. Much more important than any individual topic, however, is the experience that students will gain with formal reasoning.

Restricted to Amherst College students. Instructor permission required. This is to ensure that the students who take this course are those students who will benefit most from it, i.e., those students who do not yet have significant mathematical maturity. Prerequisite: COSC-111. Limited to 20 students. Spring semester: Professor Gardner.

2022-23: Offered in Spring 2023

171 Computer Systems

This course will examine the principles and design choices involved in creating general purpose computer systems. Topics will include instruction set architectures, virtual memory, caching, allocators and garbage collectors, threads and synchronization, file systems, virtual machines, and distributed systems. Projects will involve the implementation and use of these capabilities and abstractions. Students who have taken COSC 261 may not take this course.

Requisite: COSC 112. Fall and spring semesters: Assistant Professor Pentecost.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2017, Fall 2018, Fall 2019, Fall 2020, Fall 2021, Spring 2022, Fall 2022, Spring 2024

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.

Requisite: COSC 112. Fall semester: Professor Gardner. Spring semester: Professor Rager.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

225 Algorithms and Visualization

In this course, we will explore how algorithmic and aesthetic principles can be employed in concert to create interactive graphical content on the web. Topics will include design layout and combinatorial optimization, the geometry of color spaces, graph drawing, computational geometry, generative design, and visualization of data and algorithms. In addition, we will consider issues of algorithmic efficiency in performing computationally intensive tasks. We will investigate topics from both theoretical and applied perspectives. Students will code projects using standard web development tools: HTML, CSS, and JavaScript.

Requisite: COSC 211. Spring semester. Visiting Professor Malita and Assistant Professor Rosenbaum. 

 

Enrollment limit: 50

2022-23: Offered in Spring 2023

241 Artificial Intelligence

An introduction to the ideas and techniques that allow computers to perform intelligently. The course will discuss methods of adversarial game playing and of solving general problems using heuristic search. It will also discuss the design of agents that learn either from experience or from a provided dataset. The course will cover both theoretical aspects of AI and practical considerations such as noisy sensor readings. Three class meetings per week. Offered in alternate years.

Requisite: COSC 211. Fall semester: Assistant Professor Alfeld.

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

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, and/or 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-211. Fall Semester: Professor Spector. 

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022

273 Parallel and Distributed Computing

Modern computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. This course introduces students to the art and science of writing parallel programs. We consider two computing paradigms: shared memory and message passing. We will introduce standard libraries for writing efficient code in each paradigm, and create software that is many times faster than any serial (non-parallel) program performing the same task.

Requisite: COSC 211. Limited to 40 students. Spring semester. Professor Rosenbaum.

2022-23: Offered in Spring 2023

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: Assistant Professor Rosenbaum.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023

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 consent of the instructor. Limited to 50 students. Spring semester. Professor Rager.

2022-23: Offered in Spring 2023
Other years: Offered in Spring 2012, Fall 2013, Spring 2016, Spring 2018, Fall 2020

351 Information Theory

Information Theory formally studies how to efficiently transmit and store digital information. 4K video streams, high-quality audio from Bluetooth speakers,  digital radio, and secure Internet communication are all possible thanks to the solid mathematical foundations of Information Theory. This course first  introduces the fundamental concepts in Information Theory including the entropy of a random variable and the modeling of communication channels, and then covers computer science topics where Information Theory plays a central role, such as error correcting codes, compression, differential privacy, communication complexity, data streams algorithms, and pattern recognition.

Prerequisites: COSC-211, and one of: COSC-223 or MATH-360 or STAT-360, or consent of the Instructor. Spring semester. Assistant Professor Riondato.

2022-23: Offered in Spring 2023

355 Network Science

Many phenomena can be represented as networks of interactions between different components. Network science is the discipline at the intersection of computer science, statistics, and physics that studies the structure, formation, evolution, and behavior of such networks, with the goal of understanding the phenomena they represent.

In this course we study algorithmic, computational, and statistical approaches to the analysis of networks of people (both online and offline), web pages, proteins, and physical goods. We cover, among other topics: models of network formation, ways of measuring the importance of entities in networks and algorithms to calculate those metrics, models and algorithms for diffusion of information and diseases, and human-friendly approaches for visualizing network dynamics.

Requisite: COSC 211, and one of COSC 223, MATH 360 or STATS 360, or consent of the instructor. Limited to 50 students. Fall semester. Assistant Professor Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

383 Computer Security

There is an ongoing arms race between hackers and defenders in the cyber world. This course introduces concepts of computer security including exploitation, diagnosis, and protection. Topics will range from program exploits like buffer overflow attacks and privilege escalation to analysis of recent real-world attacks to discussions about the ethics of hacking. We will also cover security protocols such as those for authentication (proving that you are who you say you are), password checking, and cryptography.

Requisite: COSC 171 or consent of the instructor. Limited to 50 students. Fall semester: Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

390, 490 Special Topics

Independent reading course.

Fall and spring semesters. The Department.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2009, Fall 2010, 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, Spring 2024

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. Limited to 50 students. Fall semester: Professor Rager.

2022-23: Offered in Fall 2022
Other years: Offered in Spring 2013, Spring 2015, Spring 2017, Spring 2019, Spring 2021, Fall 2022

452 Seminar in Computer Science: Evolutionary Computation

Evolutionary computation techniques harness the mechanisms of biological evolution, including mutation, recombination, and selection, to build software systems that solve difficult problems or shed light on the nature of evolutionary processes. In this course students will explore several evolutionary computation techniques and apply them to problems of their choosing. The technique of genetic programming, in which populations of executable programs evolve through natural selection, will be emphasized.

Requisite: COSC 112. Limited to 20 students. Preference given to Computer Science majors. Spring semester: Professor Spector.

2022-23: Offered in Spring 2023

498, 499 Senior Departmental Honors

Open to seniors with consent of the Department.

Fall semester. The Department.

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

Five College Programs & Certificates

Five College Programs & Certificates

Back

Computer Science

Professors Kaplan*, Rager (Chair), and Spector; Assistant Professors Alfeld, Gardner, Pentecost, Riondato, and Rosenbaum; Visiting Associate Professor Malita.

Major Program. The core course requirements for the Computer Science major are COSC 111, 112, 171, 211 and 311. In addition, a major must complete four additional elective Computer Science courses numbered above 211. 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 171, 211, and 311, is available on the department website. Majors are encouraged to take the exam early in the academic 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 during the spring semester of the junior year. If a student is admitted to the program, they enroll in COSC 498 for the fall semester, and begin or continue research under the guidance of a faculty advisor. Students in COSC 498 meet together weekly to discuss their independent work. By the end of the fall semester, each student writes an extended abstract describing their 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.

*On leave 2022-23

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

111L Introduction to Computer Science Lab

Lab section for COSC 111

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Spring 2024

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

112L Introduction to Computer Science II Lab

COSC 112 Lab Section

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

121 Thinking Like a Computer Scientist

Analytical thinking is inherent in every aspect of computer science. We need to be able to answer questions such as: how do I know that my program works correctly? How efficient is my approach to solving a problem? How does human-readable code get translated into something that can run on physical hardware? What problems are even solvable by computers? In order to study such questions, computer scientists must be able to communicate with one another using a common language, express ideas formally and precisely, and reason logically about these ideas. This course will introduce mathematics as the primary analytical tool used by computer scientists. Topics may include but are not limited to set notation, symbolic logic, proof techniques such as induction and contradiction, and applications of these topics in computer science. Much more important than any individual topic, however, is the experience that students will gain with formal reasoning.

Restricted to Amherst College students. Instructor permission required. This is to ensure that the students who take this course are those students who will benefit most from it, i.e., those students who do not yet have significant mathematical maturity. Prerequisite: COSC-111. Limited to 20 students. Spring semester: Professor Gardner.

2022-23: Offered in Spring 2023

171 Computer Systems

This course will examine the principles and design choices involved in creating general purpose computer systems. Topics will include instruction set architectures, virtual memory, caching, allocators and garbage collectors, threads and synchronization, file systems, virtual machines, and distributed systems. Projects will involve the implementation and use of these capabilities and abstractions. Students who have taken COSC 261 may not take this course.

Requisite: COSC 112. Fall and spring semesters: Assistant Professor Pentecost.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2017, Fall 2018, Fall 2019, Fall 2020, Fall 2021, Spring 2022, Fall 2022, Spring 2024

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.

Requisite: COSC 112. Fall semester: Professor Gardner. Spring semester: Professor Rager.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

225 Algorithms and Visualization

In this course, we will explore how algorithmic and aesthetic principles can be employed in concert to create interactive graphical content on the web. Topics will include design layout and combinatorial optimization, the geometry of color spaces, graph drawing, computational geometry, generative design, and visualization of data and algorithms. In addition, we will consider issues of algorithmic efficiency in performing computationally intensive tasks. We will investigate topics from both theoretical and applied perspectives. Students will code projects using standard web development tools: HTML, CSS, and JavaScript.

Requisite: COSC 211. Spring semester. Visiting Professor Malita and Assistant Professor Rosenbaum. 

 

Enrollment limit: 50

2022-23: Offered in Spring 2023

241 Artificial Intelligence

An introduction to the ideas and techniques that allow computers to perform intelligently. The course will discuss methods of adversarial game playing and of solving general problems using heuristic search. It will also discuss the design of agents that learn either from experience or from a provided dataset. The course will cover both theoretical aspects of AI and practical considerations such as noisy sensor readings. Three class meetings per week. Offered in alternate years.

Requisite: COSC 211. Fall semester: Assistant Professor Alfeld.

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

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, and/or 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-211. Fall Semester: Professor Spector. 

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022

273 Parallel and Distributed Computing

Modern computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. This course introduces students to the art and science of writing parallel programs. We consider two computing paradigms: shared memory and message passing. We will introduce standard libraries for writing efficient code in each paradigm, and create software that is many times faster than any serial (non-parallel) program performing the same task.

Requisite: COSC 211. Limited to 40 students. Spring semester. Professor Rosenbaum.

2022-23: Offered in Spring 2023

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: Assistant Professor Rosenbaum.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023

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 consent of the instructor. Limited to 50 students. Spring semester. Professor Rager.

2022-23: Offered in Spring 2023
Other years: Offered in Spring 2012, Fall 2013, Spring 2016, Spring 2018, Fall 2020

351 Information Theory

Information Theory formally studies how to efficiently transmit and store digital information. 4K video streams, high-quality audio from Bluetooth speakers,  digital radio, and secure Internet communication are all possible thanks to the solid mathematical foundations of Information Theory. This course first  introduces the fundamental concepts in Information Theory including the entropy of a random variable and the modeling of communication channels, and then covers computer science topics where Information Theory plays a central role, such as error correcting codes, compression, differential privacy, communication complexity, data streams algorithms, and pattern recognition.

Prerequisites: COSC-211, and one of: COSC-223 or MATH-360 or STAT-360, or consent of the Instructor. Spring semester. Assistant Professor Riondato.

2022-23: Offered in Spring 2023

355 Network Science

Many phenomena can be represented as networks of interactions between different components. Network science is the discipline at the intersection of computer science, statistics, and physics that studies the structure, formation, evolution, and behavior of such networks, with the goal of understanding the phenomena they represent.

In this course we study algorithmic, computational, and statistical approaches to the analysis of networks of people (both online and offline), web pages, proteins, and physical goods. We cover, among other topics: models of network formation, ways of measuring the importance of entities in networks and algorithms to calculate those metrics, models and algorithms for diffusion of information and diseases, and human-friendly approaches for visualizing network dynamics.

Requisite: COSC 211, and one of COSC 223, MATH 360 or STATS 360, or consent of the instructor. Limited to 50 students. Fall semester. Assistant Professor Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

383 Computer Security

There is an ongoing arms race between hackers and defenders in the cyber world. This course introduces concepts of computer security including exploitation, diagnosis, and protection. Topics will range from program exploits like buffer overflow attacks and privilege escalation to analysis of recent real-world attacks to discussions about the ethics of hacking. We will also cover security protocols such as those for authentication (proving that you are who you say you are), password checking, and cryptography.

Requisite: COSC 171 or consent of the instructor. Limited to 50 students. Fall semester: Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

390, 490 Special Topics

Independent reading course.

Fall and spring semesters. The Department.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2009, Fall 2010, 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, Spring 2024

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. Limited to 50 students. Fall semester: Professor Rager.

2022-23: Offered in Fall 2022
Other years: Offered in Spring 2013, Spring 2015, Spring 2017, Spring 2019, Spring 2021, Fall 2022

452 Seminar in Computer Science: Evolutionary Computation

Evolutionary computation techniques harness the mechanisms of biological evolution, including mutation, recombination, and selection, to build software systems that solve difficult problems or shed light on the nature of evolutionary processes. In this course students will explore several evolutionary computation techniques and apply them to problems of their choosing. The technique of genetic programming, in which populations of executable programs evolve through natural selection, will be emphasized.

Requisite: COSC 112. Limited to 20 students. Preference given to Computer Science majors. Spring semester: Professor Spector.

2022-23: Offered in Spring 2023

498, 499 Senior Departmental Honors

Open to seniors with consent of the Department.

Fall semester. The Department.

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

Honors & Fellowships

Honors & Fellowships

Back

Computer Science

Professors Kaplan*, Rager (Chair), and Spector; Assistant Professors Alfeld, Gardner, Pentecost, Riondato, and Rosenbaum; Visiting Associate Professor Malita.

Major Program. The core course requirements for the Computer Science major are COSC 111, 112, 171, 211 and 311. In addition, a major must complete four additional elective Computer Science courses numbered above 211. 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 171, 211, and 311, is available on the department website. Majors are encouraged to take the exam early in the academic 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 during the spring semester of the junior year. If a student is admitted to the program, they enroll in COSC 498 for the fall semester, and begin or continue research under the guidance of a faculty advisor. Students in COSC 498 meet together weekly to discuss their independent work. By the end of the fall semester, each student writes an extended abstract describing their 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.

*On leave 2022-23

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

111L Introduction to Computer Science Lab

Lab section for COSC 111

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. 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. Limited to 40 students per class (20 per lab). In the Fall, 20 seats per class are reserved for first-year students. Fall semester: Professors Malita, Pentecost, and Riondato. Spring semester: Professors Gardner and Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Spring 2024

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022, Spring 2023
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, Fall 2023, Spring 2024

112L Introduction to Computer Science II Lab

COSC 112 Lab Section

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 the instructor. Limited to 40 students with 10 spaces reserved for first-year students in the fall. Fall Semester: Professor Rager and Visiting Professor Malita. Spring Semester Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

121 Thinking Like a Computer Scientist

Analytical thinking is inherent in every aspect of computer science. We need to be able to answer questions such as: how do I know that my program works correctly? How efficient is my approach to solving a problem? How does human-readable code get translated into something that can run on physical hardware? What problems are even solvable by computers? In order to study such questions, computer scientists must be able to communicate with one another using a common language, express ideas formally and precisely, and reason logically about these ideas. This course will introduce mathematics as the primary analytical tool used by computer scientists. Topics may include but are not limited to set notation, symbolic logic, proof techniques such as induction and contradiction, and applications of these topics in computer science. Much more important than any individual topic, however, is the experience that students will gain with formal reasoning.

Restricted to Amherst College students. Instructor permission required. This is to ensure that the students who take this course are those students who will benefit most from it, i.e., those students who do not yet have significant mathematical maturity. Prerequisite: COSC-111. Limited to 20 students. Spring semester: Professor Gardner.

2022-23: Offered in Spring 2023

171 Computer Systems

This course will examine the principles and design choices involved in creating general purpose computer systems. Topics will include instruction set architectures, virtual memory, caching, allocators and garbage collectors, threads and synchronization, file systems, virtual machines, and distributed systems. Projects will involve the implementation and use of these capabilities and abstractions. Students who have taken COSC 261 may not take this course.

Requisite: COSC 112. Fall and spring semesters: Assistant Professor Pentecost.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2017, Fall 2018, Fall 2019, Fall 2020, Fall 2021, Spring 2022, Fall 2022, Spring 2024

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.

Requisite: COSC 112. Fall semester: Professor Gardner. Spring semester: Professor Rager.

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022, Fall 2023, Spring 2024

225 Algorithms and Visualization

In this course, we will explore how algorithmic and aesthetic principles can be employed in concert to create interactive graphical content on the web. Topics will include design layout and combinatorial optimization, the geometry of color spaces, graph drawing, computational geometry, generative design, and visualization of data and algorithms. In addition, we will consider issues of algorithmic efficiency in performing computationally intensive tasks. We will investigate topics from both theoretical and applied perspectives. Students will code projects using standard web development tools: HTML, CSS, and JavaScript.

Requisite: COSC 211. Spring semester. Visiting Professor Malita and Assistant Professor Rosenbaum. 

 

Enrollment limit: 50

2022-23: Offered in Spring 2023

241 Artificial Intelligence

An introduction to the ideas and techniques that allow computers to perform intelligently. The course will discuss methods of adversarial game playing and of solving general problems using heuristic search. It will also discuss the design of agents that learn either from experience or from a provided dataset. The course will cover both theoretical aspects of AI and practical considerations such as noisy sensor readings. Three class meetings per week. Offered in alternate years.

Requisite: COSC 211. Fall semester: Assistant Professor Alfeld.

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

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, and/or 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-211. Fall Semester: Professor Spector. 

2022-23: Offered in Fall 2022, Spring 2023
Other years: Offered in Fall 2022

273 Parallel and Distributed Computing

Modern computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. This course introduces students to the art and science of writing parallel programs. We consider two computing paradigms: shared memory and message passing. We will introduce standard libraries for writing efficient code in each paradigm, and create software that is many times faster than any serial (non-parallel) program performing the same task.

Requisite: COSC 211. Limited to 40 students. Spring semester. Professor Rosenbaum.

2022-23: Offered in Spring 2023

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: Assistant Professor Rosenbaum.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022, Fall 2023

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 consent of the instructor. Limited to 50 students. Spring semester. Professor Rager.

2022-23: Offered in Spring 2023
Other years: Offered in Spring 2012, Fall 2013, Spring 2016, Spring 2018, Fall 2020

351 Information Theory

Information Theory formally studies how to efficiently transmit and store digital information. 4K video streams, high-quality audio from Bluetooth speakers,  digital radio, and secure Internet communication are all possible thanks to the solid mathematical foundations of Information Theory. This course first  introduces the fundamental concepts in Information Theory including the entropy of a random variable and the modeling of communication channels, and then covers computer science topics where Information Theory plays a central role, such as error correcting codes, compression, differential privacy, communication complexity, data streams algorithms, and pattern recognition.

Prerequisites: COSC-211, and one of: COSC-223 or MATH-360 or STAT-360, or consent of the Instructor. Spring semester. Assistant Professor Riondato.

2022-23: Offered in Spring 2023

355 Network Science

Many phenomena can be represented as networks of interactions between different components. Network science is the discipline at the intersection of computer science, statistics, and physics that studies the structure, formation, evolution, and behavior of such networks, with the goal of understanding the phenomena they represent.

In this course we study algorithmic, computational, and statistical approaches to the analysis of networks of people (both online and offline), web pages, proteins, and physical goods. We cover, among other topics: models of network formation, ways of measuring the importance of entities in networks and algorithms to calculate those metrics, models and algorithms for diffusion of information and diseases, and human-friendly approaches for visualizing network dynamics.

Requisite: COSC 211, and one of COSC 223, MATH 360 or STATS 360, or consent of the instructor. Limited to 50 students. Fall semester. Assistant Professor Riondato.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

383 Computer Security

There is an ongoing arms race between hackers and defenders in the cyber world. This course introduces concepts of computer security including exploitation, diagnosis, and protection. Topics will range from program exploits like buffer overflow attacks and privilege escalation to analysis of recent real-world attacks to discussions about the ethics of hacking. We will also cover security protocols such as those for authentication (proving that you are who you say you are), password checking, and cryptography.

Requisite: COSC 171 or consent of the instructor. Limited to 50 students. Fall semester: Assistant Professor Alfeld.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2022

390, 490 Special Topics

Independent reading course.

Fall and spring semesters. The Department.

2022-23: Offered in Fall 2022
Other years: Offered in Fall 2009, Fall 2010, 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, Spring 2024

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. Limited to 50 students. Fall semester: Professor Rager.

2022-23: Offered in Fall 2022
Other years: Offered in Spring 2013, Spring 2015, Spring 2017, Spring 2019, Spring 2021, Fall 2022

452 Seminar in Computer Science: Evolutionary Computation

Evolutionary computation techniques harness the mechanisms of biological evolution, including mutation, recombination, and selection, to build software systems that solve difficult problems or shed light on the nature of evolutionary processes. In this course students will explore several evolutionary computation techniques and apply them to problems of their choosing. The technique of genetic programming, in which populations of executable programs evolve through natural selection, will be emphasized.

Requisite: COSC 112. Limited to 20 students. Preference given to Computer Science majors. Spring semester: Professor Spector.

2022-23: Offered in Spring 2023

498, 499 Senior Departmental Honors

Open to seniors with consent of the Department.

Fall semester. The Department.

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