Fall 2023

  • CS 100: Ethics of Technology

    What should technology know about us? What actions should technology be allowed to conduct on our behalf? Who makes these decisions, and whose voices are excluded from these conversations? Can algorithms ever be truly fair, just, and unbiased, or are they forever doomed to perpetuate existing inequities? We’ll address these questions, and many more, as we explore the history, present, and possible futures of the design, implementation, deployment, and usage of algorithms, apps, systems, devices, and all things tech. This course will equip you to perform the complex ethical reasoning required of living in a technically-focused society.

    6 credits; Argument and Inquiry Seminar, Writing Requirement; offered Fall 2023 · Amy Csizmar Dalal
  • CS 111: Introduction to Computer Science

    This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111.

    6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024, Winter 2024, Spring 2024, Spring 2024, Spring 2024 · Sneha Narayan, Tom Finzell, Tanya Amert, Anya Vostinar
  • CS 111: Introduction to Computer Science

    This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111.

    6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024, Winter 2024, Spring 2024, Spring 2024, Spring 2024 · Sneha Narayan, Tom Finzell, Tanya Amert, Anya Vostinar
  • CS 111: Introduction to Computer Science

    This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111.

    6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024, Winter 2024, Spring 2024, Spring 2024, Spring 2024 · Sneha Narayan, Tom Finzell, Tanya Amert, Anya Vostinar
  • CS 201: Data Structures

    Think back to your favorite assignment from Introduction to Computer Science. Did you ever get the feeling that “there has to be a better/smarter way to do this problem”? The Data Structures course is all about how to store information intelligently and access it efficiently. How can Google take your query, compare it to billions of web pages, and return the answer in less than one second? How can one store information so as to balance the competing needs for fast data retrieval and fast data modification? To help us answer questions like these, we will analyze and implement stacks, queues, trees, linked lists, graphs, and hash tables. Students who have received credit for a course for which Computer Science 201 is a prerequisite are not eligible to enroll in Computer Science 201.

    Prerequisites: Computer Science 111 or instructor permission 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Winter 2024, Spring 2024, Spring 2024 · Matthew Lepinski, Eric Alexander, Anya Vostinar, Sneha Narayan
  • CS 201: Data Structures

    Think back to your favorite assignment from Introduction to Computer Science. Did you ever get the feeling that “there has to be a better/smarter way to do this problem”? The Data Structures course is all about how to store information intelligently and access it efficiently. How can Google take your query, compare it to billions of web pages, and return the answer in less than one second? How can one store information so as to balance the competing needs for fast data retrieval and fast data modification? To help us answer questions like these, we will analyze and implement stacks, queues, trees, linked lists, graphs, and hash tables. Students who have received credit for a course for which Computer Science 201 is a prerequisite are not eligible to enroll in Computer Science 201.

    Prerequisites: Computer Science 111 or instructor permission 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Winter 2024, Spring 2024, Spring 2024 · Matthew Lepinski, Eric Alexander, Anya Vostinar, Sneha Narayan
  • CS 202: Mathematics of Computer Science

    This course introduces some of the formal tools of computer science, using a variety of applications as a vehicle. You’ll learn how to encode data so that when you scratch the back of a DVD, it still plays just fine; how to distribute “shares” of your floor’s PIN so that any five of you can withdraw money from the floor bank account (but no four of you can); how to play chess; and more. Topics that we’ll explore along the way include: logic and proofs, number theory, elementary complexity theory and recurrence relations, basic probability, counting techniques, and graphs. Prerequisites: Computer Science 111 and Mathematics 111 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024 · Sneha Narayan, Eric Alexander
  • CS 208: Introduction to Computer Systems

    Are you curious what’s really going on when a computer runs your code? In this course we will demystify the machine and the tools that we use to program it. Our broad survey of how computer systems execute programs, store information, and communicate will focus on the hardware/software interface, including data representation, instruction set architecture, the C programming language, memory management, and the operating system process model.

    Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Fall 2023, Winter 2024, Spring 2024 · Tanya Amert, Jeff Ondich, Anya Vostinar
  • CS 208: Introduction to Computer Systems

    Are you curious what’s really going on when a computer runs your code? In this course we will demystify the machine and the tools that we use to program it. Our broad survey of how computer systems execute programs, store information, and communicate will focus on the hardware/software interface, including data representation, instruction set architecture, the C programming language, memory management, and the operating system process model.

    Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Fall 2023, Winter 2024, Spring 2024 · Tanya Amert, Jeff Ondich, Anya Vostinar
  • CS 232: Art, Interactivity, and Microcontrollers

    In this hands-on course, taught (in an art studio) by a sculpture professor and computer science professor, we’ll explore and create interactive three dimensional art. Using basic construction techniques, microprocessors, and programming, this class brings together sculpture, engineering, computer science, and aesthetic design. Students will engage the nuts and bolts of fabrication, learn to program microcontrollers, and study the design of interactive constructions. Collaborative labs and individual projects will culminate in a campus-wide exhibition. No prior building experience is required.

    Prerequisites: Computer Science 111 6 credits; Formal or Statistical Reasoning; offered Fall 2023 · David Musicant, Stephen Mohring
  • CS 251: Programming Languages: Design and Implementation

    What makes a programming language like “Python” or like “Java”? This course will look past superficial properties (like indentation) and into the soul of programming languages. We will explore a variety of topics in programming language construction and design: syntax and semantics, mechanisms for parameter passing, typing, scoping, and control structures. Students will expand their programming experience to include other programming paradigms, including functional languages like Scheme and ML.

    Prerequisites: Computer Science 200, 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024 · David Musicant, Anna Rafferty
  • CS 252: Algorithms

    A course on techniques used in the design and analysis of efficient algorithms. We will cover several major algorithmic design paradigms (greedy algorithms, dynamic programming, divide and conquer, and network flow). Along the way, we will explore the application of these techniques to a variety of domains (natural language processing, economics, computational biology, and data mining, for example). As time permits, we will include supplementary topics like randomized algorithms, advanced data structures, and amortized analysis.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024, Spring 2024 · Layla Oesper, Eric Alexander, Jeff Ondich
  • CS 257: Software Design

    It’s easy to write a mediocre computer program, and lots of people do it. Good programs are quite a bit harder to write, and are correspondingly less common. In this course, we will study techniques, tools, and habits that will improve your chances of writing good software. While working on several medium-sized programming projects, we will investigate code construction techniques, debugging and profiling tools, testing methodologies, UML, principles of object-oriented design, design patterns, and user interface design. Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Winter 2024, Spring 2024 · Anya Vostinar, Amy Csizmar Dalal, Matthew Lepinski
  • CS 294: CS Tea Colloquium

    Students earn credit by attending at least five of the research-based events in the Computer Science department’s weekly colloquium series. Speakers come from academia, industry, nonprofits, and government, and present on a variety of topics, within and adjacent to computer science. Students will submit brief written reports after each talk that they attend.

    Prerequisites: At least one CS course (concurrent enrollment is allowed) 1 credit; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Winter 2024, Spring 2024 · Layla Oesper
  • CS 320: Machine Learning

    What does it mean for a machine to learn? Much of modern machine learning focuses on identifying patterns in large datasets and using these patterns to make predictions about the future. Machine learning has impacted a diverse array of applications and fields, from scientific discovery to healthcare to education. In this artificial intelligence-related course, we’ll both explore a variety of machine learning algorithms in different application areas, taking both theoretical and practical perspectives, and discuss impacts and ethical implications of machine learning more broadly. Topics may vary, but typically focus on regression and classification algorithms, including neural networks.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024 · Anna Rafferty, Tom Finzell
  • CS 338: Computer Security

    When hackers can disable gas pipelines, national hospital systems, and electrical grids, and data brokers can create a largely unregulated world-wide surveillance system, there’s a clear need for people who understand the mechanisms of computer security and insecurity. Towards that end, in this course we will study technical and social aspects of computer and network security. Topics will include threat modeling, cryptography, secure network protocols, web security, ethical hacking and penetration testing, authentication, authorization, historical hacking incidents, usability, privacy, and security-related law.

    Prerequisites: Computer Science 201 6 credits; Formal or Statistical Reasoning; offered Fall 2023 · Jeff Ondich
  • CS 347: Advanced Software Design

    This course helps students to strengthen their ability to design modular, extensible and maintainable software. The focus of the course is on the design of modern cloud applications. Students will learn how to decompose complex applications into a set of back-end services, develop and debug these services, and deploy them in the cloud. This class is structured around a large project that will be extended over the course of the term.

    Prerequisites: Computer Science 257 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Spring 2024 · Matthew Lepinski
  • CS 399: Senior Seminar

    As part of their senior capstone experience, majors will work together in teams (typically four to seven students per team) on faculty-specified topics to design and implement the first stage of a project. Required of all senior majors.

    Prerequisites: Senior standing. Students are strongly encouraged to complete Computer Science 252 and Computer Science 257 before starting Computer Science 399. 3 credits; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024 · Eric Alexander, Amy Csizmar Dalal, Layla Oesper, Jeff Ondich, Anna Rafferty
  • CS 399: Senior Seminar

    As part of their senior capstone experience, majors will work together in teams (typically four to seven students per team) on faculty-specified topics to design and implement the first stage of a project. Required of all senior majors.

    Prerequisites: Senior standing. Students are strongly encouraged to complete Computer Science 252 and Computer Science 257 before starting Computer Science 399. 3 credits; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024 · Eric Alexander, Amy Csizmar Dalal, Layla Oesper, Jeff Ondich, Anna Rafferty
  • CS 399: Senior Seminar

    As part of their senior capstone experience, majors will work together in teams (typically four to seven students per team) on faculty-specified topics to design and implement the first stage of a project. Required of all senior majors.

    Prerequisites: Senior standing. Students are strongly encouraged to complete Computer Science 252 and Computer Science 257 before starting Computer Science 399. 3 credits; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024 · Eric Alexander, Amy Csizmar Dalal, Layla Oesper, Jeff Ondich, Anna Rafferty
  • CS 399: Senior Seminar

    As part of their senior capstone experience, majors will work together in teams (typically four to seven students per team) on faculty-specified topics to design and implement the first stage of a project. Required of all senior majors.

    Prerequisites: Senior standing. Students are strongly encouraged to complete Computer Science 252 and Computer Science 257 before starting Computer Science 399. 3 credits; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024 · Eric Alexander, Amy Csizmar Dalal, Layla Oesper, Jeff Ondich, Anna Rafferty
  • CS 399: Senior Seminar

    As part of their senior capstone experience, majors will work together in teams (typically four to seven students per team) on faculty-specified topics to design and implement the first stage of a project. Required of all senior majors.

    Prerequisites: Senior standing. Students are strongly encouraged to complete Computer Science 252 and Computer Science 257 before starting Computer Science 399. 3 credits; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024 · Eric Alexander, Amy Csizmar Dalal, Layla Oesper, Jeff Ondich, Anna Rafferty
  • CS 399: Senior Seminar

    As part of their senior capstone experience, majors will work together in teams (typically four to seven students per team) on faculty-specified topics to design and implement the first stage of a project. Required of all senior majors.

    Prerequisites: Senior standing. Students are strongly encouraged to complete Computer Science 252 and Computer Science 257 before starting Computer Science 399. 3 credits; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024 · Eric Alexander, Amy Csizmar Dalal, Layla Oesper, Jeff Ondich, Anna Rafferty
  • CS 400: Integrative Exercise

    Beginning with the prototypes developed in the Senior Seminar (CS 399), project teams will complete their project and present it to the department. Required of all senior majors. Each CS 400 is paired with a particular section of CS 399, and the prerequisite for CS 400 must be filled by satisfactory completion of that CS 399.

    Prerequisites: Computer Science 399 3 credits; S/NC; offered Fall 2023, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024 · Layla Oesper, Eric Alexander, Amy Csizmar Dalal, Anna Rafferty, Jeff Ondich

Winter 2024

  • CS 111: Introduction to Computer Science

    This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111.

    6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024, Winter 2024, Spring 2024, Spring 2024, Spring 2024 · Sneha Narayan, Tom Finzell, Tanya Amert, Anya Vostinar
  • CS 111: Introduction to Computer Science

    This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111.

    6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024, Winter 2024, Spring 2024, Spring 2024, Spring 2024 · Sneha Narayan, Tom Finzell, Tanya Amert, Anya Vostinar
  • CS 111: Introduction to Computer Science

    This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111.

    6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024, Winter 2024, Spring 2024, Spring 2024, Spring 2024 · Sneha Narayan, Tom Finzell, Tanya Amert, Anya Vostinar
  • CS 200: Data Structures with Problem Solving

    Think back to your favorite assignment from Introduction to Computer Science. Did you ever get the feeling that “there has to be a better/smarter way to do this problem”? The Data Structures course is all about how to store information intelligently and access it efficiently. How can Google take your query, compare it to billions of web pages, and return the answer in less than one second? How can one store information so as to balance the competing needs for fast data retrieval and fast data modification? To help us answer questions like these, we will analyze and implement stacks, queues, trees, linked lists, graphs, and hash tables. This version of Data Structures includes extra class time to support students’ problem solving by meeting five days per week, and is encouraged for students who may have struggled in CS111 or otherwise believe they would benefit from extra support. This course fulfills all requirements of CS 201, and students should take only one of CS 200 or CS 201.

    Prerequisites: Computer Science 111 or instructor permission 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Winter 2024 · David Musicant
  • CS 201: Data Structures

    Think back to your favorite assignment from Introduction to Computer Science. Did you ever get the feeling that “there has to be a better/smarter way to do this problem”? The Data Structures course is all about how to store information intelligently and access it efficiently. How can Google take your query, compare it to billions of web pages, and return the answer in less than one second? How can one store information so as to balance the competing needs for fast data retrieval and fast data modification? To help us answer questions like these, we will analyze and implement stacks, queues, trees, linked lists, graphs, and hash tables. Students who have received credit for a course for which Computer Science 201 is a prerequisite are not eligible to enroll in Computer Science 201.

    Prerequisites: Computer Science 111 or instructor permission 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Winter 2024, Spring 2024, Spring 2024 · Matthew Lepinski, Eric Alexander, Anya Vostinar, Sneha Narayan
  • CS 202: Mathematics of Computer Science

    This course introduces some of the formal tools of computer science, using a variety of applications as a vehicle. You’ll learn how to encode data so that when you scratch the back of a DVD, it still plays just fine; how to distribute “shares” of your floor’s PIN so that any five of you can withdraw money from the floor bank account (but no four of you can); how to play chess; and more. Topics that we’ll explore along the way include: logic and proofs, number theory, elementary complexity theory and recurrence relations, basic probability, counting techniques, and graphs. Prerequisites: Computer Science 111 and Mathematics 111 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024 · Sneha Narayan, Eric Alexander
  • CS 208: Introduction to Computer Systems

    Are you curious what’s really going on when a computer runs your code? In this course we will demystify the machine and the tools that we use to program it. Our broad survey of how computer systems execute programs, store information, and communicate will focus on the hardware/software interface, including data representation, instruction set architecture, the C programming language, memory management, and the operating system process model.

    Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Fall 2023, Winter 2024, Spring 2024 · Tanya Amert, Jeff Ondich, Anya Vostinar
  • CS 251: Programming Languages: Design and Implementation

    What makes a programming language like “Python” or like “Java”? This course will look past superficial properties (like indentation) and into the soul of programming languages. We will explore a variety of topics in programming language construction and design: syntax and semantics, mechanisms for parameter passing, typing, scoping, and control structures. Students will expand their programming experience to include other programming paradigms, including functional languages like Scheme and ML.

    Prerequisites: Computer Science 200, 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024 · David Musicant, Anna Rafferty
  • CS 252: Algorithms

    A course on techniques used in the design and analysis of efficient algorithms. We will cover several major algorithmic design paradigms (greedy algorithms, dynamic programming, divide and conquer, and network flow). Along the way, we will explore the application of these techniques to a variety of domains (natural language processing, economics, computational biology, and data mining, for example). As time permits, we will include supplementary topics like randomized algorithms, advanced data structures, and amortized analysis.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024, Spring 2024 · Layla Oesper, Eric Alexander, Jeff Ondich
  • CS 254: Computability and Complexity

    An introduction to the theory of computation. What problems can and cannot be solved efficiently by computers? What problems cannot be solved by computers, period? Topics include formal models of computation, including finite-state automata, pushdown automata, and Turing machines; formal languages, including regular expressions and context-free grammars; computability and uncomputability; and computational complexity, particularly NP-completeness.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning; offered Winter 2024, Spring 2024 · Anna Rafferty, Josh Davis
  • CS 257: Software Design

    It’s easy to write a mediocre computer program, and lots of people do it. Good programs are quite a bit harder to write, and are correspondingly less common. In this course, we will study techniques, tools, and habits that will improve your chances of writing good software. While working on several medium-sized programming projects, we will investigate code construction techniques, debugging and profiling tools, testing methodologies, UML, principles of object-oriented design, design patterns, and user interface design. Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Winter 2024, Spring 2024 · Anya Vostinar, Amy Csizmar Dalal, Matthew Lepinski
  • CS 257: Software Design

    It’s easy to write a mediocre computer program, and lots of people do it. Good programs are quite a bit harder to write, and are correspondingly less common. In this course, we will study techniques, tools, and habits that will improve your chances of writing good software. While working on several medium-sized programming projects, we will investigate code construction techniques, debugging and profiling tools, testing methodologies, UML, principles of object-oriented design, design patterns, and user interface design. Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Winter 2024, Spring 2024 · Anya Vostinar, Amy Csizmar Dalal, Matthew Lepinski
  • CS 294: CS Tea Colloquium

    Students earn credit by attending at least five of the research-based events in the Computer Science department’s weekly colloquium series. Speakers come from academia, industry, nonprofits, and government, and present on a variety of topics, within and adjacent to computer science. Students will submit brief written reports after each talk that they attend.

    Prerequisites: At least one CS course (concurrent enrollment is allowed) 1 credit; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Winter 2024, Spring 2024 · Layla Oesper
  • CS 320: Machine Learning

    What does it mean for a machine to learn? Much of modern machine learning focuses on identifying patterns in large datasets and using these patterns to make predictions about the future. Machine learning has impacted a diverse array of applications and fields, from scientific discovery to healthcare to education. In this artificial intelligence-related course, we’ll both explore a variety of machine learning algorithms in different application areas, taking both theoretical and practical perspectives, and discuss impacts and ethical implications of machine learning more broadly. Topics may vary, but typically focus on regression and classification algorithms, including neural networks.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024 · Anna Rafferty, Tom Finzell
  • CS 331: Computer Networks

    The Internet is composed of a large number of heterogeneous, independently-operating computer networks that work together to transport all sorts of data to points all over the world. The fact that it does this so well given its complexity is a minor miracle. In this class, we’ll study the structure of these individual networks and of the Internet, and figure out how this “magic” takes place. Topics include TCP/IP, protocols and their implementations, routing, security, network architecture, DNS, peer-to-peer networking, and Wi-Fi along with ethical and privacy issues. Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Winter 2024 · Matthew Lepinski
  • CS 332: Operating Systems

    If you’re working in the lab, you might be editing a file while waiting for a program to compile. Meanwhile, the on-screen clock ticks, a program keeps watch for incoming e-mail, and other users can log onto your machine from elsewhere in the network. Not only that, but if you write a program that reads from a file on the hard drive, you are not expected to concern yourself with turning on the drive’s motor or moving the read/write arms to the proper location over the disk’s surface. Coordinating all this hardware and software is the job of the operating system. In this course we will study the fundamentals of operating system design, including the operating system kernel, scheduling and concurrency, memory management, and file systems.

    Prerequisites: Computer Science 201 and 208 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Winter 2024 · Tanya Amert
  • CS 362: Computational Biology

    Recent advances in high-throughput experimental techniques have revolutionized how biologists measure DNA, RNA and protein. The size and complexity of the resulting datasets have led to a new era where computational methods are essential to answering important biological questions. This course focuses on the process of transforming biological problems into well formed computational questions and the algorithms to solve them. Topics include approaches to sequence comparison and alignment; molecular evolution and phylogenetics; DNA/RNA sequencing and assembly; and specific disease applications including cancer genomics.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Winter 2024, Winter 2024 · Layla Oesper
  • CS 362: Computational Biology

    Recent advances in high-throughput experimental techniques have revolutionized how biologists measure DNA, RNA and protein. The size and complexity of the resulting datasets have led to a new era where computational methods are essential to answering important biological questions. This course focuses on the process of transforming biological problems into well formed computational questions and the algorithms to solve them. Topics include approaches to sequence comparison and alignment; molecular evolution and phylogenetics; DNA/RNA sequencing and assembly; and specific disease applications including cancer genomics.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Winter 2024, Winter 2024 · Layla Oesper
  • CS 399: Senior Seminar

    As part of their senior capstone experience, majors will work together in teams (typically four to seven students per team) on faculty-specified topics to design and implement the first stage of a project. Required of all senior majors.

    Prerequisites: Senior standing. Students are strongly encouraged to complete Computer Science 252 and Computer Science 257 before starting Computer Science 399. 3 credits; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024 · Eric Alexander, Amy Csizmar Dalal, Layla Oesper, Jeff Ondich, Anna Rafferty
  • CS 399: Senior Seminar

    As part of their senior capstone experience, majors will work together in teams (typically four to seven students per team) on faculty-specified topics to design and implement the first stage of a project. Required of all senior majors.

    Prerequisites: Senior standing. Students are strongly encouraged to complete Computer Science 252 and Computer Science 257 before starting Computer Science 399. 3 credits; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024 · Eric Alexander, Amy Csizmar Dalal, Layla Oesper, Jeff Ondich, Anna Rafferty
  • CS 400: Integrative Exercise

    Beginning with the prototypes developed in the Senior Seminar (CS 399), project teams will complete their project and present it to the department. Required of all senior majors. Each CS 400 is paired with a particular section of CS 399, and the prerequisite for CS 400 must be filled by satisfactory completion of that CS 399.

    Prerequisites: Computer Science 399 3 credits; S/NC; offered Fall 2023, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024 · Layla Oesper, Eric Alexander, Amy Csizmar Dalal, Anna Rafferty, Jeff Ondich
  • CS 400: Integrative Exercise

    Beginning with the prototypes developed in the Senior Seminar (CS 399), project teams will complete their project and present it to the department. Required of all senior majors. Each CS 400 is paired with a particular section of CS 399, and the prerequisite for CS 400 must be filled by satisfactory completion of that CS 399.

    Prerequisites: Computer Science 399 3 credits; S/NC; offered Fall 2023, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024 · Layla Oesper, Eric Alexander, Amy Csizmar Dalal, Anna Rafferty, Jeff Ondich
  • CS 400: Integrative Exercise

    Beginning with the prototypes developed in the Senior Seminar (CS 399), project teams will complete their project and present it to the department. Required of all senior majors. Each CS 400 is paired with a particular section of CS 399, and the prerequisite for CS 400 must be filled by satisfactory completion of that CS 399.

    Prerequisites: Computer Science 399 3 credits; S/NC; offered Fall 2023, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024 · Layla Oesper, Eric Alexander, Amy Csizmar Dalal, Anna Rafferty, Jeff Ondich
  • CS 400: Integrative Exercise

    Beginning with the prototypes developed in the Senior Seminar (CS 399), project teams will complete their project and present it to the department. Required of all senior majors. Each CS 400 is paired with a particular section of CS 399, and the prerequisite for CS 400 must be filled by satisfactory completion of that CS 399.

    Prerequisites: Computer Science 399 3 credits; S/NC; offered Fall 2023, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024 · Layla Oesper, Eric Alexander, Amy Csizmar Dalal, Anna Rafferty, Jeff Ondich
  • CS 400: Integrative Exercise

    Beginning with the prototypes developed in the Senior Seminar (CS 399), project teams will complete their project and present it to the department. Required of all senior majors. Each CS 400 is paired with a particular section of CS 399, and the prerequisite for CS 400 must be filled by satisfactory completion of that CS 399.

    Prerequisites: Computer Science 399 3 credits; S/NC; offered Fall 2023, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024 · Layla Oesper, Eric Alexander, Amy Csizmar Dalal, Anna Rafferty, Jeff Ondich
  • CS 400: Integrative Exercise

    Beginning with the prototypes developed in the Senior Seminar (CS 399), project teams will complete their project and present it to the department. Required of all senior majors. Each CS 400 is paired with a particular section of CS 399, and the prerequisite for CS 400 must be filled by satisfactory completion of that CS 399.

    Prerequisites: Computer Science 399 3 credits; S/NC; offered Fall 2023, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024 · Layla Oesper, Eric Alexander, Amy Csizmar Dalal, Anna Rafferty, Jeff Ondich
  • CS 400: Integrative Exercise

    Beginning with the prototypes developed in the Senior Seminar (CS 399), project teams will complete their project and present it to the department. Required of all senior majors. Each CS 400 is paired with a particular section of CS 399, and the prerequisite for CS 400 must be filled by satisfactory completion of that CS 399.

    Prerequisites: Computer Science 399 3 credits; S/NC; offered Fall 2023, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024, Winter 2024 · Layla Oesper, Eric Alexander, Amy Csizmar Dalal, Anna Rafferty, Jeff Ondich

Spring 2024

  • CS 111: Introduction to Computer Science

    This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111.

    6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024, Winter 2024, Spring 2024, Spring 2024, Spring 2024 · Sneha Narayan, Tom Finzell, Tanya Amert, Anya Vostinar
  • CS 111: Introduction to Computer Science

    This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111.

    6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024, Winter 2024, Spring 2024, Spring 2024, Spring 2024 · Sneha Narayan, Tom Finzell, Tanya Amert, Anya Vostinar
  • CS 111: Introduction to Computer Science

    This course will introduce you to computer programming and the design of algorithms. By writing programs to solve problems in areas such as image processing, text processing, and simple games, you will learn about recursive and iterative algorithms, complexity analysis, graphics, data representation, software engineering, and object-oriented design. No previous programming experience is necessary. Students who have received credit for Computer Science 201 or above are not eligible to enroll in Computer Science 111.

    6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Fall 2023, Winter 2024, Winter 2024, Winter 2024, Spring 2024, Spring 2024, Spring 2024 · Sneha Narayan, Tom Finzell, Tanya Amert, Anya Vostinar
  • CS 201: Data Structures

    Think back to your favorite assignment from Introduction to Computer Science. Did you ever get the feeling that “there has to be a better/smarter way to do this problem”? The Data Structures course is all about how to store information intelligently and access it efficiently. How can Google take your query, compare it to billions of web pages, and return the answer in less than one second? How can one store information so as to balance the competing needs for fast data retrieval and fast data modification? To help us answer questions like these, we will analyze and implement stacks, queues, trees, linked lists, graphs, and hash tables. Students who have received credit for a course for which Computer Science 201 is a prerequisite are not eligible to enroll in Computer Science 201.

    Prerequisites: Computer Science 111 or instructor permission 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Winter 2024, Spring 2024, Spring 2024 · Matthew Lepinski, Eric Alexander, Anya Vostinar, Sneha Narayan
  • CS 201: Data Structures

    Think back to your favorite assignment from Introduction to Computer Science. Did you ever get the feeling that “there has to be a better/smarter way to do this problem”? The Data Structures course is all about how to store information intelligently and access it efficiently. How can Google take your query, compare it to billions of web pages, and return the answer in less than one second? How can one store information so as to balance the competing needs for fast data retrieval and fast data modification? To help us answer questions like these, we will analyze and implement stacks, queues, trees, linked lists, graphs, and hash tables. Students who have received credit for a course for which Computer Science 201 is a prerequisite are not eligible to enroll in Computer Science 201.

    Prerequisites: Computer Science 111 or instructor permission 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Fall 2023, Fall 2023, Winter 2024, Spring 2024, Spring 2024 · Matthew Lepinski, Eric Alexander, Anya Vostinar, Sneha Narayan
  • CS 202: Mathematics of Computer Science

    This course introduces some of the formal tools of computer science, using a variety of applications as a vehicle. You’ll learn how to encode data so that when you scratch the back of a DVD, it still plays just fine; how to distribute “shares” of your floor’s PIN so that any five of you can withdraw money from the floor bank account (but no four of you can); how to play chess; and more. Topics that we’ll explore along the way include: logic and proofs, number theory, elementary complexity theory and recurrence relations, basic probability, counting techniques, and graphs. Prerequisites: Computer Science 111 and Mathematics 111 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024 · Sneha Narayan, Eric Alexander
  • CS 208: Introduction to Computer Systems

    Are you curious what’s really going on when a computer runs your code? In this course we will demystify the machine and the tools that we use to program it. Our broad survey of how computer systems execute programs, store information, and communicate will focus on the hardware/software interface, including data representation, instruction set architecture, the C programming language, memory management, and the operating system process model.

    Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Fall 2023, Winter 2024, Spring 2024 · Tanya Amert, Jeff Ondich, Anya Vostinar
  • CS 251: Programming Languages: Design and Implementation

    What makes a programming language like “Python” or like “Java”? This course will look past superficial properties (like indentation) and into the soul of programming languages. We will explore a variety of topics in programming language construction and design: syntax and semantics, mechanisms for parameter passing, typing, scoping, and control structures. Students will expand their programming experience to include other programming paradigms, including functional languages like Scheme and ML.

    Prerequisites: Computer Science 200, 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024 · David Musicant, Anna Rafferty
  • CS 252: Algorithms

    A course on techniques used in the design and analysis of efficient algorithms. We will cover several major algorithmic design paradigms (greedy algorithms, dynamic programming, divide and conquer, and network flow). Along the way, we will explore the application of these techniques to a variety of domains (natural language processing, economics, computational biology, and data mining, for example). As time permits, we will include supplementary topics like randomized algorithms, advanced data structures, and amortized analysis.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024, Spring 2024 · Layla Oesper, Eric Alexander, Jeff Ondich
  • CS 252: Algorithms

    A course on techniques used in the design and analysis of efficient algorithms. We will cover several major algorithmic design paradigms (greedy algorithms, dynamic programming, divide and conquer, and network flow). Along the way, we will explore the application of these techniques to a variety of domains (natural language processing, economics, computational biology, and data mining, for example). As time permits, we will include supplementary topics like randomized algorithms, advanced data structures, and amortized analysis.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Spring 2024, Spring 2024 · Layla Oesper, Eric Alexander, Jeff Ondich
  • CS 254: Computability and Complexity

    An introduction to the theory of computation. What problems can and cannot be solved efficiently by computers? What problems cannot be solved by computers, period? Topics include formal models of computation, including finite-state automata, pushdown automata, and Turing machines; formal languages, including regular expressions and context-free grammars; computability and uncomputability; and computational complexity, particularly NP-completeness.

    Prerequisites: Computer Science 200 or 201 and Computer Science 202 (Mathematics 236 will be accepted in lieu of Computer Science 202) 6 credits; Formal or Statistical Reasoning; offered Winter 2024, Spring 2024 · Anna Rafferty, Josh Davis
  • CS 257: Software Design

    It’s easy to write a mediocre computer program, and lots of people do it. Good programs are quite a bit harder to write, and are correspondingly less common. In this course, we will study techniques, tools, and habits that will improve your chances of writing good software. While working on several medium-sized programming projects, we will investigate code construction techniques, debugging and profiling tools, testing methodologies, UML, principles of object-oriented design, design patterns, and user interface design. Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Winter 2024, Winter 2024, Spring 2024 · Anya Vostinar, Amy Csizmar Dalal, Matthew Lepinski
  • CS 294: CS Tea Colloquium

    Students earn credit by attending at least five of the research-based events in the Computer Science department’s weekly colloquium series. Speakers come from academia, industry, nonprofits, and government, and present on a variety of topics, within and adjacent to computer science. Students will submit brief written reports after each talk that they attend.

    Prerequisites: At least one CS course (concurrent enrollment is allowed) 1 credit; S/CR/NC; Does not fulfill a curricular exploration requirement; offered Fall 2023, Winter 2024, Spring 2024 · Layla Oesper
  • CS 304: Social Computing

    The last decade has seen a vast increase in the number of applications that connect people with one another. This course presents an interdisciplinary introduction to social computing, a field of study that explores how computational techniques and artifacts are used to support and understand social interactions. We will examine a number of socio-technical systems (such as wikis, social media platforms, and citizen science projects), discuss the design principles used to build them, and analyze how they help people mobilize and collaborate with one another. Assignments will involve investigating datasets from online platforms and exploring current research in the field.

    Prerequisites: Computer Science 200 or 201 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Spring 2024 · Sneha Narayan
  • CS 314: Data Visualization

    Understanding the wealth of data that surrounds us can be challenging. Luckily, we have evolved incredible tools for finding patterns in large amounts of information: our eyes! Data visualization is concerned with taking information and turning it into pictures to better communicate patterns or discover new insights. It combines aspects of computer graphics, human-computer interaction, design, and perceptual psychology. In this course, we will learn the different ways in which data can be expressed visually and which methods work best for which tasks. Using this knowledge, we will critique existing visualizations as well as design and build new ones.

    Prerequisites: Computer Science 200 or 201 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Spring 2024 · Eric Alexander
  • CS 334: Database Systems

    Database systems are used in almost every aspect of computing, including managing data for websites and apps, but also large-scale data science archives. Why, and how? This course takes a multi-pronged approach. From a systems perspective, we will look at the low-level details of how a database system works internally, studying data storage, indexing, and query optimization. From a theory perspective, we will examine ideas such as normal forms and relational algebra. From a utilization perspective, we will look at how query languages such as SQL interface with the database system, and understand how SQL queries really work.

    Prerequisites: Computer Science 200 or 201 or consent of the instructor. 6 credits; Formal or Statistical Reasoning; offered Spring 2024 · David Musicant
  • CS 344: Human-Computer Interaction

    The field of human-computer interaction addresses two fundamental questions: how do people interact with technology, and how can technology enhance the human experience? In this course, we will explore technology through the lens of the end user: how can we design effective, aesthetically pleasing technology, particularly user interfaces, to satisfy user needs and improve the human condition? How do people react to technology and learn to use technology? What are the social, societal, health, and ethical implications of technology? The course will focus on design methodologies, techniques, and processes for developing, testing, and deploying user interfaces. Prerequisites: Computer Science 200 or 201 or instructor permission 6 credits; Formal or Statistical Reasoning, Quantitative Reasoning Encounter; offered Spring 2024 · Amy Csizmar Dalal
  • CS 347: Advanced Software Design

    This course helps students to strengthen their ability to design modular, extensible and maintainable software. The focus of the course is on the design of modern cloud applications. Students will learn how to decompose complex applications into a set of back-end services, develop and debug these services, and deploy them in the cloud. This class is structured around a large project that will be extended over the course of the term.

    Prerequisites: Computer Science 257 6 credits; Formal or Statistical Reasoning; offered Fall 2023, Spring 2024 · Matthew Lepinski