Topics Courses

While the majority of computer science courses are described on the BU Bulletin, the Topics Courses have a generic descriptions on the BU Bulletin as the focus of the course and syllabus change semester-to-semester. Detailed descriptions of the topics courses are updated below as registration for the next semester approaches.

Topics courses vary between semesters, and same section number may refer to different topics in different semesters. See the Topics Courses Archive for information on past semesters.

Spring 2026 Topics Course Descriptions

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


CS391 J1: Programming Massively Parallel Multiprocessors and Heterogeneous Systems – ƒankus

Prerequisites:  Required, CS210. Additionally, it is recommended that you have taken CS350 or CS351.

Description: While the CPU’s familiar von Neumman architecture and programming model have dominated general-purpose computing, today’s systems are heterogeneous.  Most incorporate Massively Parallel MultiProcessors, in the form of GPUs.  The high-performance data parallel architecture and programming model of the GPU have proven critical in providing the raw computation power required for modern AI computation. Understanding the heterogeneous combination and how to exploit it effectively and practically is the focus of this class.

The course covers “general purpose” — i.e., non-graphical — programming techniques for GPUs in a heterogeneous system.  The course introduces NVIDIA’s parallel computing language, CUDA, including its programming model and syntax.  We also discuss GPU architecture, high-performance computing on GPUs, parallel algorithms, CUDA libraries, and applications of GPU computing.

The focus of the course will be on performance.  This is because, for general-purpose parallel programs, GPUs are often used as accelerators to speed up the programs so that they run faster than they would on a multicore CPU.  Specifically, the programming assignments and your project will require you to evaluate the various micro-architectural features of GPUs experimentally.  This course is not about getting applications run on a GPU using existing libraries and frameworks, but rather about gaining a fundamental understanding of how GPUs work and interact with CPUs concerning performance.

Instructor: Prof. Jonathan Appavoo


CS392 C1: Competitive Programming 

Prerequisites: CS112, CS330, prior knowledge in C/C++ or Java

Description: This course covers basic algorithms necessary to compete in the ACM International Collegiate Programming Contest (ICPC) and similar contests. Active involvement in weekly contests is a mandatory component of the course. Highly recommended to anyone who wants to prepare for typical fundamental data structure/algorithm part of a job interview at top IT companies. Topics covered include standard library classes and data structures, competitive programming contest strategies, string manipulation, divide and conquer, dynamic programming, graph algorithms, number theory, computational geometry, and combinatorics.

Textbook: https://cpbook.net/details?cp=4 

Instructor: Prof. Tiago Januario


CS392 X1: A faster-paced version of CS112 (Introduction to CS II)

Prerequisites: This course is designed for students who already have a basic level of proficiency in Java. In terms of course requirement, it is equivalent to CS112. 

Content: This course largely follows the following book (available on-line for free):

Algorithms by R. Sedgewick and K. Wayne, 4th edition, 2011.

It starts by quickly revisiting and then building upon basic programming concepts in Java. 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 written in the object-oriented programming language Java, making use of advanced programming features including abstract classes, generics, higher-order methods, and lazy evaluation.

Instructor: Hongwei Xi


CS501 E1: Mobile Application Development

Prerequisites: No prior experience in mobile application development is required. However, students must have a solid understanding of object-oriented programming and database development, equivalent to the material covered in CS 112 and CS 460. Required skills include fluency with object-oriented design and implementation, control structures, loops, arrays, XML, and basic database concepts. GUI and event-driven programming concepts will be introduced as part of the course.

Content: This graduate-level, hands-on practicum explores modern Android mobile application development using Kotlin, Jetpack Compose, and the Android SDK. Students will follow agile development practices and begin the course by building a series of small mobile apps to gain familiarity with core Android concepts. Midway through the semester, students will form small teams (2–3 members) and collaborate on a substantial final project.

The course emphasizes a modern, industry-aligned development workflow and integrates the use of AI-assisted development tools (e.g., Android Studio’s AI features) for code generation, documentation, and testing—requiring students to critically evaluate and reflect on AI contributions. This is a coding-intensive, project-based course with high expectations for collaboration, research, and independent learning. Students will be assessed through individual assignments, team research reports, two interim project reviews, and a final project with presentation.

Instructor: Ron Czik


CS501 S1: Agile Application Development 

Content: Learn to build cross-platform, data-driven applications using industry-standard design principles. This team-based, hands-on course teaches students to design and develop rich applications with a strong focus on user experience, creativity, and collaboration. Students apply programming skills across multiple languages and frameworks, beginning with .NET.

The course starts with individual exercises on UI components and event-based programming, then progresses to team projects covering advanced topics such as scalable design, asynchronous programming, exception handling, RESTful API integration, authentication, multithreading, dependency injection, and advanced C# features like delegates, lambda expressions, and LINQ.

In the second half, students conduct independent research to implement a Final APP, which serves as a portfolio piece often used in interviews to secure internships or jobs. Prior app development experience isn’t required, but object-oriented programming knowledge, creativity, and teamwork are essential.

Instructor: Shereif El-Sheikh


CS 598 G1: AI, Cybersecurity and Entrepreneurship 

Content: This course will explore technology entrepreneurship with a specific focus on AI and cybersecurity companies. The goal is to learn about the technology behind the latest cybersecurity and AI companies alongside the business considerations involved in building these companies from the ground up.  

Topics we cover include product design, business models, product-market fit, basic sales and marketing frameworks, startup financing, fundraising metrics and different stages in the startup life cycle (pre-Seed, Seed, Series A, Series B. . . ).   We will also have a substantial number of guest lectures from local startup founders, entrepreneurs, investors and executives.

Evaluation is based mostly on hands-on labs and course projects that involve analyzing the latest exciting cybersecurity and AI startups.  Some of the examples of companies we discussed in depth last year include Tailscale, Twingate, Jumpcloud, Wiz, AppMap, and HYPR. 

This course fulfills the CS Group D requirement for undergraduates.  If you are a student in the minor in Entrepreneurship and Innovation, the professor will work with you to get this course included in your minor. 

The course is taught by Prof. Sharon Goldberg, who was the co-founder and CEO of a cybersecurity startup, BastionZero, that was acquired by Cloudflare in May 2024. She is also an infrastructure cybersecurity researcher and has been a tenured professor in the CS department at BU since 2010. 

Instructor: Sharon Goldberg


CS598 P1: Multimodal Machine Learning (must also enroll in P2-P3 discussion section)

Prerequisites: CS542 (Machine Learning) or equivalent

Many applications of artificial intelligence rely on reasoning about data from many different sources (e.g., images, video, language, sound, infrared, Lidar, etc).  This course serves as an introduction to methods that aim at using the fusion of these data sources to accomplish downstream tasks.  For example, automatically captioning an image requires reasoning about visual and text data, a robot searching for a person lost in a cave may rely on infrared and sound, and autonomous vehicles may use Lidar and video information.  This class will explore machine learning and statistical techniques that aim to understand the relationship between modalities.  Students will also learn about some of the common issues that arise when dealing with multiple modalities such as data scarcity,  positive-unlabeled learning, structured prediction, and the challenges in evaluating these systems.

Professor: Bryan Plummer

Course site: See link on https://www.bryanplummer.com/


CS 598 X1: Human-Computer Interaction and Human-AI Interaction

Prerequisites:  Required, CS365 or CS440 

Content: This course examines two fields, HCI and AI, once described as “two fields divided by a common focus.” Historically, they often competed for intellectual and economic resources, but today their convergence is increasingly important. This course explores that convergence by combining classic HCI principles with the latest developments in HAI and AI agents.

The first half of the course introduces the foundations of HCI: usability principles, interaction techniques, design heuristics, and methodologies for conducting user studies. Students will gain hands-on experience with both quantitative and qualitative research methods, learning how to rigorously evaluate systems from a human-centered perspective.

The second half shifts toward human-centered AI and the rapidly evolving frontier of AI agents and large language models. Topics include prompt engineering, AI interface design, Agentic AI workflow and emerging methods such as simulating user studies with AI. Students will learn to analyze, design, and evaluate AI-powered systems through the lens of HCI, bridging the gap between theory and practice.

Students will complete several assignments and a final project, gaining skills in both rigorous HCI methodology and frontier approaches to building and evaluating AI systems. This lecture-based course prepares students to design, analyze, and critically engage with modern AI-powered systems from a human-centered perspective.

Instructor: Chang Xiao 


CS 599 A1: Logic and Programming Languages

Prerequisites: Required: CS 131, CS 210. Recommended: CS 320

Content: What is truth? In constructive logic, a proof isn’t just a certificate that something is true — it’s also an explicit construction or algorithm. This course introduces constructive (or intuitionistic) logic, a foundation for mathematics and computer science that emphasizes proofs as constructive evidence rather than abstract truth. Students will explore the principles that distinguish constructive logic from classical logic, including the rejection of the law of excluded middle and the requirement that proofs yield explicit witnesses.

The course will cover:

  • Natural deduction systems for propositional and predicate constructive logic
  • The Curry–Howard correspondence between proofs and programs
  • Sequent calculus and proof normalization
  • Connections to type theory and functional programming languages
  • Proof Search, Inversion, and Focusing
  • Applications to Logic Programming Languages like Prolog
  • Linear Logic and Rust

Who should take it? Students interested in mathematics, computer science, philosophy, or anyone curious about the foundations of reasoning and computation, or wants to get a deeper understanding of the inner workings of a “good” programming language.

Instructor: Ankush Das


CS 599 G1: Deep Visual Generative Models

Graduate Prerequisites: This course is designed for CS Ph.D., Master, and senior undergraduate students who are interested in deep generative models and their application in computer vision. In order to get the most out of this course, you will need a solid understanding of machine learning, deep learning, and computer vision.

Undergraduate Prerequisites: CS 542 (or 541), CS 585, and CS 523, or permission of instructor.

Content: This graduate-level seminar course delves into deep generative models, with a primary focus on their applications in computer vision (e.g., image and video generation). We will explore variational autoencoders (VAEs), generative adversarial networks (GANs), diffusion models, and autoregressive models, and discuss how these frameworks are applied to diverse visual data formats. We will also cover the foundational models built upon these techniques, including but not limited to the foundation models’ generalization, efficiency, and benchmarking. This seminar course is for graduate students ready to explore the latest research frontiers and actively conduct research in this domain.

Instructor: Boqing Gong


CS 599 K1: The Theory and Practice of Tractable Programming

Prerequisites: This course is designed for CS PhD, Masters, and senior undergraduate students that are interested in the intersection of theory and systems. In order to get the most out of this course, you will need a solid understanding of complexity, data structures, and algorithms.  Undergraduate Prerequisites: CS 210, and CS 330, or permission of instructor.

Content: In this course, we will explore powerful programming paradigms like SQL, tensor algebra, and constraint programming. These paradigms offer simple data models with relatively few programming constructs. This encourages users to write succinct declarative code, entrusting the system to automatically generate an efficient implementation. We will uncover the strong theoretical foundations of these systems, and see how real-world implementations leverage (or fail to leverage) these foundations. In general, the programming languages that we consider can be viewed as extensions of first-order logic, and we will leverage this common theoretical view to analyze the complexity of programs across these paradigms. Moreover, we will see how the same practical problems arise again and again across these fields and tease apart the different solutions that they adopted to solve them. 

As a graduate seminar,  this course will be a combination of lectures and paper reading. The lectures will typically go over the theory, and the papers will describe an implementation of that theory in practice. Students will read and present research papers, and they will complete a final systems project where they write an optimizer for tensor algebra programs.

Instructor: Kyle Deeds


CS 599 L1: Fine-Grained Complexity and its Applications

Prerequisites: Required: CAS CS 332 (theory of computation, or equivalent at other university), CAS CS 330 (introduction to algorithms, or equivalent at other university), mathematical maturity

Content: Ever wondered why the longest common subsequence problem takes n^2 time to solve? Why can’t we do it in linear time? What about finding the diameter of a graph? It turns out there’s a shared reason for the hardness of these problems! Learn about the fine-grained hardness of computational problems in this class.

Fine-grained complexity studies the constants in the exponents of algorithms. We will give techniques for achieving conditional lower bounds on problems like diameter, sparse all-pairs shortest paths, longest common subsequence, and more. This class will also cover techniques for worst-case to average-case reductions in fine-grained complexity, lower bounds for dynamic problems, and other applications of fine-grained complexity. The primary tool in this class is hardness reductions.

Mathematical maturity and familiarity with reductions (e.g., NP-hardness reductions) will be expected for this class.

Instructor: Andrea Lincoln


CS599 N1: Designing Hardware with Software: Accelerators and Advanced Computer Architecture

Graduate Prerequisites: An introductory-level course in computer organization/architecture, or permission of the instructor.
Undergraduate Prerequisites: CS350 or CS351 or CS391R1 (Computer and Memory Architectures), or equivalent advanced-level computer systems course.

Content: Today, emerging applications in AI/ML, robotics, genomics, and more are being powered by novel hardware accelerators that can deliver high performance and energy efficiency. But designing accelerators by hand using traditional manual methods (e.g., Verilog and other hardware description languages) can be time-consuming, tedious, and error prone. To solve these problems and enable agile accelerator design, there is great interest across industry and academia in answering the question: How can we design hardware using the desirable automation, modularity, user-friendliness, and verification features common in software design?

In this lab and project-based graduate-level class, we will: (1) introduce modern high-level design techniques to develop hardware with software, including a combination of traditional Verilog design alongside high-level synthesis (HLS) tools that allow users to generate hardware accelerators automatically from software programs; and use these tools to (2) explore advanced computer architecture principles and the process of designing accelerators for different applications. The practical component of the class features lab assignments where students will exercise advanced architecture techniques using Verilog and C-to-FPGA tools for accelerator design, emphasizing sound design and testing practices. The class concludes with a research-oriented final project where students will work in small groups, supervised by course staff and project mentors. Topics include Verilog design, C-based HLS tools, spatial and temporal parallelism, pipelining, customized memory architectures, spatial architectures for AI/ML acceleration, modular design, meeting timing and area constraints, infrastructure for testing designs, and FPGA-based implementation. Additional topics may include optimization underpinnings of HLS, parameterized design methodologies, and alternative hardware description languages and compilers.

Instructor: Sabrina Neuman