General Information
This pages details informations on topics courses and electives for Computer Science. These courses count towards topics courses A student may register for as many of the below courses as they would like, however students cannot repeat a specific section.
CS Major and Joint Majors have various course requirements for their degree programs. Degree candidates should refer to the details course requirements and plans of study listed on the Academic Programs page to ensure they are meeting course requirements.
Types of Electives and Topics Courses
- 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
In order to ensure enough space in our elective classes for CAS/GRS CS students, the Department of Computer Science prioritize students who are officially declared in a Department of Computer Science academic program (as a minor, CS major, Math/CS major, or as a graduate student) for our CS 400 level courses; for CS 500+ level courses, College of Engineering students are included in our prioritization. Follow the below decision tree if you are unsure about your ability to register for CS elective courses.Elective Course Registration Procedure
CS 501 A1 & A2 Mobile App Development: Students will utilize agile software engineering practices in this hands-on course to design and implement mobile applications using Kotlin and the Android SDK. Students will initially implement several small mobile applications utilizing core android technologies, after which students will be grouped into small groups, collaborating on a larger final project. Topics will include UI development, action bars, multi-touch, gestures, database and file I/O. Students will also learn to make rich applications by consuming location and sensor information from device hardware. Prerequisites: No previous mobile application development experience is required, but a strong understanding of object-oriented programming and database development (from CS 112 and CS 460 or equivalent) is necessary. Instructor: Ron Czik CS391 A1 – Web Application Development: Web Application Development is a comprehensive course that equips students with practical skills to build dynamic and immersive web applications. Through hands-on exercises and projects, students learn to structure and style web pages using HTML and CSS, create interactive experiences with JavaScript, develop reusable components with React, interact with relational databases using decoupling tools such as ORM and DAO. Additionally, students explore the exciting world of Web-XR, enabling them to build virtual reality experiences with React-VR. By the end of the course, students have the necessary tools and knowledge to develop robust web applications with seamless integration of databases, interactive functionality, and immersive VR experiences. Students are expected to have basic knowledge of OOP principles, coding conventions, and I/O subsystems. Prerequisites: CAS CS 210; or consent of instructor Professor: Taymaz Davoodi CS392 C1 – Algorithms for Competitive Programming: This course covers essential 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. 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. Prerequisites: CS112 and CS131. Strong performance in CS 112 and CS 131 is expected. An assessment test might be administered in the first week to provide feedback on readiness to take this class. Professor: Tiago Januario CS392 E1 – Intermediate Application Development in C#: Students will utilize agile software engineering practices in this hands-on course to design and implement data driven applications using C# and the .NET Framework. We will start by comparing and contrasting the .NET framework with other frameworks as well as native code, exploring the advantages and drawbacks of running code in managed vs. unmanaged environments. Students will subsequently design and implement several simple C# programs, focusing on data driven UI components and event based programming, after which students will be grouped into small teams, collaborating on a larger final project. As the course proceeds students will begin looking at more complex topics including fundamental design patterns, while implementing more complex applications. Topics will include: reading and writing from files/streams/databases, exception handling, multithreading, memory management, networking, delegates, generics and LINQ. Students will also perform their own research and development as they choose which 3rd party APIs to incorporate into their final project. No previous application development experience is required, but a strong understanding of object-oriented programming is required. The syntax for C#, Java, and C++ are nearly identical. Students will be expected to leverage their understanding of Java and/or C++ syntax to help pivot to C#. Prerequisites: CAS CS 112 and CS210; or consent of instructor Professor: Shereif El-Sheikh CS391 S1/S2 – Spark! Software Engineering Immersion: 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. Professor: James Kunstle, Langdon White CS400 A1 – Type Theory and Mechanized Reasoning: Introduction to basic concepts in type theory as it relates to programming languages, mathematics, philosophy, and linguistics. Possible topics include constructive logic, the lambda calculus, simple type theory, polymorphism, type inference, normalization, evaluation, substitution, functional programming, the Curry-Howard isomorphism, dependent type theory, type universes, mechanized mathematics and proof assistants, Kripke semantics and category theoretic semantics, Girard’s paradox. Prerequisites: CS131, CS330, CS320 (CS 332 recommended but not required) Professor: Nathan Mull CS595 T1/T2 Blockchains and their Applications: Blockchain technology amalgamates technical tools, economic mechanisms, and system design patterns. It facilitates the construction of information systems with novel combinations of robustness, decentralization, privacy, cost, and flexibility. Beyond their initial use in cryptocurrencies such as Bitcoin, blockchains have become a promising and powerful technology in business, financial services, law, and other areas. This course covers blockchain technology in a comprehensive, systematic, and interdisciplinary way. It surveys major approaches, variants, and applications of blockchains in these areas. Beyond a solid grasp of the principles, the course aims to build familiarity with practice through numerous case studies and hands-on projects. To facilitate its interdisciplinary perspective, this course will be open to two categories of students: students with Computer Science background (graduate or advanced undergraduate), and graduate students with a substantial Business or Law background and a working knowledge of computer programming. Projects will be done in heterogeneous teams combining these categories, and will center on devising and analyzing sample applications of blockchain technology, including both prototype implementations and analysis of its business/legal implications. Topics covered: disentangling “blockchain”; cryptographic prerequisites; assets and their representations; on-chain programming; state consensus; deployments; decentralized applications (Dapps/Web3); protocol governance; protocol revenue and business models; market structure; privacy and authorization; regulation. More information can be found at this link. Prerequisites: One of the following: Additional Notes for Questrom Students 1. While this course is explicitly designed to accommodate Questrom students, its formal listing this year is as a Computer Science. Thus, to count as an elective towards Questrom graduate degree requirements, you need to submit aGraduate Elective Request. Professor: Eran Tromer CS599 D1 Programming Language Foundations for Concurrency: We will begin with mathematically defining a programming language using its syntax, type system, and semantics. The course will then cover programming abstractions that are usually used for concurrency, i.e., shared-memory and message-passing. While discussing these abstractions, the course will introduce a variety of type systems and languages that would help us write safe concurrent programs. While discussing these type systems, the course will introduce the unique challenges that concurrency poses to type systems and how they can be addressed. The course will also dive into the deep rooted logical foundations for these type systems via Curry-Howard isomorphism. In this course, students would learn about substructural logics, session types and advanced concepts such as refinement and probabilistic types. The course would involve a combination of theoretical assignments, fun programming exercises, and paper reading where students would build their own prototypical languages, both in theory and implementation. More information can be found on the course webpage, linked here. Prerequisites: CAS CS 320 (Concepts of Programming Languages) or equivalent; CAS CS 210 (Computer Systems) or equivalent; or consent of instructor.This course is aimed at viewing concurrent and distributed software systems from a programmer’s perspective. Professor: Ankush Das CS 599 G1 Formal Methods in Security and Privacy: Security and privacy breaches are constantly on the news. Often these breaches are due to vulnerabilities in the design and implementations of software components. In this class we will study some of the formal tools that have been developed to formally support the correctness of software with respect to security and privacy requirements. We will focus on a few security and privacy properties such as: information flow control and non-interference, provable security, and differential privacy. The course consists of a series of lectures on different formalisms that have been developed to reason about security and privacy properties. The basic formalism we will use is the one provided by relational program logics. We will first study a deterministic logic which is useful for reasoning about information flows and non-interference. Then, we will study a probabilistic extension of this logic which supports reasoning about cryptographic security and differential privacy. We will see how different natural proofs from cryptography and differential privacy can be expressed using this formalism. We will also experiment practically with these topics on different examples by using the EasyCrypt tool. Prerequisites: The course has a significant component based on analysis of algorithms, and formal techniques. So, the following are required classes: CAS CS 237 or equivalent; CAS CS 320 or equivalent; CAS CS 330 or equivalent; or consent of instructor. Additionally, some rudimentary understanding of probability and statistics is expected. Professor: Marco Gaboardi and Alley Stoughton CS599 L1 Fine Grained Complexity: An Introduction: In this course we will introduce fine-grained complexity. 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. Mathematical maturity, a familiarity with reductions and a familiarity with reductions (e.g. NP hardness reductions) will be expected for this class. Prerequisites: Mathematical maturity, a familiarity with reductions and a familiarity with reductions (e.g. NP hardness reductions) will be expected for this class. Professor: Andrea LincolnSpring 2023 Topics Courses & Descriptions
CS Practicum Courses
CS Topics Courses
This will be a highly interactive, project oriented and team based course. Attendance, participation and collaboration are mandatory and part of your grade.
2. This is a 4 credit course, unlike Questrom’s usual 3 credits. To avoid extra tuition cost, full-time MBA students can have their tuition cap adjusted by their academic advisor. Professional Evening MBA may contact the instructor for alternative solutions.
If you are interested in taking CS courses to learn more about computer science or to satisfy various general requirements, we offer several courses that have no prerequisites and can be taken in any order. Preview the drop down below for more information on these offerings. The following courses have no prerequisites and can be taken in any order (except the 111/112 sequence.) CS 101: Introduction to Computing CS 103: Introduction to Internet Technologies and Web Programming CS 105: Introduction to Databases and Data Mining CS 108: Introduction to Applications Programming CS 111: Introduction to Computer Science I CS 112: Introduction to Computer Science IICourses for None Majors
Computers are taken for granted in today’s society, but most users have no knowledge of how computers work. CS 101 helps students gain a deeper appreciation of the capabilities and limitations of computing. Questions addressed include: What is a computer? How does computation happen? How is information represented within a digital computer? What is computer programming? What are algorithms, how do we measure their efficiency, and why does this matter? Why does a computer have an operating system, and what does it do? What is the Internet, and how does it work? How do applications like Google and Facebook perform their magic?
CS 103 invites students to engage with the Web in order to gain an understanding of what it is, how to use it, and how to contribute to it. Students learn to view the Web and the underlying Internet architecture as instances of the mathematical abstraction of a network. They learn how modern Web technologies like search exploit fundamental aspects of networks, and they thereby become more effective users of these technologies. Finally, students become active contributors to the Web by learning the basics of Web programming and by creating a full-blown original website as an independent semester-long project.
Databases are everywhere. Retailers use data about customers and purchases to increase profits. Researchers analyze genomic data to find treatments for diseases. Online music and video services use data mining to deliver customized recommendations. How does all this work? CS 105 examines how data is organized, analyzed, and displayed. Topics include relational databases and the SQL query language, the writing of programs to analyze data, the principles of data visualization, and data-mining techniques for discovering patterns in data. At the end of the course, students apply the topics they have learned to a collection of data that interests them.
As a society, we have become dependent on computer applications in our personal and professional lives—from email programs and database software to the programs that drive the websites where we shop online. But what is computer software, and how is it developed? CS 108 is an introduction to object-oriented and procedural programming that covers the fundamental constructs and patterns present in all programming languages, with a focus on developing applications for users. While learning to program, students also develop problem-solving skills and ways of thinking that can be applied to a variety of disciplines. (Cannot be taken for credit in addition to CAS CS 111.) For more information, please refer to the
The first course for computer science majors and anyone seeking a rigorous introduction. Develops computational problem-solving skills by programming in the Python language, and exposes students to variety of other topics from computer science and its applications. Carries MCS divisional credit in CAS.
Prereq: CAS CS 111 or equivalent. Covers advanced programming techniques and data structures. Topics include recursion, algorithm analysis, linked lists, stacks, queues, trees, graphs, tables, searching, and sorting.
Special Courses
A Directed Study in CS is a course in which a student pursues independent research under the guidance of a CS faculty member. Students should consult with their supervising faculty member to design a clear, explicit plan for the completion of the directed study course including supervision, research materials, and assignments. Directed studies are registered under the course number CS491/492 and have to be taken for 4 credits. See here for the general guidelines for directed studies in CAS. Requirements: To apply fill this form with your advisor and submit along with your project description to the Director of Undergraduate Studies, Dora Erdos edori@bu.eduDirected Study in Computer Science
Honors in the Major (2-Course Capstone)
This program is open to exceptional undergraduate students who desire to complete a research “capstone” experience as part of their B.A. in Computer Science. Interested students may contact csadvise@bu.edu for more information.
Eligibility
- There are no formal GPA requirements, but it is expected that only students with a distinguished record of academic performance, and a strong interest in independent research, will elect this program.
- Students in the general CS major as well as any of our joint majors are eligible to complete an Honors project. Students with a joint major (for example, Mathematics & Computer Science) should consult with their advisors in both departments before applying.
Requirements
- Students in the program must complete two semesters of research work (as courses CS 401 and 402) under the supervision of a Boston University Computer Science faculty member, which will culminate in a written document and an oral presentation before a committee of the faculty (ideally, as part of a research group’s ongoing seminar).
- Students in the program are strongly encouraged to attend research group seminars and relevant departmental colloquia.
- Effective Fall 2022, CS 401 gives students a Research and Information Literacy hub unit. CS 402 gives students an Oral and Signed Communication hub unit.
How to Apply
- To apply, please submit a brief project proposal as well as a recommendation letter from the sponsoring faculty member by April 30, 2023. Students must be a junior to apply.
- Applications can be sent to Alice Rugoletti and will be reviewed by Director of Undergraduate Studies Professor Dora Erdos. After review and acceptance, the student may then register for CS 401 for the following Fall term. Admission to CS 402 will be contingent on the faculty member’s satisfaction with the student’s performance in CS 401.
CS 298: Undergraduate Internship in Computer Science (Summer only)
This course is intended for undergraduate students interested in completing a summer internship in a computing industry company. See below for more details about the course and how to apply.
Note that this course is offered only during the summer and that is the only period during the year when the CS department sponsors CPT.
Students who are interested in CS 298 must submit their application no later than the last day to add a standard class for the semester their internship will occur.
CS 298: Internship in Computer Science is a Pass/Fail undergraduate course, taken for 1 credit over the summer. For domestic students, this course is not required to take an internship, although they may do so if they wish to see internship credit on their transcript. For international students, this course is required to use CPT.
This course comes with a tuition fee and is not repeatable. Please note that this course does not count toward major requirements, but the 1 credit you receive from the course does count toward your graduation requirement of 128 credits. A 2.0 GPA is required to participate in CS 298.
How do I register?
In order to register for CS 298, you must submit a short application, which will be reviewed Prof. Dora Erdos, the Computer Science Director of Undergraduate Studies. If Prof. Erdos approves your application, you will be automatically registered for the course for 1 credit. This course requires that you submit short reports, once every two weeks throughout the duration of your internship. At the end of your internship, a final report detailing the work you have done in the internship needs to be submitted. These items are required for successful completion of CS 298.
For international students: please read this webpage on the ISSO website about CPT requirements thoroughly. Please note that it will take time to go through the full process required for approving any internship, including getting ISSO approval for CPT requests. Please start early if you are planning on internships (at least 1.5-2 months prior, if you are using CPT) and please be patient with the process.
If you have any questions, please reach out directly to Prof. Erdos at edori@bu.edu.