Spring 2025 Course Bulletin

IMPORTANT DATES AND LINKS for Undergraduate Students

**Shopping carts open Monday, October 21, 2024 and the first registration window is Wednesday, October 30, 2024.**

REGISTRATION CLEARANCE  -  Get info on clearance for registration HERE.

AN IN-PERSON OR VIRTUAL MEETING WITH THE DUS  -  Meeting times listed HERE to meet with the DUS.

COMPSCI ADVISOR  -  If you haven't submitted a preference for a CompSci advisor, or would like to change your CompSci advisor, please complete THIS FORM.

PERMISSION NUMBERS  -  To request a permission number, fill out THIS FORM.


New! MS-CS FIVE-YEAR (4+1) UNDERGRAD PROGRAM:

The new CS 4+1 MS program offers an opportunity for Duke undergraduates to earn an MS degree in CS (MSCS) with an extra (fifth) year at Duke. The MSCS degree is in addition to your undergraduate degree. This 4+1 program may be a good path for you if you are able to take two or more “extra” graduate courses as an undergraduate, beyond any courses you need for your undergraduate degree. The 4+1 MSCS program is suitable primarily for CS majors and CS minors. Learn more.


Notes about CS Courses

New course COMPSCI 232 - Discrete Mathematics and Proofs | Instructor: Slipper may be taken instead of COMPSCI 230. This course takes a theoretical approach to probability, directed graphs, and Markov chains. Students will engage with proofs (both understanding proofs and constructing their own proofs) to investigate topics including discrete distributions, conditional probability, graphs, directed graphs, and Markov chains. Students will apply Markov models to novel contexts.

COMPSCI 260 - Introduction to Computational Genomics | Instructor: Majoros; A smaller enrollment version is being offered during Spring 2025 for seniors only. A larger enrollment version will be back in the 2025-2026 academic year. 

COMPSCI 320D - Numerical Data Analysis and Methods | Instructor: Xiaobai Sun; This course introduces numerical analysis and methods that are fundamental and relevant to modern data analysis.  Students will get familiar with (1) the basic concepts and methods for data fitting or matching with linear and nonlinear models of continuous variables, (2) the basic numerical solution approaches (direct or iterative) for model solutions (or model-based simulation) and their analysis in approximation and stability, and (3) get numerical computation experience. Prerequisites: Math 218, 216 or 221; Math 202, Math 212 or Math 219; and CompSci 101, CompSci 201 or equivalent.

COMPSCI 334 - Mathematical Foundations of Computer Science, typically offered during the Spring semester, will NOT be offered during Spring 2025, but was instead offered Fall 2024, and will next be offered in Spring 2026.

COMPSCI 376 - Computational Approaches to Language Processing (cross LINGUIST 399) | Instructor: Osborne; This course will be offered during Spring 2025. It was formerly taught as COMPSCI 390-01/LINGUIST 490-01 during Spring 2024.

Bringing back COMPSCI 408 - Delivering Software: From Concept to Client | Instructor: Duvall; In CompSci 408, you will gain project development skills that parallel real-world processes by working in teams on a software app for the entire semester with an actual client who expects to use it after the course ends. Working with your client, you will choose which platform and programming technology best meets the project's goals, so the exact programming skills expected vary. You will meet with your client regularly to get feedback on how well it meets users' goals and determine feature priorities, as they may change regularly.

Students are expected to have experience working on team projects and managing shared code using version control, such as from CompSci Systems courses, internships, open-source software, or other extracurricular projects. You are encouraged to ask if you have any questions about your relevant experience.

S/U Course Credit

MATH 111, MATH 112 and COMPSCI 101 -- Only these three courses are accepted as S/U (if they can be taken S/U) and count towards degree requirements for CompSci majors and minors. For other majors and minors you plan to have, you need to check if they will also allow these courses to count if taken S/U.

For IDM majors, only these three courses -- MATH 111, MATH 112 and COMPSCI 101 -- are accepted as S/U (if they can be taken S/U) and count towards the CompSci part of your IDM. Check with your other major in your IDM to find out whether they will also allow these courses to count if taken S/U.

It is possible these courses may not be offered with the option to take them S/U.


Reminder: Changes to Major/Minor Requirements

1) You are now able to use COMPSCI 210D in lieu of the COMPSCI 250D requirement. If you have already taken 250D, you will not be able to take 210D. If you are an ECE major, you must take COMPSCI 250D.

2) You are now able to use COMPSCI 232 in lieu of the COMPSCI 230 requirement.

3) For the CompSci majors and minor, only one CompSci course can be included which falls into the category of Social and Policy Oriented Computing courses. Examples of Social and Policy Oriented Computing courses include COMPSCI 240, COMPSCI 247S, and COMPSCI 255, COMPSCI 342.

4) For the CompSci BS and BA majors as well as the Software Systems and AI/Machine Learning concentrations, COMPSCI 345 - Graphics Software Architecture AND COMPSCI 512 - Distributed Systems now count as systems core classes.


LIST OF COMPSCI COURSES FOR SPRING 2025

COMPSCI 101, 201, 210, 230, 250, and 330 are offered every semester.

  • 101L - Introduction to Computer Science | Rodger
  • 112S - Introduction to Digital Feminism (cross GSF 265S) | Gelfand
  • 201 - Data Structures and Algorithms | Fouh
  • 210D - Introduction to Computer Systems | Chase
  • 216 - Everything Data | Stephens-Martinez
  • 230 - Discrete Math for Computer Science | Steiger
  • 232 - Discrete Mathematics and Proofs (cross MATH 242) | Slipper
  • 240 - Race, Gender, Class, & Computing (cross GSF 242) | Washington
  • 243 - Programming Interview Skills and Practice | Astrachan
  • 250D - Computer Architecture (cross ECE 250D) | Younes
  • 255 - Introduction to Cyber Policy (cross PUBPOL 255) | Hoffman
  • 260 - Introduction to Computational Genomics | Majoros
  • 288 - Logic and Its Applications (cross PHIL 350) | Departmental Staff
  • 308 - Advanced Software Design and Implementation | Duvall
  • 310 - Introduction to Operating Systems (cross ECE 353) | Lentz
  • 320D - Numerical Data Analysis and Methods | Sun
  • 330 - Introduction to the Design and Analysis of Algorithms | Panigrahi and Fain
  • 342 - Technical and Social Analysis of Information and the Internet | Astrachan
  • 345 - Graphics Software Architecture | Reed
  • 350L - Digital Systems (cross ECE 350L) | Board
  • 351 - Introduction to Computer Security | Nayak
  • 356 - Computer Network Architecture (cross ECE 356) | Maggs
  • 362 - Introduction to Computational Imaging | Bartesaghi
  • 370D - Introduction to Artificial Intelligence | Parr
  • 376 - Computational Approaches to Language Processing (cross LINGUIST 399) | Osborne
  • 391 - Independent Study | Departmental Staff
  • 394 - Research Independent Study | Departmental Staff
  • 408 - Delivering Software: From Concept to Client | Duvall
  • 474 - Data Science Competition | Rudin
  • 516 - Database Systems | J. Yang
  • 520D - Numerical Analysis (cross MATH 565D, STA 612D) | Sun
  • 526 - Data Science (cross CBB 526, ECE 583) | Songdechakraiwut
  • 527 - Introduction to Computer Vision | Tomasi
  • 534D - Computational Complexity | Reif
  • 553 - Compiler Construction (cross ECE 553) | Hilton
  • 554 - Fault-Tolerant and Testable Computer Systems (cross ECE 554) | Sorin
  • 557 - Computer Architecture and Hardware Acceleration | Wills
  • 561 - Computational Sequence Biology (cross CBB 561) | Majoros
  • 564 - Edge Computing (cross ECE 654) | Gorlatova
  • 571D - Probabilistic Machine Learning (cross STA 561D) | Laber
  • 572 - Introduction to Natural Language Processing | M. Agrawal
  • 582 - Cryptography (cross ECE 656)| Reiter
  • 586 - Human-Centered Security and Privacy (cross ECE 657, ISS 586, PUBPOL 586) | Emami Naeini
  • 630 - Randomized Algorithms | Munagala
  • 650 - Advanced Computer Architecture II (cross ECE 652) | Towles
  • 655L - Full-Stack IoT Systems (cross ECE 655L) | T. Chen
  • 676 - Advanced Topics in Deep Learning (cross ECE 689) | Tarokh
  • 703 - Programming Interview Skills and Practice | Astrachan
  • 791  - Internship | Ge

Special Topics Courses*

  • 290-01 - Cinema Perspectives on Artificial Intelligence | O'Hanlon
  • 290-02 - Introduction to Applied Machine Learning | Fain
  • 390-01 - Algorithmic Foundations of Data Science | P. Agarwal
  • 390-02 - Introduction to Computational Connectomics | Songdechakraiwut
  • 390-03 - Computer Game Design | Velasco
  • 390-04 - Programming Language Concepts | D. Zhang
  • 590-01 - Theory of Deep Learning | Ge
  • 590-03 - Computing Education Research | Stephens-Martinez
  • 590-04 - Generative Models: Foundations and Applications | A. Zhang
  • 590-05 - Systems for Machine Learning | D. Zhuo
  • 590-06 - Causal Inference in Data Analysis with Applications to Fairness and Explanations | Roy

*Special Topics Course descriptions below


More About Special Topics Courses

Special Topics courses are new courses that we are trying out and eventually may give a permanent number.

COMPSCI 290-01 - Cinema Perspectives on Artificial Intelligence | Instructor: O'Hanlon; In this course, we will use cinema as a lens on society’s view of artificial intelligence. We will discuss how this view has changed over time, and how it compares to the real-world status of AI. It will also include a unit on the usage of AI in creating cinema, and its accelerating impact on moviemaking. Students should be prepared to watch one movie a week, and are expected to participate in class discussions.

COMPSCI 290-02 - Introduction to Applied Machine Learning | Instructor: Fain; Machine Learning (ML) studies techniques to automatically learn patterns from data rather than explicitly programing a behavior. This course explores applications of machine learning in tabular data, computer vision, natural language, and reinforcement learning. Linear and logistic regression, and deep artificial neural networks of different architectures including perceptrons, convolutional neural networks, and transformers, will be utilized. Students will apply all techniques on real data using modern software frameworks like NumPy and PyTorch. Students should have programming experience at the level of COMPSCI 201 or beyond and introductory college mathematics at the level of Calculus 1. Experience with Python programming is helpful, but not required. Experience with vectors and matrices is helpful, but a linear algebra course is not required.

COMPSCI 390-01 - Algorithmic Foundations of Data Science | Instructor: P. Agarwal; This course provides foundations of design and analysis of efficient algorithms that can solve fundamental tasks relevant for data science. The emphasis will be on designing efficient algorithms and analyze their performance under both statistical and adversarial models. Topics will include data compression, hashing,  streaming and sketching, similarity search, dimension reduction, generalization and regularization, linear algebraic techniques including principal component analysis, singular value decomposition, and tensor decomposition, classification and clustering, sampling methods and estimation. Prerequisite: COMPSCI 330 or equivalent.

COMPSCI 390-02 - Introduction to Computational Connectomics | Instructor: Songdechakraiwut; This course offers an introduction to the rapidly growing field of computational connectomics, emphasizing the study of the brain's complex network of connections using computational, machine learning, and AI techniques. Students will explore the foundational concepts of connectomics, investigating both structural and functional connectomes to understand how different brain regions interact to support cognitive functions and behavior.

COMPSCI 390-03 - Computer Game Design | Instructor: Velasco; This course introduces students to the fundamentals of video game design and production, focusing on both the technical and creative aspects. Students will learn to use popular game development tools such as Pico-8 and Unity. Some key topics include game mechanics, graphics, artificial intelligence, human-computer interaction, and game theory. From initial game concept to prototyping, coding, and playtesting, students will gain hands-on experience in creating 2D games. This course also addresses the ethical and social implications of video games. No prior game development experience is required, but a strong foundation in programming is needed. Prerequisites: COMPSCI 201 and either COMPSCI 210 or COMPSCI 250/ECE 250.

COMPSCI 390-04 - Programming Language Concepts | Instructor: D. Zhang; The goal of this course is to explore fundamental principles and paradigms of programming languages. We will not focus on any one particular language, but rather we will study features found in many different languages and examine how they work and how they interact with each other. We will examine different programming paradigms, including imperative, functional, and object-oriented. We will also explore some advanced language-based techniques, such as type systems, program verification and machine-checked proofs.

COMPSCI 590-01 - Theory of Deep Learning | Instructor: Ge; This course provides an in-depth exploration of the theoretical foundations of deep learning. It covers the principles and mathematical frameworks that underlie modern neural networks, including topics like nonconvex optimization, training dynamics, representation learning and generalization. The course emphasizes rigorous analysis of neural network behavior, focusing on understanding the optimization of neural network and similar models and how the optimization process is related to other phenomena such as representation learning and generalization.

COMPSCI 590-03 - Computing Education Research | Instructor: Stephens-Martinez; Foundations of Computing Education Research (CER). Topics include the history of CER, how to design a research study, CER methods, and parts of learning and cognitive science as they apply to computing learning. In this course, we will read research papers from the CER field and do a semester-long research project with a required data analysis component. Prerequisite: COMPSCI 216 or equivalent.

COMPSCI 590-04 - Generative Models: Foundations and Applications | Instructor: A. Zhang; This course provides an in-depth exploration of the mathematical foundations and real-world applications of generative models, focusing on healthcare data. Students will learn key concepts of state-of-the-art techniques such as variational autoencoders, generative adversarial networks, and diffusion models. The course covers theory and practice, with applications ranging from synthetic data generation to fairness improvement in machine learning tasks.

COMPSCI 590-05 - Systems for Machine Learning | Instructor: D. Zhuo; The goals of this class are to introduce students to system design and implementation to run machine learning workloads. We will analyze various aspects of machine learning systems in terms of GPU acceleration, parallelization, application-system co-design. Each meeting consists of understanding and discussion of one research paper. Students are expected to read the research paper before the meeting, write thoughtful responses to the paper, and discuss the paper during the meeting. Students are required to present one paper during the semester and complete one research project. Preferred background: one of COMPSCI 310, COMPSCI 510 or COMPSCI 512; one machine learning-related course.

COMPSCI 590-06 - Causal Inference in Data Analysis with Applications to Fairness and Explanations | Instructor: Roy; In this class, we will learn techniques to do formal and rigorous causal analysis based on observational (collected data), and see its applications in inferring fairness and explainability in data analysis. As commonly known as "Correlation is not Causation", the problem of causal inference goes far beyond simple correlation, association, or model-based prediction analysis, and is practically indispensable in health, medicine, social sciences, and other domains. For example, a medical researcher may want to find out whether a new drug is effective in curing cancer of a certain type, or an economist may want to understand whether a job-training program helps improve employment prospects. Causal inference lays the foundation of sound and robust policy making by providing a means to estimate the impact of a certain "intervention" to the world. While the gold standard of causal inference is performing randomized controlled experiments, often they are not possible due to ethical or cost reasons. Hence for practical applications, "observational studies" or causal inference based on observational data is used. A dataset can tell us very different stories based on how we look at it (e.g., Simpson Paradox), so it is important to understand the right way to look at a given dataset, in particular, what variables to condition on before making any conclusions, especially causal conclusions in data analysis. In this class we will discuss two models for observational causal inference: Probabilistic Graphical Causal Model (Pearl) more prevalent in Artificial Intelligence (AI) research, and the Potential Outcome Framework (Rubin) more prevalent in Statistical research, along with related concepts and techniques. We will also discuss recent applications of causal analysis to (1) Fairness and (2) eXplainable Artificial Intelligence (XAI). The growing concerns about the complexity and opacity of data-driven decision making systems, deployed for making consequential decisions in healthcare, criminal justice systems, and finance, has led to a surge of interest in research in these topics.


New! RE-NUMBERED COURSES

These new courses, which have all been taught previously as Special Topics courses (i.e., CompSci 290 and/or 590), now have permanent course numbers. If you have already taken them as a Special Topics course, you may not take the re-numbered course.

COMPSCI 390 (old - previously taught Spring 2024) → COMPSCI 376 Computational Approaches to Language Processing (cross LINGUIST 399)

COMPSCI 590 (old) → COMPSCI 526 Introduction to Data Science

COMPSCI 590 (old) → COMPSCI 535 Algorithmic Game Theory

COMPSCI 590 (old) → COMPSCI 565 Modern Optimization for Statistical Learning

COMPSCI 590 (old) → COMPSCI 574 Elements of Deep Learning

COMPSCI 590 (old - previously taught Fall 2022) → COMPSCI 584 Foundations of Blockchains

COMPSCI 590 (old) → COMPSCI 585 Secure Software Systems

COMPSCI 590 (old) → COMPSCI 586 Human-Centered Security and Privacy


PERMISSION NUMBER REQUESTS FOR SUMMER 2025

COMING SOON!! PIN Request form for Summer 2025.


Questions? Email dus@cs.duke.edu.


PREVIOUS COURSE BULLETINS: