General Information

A student may register for as many of the below courses as they would like, however students cannot repeat a specific section.

CS Workshops are 1 credit, Pass/Fail courses which meet for ~1 hour per week and focus on topics not traditionally covered through typical 4 credit courses. CS Workshop courses do not count toward CS major requirements.

CS Practicum courses are project-focused and are intended for students to apply the knowledge and skills they learn through their foundational coursework. CS Practicum courses must be taken for letter grades.

CS Topics courses are research-focused and are intended for students to develop their depth of knowledge in a specific area of computer science. CS Topics courses must be taken for letter grades.

Fall 2025 CS Topics Course Descriptions

 

CS 391 P1: Accelerated Probability in Computing 

This course satisfies the same CS major and minor requirements as CAS CS 237!

Students who wish to go deeper into the topics of probability should consider taking this course instead of CS237.

Prerequisites: CAS CS 131 with a B+ or better and CAS CS 111;  OR consent of the instructor

Content: This course covers fundamental tools from probability necessary to study applications of randomness in computing. Randomness is used in designing efficient algorithms and has numerous applications in computer science. Emphasis on rigorous reasoning, analysis, and algorithmic thinking. 

 Students can take either CS237 or CS391 P1 but not both.

Instructor: Sofya Raskhodnikova


CS391 A1: Web Application Development (must also enroll in A2, A3, A4, or A5 discussion section)

Prerequisites: CS111, CS112, CS210

Content: Web Application Development is a comprehensive course empowering students to build dynamic web apps. Through hands-on projects, they learn essential code management with Git/GitHub, frontend languages like HTML/CSS, and interactive app development with JavaScript. React is introduced to simplify UI creation and promote code reusability. Students will explore industry-standard tools like Next.js, Vercel, and MongoDB. 

Instructor: Prof. Taymaz Davoodi


CS 391 BA/BB: Responsible AI

Prerequisites: Probability (e.g., CS 237 or DS 122), algorithms (e.g., CS 330 or DS 320), and the basics of machine learning (e.g., CS 365 or DS 340). Additional background in AI, machine learning, or statistics is helpful but not required. Students from programs outside CS and DS are welcome but should contact the instructors regarding prerequisites.

Content: Technological advances in how information is generated, collected, managed, and analyzed raise a variety of societal concerns. This course will explore how to use mathematical methods to articulate some of these challenges formally, reason about them rigorously, and design algorithms to mitigate them. Topics include data privacy, fairness in algorithmic learning and decision-making, evaluation and interpretation of complex machine learning models, feedback loops in data-driven systems, and strategic behavior. An emphasis will be placed on understanding the challenges arising from modern machine learning, such as through large language models.

The course, which is aimed at advanced undergraduates in computer science, data science, ECE, or statistics, will engage with both technical components of the problem area (involving programming and theoretical problems) as well as questions in policy and ethics (involving reading, discussing, and writing about papers from those areas).

Instructors: Mark Bun and Adam Smith.


CS391 R1: Computer and Memory Architectures (must also enroll in R2 or R3 discussion section)

Prerequisites: CS350

Content: Want to build a computer processor? This course is a hands-on approach to the design of modern computing and memory architectures, with an emphasis on implementation and quantitative evaluation. Topics include digital logic and arithmetic-logic units (ALU); in-order pipelined central processing unit (CPU) microarchitecture; multi-level cache hierarchies and cache coherence protocols; and multicore processor systems. Additional topics may include advanced memory technologies, bus protocols, and hardware accelerators. The practical laboratory component of the course includes development of modules using a modern hardware description language (HDL), and assignments may include implementing designs on an FPGA.

Course Site: https://sites.google.com/bu.edu/cs391r1-fall2025

Instructor: Sabrina Neuman


CS391 S1 Spark! Software Engineering Immersion (must also enroll in S2 or S3 discussion section)

Prerequisites: CS111, prior knowledge of Python & Javascript helpful

Content: Students will be introduced to all concepts required to work on a modern web development project. This course is intentionally taught with very little prerequisite knowledge to enable students to begin learning these skills earlier in their college path. Students begin by learning basic skills required to build a functioning web application. During the second half of the course, students will be allocated to teams and assigned a project to work on over the course of the semester. Students will submit their final application as their final project on the last day of classes.

Instructors: Michael Levinger, Uwe Meding, Langdon White


CS 392 D2: Competitive Programming II

Prerequisites: CS112, CS131 required (CS330 is recommended) or permission of the instructor.

Content: The second Competitive Programming course is designed for computer science majors and anyone seeking advanced topics covered in programming competitions and technical interviews. It covers advanced programming techniques and data structures with C++, Python, and Java examples. Topics include number theory, probability theory, string processing, square root algorithms, computational geometry, advanced dynamic programming techniques, and graph algorithms. More information can be found on the course website: https://cs-people.bu.edu/januario/teaching/cs392/fa25/ 

Instructor: Tiago Januario


 CS392 E1 – Intermediate Application Development

Prerequisites: CAS CS 112 and CS210; or consent of instructor

Content: Students will model agile software engineering practices used in industry to design and implement data driven applications primarily using C# and the .NET Framework and a front end of their choosing, which can include Angular, React or .NET Maui.  The goal is to develop a Novel Final App that can be used to showcase student learning.  Final Apps can either be mobile or pc based. 

The course will not solely be taught in C#, several other languages will be utilized and compared and contrasted.  Students will start by implementing several simple programs, focusing on data driven UI components and event based programming, after which students will be grouped into small teams, collaborating on their Final App. 

As the course proceeds students will begin looking at more complex topics including fundamental design patterns, while implementing more complex applications.  Topics will include: working with databases, authentication, multithreading, layered exception handling, dependency injection, delegates, lambda expressions and language integrated queries. 

As the course proceeds into its second half, students will be required to perform their own research and development as they choose which RESTful 3rd party APIs to incorporate into their final project.

No previous application development experience is required, but creativity and a willingness to perform independent research is required.  A strong understanding of object-oriented programming is also required.

This will be a highly interactive, project oriented and team based course. Attendance, participation and collaboration are mandatory and part of your grade. 

Instructor: Shereif El-Sheikh


CS392 M1  Rust, in Practice and in Theory

Prerequisites: CS210, CS320
 
Content: Rust is a type-safe, memory-safe programming language that is becoming a popular alternative to C and C++ in settings where performance and memory usage are major concerns.  It’s self-described as having “high-level ergonomics” and “low-level control.” Practically speaking, this means clear, concise code with fewer memory bugs.  Theoretically speaking, this means the use of a rich type system based on the notion of linearity to enforce memory-safety before any code has actually been run. Despite its popularity, Rust is still daunting to learn, even for experienced programmers.  There are several concepts in Rust that don’t appear in any other popular languages.  And even if you become a proficient Rust programmer, it doesn’t mean you have a deep understanding of how Rust works, or why it is a better alternative to other low-level languages. In this course, we’ll spend the first half of the semester learning Rust.  This can include topics like borrowing, lifetimes, traits, smart pointers, and concurrency.  We’ll spend the second half implementing a subset of Rust.  This will help us better understand the details of Rust’s type system and borrow checker.

Instructor: Nathan Mull


CS391 X1: Advanced Data Structures in Java

Prerequisites: CS111 and proficiency in Java. You are expected to be familiar with a text editor (e.g., VIM and EMACS).

Content: This course starts by quickly revisiting and then building upon basic programming concepts in Java. Then, the main focus of the course is on the design, analysis and implementation of fundamental data structures used throughout computer science. These include linked lists, stacks, queues, trees, hash tables, graphs, as well as specialized methods for searching and sorting. All of our implementations will be in the the object-oriented programming language Java. The emphasis in teaching this course centers around the following:

  1. Developing elegant and efficient code from an abstract specification;
  1. Literate programming (writing programs that can be read by humans as well as machines);
  1. Developing a toolbox of advanced data structures for use in your future programming tasks, and an awareness of various design patterns that recur frequently in advanced programming;
  1. Critical thinking about programs and the programming process, which involves:

4.1. Thinking about the best way to plan out the design using object-oriented design and appropriate features of Java;

4.2. Methodical and efficient development of the implementation using step-wise refinement and incremental testing and debugging (using appropriate debugging tools);

4.3. Being able to convince yourself of the correctness of the implementation by mathematical reasoning;

4.4. Analyzing the running time (efficiency) of programs by inspection and mathematical reasoning; and

4.5. Evaluating the efficiency and correctness of programs empirically, by using various tools in properly designed experiments.

This course is designed as a faster-paced version of CS112; it suits those who have already had considerable experience with programming in general and Java programming in particular.

Instructor: Hongwei Xi


CS501 E1 or E2: Topics in Computer Science: Mobile Application Development

Prerequisites: No previous mobile application development experience is required, but a strong understanding of object-oriented programming

Content: Students will utilize agile software engineering practices in this hands-on course to design and implement mobile applications using Kotlin, JetPack, and the Android SDK. Students will initially implement several small mobile applications utilizing core android technologies, after which students will be grouped into small teams of 2-3, collaborating on a larger final project. Topics will include UI development, navigation, using third party APIs, data persistence, and gestures. Note: Students should register for either the E1 or E2 section other, but not both

Instructor: Ron Czik


CS 599 A1:  Programming Massively Parallel Multiprocessors and Heterogeneous Systems

Prerequisites: This course is designed for CS PhD students interested in exploring the programming and optimization of GPU software.   You must have a basic understanding of the C/C++ programming language (especially its use of pointers) and an undergraduate level knowledge of computer architecture.

Content: This graduate course aims to provide hands-on experience in developing applications software for graphics processors with massively parallel computing resources.  The target audiences of the course are those who want to develop exciting applications for these processors, those who want to develop programming tools and future implementations for these processors, and those who want to understand how to program these devices at the level of C/C++.  The initial part

of the course focuses on popular programming interfaces for these processors.  The course continues with a closer view of the internal organization of graphics processors and how it impacts performance.  Finally, implementations of applications and algorithms on these processors will be discussed.  Students will be encouraged to use a problem from their research as the topic of their course project.  

Instructor: Jonathan Appavoo


CS 599B1:  Networks and Markets

Prerequisites: This course is designed for declared CS and DS majors who are fulfilling 400-level electives.  For CS students: CS 112, CS 131, and some knowledge of probability and statistics is required. CS 330 or equivalent is suggested as a co-requisite.  For DS students: DS210, DS122 is required. DS320 is suggested as a co-requisite.
While students’ backgrounds will vary, it is expected that students are nearing completion of an undergraduate CS or DS major.

Content: The concept of a network has expanded beyond interconnected machines to encompass diverse applications emphasizing connectedness.  Biological networks, social networks, online advertising networks, and networks involving hyperlinks are all examples of domains which now apply the theory and practice of network science. In parallel, online markets have emerged as key facilitators of commercial activity, from early platforms like eBay with online auctions to modern markets such as pay-per-click advertising, prediction markets, and two-sided platforms like Uber and Airbnb. These application domains draw deeply on established methodologies that are familiar to computer scientists, notably graph theory and algorithms. However, they also build on theoretical foundations that are less familiar to most computer scientists, such as auction design, mechanism design, and the theory of matching markets. Finally, many modern technologies integrate both networks and markets, such as information networks and recommender systems.

In this class, we will build upon the undergraduate text of Easley and Kleinberg to learn about the underlying theory of networks and markets, understand how modern-day digital applications connect to these foundations, and conduct our own independent projects to explore an aspect of a digital market more deeply.

Instructor: John Byers


CS 599 E1: Algorithms for Machine Learning

Prerequisites: Strong undergraduate-level knowledge of algorithms, probability, multivariate calculus and linear algebra. It is recommended but not required to have taken a graduate-level algorithms or machine learning course such as CS 530, 531, 537, 542, or 523.

Description: This is a special topics course focused on the design of efficient algorithms for building modern machine learning models at scale. We will aim to cover topics such as adaptive gradient descent algorithms, dimensionality reduction techniques, algorithms for nearest neighbor search and retrieval augmented generation, and algorithms for training and fine-tuning foundational models. The course will emphasize recent algorithmic developments for state of the art deep learning models and highlight directions for future research.

 

Instructor: Alina Ene


CS599 G1: Advanced Topics in Computer Vision

Content: This is a graduate seminar course in computer vision and machine learning. As part of the course, students will survey and discuss current vision papers relating to advancements made in varied topics like deep-learning based architectures, generative vision models, multimodal learning, 3D vision, fairness and safety, reinforcement learning, and so on. The goals of the course will be to understand current approaches to some important problems, to actively analyze their strengths and weaknesses, and to identify interesting open questions and possible directions for future research. The majority of the course will consist of student presentations, experiments, and paper discussions interspersed with some lectures. Students will be responsible for writing two paper reviews each week, participating in discussions during class, presenting one experiment from assigned papers, presenting an assigned paper in depth, and   completing a research-oriented final project with a partner. 

Instructor: Deepti Ghadiyaram


CS 599 M1: Interpretable Machine Learning

Prerequisites: CS542 or CS541 or equivalent

Content: AI systems have advanced remarkably in recent years, but they have also grown more opaque. For example, ChatGPT and DeepSeek seem intelligent on the surface, but what have they really learned? Why and how do they make the decisions that they do? The ability to answer questions like these is critical in applications like healthcare or legal systems. This research seminar course explores the field of interpretable machine learning, which seeks to understand the internal computational processes of machine learning models—and sometimes, to precisely control these processes. We will cover foundational and cutting-edge topics, including distributed representations, attribution methods, and the emerging field of mechanistic interpretability. We will also cover open problems, such as interpretability illusions and challenges in evaluation. Students will read and present research papers, lead and participate in discussions on these topics, and conduct an interpretability research project.

Instructor: Aaron


CS 599 P1: Introduction to Quantum Computation

Prerequisite: B+ or higher in CS 132 or MA 242; or permission of instructor.

Content: This course explores the fundamental principles of quantum computation, an emerging area at the intersection of quantum mechanics and computer science. Students will be introduced to key concepts in quantum theory, including superposition and entanglement, and computation, such as circuits and logical gates. The curriculum will cover essential algorithms such as Grover’s and Shor’s, and selected additional topics as time permits.
Designed for beginners, this course requires no prior knowledge of quantum physics or advanced mathematics—making it accessible to graduate students and advanced undergraduates who are curious about the potential of quantum technologies. Nevertheless, a solid background in linear algebra is strongly recommended.

By the end of the course, students will grasp how quantum computers differ from classical ones, and how they can solve complex problems in science, cryptography, and beyond.

Instructor: Alexander Poremba


Archive