Computer Science Program

Srinivasan Seshan, Department Head, Computer Science
Location: GHC 7019

Charlie Garrod, CS Undergraduate Program Director
Location: TCS 343

Amy Weis, Program Coordinator, CS Undergraduate Office
Location: GHC 4115

www.csd.cs.cmu.edu

The B.S. program in Computer Science combines a solid core of Computer Science courses with the ability to gain additional depth through a required minor in a second subject or a concentration in a computing area. In addition, the curriculum provides breadth through numerous choices for science, engineering, humanities and fine arts courses. As computing is a discipline with strong links to many fields, this provides students with unparalleled flexibility to pursue allied (or non-allied) interests. 

Students apply to, and are directly admitted into, the School of Computer Science. Admitted students may choose to pursue an undergraduate degree in Computer Science and, upon successful completion, are awarded a Bachelor of Science in Computer Science. Suitably prepared students from other Carnegie Mellon colleges are eligible to apply for internal transfer to the School of Computer Science and will be considered for transfer if grades in core CS requirements are sufficiently high and space is available.

Students in the B.S. program in Computer Science are expected to acquire the following skills upon graduation:

  • Identify, use, design, develop and analyze appropriate abstractions and algorithms to solve problems while being able to prove the algorithm’s performance and correctness across a variety of metrics (e.g., time, space, parallel vs. sequential implementation, computability).
  • Implement solutions to problems in domains such as artificial intelligence, graphics and sound, software engineering, and human-computer interaction, by applying the fundamentals of those areas to create solutions to current problems while being exposed to research developments that will enable them to adapt as the technology changes.
  • Reason about and implement programs in various programming languages and paradigms
  • Describe, specify, and develop large-scale, open-ended software systems subject to constraints such as performance and/or resource issues
  • Communicate technical material effectively to technical and non-technical audiences
  • Work both individually and in teams
  • Recognize the social impact of computing and the attendant responsibility to consider the legal, moral and ethical implications of computing technologies.

Due to the tremendous number of ongoing research projects within the School, many students obtain part-time or summer jobs, or receive independent study credit, working on research while pursuing their undergraduate degree. Students seeking a research/graduate school career may pursue an intensive course of research, equivalent to four classroom courses, culminating in the preparation of a senior research thesis.

The School of Computer Science also offers B.S. degrees in Artificial Intelligence, Computational Biology, Human-Computer Interaction, and Robotics, as well as a Bachelor's Degree in Computer Science and the Arts (jointly with the College of Fine Arts). More detail about the Artificial Intelligence, Computational Biology, Human-Computer Interaction, and Robotics majors as well as the Computer Science and the Arts program is available in separate sections of the Undergraduate Catalog. SCS offers additional majors in Artificial Intelligence, Computational Biology, Computer Science, Human-Computer Interaction, and Robotics, and minors (to non-CS majors) in Artificial Intelligence, Computational Biology, Computer Science, Human-Computer Interaction, Language Technologies, Machine Learning, Neural Computation, Robotics, and Software Engineering. Information about additional majors and minors in SCS besides those in Computer Science are listed in a separate section in the Undergraduate Catalog.

Curriculum - B.S. in Computer Science

The following requirements are for students entering Fall 2025.

Computer Science

Computer Science Core (all of the following): Units
07-128First Year Immigration Course3
15-122Principles of Imperative Computation
(students without credit or a waiver for 15-112, Fundamentals of Programming and Computer Science, must take 15-112 before 15-122)
12
15-150Principles of Functional Programming12
15-210Parallel and Sequential Data Structures and Algorithms12
15-213Introduction to Computer Systems12
15-251Great Ideas in Theoretical Computer Science12
15-451Algorithm Design and Analysis12
One Artificial Intelligence elective (min. 9 units). Students will be able to tackle complex, real-world problems using techniques from Artificial Intelligence, including symbolic and probabilistic reasoning, machine learning, optimization, and perception.
07-280Artificial Intelligence and Machine Learning I12
10-301Introduction to Machine Learning12
11-411Natural Language Processing12
11-485Introduction to Deep Learning9
15-281Artificial Intelligence: Representation and Problem Solving12
15-382Collective Intelligence
(Note: 15-382 is ONLY offered at Carnegie Mellon in Qatar.)
9
15-386Neural Computation9
16-384Robot Kinematics and Dynamics12
16-385Computer Vision12
One Domains elective (min. 9 units). Students will gain expertise in fundamental principles from a larger domain of computer science not already represented by other constrained categories, currently logic and languages, systems, and artificial intelligence (which includes machine learning, language technologies, and robotics). Students will be able to apply theoretical and computational techniques from the Computer Science core to an introductory study of another major subarea of Computer Science.
02-251Great Ideas in Computational Biology
or 02-180 & 02-181
12
05-391Designing Human Centered Software12
11-324Human Language for Artificial Intelligence12
15-322Introduction to Computer Music9
15-330Introduction to Computer Security12
15-362Computer Graphics12
15-455Undergraduate Complexity Theory9
17-313Foundations of Software Engineering12
One Logics/Languages elective (min. 9 units). Students will master techniques for rigorous, formal reasoning about programs or systems, rooted in their logical foundations.
15-311Logic and Mechanized Reasoning9
15-312Foundations of Programming Languages12
15-316Software Foundations of Security and Privacy9
15-317Constructive Logic9
15-414Bug Catching: Automated Program Verification9
17-355Program Analysis12
17-363Programming Language Pragmatics12
80-413Category Theory9
One Software Systems elective (min. 12 units). Students will: 1. be able to describe how the properties of modern hardware (e.g., processor architecture, networks, storage) influence the design and implementation of software systems, such as through reasoning about concurrency and performance. 2. be able to analyze failures and / or resource limitations of physical systems and plan for their mitigation or management. 3. be able to develop abstractions based on lower-level primitives to manage the failures or other difficulties inherent in working with hardware. 4. demonstrate their learning through significant project / system implementations, requiring both course-specific knowledge as well as general system-building skills (i.e., not just programming, but also design, debugging, testing, etc.). The programming tasks together constitute a significant fraction of the course grade (e.g., 40% or more).
15-410Operating System Design and Implementation15
15-411Compiler Design15
15-418Parallel Computer Architecture and Programming12
15-440Distributed Systems12
15-441Networking and the Internet12
15-445Database Systems12
Two School of Computer Science electives: Units
These electives can be from any SCS department (Computer Science [15-], Computational Biology [02-], Human-Computer Interaction [05-], Machine Learning [10-], Language Technologies [11-], Robotics [16-], or Software & Societal Systems [17-]). They must be 200-level or above and at least 9 units each, with the following exceptions:18
ADDITIONS: 1) students who take two of the major-intro mini-courses (02-180, 05-180, 07-180, or 16-180) during their first year may combine these two mini-courses together to count as one SCS elective; 2) 15-195 and 15-295 can be combined to count as one SCS elective; 3) 07-400 and 07-599 are countable as SCS electives.
DELETIONS: 1) the following courses do NOT count as SCS electives: 02-201, 02-223, 02-250, 02-261, 05-200, 11-423, 15-351, 16-211, 16-223, 16-224, 16-397, 16-480, 17-200, 17-333, 17-416, 17-562; 2) some IDeATe courses and some SCS undergraduate and graduate courses might not be allowed based on course content. Always consult with a CS undergraduate advisor before registration to determine eligibility for this requirement.

Mathematics

All of the following Mathematics courses:
15-151Mathematical Foundations for Computer Science
(if not offered, substitute 21-127 or 21-128)
12
21-120Differential and Integral Calculus10
21-122Integration and Approximation10
21-241Matrices and Linear Transformations11
or 21-242 Matrix Theory
21-259Calculus in Three Dimensions10
or 21-266 Vector Calculus for Computer Scientists
or 21-268 Multidimensional Calculus
or 21-269 Vector Analysis
Plus one of the following four Probability choices:
15-259Probability and Computing12
21-325Probability9
36-218Probability Theory for Computer Scientists9
36-225
36-226
Introduction to Probability Theory
and Introduction to Statistical Inference
(must take both courses in this sequence to satisfy requirement)
18

Technical Communication

One technical communication course, which satisfies the following learning objectives:

  • Audience: Students will be able to analyze the audience or audiences of a work: who the stakeholders are, what those stakeholders are trying to accomplish, and how persuasive communication can help students achieve their goals.
  • Written Mechanics: Students will practice developing their professional writing voice, paying attention to spelling, grammar, style, and the use of visual information.  
  • Adaptation: Students will be able to adapt expert-level information for a general audience, across textual, graphical, and oral presentation.
  • Genres/Templates: Students will practice developing information in a variety of communication contexts, connecting areas of content in their own voice, and leading the reader through a cogent sequence of ideas while working within the constraints of a particular genre or template.
  • Peer Review: Students will practice reading and revising the work of themselves and their peers.
  • Oral Presentation Mechanics: Students will prepare for the real-time act of presenting to an audience, including delivery, practice, venue setup, and managing presentation support (slides, props, etc.).
  • Oral Presentation Development: Students will explore formal and informal modes of communication, selecting, organizing and explaining information for a real-time audience, and increasing clarity with use of structure and style.
  • Group Work: Students will practice skills to help them work as a team, stay on track, and produce a group deliverable.
One Technical Communications course: Units
07-300Research and Innovation in Computer Science9
17-200Ethics and Policy Issues in Computing9
76-270Writing for the Professions9

Science and Engineering

All candidates for the bachelor's degree in Computer Science must complete a minimum of 36 units offered by the Mellon College of Science and/or the College of Engineering (CIT). These courses offer students an opportunity to explore scientific and engineering domains that can influence their effectiveness as computer scientists upon graduation.

Requirements for this component of the degree are listed under the SCS main page under General Education Requirements.

Humanities and Arts

All candidates for the bachelor's degree in Computer Science must complete a minimum of 63 units offered by the College of Humanities & Social Sciences and/or the College of Fine Arts. Some courses from the Tepper School of Business also qualify for this requirement. These courses offer students breadth in their education and perspectives and provide students with a better appreciation of social, artistic, cultural, political and economic issues that can influence their effectiveness as computer scientists upon graduation.

Requirements for this component of the degree are listed under the SCS main page under General Education Requirements.

Required Minor or Concentration

Students completing the bachelor's degree in Computer Science must complete either a minor outside of SCS or a concentration within SCS. A minor is a sequence of (typically 5-6) courses within a particular department to give students a core of a specific discipline but not an entire major of study. Refer to the sections for other CMU colleges for details about available non-SCS minors. An SCS concentration is a sequence of (typically 4-5) courses within an SCS department to give students further depth in specific areas of research important to SCS. SCS concentrations are available only to SCS students and assume that these students have a significant core knowledge in Computer Science including 15-210, 15-213 and 15-251. See the SCS Concentrations section for a list of available concentrations and their requirements. Completion of an additional major (or dual degree) also satisfies this requirement. Students should consult with their academic advisor to plan for their desired minor or concentration starting in the sophomore year.

Double Counting

In general, courses taken in satisfaction of the minor or additional major may also count toward any general education category in the CS major (i.e. courses outside of the Computer Science and Mathematics requirements). Double counting toward Computer Science and Mathematics courses in the CS major is strictly limited and depends on the chosen minor (or additional major). In general, students may double count at most 5 of the 12 core Computer Science requirements toward all other declared additional majors and minors. Additional majors and minors have their own double counting rules as well. Consult with a CS undergraduate advisor and an advisor from the department of the minor (or additional major) for specific restrictions on double counting.

Computing @ Carnegie Mellon (1 course)

The following course is required of all students to familiarize them with the campus computing environment:

99-101Core@CMU3

Free Electives

A free elective is any Carnegie Mellon course. However, a maximum of nine (9) units of Physical Education and/or Military Science (ROTC) and/or Student-Led (StuCo) courses may be used toward fulfilling graduation requirements.

Summary of Degree Requirements:

AreaCoursesUnits
Computer Science (core courses, constrained electives, and SCS electives)12125
Mathematics658
Technical Communication19
Science/Engineering436
Humanities/Arts763
Minor or Concentration Requirement/Free electivesVaries63
Computing @ Carnegie Mellon13
First Year Seminar13
360

Sample Course Sequence

The sample given below is for a student who already has credit for introductory programming and one semester of calculus. Students with credit for two semesters of calculus may start with a more advanced math class (e.g. 21-241) in their first year. Students with no credit for introductory programming and/or one semester of calculus will take 15-112 and/or 21-120 in their first semester and shift a few courses to later semesters after consulting with their academic advisor; these students should still be able to complete their degree in four years. It is recommended that students keep their academic load lighter for their Senior Fall semester to account for offsite job interviews or for their Senior Spring semester to account for visits to graduate schools.

Freshman Year:
Fall Units
07-128First Year Immigration Course3
07-131Great Practical Ideas for Computer Scientists
(optional, not required for CS major)
2
15-122Principles of Imperative Computation12
15-151Mathematical Foundations for Computer Science
(if not offered, substitute 21-127)
12
21-122Integration and Approximation10
76-101Interpretation and Argument9
99-101Core@CMU3
 51
Spring Units
15-150Principles of Functional Programming12
15-213Introduction to Computer Systems12
21-259Calculus in Three Dimensions10
xx-180SCS Major Intro Mini5
xx-xxxHumanities and Arts Elective9
 48
Sophomore Year:
Fall Units
15-210Parallel and Sequential Data Structures and Algorithms12
21-241Matrices and Linear Transformations11
xx-xxxScience/Engineering Course9
xx-xxxHumanities and Arts Elective9
xx-xxxMinor Requirement / Free Elective9
 50
Spring Units
15-251Great Ideas in Theoretical Computer Science12
xx-xxxComputer Science: Domains Elective*9
xx-xxxProbability Course*9
xx-xxxScience/Engineering Course9
xx-xxxHumanities and Arts Elective9
 48
Junior Year:
Fall Units
15-451Algorithm Design and Analysis12
xx-xxxComputer Science: Logic/Languages Elective*9
xx-xxxTechnical Communications Course*9
xx-xxxScience/Engineering Course9
xx-xxxMinor Requirement / Free Elective9
 48
Spring Units
15-xxxComputer Science: Systems Elective*12
xx-xxxComputer Science: Artificial Intelligence Elective*9
xx-xxxScience/Engineering Course9
xx-xxxHumanities and Arts Elective9
xx-xxxMinor Requirement / Free Elective9
 48
Senior Year:
Fall Units
xx-xxxSchool of Computer Science Elective9
xx-xxxHumanities and Arts Elective9
xx-xxxMinor Requirement / Free Elective9
xx-xxxMinor Requirement / Free Elective9
 36
Spring Units
xx-xxxSchool of Computer Science Elective9
xx-xxxHumanities and Arts Elective9
xx-xxxMinor Requirement / Free Elective9
xx-xxxMinor Requirement / Free Elective9
 36
Minimum number of units required for the degree:360


*The flexibility in the curriculum allows many different schedules, of which the above is only one possibility. Some elective courses are offered only once per year (Fall or Spring). Constrained electives (probability, logic/languages, software systems, artificial intelligence and domains) may be taken in any order and in any semester if prerequisites are met and seats are available. Constrained electives are shown in the specific semesters in the schedule above as an example only. Students should consult with their academic advisor to determine the best elective options depending on course availability, their academic interests and their career goals.  

Undergraduate Research Thesis

CS majors may use the SCS Honors Research Thesis as part of their degree. The SCS Honors Undergraduate Research Thesis (07-599) typically starts in the fall semester of the senior year, and spans the entire senior year. Students receive a total of 36 units of academic credit for the thesis work, 18 units per semester. Up to 18 units can be counted toward CS elective requirements (9 per semester for 2 semesters maximum).  Students interested in research may also consider using Research and Innovation in Computer Science (07-300, 9 units) as their technical communications requirement in their junior year since this course will introduce students to various research projects going on in the School of Computer Science that may lead to a senior thesis. This course leads to a subsequent Research Practicum in Computer Science (07-400, 12 units) that allows students to complete a small-scale research study or experiment and present a research poster. Students who use 15-400 to start their senior thesis can use these units toward the required 36 units.

For more information about the SCS Honors Research Thesis, refer to the SCS Honors Research Thesis section for learning objectives, application requirements and expected outcomes.

Dual Degree in Computer Science

Students wishing to pursue a Dual Degree in Computer Science are required to apply in the same way as students wishing to transfer into the Computer Science major. Details are given in the SCS Policies section. Besides the student's primary degree requirements, a student accepted for Dual Degree in CS is required to complete at least 450 units in total and meet all requirements for the CS major including all general education requirements (humanities/arts and science/engineering). Dual degree students do not need to complete 07-128, and these students will replace 15-151 with either 21-127 or 21-128. Since the CS major requires at least a minor or concentration in another area, the student's primary major will substitute for this requirement. Note that the primary major must be completed prior to or at the same time as the dual degree in CS to satisfy the minor requirement; a dual degree in CS cannot be certified if the primary degree is not completed. Students should consult with the Assistant Dean in the CS Undergraduate Office and/or their CS academic advisor to review all requirements, once approved.

Double-Counting Restriction

Students pursuing a Dual Degree in Computer Science must complete all requirements for the CS primary major (except 07-128 which is not required and 15-151 which will be replaced with 21-127 or 21-128). In addition, at most 5 of the 12 computer science requirements can double count with all other declared majors and minors. Students, especially from interdisciplinary majors or with multiple majors or minors, are urged to consult with the Assistant Dean or Undergraduate Program Coordinator in the CS Undergraduate Office to determine double-counting restrictions specific to their own situations.

Computer Science Additional Major

Students interested in pursuing an additional major in Computer Science should first consult with the Program Coordinator in the CS Undergraduate Office. Students are expected to complete the requirements for the CS minor first before continuing on to the additional major. Completion of the CS additional major requires 12 computer science courses (not including 15-110 and 15-112 if needed),  5 mathematics courses, and 1 technical communication course. Students are expected to complete all courses for the additional major with an average QPA of 3.0 or higher.

Declaration for the additional major is allowed only after all math requirements are completed or in progress, and at least 9 of the 12 CS requirements (core and electives) are completed or in progress. Due to high demand, seats in upper-level CS courses are not guaranteed for additional majors so students should plan to be flexible in selecting constrained and general electives. Acceptance to complete a Computer Science additional major is not guaranteed and depends on student performance and seat availability.

The following courses are required for the Additional Major in Computer Science:

Computer Science requirements (12 courses):

Core courses (all are required): Units
15-122Principles of Imperative Computation12
15-150Principles of Functional Programming12
15-210Parallel and Sequential Data Structures and Algorithms12
15-213Introduction to Computer Systems12
15-251Great Ideas in Theoretical Computer Science12
15-451Algorithm Design and Analysis12
One Artificial Intelligence elective (minimum 9 units). Students will be able to tackle complex, real-world problems using techniques from Artificial Intelligence, including symbolic and probabilistic reasoning, machine learning, optimization, and perception. Units
07-280Artificial Intelligence and Machine Learning I12
10-301Introduction to Machine Learning12
11-411Natural Language Processing12
11-485Introduction to Deep Learning9
15-281Artificial Intelligence: Representation and Problem Solving12
15-382Collective Intelligence
(Note: 15-382 is ONLY offered at Carnegie Mellon in Qatar.)
9
15-386Neural Computation9
16-384Robot Kinematics and Dynamics12
16-385Computer Vision12
One Domains elective (minimum 9 units). Students will gain expertise in fundamental principles from a larger domain of computer science not already represented by other constrained categories, currently logic and languages, systems, and artificial intelligence (which includes machine learning, language technologies, and robotics). Students will be able to apply theoretical and computational techniques from the Computer Science core to an introductory study of another major subarea of Computer Science. Units
02-251Great Ideas in Computational Biology
or 02-180 & 02-181
12
05-391Designing Human Centered Software12
11-324Human Language for Artificial Intelligence12
15-322Introduction to Computer Music9
15-330Introduction to Computer Security12
15-362Computer Graphics12
15-455Undergraduate Complexity Theory9
17-313Foundations of Software Engineering12
One Logic & Languages elective (minimum 9 units). Students will master techniques for rigorous, formal reasoning about programs or systems, rooted in their logical foundations. Units
15-311Logic and Mechanized Reasoning9
15-312Foundations of Programming Languages12
15-316Software Foundations of Security and Privacy9
15-317Constructive Logic9
15-414Bug Catching: Automated Program Verification9
17-355Program Analysis12
17-363Programming Language Pragmatics12
80-413Category Theory9
One Systems elective (minimum 12 units). Students will 1. be able to describe how the properties of modern hardware (e.g., processor architecture, networks, storage) influence the design and implementation of software systems, such as through reasoning about concurrency and performance. 2. be able to analyze failures and / or resource limitations of physical systems and plan for their mitigation or management. 3. be able to develop abstractions based on lower-level primitives to manage the failures or other difficulties inherent in working with hardware. 4. demonstrate their learning through significant project / system implementations, requiring both course-specific knowledge as well as general system-building skills (i.e., not just programming, but also design, debugging, testing, etc.). The programming tasks together constitute a significant fraction of the course grade (e.g., 40% or more). Units
15-410Operating System Design and Implementation15
15-411Compiler Design15
15-418Parallel Computer Architecture and Programming12
15-440Distributed Systems12
15-441Networking and the Internet12
15-445Database Systems12
Two School of Computer Science electives (minimum 18 units):
These electives can be from any SCS department (Computer Science [15-xxx], Computational Biology [02-xxx], Human-Computer Interaction [05-xxx], Machine Learning [10-xxx], Language Technologies [11-xxx], Robotics [16-xxx], or Software & Societal Systems [17-xxx]). They must be 200-level or above and at least 9 units each, with the following exceptions:18
ADDITION: 15-195 and 15-295 can be combined to count as one SCS elective.
DELETIONS: 1) the following courses do NOT count as SCS electives: 02-201, 02-223, 02-250, 02-261, 05-200, 11-423, 15-351, 16-211, 16-223, 16-224, 16-397, 16-480, 17-200, 17-333, 17-416, 17-562; 2) some IDeATe courses and some SCS undergraduate and graduate courses might not be allowed based on course content. Always consult with a CS undergraduate advisor before registration to determine eligibility for this requirement.

Math requirements (minimum 5 courses):

Units
All of the following courses:
21-120Differential and Integral Calculus10
21-122Integration and Approximation10
21-127Concepts of Mathematics12
or 21-128 Mathematical Concepts and Proofs
21-241Matrices and Linear Transformations11
or 21-242 Matrix Theory
21-259Calculus in Three Dimensions10
or 21-266 Vector Calculus for Computer Scientists
or 21-268 Multidimensional Calculus
or 21-269 Vector Analysis
Plus one of the following:
15-259Probability and Computing12
21-325Probability9
36-218Probability Theory for Computer Scientists9
36-226Introduction to Statistical Inference
(for students already taking 36-219 or 36-225)
9

Technical Communication requirement (1 course)

Learning Objectives:

  • Audience: Students will be able to analyze the audience or audiences of a work: who the stakeholders are, what those stakeholders are trying to accomplish, and how persuasive communication can help students achieve their goals.
  • Written Mechanics: Students will practice developing their professional writing voice, paying attention to spelling, grammar, style, and the use of visual information.  
  • Adaptation: Students will be able to adapt expert-level information for a general audience, across textual, graphical, and oral presentation.
  • Genres/Templates: Students will practice developing information in a variety of communication contexts, connecting areas of content in their own voice, and leading the reader through a cogent sequence of ideas while working within the constraints of a particular genre or template.
  • Peer Review: Students will practice reading and revising the work of themselves and their peers.
  • Oral Presentation Mechanics: Students will prepare for the real-time act of presenting to an audience, including delivery, practice, venue setup, and managing presentation support (slides, props, etc.).
  • Oral Presentation Development: Students will explore formal and informal modes of communication, selecting, organizing and explaining information for a real-time audience, and increasing clarity with use of structure and style.
  • Group Work: Students will practice skills to help them work as a team, stay on track, and produce a group deliverable.
One Technical Communications course: Units
07-300Research and Innovation in Computer Science9
17-200Ethics and Policy Issues in Computing9
76-270Writing for the Professions9

Double-Counting Restriction

Students pursuing an Additional Major in Computer Science must complete all requirements listed above. In addition, at most 5 of the 12 computer science requirements can be double counted toward all other declared majors and minors. The mathematics and technical communication requirements can be double counted without restriction. Students, especially from interdisciplinary majors or with multiple majors or minors, are urged to consult with the Computer Science Program Director or the Undergraduate Program Coordinator in the CS Undergraduate Office to determine double-counting restrictions specific to their own situations.

Computer Science Minor

Students interested in pursuing a minor in Computer Science should first consult with the Program Coordinator in the CS Undergraduate Office after completion of the prerequisites, 15-12215-150 and with at least one of the 200-level required courses in progress. Students are expected to complete all courses for the minor with a C or higher (for a minor average QPA of 2.0 or higher).

The following courses are required for the Minor in Computer Science:

Prerequisites: Units
15-112Fundamentals of Programming and Computer Science
(some students may need to take 15-110 prior to 15-112 for additional preparation)
12
21-127Concepts of Mathematics12
or 21-128 Mathematical Concepts and Proofs
Computer Science core courses:
15-122Principles of Imperative Computation12
15-150Principles of Functional Programming12
15-210Parallel and Sequential Data Structures and Algorithms12
One of the following Computer Science core courses:
15-213Introduction to Computer Systems12
15-251Great Ideas in Theoretical Computer Science12
Two additional Computer Science electives, of at least 9 units each:
CS elective courses must be 15-213 or higher, at least 9-units each. 15-351 cannot be used, nor can these SCS courses: 02-201, 02-223, 02-250, 02-261, 05-200, 11-423, 16-211, 16-223, 16-224, 16-397, 16-480, 17-200, 17-333, 17-416, 17-562, as well as IDeATe courses in SCS (if they are primarily non-technical). One course can be from any other SCS department besides the Computer Science Department, with prior approval.18
Note: students who have to take 15-213/18-213 or 15-251 as part of another degree program are required to replace that CS core course requirement with another CS elective (15-xxx) as defined above, for a total of 3 additional CS electives.

Double-Counting Restriction

Students may double-count a maximum of 2 courses for the CS minor (not including the prerequisites) toward all other majors and minors. Students, especially from computing-related majors, interdisciplinary majors or with multiple majors or minors, are urged to consult with the Computer Science Program Director or the Undergraduate Program Coordinator in the CS Undergraduate Office to review double-counting restrictions specific to their own situations.

Computer Science Courses

About Course Numbers:

Each Carnegie Mellon course number begins with a two-digit prefix that designates the department offering the course (i.e., 76-xxx courses are offered by the Department of English). Although each department maintains its own course numbering practices, typically, the first digit after the prefix indicates the class level: xx-1xx courses are freshmen-level, xx-2xx courses are sophomore level, etc. Depending on the department, xx-6xx courses may be either undergraduate senior-level or graduate-level, and xx-7xx courses and higher are graduate-level. Consult the Schedule of Classes each semester for course offerings and for any necessary pre-requisites or co-requisites.


The Undergraduate Computer Science Program is a college-wide program, administered by all departments of the School of Computer Science. However, for brevity's sake, this page lists only courses from the Computer Science Department. Students are highly encouraged to explore courses offered by the entire college. Descriptions for all School of Computer Science courses can be found under the School of Computer Science.

15-050 Study Abroad
All Semesters
Students who are interested in studying abroad should first contact the Office of International Education. More information on Study Abroad is available on OIE's Study Abroad page and at the CS Undergraduate Office.
15-090 Computer Science Practicum
All Semesters: 3 units
This course is for Computer Science students who wish to have an internship experience as part of their curriculum. Students are required to write a one-page summary statement prior to registration that explains how their internship connects with their CS curriculum, specifically on how it uses material they have learned as well as prepares them for future courses. Near the end of the internship, students will be required to submit a reflection paper that describes the work they did in more detail, including lessons learned about the work experience and how they utilized their CS education to work effectively. International students should consult with the Office of International Education for appropriate paperwork and additional requirements before registration. Units earned count toward the total required units necessary for degree completion; students should speak with an academic advisor for details. This course may be taken at most 3 times for a total of 9 units maximum. Students normally register for this course for use during the summer semester.
15-104 Introduction to Computing for Creative Practice
Fall: 10 units
An introduction to fundamental computing principles and programming techniques for creative cultural practices, with special consideration to applications in music, design and the visual arts. Intended for students with little to no prior programming experience, the course develops skills and understanding of text-based programming in a procedural style, including idioms of sequencing, selection, iteration, and recursion. Topics include data organization (arrays, files, trees), interfaces and abstraction (modular software design, using sensor data and software libraries), basic algorithms (searching and sorting), and computational principles (randomness, concurrency, complexity). Intended for students participating in IDeATe courses or minors who have not taken 15-112.

Course Website: https://csd.cs.cmu.edu/course-profiles/15-104-Introduction-to-Computing-for-Creative-Practice
15-110 Principles of Computing
All Semesters: 10 units
A course in fundamental computing principles for students with minimal or no computing background. Programming constructs: sequencing, selection, iteration, and recursion. Data organization: arrays and lists. Use of abstraction in computing: data representation, computer organization, computer networks, functional decomposition, and application programming interfaces. Use of computational principles in problem-solving: divide and conquer, randomness, and concurrency. Classification of computational problems based on complexity, non-computable functions, and using heuristics to find reasonable solutions to complex problems. Social, ethical and legal issues associated with the development of new computational artifacts will also be discussed.

Course Website: https://www.cs.cmu.edu/~15110/
15-112 Fundamentals of Programming and Computer Science
All Semesters: 12 units
A technical introduction to the fundamentals of programming with an emphasis on producing clear, robust, and reasonably efficient code using top-down design, informal analysis, and effective testing and debugging. Starting from first principles, we will cover a large subset of the Python programming language, including its standard libraries and programming paradigms. We will also target numerous deployment scenarios, including standalone programs, shell scripts, and web-based applications. This course assumes no prior programming experience. Even so, it is a fast-paced and rigorous preparation for 15-122. Students seeking a more gentle introduction to computer science should consider first taking 15-110. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.

Course Website: https://www.cs.cmu.edu/~112/
15-121 Introduction to Data Structures
Fall: 10 units
A continuation of the process of program design and analysis for students with some prior programming experience (functions, loops, and arrays, not necessarily in Java). The course reinforces object-oriented programming techniques in Java and covers data aggregates, data structures (e.g., linked lists, stacks, queues, trees, and graphs), and an introduction to the analysis of algorithms that operate on those data structures.
Prerequisite: 15-112
Course Website: http://www.cs.cmu.edu/~mjs/121/index.html
15-122 Principles of Imperative Computation
All Semesters: 12 units
For students with a basic understanding of programming (variables, expressions, loops, arrays, functions). Teaches imperative programming and methods for ensuring the correctness of programs. Students will learn the process and concepts needed to go from high-level descriptions of algorithms to correct imperative implementations, with specific application to basic data structures and algorithms. Much of the course will be conducted in a subset of C amenable to verification, with a transition to full C near the end. This course prepares students for 15-213 and 15-210. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.
Prerequisite: 15-112 Min. grade C

Course Website: http://www.cs.cmu.edu/~15122/home.shtml
15-131 Great Practical Ideas for Computer Scientists
Fall: 2 units
THIS COURSE IS OPEN TO CS FRESHMAN ONLY. Throughout your education as a Computer Scientist at Carnegie Mellon, you will take courses on programming, theoretical ideas, logic, systems, etc. As you progress, you will be expected to pick up the so-called "tools of the trade." This course is intended to help you learn what you need to know in a friendly, low-stress, high-support way. We will discuss UNIX, LaTeX, debugging and many other essential tools. Laptop required. (Laptops will be available for those without their own laptops.)

Course Website: https://www.cs.cmu.edu/~15131/f17/
15-150 Principles of Functional Programming
All Semesters: 12 units
An introduction to programming based on a "functional" model of computation. The functional model is a natural generalization of algebra in which programs are formulas that describe the output of a computation in terms of its inputs and #8212;-that is, as a function. But instead of being confined to real- or complex-valued functions, the functional model extends the algebraic view to a very rich class of data types, including not only aggregates built up from other types, but also functions themselves as values. This course is an introduction to programming that is focused on the central concepts of function and type. One major theme is the interplay between inductive types, which are built up incrementally; recursive functions, which compute over inductive types by decomposition; and proof by structural induction, which is used to prove the correctness and time complexity of a recursive function. Another major theme is the role of types in structuring large programs into separate modules, and the integration of imperative programming through the introduction of data types whose values may be altered during computation. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.
Prerequisites: (15-151 Min. grade C or 21-127 Min. grade C or 21-128 Min. grade C) and 15-112 Min. grade C

Course Website: http://www.cs.cmu.edu/~15150/
15-151 Mathematical Foundations for Computer Science
Fall: 12 units
*CS majors only* This course is offered to incoming Computer Science freshmen and focuses on the fundamental concepts in Mathematics that are of particular interest to Computer Science such as logic, sets,induction, functions, and combinatorics. These topics are used as a context in which students learn to formalize arguments using the methods of mathematical proof. This course uses experimentation and collaboration as ways to gain better understanding of the material. Open to CS freshmen only. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.
Prerequisite: 21-120
Course Website: https://www.math.cmu.edu/~jmackey/151_128/welcome.html
15-182 Artificial Intelligence for Medicine
Intermittent: 6 units
This course introduces Artificial Intelligence (AI) and its recent applications in medicine for students with no background in computer science. It starts by motivating and defining AI, before folding over to a survey of some of its newest applications to medicine, including diagnosis, prognosis, drug discovery, and recommendations of individualized treatments, to mention just a few. Afterwards, it provides a birds-eye view of some of the major AI techniques, including machine learning, deep neural networks, recommendation systems, ranked retrieval, and probabilistic graphical models. Finally, it concludes with a discussion on some of the concerns related to AI, including ethical issues, job security, society, and healthcare institutions, among others
15-195 Competition Programming I
All Semesters: 5 units
Each year, Carnegie Mellon fields several teams for participation in the ICPC Regional Programming Contest. During many recent years, one of those teams has earned the right to represent Carnegie Mellon at the ICPC World Finals. This course is a vehicle for those who consistently and rigorously train in preparation for the contests to earn course credit for their effort and achievement. Preparation involves the study of algorithms, the practice of programming and debugging, the development of test sets, and the growth of team, communication, and problem solving skills. Neither the course grade nor the number of units earned are dependent on ranking in any contest. Students are not required to earn course credit to participate in practices or to compete in ACM-ICPC events. Students who have not yet taken 15-295 should register for 15-195; only students who have already taken 15-295 should register for 15-295 again.
Prerequisite: 15-122 Min. grade C
15-210 Parallel and Sequential Data Structures and Algorithms
Fall and Spring: 12 units
Teaches students about how to design, analyze, and program algorithms and data structures. The course emphasizes parallel algorithms and analysis, and how sequential algorithms can be considered a special case. The course goes into more theoretical content on algorithm analysis than 15-122 and 15-150 while still including a significant programming component and covering a variety of practical applications such as problems in data analysis, graphics, text processing, and the computational sciences. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course. Register for Lecture 1. All students will be waitlisted for Lecture 2 until Lecture 1 is full.
Prerequisites: 15-122 Min. grade C and 15-150 Min. grade C

Course Website: http://www.cs.cmu.edu/~15210/
15-213 Introduction to Computer Systems
All Semesters: 12 units
This course provides a programmer's view of how computer systems execute programs, store information, and communicate. It enables students to become more effective programmers, especially in dealing with issues of performance, portability and robustness. It also serves as a foundation for courses on compilers, networks, operating systems, and computer architecture, where a deeper understanding of systems-level issues is required. Topics covered include: machine-level code and its generation by optimizing compilers, performance evaluation and optimization, computer arithmetic, memory organization and management, networking technology and protocols, and supporting concurrent computation. NOTE FOR GRADUATE STUDENTS: This course is not open to graduate students beginning Spring 2015. Graduate students must register for 15-513 instead.
Prerequisite: 15-122 Min. grade C

Course Website: https://www.cs.cmu.edu/~213/
15-251 Great Ideas in Theoretical Computer Science
Fall and Spring: 12 units
This course is about how to use theoretical ideas to formulate and solve problems in computer science. It integrates mathematical material with general problem solving techniques and computer science applications. Examples are drawn from algorithms, complexity theory, game theory, probability theory, graph theory, automata theory, algebra, cryptography, and combinatorics. Assignments involve both mathematical proofs and programming. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course.
Prerequisites: (15-122 Min. grade C or 15-150 Min. grade C) and (15-151 Min. grade C or 21-128 Min. grade C or 21-127 Min. grade C)

Course Website: https://www.cs251.com
15-259 Probability and Computing
Spring: 12 units
Probability theory is indispensable in computer science today. In areas such as artificial intelligence and computer science theory, probabilistic reasoning and randomization are central. Within networks and systems, probability is used to model uncertainty and queuing latency. This course gives an introduction to probability as it is used in computer science theory and practice, drawing on applications and current research developments as motivation. The course has 3 parts: Part I is an introduction to probability, including discrete and continuous random variables, heavy tails, simulation, Laplace transforms, z-transforms, and applications of generating functions. Part II is an in-depth coverage of concentration inequalities, like the Chernoff bound and SLLN bounds, as well as their use in randomized algorithms. Part III covers Markov chains (both discrete-time and continuous-time) and stochastic processes and their application to queuing systems performance modeling. This is a fast-paced class which will cover more material than the other probability options and will cover it in greater depth.
Prerequisites: (21-266 Min. grade C or 21-268 Min. grade C or 21-259 Min. grade C or 16-211 Min. grade C) and (15-251 Min. grade C or 21-127 Min. grade B or 21-128 Min. grade B or 15-151 Min. grade B)

Course Website: https://www.cs.cmu.edu/~harchol/PnC/class.html
15-281 Artificial Intelligence: Representation and Problem Solving
Fall and Spring: 12 units
This course is about the theory and practice of Artificial Intelligence. We will study modern techniques for computers to represent task-relevant information and make intelligent (i.e. satisficing or optimal) decisions towards the achievement of goals. The search and problem solving methods are applicable throughout a large range of industrial, civil, medical, financial, robotic, and information systems. We will investigate questions about AI systems such as: how to represent knowledge, how to effectively generate appropriate sequences of actions and how to search among alternatives to find optimal or near-optimal solutions. We will also explore how to deal with uncertainty in the world, how to learn from experience, and how to learn decision rules from data. We expect that by the end of the course students will have a thorough understanding of the algorithmic foundations of AI, how probability and AI are closely interrelated, and how automated agents learn. We also expect students to acquire a strong appreciation of the big-picture aspects of developing fully autonomous intelligent agents. Other lectures will introduce additional aspects of AI, including natural language processing, web-based search engines, industrial applications, autonomous robotics, and economic/game-theoretic decision making.
Prerequisites: 15-122 Min. grade C and (18-202 Min. grade C or 21-241 Min. grade C or 21-240 Min. grade C or 21-254 Min. grade C) and (21-127 Min. grade C or 21-128 Min. grade C or 15-151 Min. grade C)

Course Website: https://www.cs.cmu.edu/~15281/
15-282 Artificial Intelligence for Medicine
Intermittent: 10 units
This course introduces Artificial Intelligence (AI) and its recent applications in medicine for students with only a little background in computer science. It starts by motivating and defining AI, before folding over to a survey of some of its newest applications to medicine, including diagnosis, prognosis, drug discovery, and recommendations of individualized treatments, to mention just a few. Afterwards, it provides a birds-eye view of some of the major AI techniques, including machine learning, deep neural networks, recommendation systems, ranked retrieval, and probabilistic graphical models. Finally, it concludes with a discussion on some of the concerns related to AI, including ethical issues, job security, society, and healthcare institutions, among others. The course comprises a balance of lectures, case studies, live demonstrations of some medical AI applications, problem-solving and amp; programming assignments, and research tasks. The students will be exposed to industry- and research-based perspectives on AI for medicine. In addition, they will learn through a course project the nuances of working with medical data and applying AI models to solve concrete problems in healthcare.
Prerequisite: 15-112 Min. grade C
15-288 Special Topic: Machine Learning in a Nutshell
Fall and Spring: 9 units
THIS COURSE RUNS IN CMU QATAR ONLY. This course is about the application of machine learning (ML) concepts and models to solve challenging real-world problems. The emphasis of the course is on the methodological and practical aspects of designing, implementing, and using ML solutions. Course topics develop around the notion of ML process pipeline, that identifies the multi-staged process of building and deploying an ML solution. An ML pipeline includes: de nition of the problem, objectives, and performance metrics; collection and management of relevant operational data; data wrangling (transforming, cleaning, ltering, scaling); perform feature engineering on the available data in terms of feature selection, feature extraction, feature processing; selection of appropriate ML models based on problem requirements and available data; implementation, application, testing, and evaluation of the selected model(s); deployment of the final ML model. The course tackles all the stages of the ML pipeline, presenting conceptual insights and providing algorithmic and software tools to select and implement effective ways of proceeding and dealing with the challenges of the different stages.
Prerequisite: 15-112 Min. grade C
15-292 History of Computing
Spring: 5 units
This course traces the history of computational devices, pioneers and principles from the early ages through the present. Topics include early computational devices, mechanical computation in the 19th century, events that led to electronic computing advances in the 20th century, the advent of personal computing and the Internet, and the social, legal and ethical impact of modern computational artifacts. This course also includes a history of programming languages, operating systems, processors and computing platforms. Students should have an introductory exposure to programming prior to taking this course.
Prerequisites: (76-102 or 76-108 or 76-107 or 76-101 or 76-106) and (15-110 or 15-150 or 15-112 or 15-122)
15-294 Special Topic: Rapid Prototyping Technologies
Fall and Spring: 5 units
This mini-course introduces students to rapid prototyping technologies with a focus on laser cutting and 3D printing. The course has three components: 1) A survey of rapid prototyping and additive manufacturing technologies, the maker and open source movements, and societal impacts of these technologies; 2) An introduction to the computer science behind these technologies: CAD tools, file formats, slicing algorithms; 3) Hands-on experience with SolidWorks, laser cutting, and 3D printing, culminating in student projects (e.g. artistic creations, functional objects, replicas of famous calculating machines, etc.).
Prerequisites: 15-110 Min. grade C or 15-104 Min. grade C or 15-112 Min. grade C

Course Website: https://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15294-f21/
15-295 Competition Programming II
Fall and Spring: 5 units
Each year, Carnegie Mellon fields several teams for participation in the ICPC Regional Programming Contest. During many recent years, one of those teams has earned the right to represent Carnegie Mellon at the ICPC World Finals. This course is a vehicle for those who consistently and rigorously train in preparation for the contests to earn course credit for their effort and achievement. Preparation involves the study of algorithms, the practice of programming and debugging, the development of test sets, and the growth of team, communication, and problem solving skills. Neither the course grade nor the number of units earned are dependent on ranking in any contest. Students are not required to earn course credit to participate in practices or to compete in ACM-ICPC events. Students who have not yet taken 15-295 should register for 15-195; only students who have already taken 15-295 should register for 15-295 again.
Prerequisites: (15-295 Min. grade C or 15-195 Min. grade C) and 15-122 Min. grade C

Course Website: https://contest.cs.cmu.edu/295/
15-311 Logic and Mechanized Reasoning
All Semesters: 9 units
Symbolic logic is fundamental to computer science, providing a foundation for the theory of programming languages, database theory, AI, knowledge representation, automated reasoning, interactive theorem proving, and formal verification. Formal methods based on logic complement statistical methods and machine learning by providing rules of inference and means of representation with precise semantics. These methods are central to hardware and software verification, and have also been used to solve open problems in mathematics. This course will introduce students to logic on three levels: theory, implementation, and application. It will focus specifically on applications to automated reasoning and interactive theorem proving. We will present the underlying mathematical theory, and students will develop the mathematical skills that are needed to design and reason about logical systems in a rigorous way. We will also show students how to represent logical objects in a functional programming language, Lean, and how to implement fundamental logical algorithms. We will show students how to use contemporary automated reasoning tools, including SAT solvers, SMT solvers, and first-order theorem provers to solve challenging problems. Finally, we will show students how to use Lean as an interactive theorem prover.
Prerequisites: (21-127 Min. grade C or 15-151 Min. grade C or 21-128 Min. grade C) and 15-150 Min. grade C
15-312 Foundations of Programming Languages
Fall and Spring: 12 units
This course discusses in depth many of the concepts underlying the design, definition, implementation, and use of modern programming languages. Formal approaches to defining the syntax and semantics are used to describe the fundamental concepts underlying programming languages. A variety of programming paradigms are covered such as imperative, functional, logic, and concurrent programming. In addition to the formal studies, experience with programming in the languages is used to illustrate how different design goals can lead to radically different languages and models of computation.
Prerequisites: 15-150 Min. grade C and (15-251 Min. grade C or 21-228 Min. grade C)
15-316 Software Foundations of Security and Privacy
Fall: 9 units
Security and privacy issues in computer systems continue to be a pervasive issue in technology and society. Understanding the security and privacy needs of software, and being able to rigorously demonstrate that those needs are met, is key to eliminating vulnerabilities that cause these issues. Students who take this course will learn the principles needed to make these assurances about software, and some of the key strategies used to make sure that they are correctly implemented in practice. Topics include: policy models and mechanisms for confidentiality, integrity, and availability, language-based techniques for detecting and preventing security threats, mechanisms for enforcing privacy guarantees, and the interaction between software and underlying systems that can give rise to practical security threats. Students will also gain experience applying many of these techniques to write code that is secure by construction.
Prerequisite: 15-213 Min. grade C

Course Website: https://15316-cmu.github.io/2023/index.html
15-317 Constructive Logic
Fall and Spring: 9 units
This multidisciplinary junior-level course is designed to provide a thorough introduction to modern constructive logic, its roots in philosophy, its numerous applications in computer science, and its mathematical properties. Some of the topics to be covered are intuitionistic logic, inductive definitions, functional programming, type theory, realizability, connections between classical and constructive logic, decidable classes.
Prerequisite: 15-150 Min. grade C

Course Website: https://lfcps.org/course/constlog.html
15-319 Cloud Computing
Fall and Spring: 12 units
This course gives students an overview of Cloud Computing, which is the delivery of computing as a service over a network, whereby distributed resources are rented, rather than owned, by an end user as a utility. Students will study its enabling technologies, building blocks, and gain hands-on experience through projects utilizing public cloud infrastructures. Cloud computing services are widely adopted by many organizations across domains. The course will introduce the cloud and cover the topics of data centers, software stack, virtualization, software defined networks and storage, cloud storage, and programming models. We will start by discussing the clouds motivating factors, benefits, challenges, service models, SLAs and security. We will describe several concepts behind data center design and management, which enable the economic and technological benefits of the cloud paradigm. Next, we will study how CPU, memory and I/O resources, network (SDN) and storage (SDS) are virtualized, and the key role of virtualization to enable the cloud. Subsequently, students will study cloud storage concepts like data distribution, durability, consistency and redundancy. We will discuss distributed file systems, NoSQL databases and object storage using HDFS, CephFS, HBASE, MongoDB, Cassandra, DynamoDB, S3, and Swift as case studies. Finally, students will study the MapReduce, Spark and GraphLab programming models. Students will work with Amazon Web Services and Microsoft Azure, to rent and provision compute resources and then program and deploy applications using these resources. Students will develop and evaluate scaling and load balancing solutions, work with cloud storage systems, and develop applications in several programming paradigms. 15619 students must complete an extra team project which entails designing and implementing a cost- and performance-sensitive web-service for querying big data.
Prerequisite: 15-213 Min. grade C

Course Website: https://www.cs.cmu.edu/~msakr/15619-s23/
15-322 Introduction to Computer Music
Spring: 9 units
Computers are used to synthesize sound, process signals, and compose music. Personal computers have replaced studios full of sound recording and processing equipment, completing a revolution that began with recording and electronics. In this course, students will learn the fundamentals of digital audio, basic sound synthesis algorithms, and techniques for digital audio effects and processing. Students will apply their knowledge in programming assignments using a very high-level programming language for sound synthesis and composition. In a final project, students will demonstrate their mastery of tools and techniques through music composition or by the implementation of a significant sound-processing technique.
Prerequisites: 15-122 Min. grade C or 15-112 Min. grade C

Course Website: https://courses.ideate.cmu.edu/15-322
15-326 Computational Microeconomics
Intermittent: 9 units
Use of computational techniques to operationalize basic concepts from economics. Expressive marketplaces: combinatorial auctions and exchanges, winner determination problem. Game theory: normal and extensive-form games, equilibrium notions, computing equilibria. Mechanism design: auction theory, automated mechanism design.
Prerequisites: (21-127 Min. grade C or 21-128 Min. grade C or 15-151 Min. grade C or 80-210 or 80-211 Min. grade C) and (36-218 or 36-225 or 36-235 or 21-325)
15-327 Monte Carlo Methods and Applications
Fall: 9 units
The Monte Carlo method uses random sampling to solve computational problems that would otherwise be intractable, and enables computers to model complex systems in nature that are otherwise too difficult to simulate. This course provides a first introduction to Monte Carlo methods from complementary theoretical and applied points of view, and will include implementation of practical algorithms. Topics include random number generation, sampling, Markov chains, Monte Carlo integration, stochastic processes, and applications in computational science. Students need a basic background in probability, multivariable calculus, and some coding experience in any language.
Prerequisites: (21-269 Min. grade C or 21-256 Min. grade C or 21-268 Min. grade C or 21-254 Min. grade C or 21-266 Min. grade C or 21-259 Min. grade C) and (15-259 Min. grade C or 21-325 Min. grade C or 36-218 Min. grade C or 36-225 Min. grade C or 36-235 Min. grade C or 18-465 Min. grade C or 36-219 Min. grade C)

Course Website: http://www.cs.cmu.edu/~kmcrane/random/
15-330 Introduction to Computer Security
Fall and Spring: 12 units
Security is becoming one of the core requirements in the design of critical systems. This course will introduce students to the intro-level fundamental knowledge of computer security and applied cryptography. Students will learn the basic concepts in computer security including software vulnerability analysis and defense, networking and wireless security, and applied cryptography. Students will also learn the fundamental methodology for how to design and analyze security critical systems.
Prerequisite: 15-213 Min. grade C

Course Website: https://www.andrew.cmu.edu/course/18-330/
15-346 Computer Architecture: Design and Simulation
Intermittent: 12 units
This course will help students develop an understanding of basic microarchitectural principles and designs. Starting with creating benchmarks and simulators, students will learn the practice of computer architecture design. The emphasis will be on how processors exploit instruction-level parallelism for performance, as well as the supporting technologies such as caches and branch prediction that are required. Several frontiers of current research will be explored in energy efficiency and security threats.
Prerequisite: 15-213 Min. grade C
15-348 Embedded Systems
Spring: 9 units
This course is offered only at Carnegie Mellon's campus in Qatar. This course covers the broad range of foundational skills that apply across all embedded computer system application areas, from thermostats to self-driving vehicles. The emphasis is at the layer where hardware meets software. Topics include microcontroller hardware, assembly language, embedded C programming, analog I/O, timers, code optimization, interrupts, and concurrency. Real world engineering practices, constraints, and example applications are integrated throughout the course. Weekly hands-on hardware and software experiences with an industry-strength automotive embedded controller are coordinated with the lecture content to reinforce core skills.
Prerequisite: 15-122 Min. grade C
15-351 Algorithms and Advanced Data Structures
Fall and Spring: 12 units
The objective of this course is to study algorithms for general computational problems, with a focus on the principles used to design those algorithms. Efficient data structures will be discussed to support these algorithmic concepts. Topics include: Run time analysis, divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithms, linear and integer programming, large-scale search algorithms and heuristics, efficient data storage and query, and NP-completeness. Although this course may have a few programming assignments, it is primarily not a programming course. Instead, it will focus on the design and analysis of algorithms for general classes of problems. This course is not open to CS graduate students who should consider taking 15-651 instead. THIS COURSE IS NOT OPEN TO COMPUTER SCIENCE MAJORS OR MINORS.
Prerequisites: 15-121 or 15-122
Course Website: https://www.csd.cs.cmu.edu/course-profiles/15-351-Algorithms-and-Advanced-Data-Structures
15-354 Computational Discrete Mathematics
Fall: 12 units
This course is about the computational aspects of some of the standard concepts of discrete mathematics (relations, functions, logic, graphs, algebra, automata), with emphasis on efficient algorithms. We begin with a brief introduction to computability and computational complexity. Other topics include: iteration, orbits and fixed points, order and equivalence relations, propositional logic and satisfiability testing, finite fields and shift register sequences, finite state machines, and cellular automata. Computational support for some of the material is available in the form of a Mathematica package.
Prerequisites: 15-251 Min. grade C or 21-228 Min. grade C

Course Website: http://www.cs.cmu.edu/~cdm/
15-355 Modern Computer Algebra
Spring: 9 units
The goal of this course is to investigate the relationship between algebra and computation. The course is designed to expose students to algorithms used for symbolic computation, as well as to the concepts from modern algebra which are applied to the development of these algorithms. This course provides a hands-on introduction to many of the most important ideas used in symbolic mathematical computation, which involves solving system of polynomial equations (via Groebner bases), analytic integration, and solving linear difference equations. Throughout the course the computer algebra system Mathematica will be used for computation.
Prerequisites: 21-228 Min. grade C or 15-251 Min. grade C

Course Website: http://www.andrew.cmu.edu/course/15-355/
15-356 Introduction to Cryptography
Spring: 12 units
This course is aimed as an introduction to modern cryptography. This course will be a mix of applied and theoretical cryptography. We will cover popular primitives such as: pseudorandom functions, encryption, signatures, zero-knowledge proofs, multi-party computation, and Blockchains. In addition, we will cover the necessary number-theoretic background. We will cover formal definitions of security, as well as constructions based on well established assumptions like factoring. Please see the course webpage for a detailed list of topics.
Prerequisites: 15-251 Min. grade C or 21-228
Course Website: http://www.cs.cmu.edu/~goyal/15356/
15-359 Probability & Computing: Randomized Algs and Markov Chains
Intermittent: 12 units
Probability theory has become indispensable in computer science. In areas such as artificial intelligence and computer science theory, probabilistic methods and ideas based on randomization are central. In other areas such as networks and systems, probability is becoming an increasingly useful framework for handling uncertainty and modeling the patterns of data that occur in complex systems. This course is a follow-up course to 15-259, Probability and Computing. It will cover Chapters 18-27 of the same textbook, "Introduction to Probability for Computing", by Prof. Harchol-Balter. Topics include concentration inequalities, various randomized algorithms including number theoretic routines, Markov chains and their many applications, and queuing theory. The course will assume familiarity with multivariate calculus and linear algebra.
Prerequisites: 15-259 Min. grade C or 21-325 Min. grade C
15-362 Computer Graphics
Fall and Spring: 12 units
This course provides a comprehensive introduction to computer graphics modeling, animation, and rendering. Topics covered include basic image processing, geometric transformations, geometric modeling of curves and surfaces, animation, 3-D viewing, visibility algorithms, shading, and ray tracing.
Prerequisites: (15-122 Min. grade C and 21-122 Min. grade C and 21-240 Min. grade C) or (21-122 Min. grade C and 21-241 Min. grade C and 15-122 Min. grade C) or (21-254 Min. grade C and 15-122 Min. grade C) or (15-122 Min. grade C and 18-202 Min. grade C)
15-367 Algorithmic Textiles Design
Intermittent: 12 units
Textile artifacts are and #8212; quite literally and #8212; all around us; from clothing to carpets to car seats. These items are often produced by sophisticated, computer-controlled fabrication machinery. In this course we will discuss everywhere code touches textiles fabrication, including design tools, simulators, and machine control languages. Students will work on a series of multi-week, open-ended projects, where they use code to create patterns for modern sewing/embroidery, weaving, and knitting machines; and then fabricate these patterns in the textiles lab. Students in the 800-level version of the course will additionally be required to create a final project that develops a new algorithm, device, or technique in textiles fabrication.

Course Website: http://graphics.cs.cmu.edu/courses/15-869K-s21/
15-369 Special Topic Numerical Computing
Intermittent: 12 units
Many problems in science, engineering, and computer graphics cannot be solved exactly. Numerical computing provides methods to approximate these solutions using computational techniques. It combines mathematics and programming to solve real-world problems such as simulations, optimization, and data analysis. The course begins with a review of key mathematical concepts like vector spaces, matrices, and calculus. We then explore how numbers are represented on computers, the types of errors that can occur, and strategies to handle them. Core topics include solving linear and nonlinear systems, eigenvalue problems, optimization, and techniques such as LU decomposition, QR factorization, and singular value decomposition (SVD). We will also cover iterative methods for large systems, interpolation, numerical differentiation, integration, and both ordinary and partial differential equations. Students will gain hands-on experience implementing algorithms and learn to balance accuracy, stability, and efficiency in computational solutions.
Prerequisites: 21-259 Min. grade C and 21-241 Min. grade C and 15-122 Min. grade C
15-382 Collective Intelligence
Spring: 9 units
This course is about the study of distributed control and intelligence systems involving a large number of autonomous components that interact with each other, dynamically adapting to their changing environment as a result of mutual interactions. Examples of such components include cars in city traffic, pedestrians moving in crowds, firms competing in a market, ants foraging for food, or mobile robots in a swarm or multi-robot system. Under certain conditions, such systems can produce useful system-level behaviors, display self-organized spatial-temporal patterns, effectively perform computations, information dissemination, and decision-making. Loosely speaking, when this happens we can say that the system is displaying a form of "collective intelligence". Collective intelligence will expose students to relevant mathematical and computational models from following fields and domains: Cellular automata and Random boolean networks, Social choice, Game theory, Distributed consensus, Task allocation, Swarm intelligence, Social networks, Pattern formation, and Self-organizing maps. The course will also help bridge the gap between theory and practice via assignments where students will implement system models and explore their properties in application domains of practical interest.
Prerequisites: 36-218 Min. grade C and 15-122 Min. grade C and 21-127 Min. grade C and 21-241 Min. grade C and 21-122 Min. grade C
15-386 Neural Computation
Spring: 9 units
Computational neuroscience is an interdisciplinary science that seeks to understand how the brain computes to achieve natural intelligence. It seeks to understand the computational principles and mechanisms of intelligent behaviors and mental abilities and #8212; such as perception, language, motor control, and learning and #8212; by building artificial systems and computational models with the same capabilities. This course explores how neurons encode and process information, adapt and learn, communicate, cooperate, compete and compute at the individual level as well as at the levels of networks and systems. It will introduce basic concepts in computational modeling, information theory, signal processing, system analysis, statistical and probabilistic inference. Concrete examples will be drawn from the visual system and the motor systems, and studied from computational, psychological and biological perspectives. Students will learn to perform computational experiments using Matlab and quantitative studies of neurons and neuronal networks.
Prerequisites: (15-122 Min. grade C or 15-112 Min. grade C) and 21-122
15-387 Computational Perception
Fall and Spring: 9 units
In this course, we will first cover the biological and psychological foundational knowledge of biological perceptual systems, and then apply computational thinking to investigate the principles and mechanisms underlying natural perception. The course will focus on vision this year, but will also touch upon other sensory modalities. You will learn how to reason scientifically and computationally about problems and issues in perception, how to extract the essential computational properties of those abstract ideas, and finally how to convert these into explicit mathematical models and computational algorithms. Topics include perceptual representation and inference, perceptual organization, perceptual constancy, object recognition, learning and scene analysis. Prerequisites: First year college calculus, some basic knowledge of linear algebra and probability and some programming experience are desirable.
Prerequisites: 21-241 and 21-122 and 15-112 Min. grade C
15-388 Practical Data Science
Intermittent: 9 units
Data science is the study and practice of how we can extract insight and knowledge from large amounts of data. This course provides a practical introduction to the "full stack" of data science analysis, including data collection and processing, data visualization and presentation, statistical model building using machine learning, and big data techniques for scaling these methods. Topics covered include: collecting and processing data using relational methods, time series approaches, graph and network models, free text analysis, and spatial geographic methods; analyzing the data using a variety of statistical and machine learning methods include linear and non-linear regression and classification, unsupervised learning and anomaly detection, plus advanced machine learning methods like kernel approaches, boosting, or deep learning; visualizing and presenting data, particularly focusing the case of high-dimensional data; and applying these methods to big data settings, where multiple machines and distributed computation are needed to fully leverage the data.Students will complete weekly programming homework that emphasize practical understanding of the methods described in the course. In addition, students will develop a tutorial on an advanced topic, and will complete a group project that applies these data science techniques to a practical application chosen by the team; these two longer assignments will be done in lieu of a midterm or final.
Prerequisites: 15-122 Min. grade C or 15-112 Min. grade C

Course Website: http://www.datasciencecourse.org
15-390 Entrepreneurship for Computer Science
Fall: 9 units
This course is designed to develop skills related to entrepreneurship and innovation for non-business undergraduate and graduate students in the School of Computer Science. The course assumes no background courses in business and is appropriate for those who are interested in bringing innovations to market either through new companies or existing companies. The course provides an overview of entrepreneurship and innovation, develops an entrepreneurial frame of mind, and provides a framework for learning the rudiments of how to generate ideas. Students come up with or are presented with potential ideas and learn how to develop these ideas into opportunities, and to explore their potential for becoming viable businesses. They learn how to do market research, to develop go-to-market strategies, value propositions and to differentiate their products or services from potential competitors. The focus is on understanding and developing strategies for approaching the key elements of the entrepreneurial process...opportunity, resources and team. The course consists of a balance of lectures, case studies and encounters with entrepreneurs, investors and business professionals. The students are exposed to financial and intellectual property issues, and encounter a real world perspective on entrepreneurship, innovation and leadership. The output of the course is a mini-business plan or venture opportunity screening document that can be developed into a business plan in a subsequent course entitled New Venture Creation or through independent study.
Prerequisite: 15-112 Min. grade C
15-394 Intermediate Rapid Prototyping
Fall and Spring: 5 units
This course covers additional topics in rapid prototyping beyond the content of 15-294. Example topics include mechanism design, procedural shape generation using Grasshopper, 3D scanning and mesh manipulation, and advanced SolidWorks concepts. The only prerequisite is basic familiarity with SolidWorks, which can be obtained via 15-294, from other CMU courses, or from online tutorials.

Course Website: https://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15394-f21/
15-410 Operating System Design and Implementation
Fall and Spring: 15 units
Operating System Design and Implementation is a rigorous hands-on introduction to the principles and practice of operating systems. The core experience is writing a small Unix-inspired OS kernel, in C with some x86 assembly language, which runs on a PC hardware simulator (and on actual PC hardware if you wish). Work is done in two-person teams, and "team programming" skills (source control, modularity, documentation) are emphasized. The size and scope of the programming assignments typically result in students significantly developing their design, implementation, and debugging abilities. Core concepts include the process model, virtual memory, threads, synchronization, and deadlock; the course also surveys higher-level OS topics including file systems, interprocess communication, networking, and security. Students, especially graduate students, who have not satisfied the prerequisite at Carnegie Mellon are strongly cautioned - to enter the class you must be able to write a storage allocator in C, use a debugger, understand 2's-complement arithmetic, and translate between C and x86 assembly language. The instructor may require you to complete a skills assessment exercise before the first week of the semester in order to remain registered in the class. Auditing: this course is usually full, and we generally receive many more requests to audit than we can accept. If you wish to audit, please have your advisor contact us before the semester begins to discuss your educational goals.
Prerequisites: 15-441 Min. grade B or 15-411 Min. grade B or 15-418 Min. grade B or 18-447 Min. grade B or 15-445 Min. grade B or 15-440 Min. grade B

Course Website: https://www.cs.cmu.edu/~410/
15-411 Compiler Design
Spring: 15 units
This course covers the design and implementation of compiler and run-time systems for high-level languages, and examines the interaction between language design, compiler design, and run-time organization. Topics covered include syntactic and lexical analysis, handling of user-defined types and type-checking, context analysis, code generation and optimization, and memory management and run-time organization.
Prerequisite: 15-213 Min. grade C

Course Website: https://www.cs.cmu.edu/~411/
15-412 Operating System Practicum
Fall
The goal of this class is for students to acquire hands-on experience with operating-system code as it is developed and deployed in the real world. Groups of two to four students will select, build, install, and become familiar with an open-source operating system project; propose a significant extension or upgrade to that project; and develop a production-quality implementation meeting the coding standards of that project. Unless infeasible, the results will be submitted to the project for inclusion in the code base. Variations on this theme are possible at the discretion of the instructor. For example, it may be possible to work within the context of a non-operating-system software infrastructure project (window system, web server, or embedded network device kernel) or to extend a 15-410 student kernel. In some situations students may work alone. Group membership and unit count (9 units versus 12) will be decided by the third week of the semester. Contributing to a real-world project will involve engaging in some mixture of messy, potentially open-ended activities such as: learning a revision control system, writing a short design document, creating and updating a simple project plan, participating in an informal code review, synthesizing scattered information about hardware and software, classifying and/or reading large amounts of code written by various people over a long period of time, etc.
Prerequisite: 15-410
15-413 Advanced Foundations of Programming Languages
Intermittent: 12 units
An advanced follow-on to 15-312 developing further ideas and results in the theory of programming languages.
Prerequisite: 15-312 Min. grade B
15-414 Bug Catching: Automated Program Verification
Spring: 9 units
Many CS and ECE students will be developing software and hardware that must be ultra reliable at some point in their careers. Logical errors in such designs can be costly, even life threatening. There have already been a number of well publicized errors like the Intel Pentium floating point error and the Ariane 5 crash. In this course we will study tools for finding and preventing logical errors. Three types of tools will be studied: automated theorem proving, state exploration techniques like model checking and tools based on static program analysis. Although students will learn the theoretical basis for such tools, the emphasis will be on actually using them on real examples. This course can be used to satisfy the Logic and amp; Languages requirement for the Computer Science major.
Prerequisites: 15-122 Min. grade C and 15-251 Min. grade C

Course Website: http://www.cs.cmu.edu/~15414/
15-415 Database Applications
Fall: 12 units
This course covers the fundamental topics for Database Management Systems: Database System Architectural Principles (ACID properties; data abstraction; external, conceptual, and internal schemata; data independence; data definition and data manipulation languages), Data models (entity-relationship and relational data models; data structures, integrity constraints, and operations for each data model; relational query languages: SQL, algebra, calculus), Theory of database design (functional dependencies; normal forms; dependency preservation; information loss), Query Optimization (equivalence of expressions, algebraic manipulation; optimization of selections and joins), Storage Strategies (indices, B-trees, hashing), Query Processing (execution of sort, join, and aggregation operators), and Transaction Processing (recovery and concurrency control).
Prerequisites: 15-210 Min. grade C and 15-213 Min. grade C

Course Website: http://15415.courses.cs.cmu.edu/
15-417 HOT Compilation
Intermittent: 12 units
The course covers the implementation of compilers for higher-order, typed languages such as ML and Haskell, and gives an introduction to type-preserving compilation. Topics covered include type inference, elaboration, CPS conversion, closure conversion, garbage collection, phase splitting, and typed assembly language.
Prerequisites: 15-317 or 15-312
Course Website: https://www.cs.cmu.edu/~crary/hotc/
15-418 Parallel Computer Architecture and Programming
Fall and Spring: 12 units
The fundamental principles and engineering tradeoffs involved in designing modern parallel computers, as well as the programming techniques to effectively utilize these machines. Topics include naming shared data, synchronizing threads, and the latency and bandwidth associated with communication. Case studies on shared-memory, message-passing, data-parallel and dataflow machines will be used to illustrate these techniques and tradeoffs. Programming assignments will be performed on one or more commercial multiprocessors, and there will be a significant course project.
Prerequisite: 15-213 Min. grade C

Course Website: https://www.cs.cmu.edu/~15418/
15-423 Special Topic: Digital Signal Processing for Computer Science
Spring: 12 units
Digital signals comprise a large fraction of the data analyzed by computer scientists. Sound, e.g. speech and music, images, radar and many other signal types that were conventionally considered to be the domain of the Electrical engineer are now also in the domain of computer scientists, who must analyze them, make inferences, and develop machine learning techinques to analyze, classify and reconstruct such data. In this course we will cover the basics of Digital Signal Processing. We will concentrate on the basic mathematical formulations, rather than in-depth implementation details. We will cover the breadth of topics, beginning with the basics of signals and their representations, the theory of sampling, important transform representations, key processing techniques, and spectral estimation.
Prerequisites: (15-112 Min. grade C or 15-122 Min. grade C) and (15-359 or 21-325 or 36-217 or 36-225 or 36-625)
15-435 Foundations of Blockchains
Fall: 12 units
In this course, students will learn the mathematical foundations of blockchains, including how to construct distributed consensus protocols and prove them secure, cryptography for blockchains, and mechanism design for blockchains. This course will take a mathematically rigorous approach. Students are expected to have mathematical maturity and be able to write formal mathematical proofs. Students may also be expected to implement some consensus or cryptographic algorithms. This course is cross-listed with 15-635. Undergraduates should enroll in 15-435. Graduates students should enroll in 15-635.
Prerequisites: 15-330 or 15-210 Min. grade C or 15-251 Min. grade C
15-440 Distributed Systems
Fall and Spring: 12 units
The goals of this course are twofold: First, for students to gain an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Second, for students to gain practical experience designing, implementing, and debugging real distributed systems. The major themes this course will teach include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects. As a consequence, competency in both the C and Java programming languages is required.
Prerequisite: 15-213 Min. grade C

Course Website: https://www.andrew.cmu.edu/course/15-440/
15-441 Networking and the Internet
Fall: 12 units
The emphasis in this course will be on the basic performance and engineering trade-offs in the design and implementation of computer networks. To make the issues more concrete, the class includes several multi-week projects requiring significant design and implementation. The goal is for students to learn not only what computer networks are and how they work today, but also why they are designed the way they are and how they are likely to evolve in the future. We will draw examples primarily from the Internet. Topics to be covered include: network architecture, routing, congestion/flow/error control, naming and addressing, peer-to-peer and the web, internetworking, and network security.
Prerequisite: 15-213 Min. grade C
15-442 Machine Learning Systems
Spring: 12 units
The goal of this course is to provide students an understanding and overview of elements in modern machine learning systems. Throughout the course, the students will learn about the design rationale behind the state-of-the-art machine learning frameworks and advanced system techniques to scale, reduce memory, and offload heterogeneous compute resources. We will also run case studies of large-scale training and serving systems used in practice today. This course offers the necessary background for students who would like to pursue research in the area of machine learning systems or continue to work in machine learning engineering.
Prerequisites: (21-128 Min. grade C or 15-151 Min. grade C or 21-127 Min. grade C) and 21-241 Min. grade C and (10-301 or 10-315 or 10-701 or 11-485 or 15-281) and (15-213 Min. grade C or 18-213 Min. grade C or 15-513 Min. grade C or 18-600 Min. grade C)
15-445 Database Systems
Fall: 12 units
This course is on the design and implementation of database management systems. Topics include data models (relational, document, key/value), storage models (n-ary, decomposition), query languages (SQL, stored procedures), storage architectures (heaps, log-structured), indexing (order preserving trees, hash tables), transaction processing (ACID, concurrency control), recovery (logging, checkpoints), query processing (joins, sorting, aggregation, optimization), and parallel architectures (multi-core, distributed). Case studies on open-source and commercial database systems will be used to illustrate these techniques and trade-offs. The course is appropriate for students with strong systems programming skills.
Prerequisite: 15-213 Min. grade C

Course Website: http://15445.courses.cs.cmu.edu
15-451 Algorithm Design and Analysis
Fall and Spring: 12 units
This course is about the design and analysis of algorithms. We study specific algorithms for a variety of problems, as well as general design and analysis techniques. Specific topics include searching, sorting, algorithms for graph problems, efficient data structures, lower bounds and NP-completeness. A variety of other topics may be covered at the discretion of the instructor. These include parallel algorithms, randomized algorithms, geometric algorithms, low level techniques for efficient programming, cryptography, and cryptographic protocols.
Prerequisites: 15-210 Min. grade C and 21-241 Min. grade C and (21-228 Min. grade C or 15-251 Min. grade C)

Course Website: https://www.cs.cmu.edu/~15451-f24/
15-455 Undergraduate Complexity Theory
Fall and Spring: 9 units
Complexity theory is the study of how much of a resource (such as time, space, parallelism, or randomness) is required to perform some of the computations that interest us the most. In a standard algorithms course, one concentrates on giving resource efficient methods to solve interesting problems. In this course, we concentrate on techniques that prove or suggest that there are no efficient methods to solve many important problems. We will develop the theory of various complexity classes, such as P, NP, co-NP, PH, #P, PSPACE, NC, AC, L, NL, UP, RP, BPP, IP, and PCP. We will study techniques to classify problems according to our available taxonomy. By developing a subtle pattern of reductions between classes we will suggest an (as yet unproven!) picture of how by using limited amounts of various resources, we limit our computational power.
Prerequisite: 15-251 Min. grade C

Course Website: https://www.cs.cmu.edu/~15455/
15-457 Special Topics in Theory: Advanced Algorithms
Intermittent: 12 units
Selected advanced topics in algorithms and computational theory. Topics vary from semester to semester.
Prerequisite: 15-451 Min. grade B
15-458 Discrete Differential Geometry
Spring: 12 units
This course focuses on three-dimensional geometry processing, while simultaneously providing a first course in traditional differential geometry. Our main goal is to show how fundamental geometric concepts (like curvature) can be understood from complementary computational and mathematical points of view. This dual perspective enriches understanding on both sides, and leads to the development of practical algorithms for working with real-world geometric data. Along the way we will revisit important ideas from calculus and linear algebra, putting a strong emphasis on intuitive, visual understanding that complements the more traditional formal, algebraic treatment. The course provides essential mathematical background as well as a large array of real-world examples and applications. It also provides a short survey of recent developments in digital geometry processing and discrete differential geometry. Topics include: curves and surfaces, curvature, connections and parallel transport, exterior algebra, exterior calculus, Stokes' theorem, simplicial homology, de Rham cohomology, Helmholtz-Hodge decomposition, conformal mapping, finite element methods, and numerical linear algebra. Applications include: approximation of curvature, curve and surface smoothing, surface parameterization, vector field design, and computation of geodesic distance.
Prerequisites: (15-122 Min. grade C or 02-201 Min. grade C or 15-110 Min. grade C or 15-112 Min. grade C) and (21-240 Min. grade C or 21-254 Min. grade C or 21-242 Min. grade C or 21-341 Min. grade C or 21-241 Min. grade C) and (21-268 Min. grade C or 21-256 Min. grade C or 21-259 Min. grade C or 21-269 Min. grade C or 21-254 Min. grade C)

Course Website: http://geometry.cs.cmu.edu/ddg
15-459 Undergraduate Quantum Computation
Intermittent: 9 units
This undergraduate course will be an introduction to quantum computation and quantum information theory, from the perspective of theoretical computer science. Topics include: Qubit operations, multi-qubit systems, p=artial measurements, entanglement, quantum teleportation and quantum money, quantum circuit model, Deutsch-Jozsa and Simon's algorithm, number theory and Shor's Algorithm, Grover's Algorithm, quantum complexity theory, limitations and current practical developments.
Prerequisites: (15-251 Min. grade C or 15-210 Min. grade C) and (36-218 or 15-259 or 33-341 or 36-225 or 21-325) and (21-242 or 21-241 Min. grade C or 33-341)
15-463 Computational Photography
Fall: 12 units
Computational photography is the convergence of computer graphics, computer vision and imaging. Its role is to overcome the limitations of the traditional camera, by combining imaging and computation to enable new and enhanced ways of capturing, representing, and interacting with the physical world. This advanced undergraduate course provides a comprehensive overview of the state of the art in computational photography. At the start of the course, we will study modern image processing pipelines, including those encountered on mobile phone and DSLR cameras, and advanced image and video editing algorithms. Then we will proceed to learn about the physical and computational aspects of tasks such as 3D scanning, coded photography, lightfield imaging, time-of-flight imaging, VR/AR displays, and computational light transport. Near the end of the course, we will discuss active research topics, such as creating cameras that capture video at the speed of light, cameras that look around walls, or cameras that can see through tissue. The course has a strong hands-on component, in the form of seven homework assignments and a final project. In the homework assignments, students will have the opportunity to implement many of the techniques covered in the class, by both acquiring their own images of indoor and outdoor scenes and developing the computational tools needed to extract information from them. For their final projects, students will have the choice to use modern sensors provided by the instructors (lightfield cameras, time-of-flight cameras, depth sensors, structured light systems, etc.).
Prerequisites: 15-662 Min. grade C or 15-468 Min. grade C or 15-868 Min. grade C or 18-793 Min. grade C or 15-462 Min. grade C or 16-385 Min. grade C or 16-720 Min. grade C or 16-820 Min. grade C or 18-453 Min. grade C or 15-668 Min. grade C or 15-362 Min. grade C

Course Website: http://graphics.cs.cmu.edu/courses/15-463/
15-464 Technical Animation
Spring: 12 units
This course introduces techniques for computer animation such as keyframing, procedural methods, motion capture, and simulation. The course also includes a brief overview of story-boarding, scene composition, lighting and sound track generation. The second half of the course will explore current research topics in computer animation such as dynamic simulation of flexible and rigid objects,automatically generated control systems, and evolution of behaviors. The course should be appropriate for graduate students in all areas and for advanced undergraduates.
Prerequisites: 15-362 Min. grade C or 15-462 Min. grade C
15-466 Computer Game Programming
Fall: 12 units
The goal of this course is to acquaint students with the code required to turn ideas into games. This includes both runtime systems and #8212; e.g., AI, sound, physics, rendering, and networking and #8212; and the asset pipelines and creative tools that make it possible to author content that uses these systems. In the first part of the course, students will implement small games that focus on specific runtime systems, along with appropriate asset editors or exporters. In the second part, students will work in groups to build a larger, polished, open-ended game project. Students who have completed the course will have the skills required to extend and #8212; or build from scratch and #8212; a modern computer game. Students wishing to take this class should be familiar with the C++ language and have a basic understanding of the OpenGL API. If you meet these requirements but have not taken Computer Graphics (the formal prerequisite), please contact the instructor.
Prerequisites: 15-362 or 15-462

Course Website: http://graphics.cs.cmu.edu/courses/15-466/
15-468 Physics-Based Rendering
Spring: 12 units
This course is an introduction to physics-based rendering at the advanced undergraduate and introductory graduate level. During the course, we will cover fundamentals of light transport, including topics such as the rendering and radiative transfer equation, light transport operators, path integral formulations, and approximations such as diffusion and single scattering. Additionally, we will discuss state-of-the-art models for illumination, surface and volumetric scattering, and sensors. Finally, we will use these theoretical foundations to develop Monte Carlo algorithms and sampling techniques for efficiently simulating physically-accurate images. Towards the end of the course, we will look at advanced topics such as rendering wave optics, neural rendering, and differentiable rendering. The course has a strong programming component, during which students will develop their own working implementation of a physics-based renderer, including support for a variety of rendering algorithms, materials, illumination sources, and sensors. The project also includes a final project, during which students will select and implement some advanced rendering technique, and use their implementation to produce an image that is both technically and artistically compelling. The course will conclude with a rendering competition, where students submit their rendered images to win prizes. Cross-listing: This is both an advanced undergraduate and introductory graduate course, and it is cross-listed as 15-468 (for undergraduate students), 15-668 (for Master's students), and 15-868 (for PhD students). Please make sure to register for the section of the class that matches your current enrollment status.
Prerequisites: 15-362 or 16-385 or 16-720 or 15-462

Course Website: http://graphics.cs.cmu.edu/courses/15-468/
15-469 Special Topic: Visual Computing Systems
Intermittent: 12 units
Visual computing tasks such as computational imaging, image/video understanding, and real-time graphics are key responsibilities of modern computer systems ranging from sensor-rich smart phones to large datacenters. These workloads demand exceptional system efficiency and this course examines the key ideas, techniques, and challenges associated with the design of parallel, heterogeneous systems that accelerate visual computing applications. This course is intended for graduate and advanced undergraduate-level students interested in architecting efficient graphics, image processing, and computer vision platforms.
Prerequisites: 16-385 or 15-418 or 15-462
15-472 Real-Time Graphics
Intermittent: 12 units
Real-time computer graphics is about building systems that leverage modern CPUs and GPUs to produce detailed, interactive, immersive, and high-frame-rate imagery. Students will build a state-of-the-art renderer using C++ and the Vulkan API. Topics explored will include efficient data handling strategies; culling and scene traversal; multi-threaded rendering; post-processing, depth of field, screen-space reflections; volumetric rendering; sample distribution, spatial and temporal sharing, and anti-aliasing; stereo view synthesis; physical simulation and collision detection; dynamic lights and shadows; global illumination, accelerated raytracing; dynamic resolution, "AI" upsampling; compute shaders; parallax occlusion mapping; tessellation, displacement; skinning, transform feedback; debugging, profiling, and accelerating graphics algorithms.
Prerequisite: 15-462

Course Website: http://graphics.cs.cmu.edu/courses/15-472-s24/
15-473 Visual Computing Systems
Intermittent: 12 units
Visual computing tasks such as computational imaging, image/video understanding, and real-time graphics are key responsibilities of modern computer systems ranging from sensor-rich smart phones to large datacenters. These workloads demand exceptional system efficiency and this course examines the key ideas, techniques, and challenges associated with the design of parallel, heterogeneous systems that accelerate visual computing applications. This course is intended for graduate and advanced undergraduate-level students interested in architecting efficient graphics, image processing, and computer vision platforms.
15-482 Autonomous Agents
Fall: 12 units
Autonomous agents use perception, cognition, actuation, and learning to reliably achieve desired goals, where the agents can be smart homes, mobile robots, intelligent factories, self-driving cars, etc. The goal of this course is to introduce students to techniques needed for developing complete, integrated AI-based autonomous agents. Topics include architectures for intelligent agents; autonomous behaviors, perception, and execution; reasoning under uncertainty; optimization; execution monitoring; machine learning; scheduling; and explanation. A focus of the course will be on the integration and testing of autonomous systems to achieve reliable and robust behavior in the face of sensor noise and uncertainty. The course is project-oriented where small teams of students will design, implement, and evaluate agents that can grow plants autonomously, without human intervention.
Prerequisites: 15-281 or 07-280 or 10-301
Course Website: http://www.cs.cmu.edu/~15482
15-488 Special Topic: Machine Learning in a Nutshell
Spring: 9 units
THIS COURSE RUNS IN CMU QATAR ONLY. This course is about the application of machine learning (ML) concepts and models to solve challenging real-world problems. The emphasis of the course is on the methodological and practical aspects of designing, implementing, and using ML solutions. Course topics develop around the notion of ML process pipeline, that identifies the multi-staged process of building and deploying an ML solution. An ML pipeline includes: de nition of the problem, objectives, and performance metrics; collection and management of relevant operational data; data wrangling (transforming, cleaning, ltering, scaling); perform feature engineering on the available data in terms of feature selection, feature extraction, feature processing; selection of appropriate ML models based on problem requirements and available data; implementation, application, testing, and evaluation of the selected model(s); deployment of the final ML model. The course tackles all the stages of the ML pipeline, presenting conceptual insights and providing algorithmic and software tools to select and implement effective ways of proceeding and dealing with the challenges of the different stages.
Prerequisites: 15-112 Min. grade C or 15-110 Min. grade C
15-494 Cognitive Robotics: The Future of Robot Toys
Spring: 12 units
This course will explore the future of robot toys by analyzing and programming Anki Cozmo, a new robot with built-in artificial intelligence algorithms. Como is distinguished from earlier consumer robots by its reliance on vision as the primary sensing mode and its sophisticated use of A.I. Its capabilities include face and object recognition, map building, path planning, and object pushing and stacking. Although marketed as a pre-programmed children's toy, Cozmo's open source Python SDK allows anyone to develop new software for it, which means it can also be used for robotics education and research. The course will cover robot software architecture, human-robot interaction, perception, and planning algorithms for navigation and manipulation. Prior robotics experience is not required, just strong programming skills.
Prerequisite: 15-122 Min. grade C
15-495 Algebraic and Numerical Algorithms
Intermittent: 12 units
This course will provide some implementation motivated perspectives on algebraic and numerical algorithms, and will somewhat follow the Complexity and Linear Algebra semester program at the Simons Institute in Fall 2025 (https://simons.berkeley.edu/programs/complexity-linear-algebra). It will normally meet on Wednesdays and Fridays, with some Monday meetings to fit the schedule of the program. Topics covered include polynomials, bit complexity, and numerical approximation/perturbation schemes. Evaluations is by written problem sets, and either compilation and presentation of research, or performances in the UCup/AtCoder series of weekly programming contests. Presentation will assume some proficiency with algebra, number theory, and problem solving. An ideal background is mastery of either: Putnam A1~A3/B1~B3 (minus geometry); or IMO Shortlist C1~C4/N1~N2/A1~A2; or AtCoder ~1000-rated problems (minus data structures).
15-503 Introduction to Computer Systems
Summer: 6 units
This course provides a programmer's view of how computer systems execute programs, store information, and communicate. It enables students to become more effective programmers, especially in dealing with issues of performance, portability, and robustness. It also serves as a foundation for courses on compilers, networks, operating systems, and computer architecture, where a deeper understanding of systems-level issues is required. Topics covered include: machine-level code and its generation by optimizing compilers, performance evaluation and optimization, computer arithmetic, memory organization and management, networking technology and protocols, and supporting concurrent computation. **This remote course is only available to incoming master's students who need a refresher course on computer systems. Not open to undergraduates.**
15-591 Independent Study in Computer Science
Fall and Spring
The School of Computer Science offers Independent Study courses, which allow motivated students to work on projects under the supervision of a faculty advisor while receiving academic credit. Independent studies are usually one semester in duration and require prior approval from the faculty member and the School of Computer Science.
15-592 Independent Study in Computer Science
Fall and Spring
The School of Computer Science offers Independent Study courses, which allow motivated students to work on projects under the supervision of a faculty advisor while receiving academic credit. Independent studies are usually one semester in duration and require prior approval from the faculty member and the School of Computer Science.
15-593 Independent Study in Computer Science
Fall and Spring
The School of Computer Science offers Independent Study courses, which allow motivated students to work on projects under the supervision of a faculty advisor while receiving academic credit. Independent studies are usually one semester in duration and require prior approval from the faculty member and the School of Computer Science.
15-594 Independent Study in Computer Science
Fall and Spring
The School of Computer Science offers Independent Study courses, which allow motivated students to work on projects under the supervision of a faculty advisor while receiving academic credit. Independent studies are usually one semester in duration and require prior approval from the faculty member and the School of Computer Science.
15-599 SCS Honors Undergraduate Research Thesis
Fall and Spring
Available only to students registered in the CS Senior Research Thesis Program.
15-627 Monte Carlo Methods and Applications
Fall: 9 units
The Monte Carlo method uses random sampling to solve computational problems that would otherwise be intractable, and enables computers to model complex systems in nature that are otherwise too difficult to simulate. This course provides a first introduction to Monte Carlo methods from complementary theoretical and applied points of view, and will include implementation of practical algorithms. Topics include random number generation, sampling, Markov chains, Monte Carlo integration, stochastic processes, and applications in computational science. Students need a basic background in probability, multivariable calculus, and some coding experience in any language.

Course Website: http://www.cs.cmu.edu/~kmcrane/random/
15-635 Foundations of Blockchains
Fall: 12 units
In this course, students will learn the mathematical foundations of blockchains, including how to construct distributed consensus protocols and prove them secure, cryptography for blockchains, and mechanism design for blockchains. This course will take a mathematically rigorous approach. Students are expected to have mathematical maturity and be able to write formal mathematical proofs. Students may also be expected to implement some consensus or cryptographic algorithms. This course is crosslisted with 15-435. Graduate students should take 15-635. Undergraduates should take 15-435.
15-642 Machine Learning Systems
Spring: 12 units
The goal of this course is to provide students an understanding and overview of elements in modern machine learning systems. Throughout the course, the students will learn about the design rationale behind the state-of-the-art machine learning frameworks and advanced system techniques to scale, reduce memory, and offload heterogeneous compute resources. We will also run case studies of large-scale training and serving systems used in practice today. This course offers the necessary background for students who would like to pursue research in the area of machine learning systems or continue to work in machine learning engineering.
15-653 Logic and Mechanized Reasoning
Spring: 12 units
Symbolic logic is fundamental to computer science, providing a foundation for the theory of programming languages, database theory, AI, knowledge representation, automated reasoning, interactive theorem proving, and formal verification. Formal methods based on logic complement statistical methods and machine learning by providing rules of inference and means of representation with precise semantics. These methods are central to hardware and software verification, and have also been used to solve open problems in mathematics. This course will introduce students to logic on three levels: theory, implementation, and application. It will focus specifically on applications to automated reasoning and interactive theorem proving. We will present the underlying mathematical theory, and students will develop the mathematical skills that are needed to design and reason about logical systems in a rigorous way. We will also show students how to represent logical objects in a functional programming language, Lean, and how to implement fundamental logical algorithms. We will show students how to use contemporary automated reasoning tools, including SAT solvers, SMT solvers, and first-order theorem provers to solve challenging problems. Finally, we will show students how to use Lean as an interactive theorem prover.
15-657 Constructive Logic
Fall: 9 units
This multidisciplinary junior-level course is designed to provide a thorough introduction to modern constructive logic, its roots in philosophy, its numerous applications in computer science, and its mathematical properties. Some of the topics to be covered are intuitionistic logic, inductive definitions, functional programming, type theory, realizability, connections between classical and constructive logic, decidable classes. This course counts as a Fundamentals course in the Computer Science major.
Prerequisites: 15-150 Min. grade C or 15-212 Min. grade C

Course Website: https://www.cs.cmu.edu/~crary/317-f24/
15-658 Compiler Design
Spring: 15 units
This course covers the design and implementation of compiler and run-time systems for high-level languages, and examines the interaction between language design, compiler design, and run-time organization. Topics covered include syntactic and lexical analysis, handling of user-defined types and type-checking, context analysis, code generation and optimization, and memory management and run-time organization.

Course Website: https://csd.cs.cmu.edu/course-profiles/15-411_611-compiler-design
15-668 Physics-Based Rendering
Spring: 12 units
This course is an introduction to physics-based rendering at the advanced undergraduate and introductory graduate level. During the course, we will cover fundamentals of light transport, including topics such as the rendering and radiative transfer equation, light transport operators, path integral formulations, and approximations such as diffusion and single scattering. Additionally, we will discuss state-of-the-art models for illumination, surface and volumetric scattering, and sensors. Finally, we will use these theoretical foundations to develop Monte Carlo algorithms and sampling techniques for efficiently simulating physically-accurate images. Towards the end of the course, we will look at advanced topics such as rendering wave optics, neural rendering, and differentiable rendering.
Prerequisites: 15-862 Min. grade C or 18-793 Min. grade C or 16-720 Min. grade C or 15-663 Min. grade C or 15-662 Min. grade C or 15-462 Min. grade C or 15-463 Min. grade C or 15-362 Min. grade C or 15-362 Min. grade C or 16-820 Min. grade C or 18-453 Min. grade C or 16-385 Min. grade C

Course Website: http://graphics.cs.cmu.edu/courses/15-468/
15-669 Special Topics Numerical Computing
Fall: 12 units
Many problems in science, engineering, and computer graphics cannot be solved exactly. Numerical computing provides methods to approximate these solutions using computational techniques. It combines mathematics and programming to solve real-world problems such as simulations, optimization, and data analysis. The course begins with a review of key mathematical concepts like vector spaces, matrices, and calculus. We then explore how numbers are represented on computers, the types of errors that can occur, and strategies to handle them. Core topics include solving linear and nonlinear systems, eigenvalue problems, optimization, and techniques such as LU decomposition, QR factorization, and singular value decomposition (SVD). We will also cover iterative methods for large systems, interpolation, numerical differentiation, integration, and both ordinary and partial differential equations. Students will gain hands-on experience implementing algorithms and learn to balance accuracy, stability, and efficiency in computational solutions.
Prerequisites: 21-241 Min. grade C or 21-259 Min. grade C or 15-122 Min. grade C
15-705 Engineering Distributed Systems
Spring: 12 units
This course is for students with strong design and implementation skills who are likely to pursue careers as software architects and lead engineers. It may be taken by well-prepared undergraduates with excellent design and implementation skills in low-level systems programing. The course assumes a high level of proficiency in all aspects of operating system design and implementation. This course will help students prepare for leadership roles in creating and evolving the complex, large-scale computer systems that society will increasingly depend on in the future. The course will teach the organizing principles of such systems, identifying a core set of versatile techniques that are applicable across many system layers. Students will acquire the knowledge base, intellectual tools, hands-on skills and modes of thought needed to build well-engineered computer systems that withstand the test of time, growth in scale, and stresses of live use. Topics covered include: caching, prefetching, damage containment, scale reduction, hints, replication, hash-based techniques, and fragmentation reduction. A substantial project component is an integral part of the course. A high level of proficiency in systems programming is expected. Please refer to course website for the most recent schedule updates.

Course Website: http://www.cs.cmu.edu/~csd-grad/courseschedules14.html
15-712 Advanced Operating Systems and Distributed Systems
Fall and Spring: 12 units
This is a graduate course in operating systems. The course will consist of a reading/lecture/discussion component and a project component. The class will cover approximately 40 research papers. Some of these papers will introduce students to the basic principles on which modern operating systems and distributed systems are based. Others will cover more recent work to explore the state of the art and observe the evolution of these systems over time.

Course Website: https://www.cs.cmu.edu/~15712/
15-713 Advanced Foundations of Programming Languages
Intermittent: 12 units
An advanced follow-on to 15-312 developing further ideas and results in the theory of programming languages.
Prerequisite: 15-312 Min. grade B
15-714 Resource Aware Programming Languages
Intermittent: 12 units
Resource use—the amount of time, memory, and energy a program requires for its execution—is one of the central subjects of computer science. Nevertheless, resource use traditionally does not play a central role in programming-language concepts, such as operational semantics, type systems, and program logics. This course revisits these concepts to model and analyze resource use of programs in a compositional and mathematically-precise way. The emphasis is on practical, type-based techniques that automatically inform programmers about the resource use of their code. We first study such techniques for functional programs and then develop generalizations to imperative, probabilistic, and concurrent programs.

Course Website: https://www.cs.cmu.edu/~janh/courses/ra20/
15-719 Advanced Cloud Computing
Spring: 12 units
Computing in the cloud has emerged as a leading paradigm for cost-effective, scalable, well-managed computing. Users pay for services provided in a broadly shared, power efficient datacenter, enabling dynamic computing needs to be met without paying for more than is needed. Actual machines may be virtualized into machine-like services, or more abstract programming platforms, or application-specific services, with the cloud computing infrastructure managing sharing, scheduling, reliability, availability, elasticity, privacy, provisioning and geographic replication This course will survey the aspects of cloud computing by reading about 30 papers and articles, executing cloud computing tasks on a state of the art cloud computing service, and implementing a change or feature in a state of the art cloud computing framework. There will be no final exam, but there will be two in class exams. Grades will be about 50 project work and about 50 examination results.

Course Website: http://www.cs.cmu.edu/~15719/
15-721 Advanced Database Systems
Intermittent: 12 units
This course is a comprehensive study of the internals of modern database management systems. It will cover the core concepts and fundamentals of the components that are used in large-scale analytical systems (OLAP). The class will stress both efficiency and correctness of the implementation of these ideas.

Course Website: https://15721.courses.cs.cmu.edu
15-745 Optimizing Compilers for Modern Architectures
Fall and Spring: 12 units
Theoretical and practical aspects of building optimizing compilers that e and #191;ectively exploit modern architectures. The course will begin with the fundamentals of compiler optimization, and will build upon these fundamentals to address issues in state-of-the-art commercial and research machines.

Course Website: https://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15745-s23/www
15-746 Storage Systems
Intermittent: 12 units
Storage systems are among the most fascinating and the most important parts of computer systems. They often dominate the performance of a system, and failures of other components are frequently addressed by restarting from the data stored on them. Indeed, storage systems hold the crown jewels of most organizations: their information (from source code to Microsoft's software to the sales databases of every e-commerce site to the logs and indices driving the Big Data and ML revolution). There continues to be great demand for bright people and better solutions in this critical field of computer systems.
Prerequisites: 15-213 Min. grade B or 15-503 Min. grade B or 14-513 Min. grade B or 18-613 Min. grade B or 18-600 Min. grade B or 15-513 Min. grade B or 18-213 Min. grade B

Course Website: http://www.ece.cmu.edu/~ece746/
15-749 Post-von Neumann Computer Architecture
Intermittent: 12 units
Computing has been dominated by von Neumann CPU architectures for seventy years. The von Neumann architecture is familiar and flexible, but it is also extremely inefficient, wasting upwards of 99% of energy. As computing is now energy-limited across all scales, from IoT to data center, von Neumann's inefficiency can no longer be tolerated. Recently, industry has adopted heterogeneous "accelerator" hardware to boost performance and efficiency. However, accelerators have limited programmability, sacrificing the main benefit of CPU architectures and putting future innovation at risk. This class will survey non-von Neumann general-purpose architectures, recent work on specialized hardware accelerators, and cutting-edge research on "programmable accelerators".

Course Website: http://www.cs.cmu.edu/~15-749/
15-750 Algorithms in the Real World
Spring: 12 units
The course covers a broad set of topics in algorithms design and analysis. The goal is to cover tools and algorithms that give students the ability to (a) recognize which tool or method to apply to problems, (b) to become reasonably proficient at using these tools, and (c) to be able to reason about the correctness and performance of the resulting algorithms. The course webpage for this semester will list the tentative list of topics to be covered; these will include basic graph algorithms, randomized algorithms, hashing and streaming, flows and linear programming, convex optimization, and linear algebraic algorithms. Please refer to https://www.cs.cmu.edu/~csd-grad/courseschedules22.html for the most recent schedule updates.

Course Website: http://www.cs.cmu.edu/~15750/
15-751 CS Theory Toolkit
Spring: 12 units
This course will take a random walk through various mathematical topics that come in handy for theoretical computer science. It is intended mainly for students earlier in their graduate studies (or very strong undergraduates) who want to do theory research. The idea for the course comes from other courses by Arora (2002, 2007), Håstad (2004/05), Kelner (2007, 2009), and Tulsiani (2013). Students should have a solid undergraduate background in math (e.g., elementary combinatorics, graph theory, discrete probability, basic algebra/calculus) and theoretical computer science (running time analysis, big-O/Omega/Theta, P and NP, basic fundamental algorithms).

Course Website: https://www.cs.cmu.edu/~odonnell/toolkit20
15-754 Spectral Graph Theory
Intermittent: 12 units
A graduate course on spectral graph theory: how to establish graph structure through linear algebra, and how to exploit this connection for faster algorithms

Course Website: https://www.cs.cmu.edu/~15754
15-756 Randomized Algorithms
Fall: 12 units
A graduate-level course on how to use randomization to design algorithms and data structures with strong provable guarantees.
15-759 Special Topics in Theory: A Principled Approach to Optimization
Intermittent: 12 units
This is a course giving a rigorous treatment of several topics in the theory of convex optimization. There will be a particular focus on developing intuition for how to analyze many convex optimization processes from first principles. Topics may include: gradient descent, interior point methods, linear regression, linear programming, sparsification, and more.

Course Website: https://yangpliu.github.io/opt
15-763 Physics-based Animation of Solids and Fluids
Spring: 12 units
This course explores physics-based animations of solids and fluids, key in fields like visual effects, VR, and digital fashion. Central to this is solving partial differential equations (PDEs) using numerical methods, with applications in areas such as computational mechanics and 3D content creation. Through lectures and student presentations on research papers, we will cover the simulation of rigid bodies, deformable bodies, shells, rods, liquids, and smoke, from PDE discretization to solver implementation. A strong background in math and programming is recommended, as students will work on advanced numerical methods. The course also includes a project where students apply their knowledge to develop and test simulations. By the end, students will understand both classic and cutting-edge methods in solids and fluids simulation, along with the challenges of advancing these techniques in the broader field.

Course Website: http://www.cs.cmu.edu/~15763-s24/
15-768 Discrete Differential Geometry
Spring: 12 units
This course focuses on three-dimensional geometry processing, while simultaneously providing a first course in traditional differential geometry. Our main goal is to show how fundamental geometric concepts (like curvature) can be understood from complementary computational and mathematical points of view. This dual perspective enriches understanding on both sides, and leads to the development of practical algorithms for working with real-world geometric data. Along the way we will revisit important ideas from calculus and linear algebra, putting a strong emphasis on intuitive, visual understanding that complements the more traditional formal, algebraic treatment. The course provides essential mathematical background as well as a large array of real-world examples and applications. It also provides a short survey of recent developments in digital geometry processing and discrete differential geometry. Topics include: curves and surfaces, curvature, connections and parallel transport, exterior algebra, exterior calculus, Stokes' theorem, simplicial homology, de Rham cohomology, Helmholtz-Hodge decomposition, conformal mapping, finite element methods, and numerical linear algebra.Applications include: approximation of curvature, curve and surface smoothing, surface parameterization, vector field design, and computation of geodesic distance.
15-779 Special Topics: Advanced Topics in Machine Learning Systems (LLM Edition)
Intermittent: 12 units
Machine learning (ML) techniques, especially recent advances in large language models and generative AI, have surpassed human predictive performance in a variety of real-world tasks. This success is enabled by the recent development of ML systems (e.g., PyTorch) that provide high-level programming interfaces for people to easily prototype different ML models on modern hardware platforms. In this course, we will explore the design of modern ML systems by learning how an ML model written in high-level languages is decomposed into low-level kernels and executed across heterogeneous hardware accelerators (e.g., TPUs and GPUs) in a distributed fashion. Topics covered in this course include: programming models for expressing ML models, deep learning accelerators, ML compilation, programming techniques on modern GPUs (e.g., H100 and B200), distributed training techniques, auto-parallelization, computation graph optimizations, automated kernel generation, memory optimizations, etc. The main goal of this course is to provide a comprehensive view on how existing ML systems work. Throughout this course, we will also learn the design principles behind these systems and discuss the challenges and opportunities for building future ML systems for next-generation ML applications and hardware platforms.

Course Website: https://www.cs.cmu.edu/~zhihaoj2/15-779/
15-783 Trustworthy AI: Theory and Practice
Intermittent: 12 units
As AI systems become more capable and widely deployed, ensuring their reliability, robustness, and alignment with human intent is critical. This advanced seminar explores the principles behind building trustworthy AI, with a focus on both theoretical foundations and empirical guarantees. We will examine key challenges such as robustness to distribution shifts, adversarial attacks, data poisoning, privacy risks, and jailbreaks, as well as broader concerns in AI alignment and governance. Through a mix of foundational papers and recent advances, the class will investigate recurring themes across security, robustness, and alignment, drawing connections to classical machine learning principles and modern scaling trends. Discussions will emphasize not only what works but also why it works (or fails)—aiming to equip students with the conceptual tools to critically assess current methods and develop principled approaches for trustworthy AI. This course is designed for students interested in both theoretical insights and practical implications, bridging research in machine learning, security, and AI alignment to address some of the most pressing challenges in modern AI development. " Through a mix of foundational papers and recent advances, the class will investigate recurring themes across security, robustness, and alignment, drawing connections to classical machine learning principles and modern scaling trends. Discussions will emphasize not only what works but also why it works (or fails)—aiming to equip students with the conceptual tools to critically assess current methods and develop principled approaches for trustworthy AI. This course is designed for students interested in both theoretical insights and practical implications, bridging research in machine learning, security, and AI alignment to address some of the most pressing challenges in modern AI development.
15-798 Special Topic: Generative AI for Music and Audio
Intermittent: 12 units
In this seminar class, we will discuss state-of-the-art methods in generative AI for music and general audio (everyday sounds, speech, bioacoustics, etc.), with applications to both generation and understanding. We will examine and compare the two primary families of methods that are used in modern audio generation research: large language models applied to discrete audio tokens, and diffusion models applied to continuous audio representations. With an eye towards offering intuitive controls for music generation, we will also examine classic methods and tasks in music information retrieval such as spectral analysis, synchronization, beat detection, and transcription. Moreover, we will explore emerging topics in generative AI for music and audio such as new architectures, training data attribution, interaction, compression, multimodality, and evaluation. Finally, we will discuss the ethical and societal implications of music generation specifically, and its potential effects on music both economically and culturally. Much of the course activity will center around (1) in-class lectures and demonstrations on small scale datasets, (2) student-led discussions of research papers, and (3) an open-ended research project.
15-814 Types and Programming Languages
Fall: 12 units
The course studies the theory of type systems, with a focus on applications of type systems to practical programming languages. The emphasis is on the mathematical foundations underlying type systems and operational semantics. The course includes a broad survey of the components that make up existing type systems, and also teaches the methodology behind the design of new type systems.
15-816 Advanced Topics in Logic: Automated Reasoning and Satisfiability
Intermittent: 12 units
Automated reasoning has become a powerful technology with applications ranging from verification of hardware and software to solving long-standing open problems in mathematics. This course covers several state-of-the-art automated reasoning techniques and provides hands-on experience with research questions in this area.

Course Website: https://www.cs.cmu.edu/~mheule/15816-f23/
15-819 Resource Aware Programming Languages
Intermittent: 12 units
Resource use—the amount of time, memory, and energy a program requires for its execution—is one of the central subjects of computer science. Nevertheless, resource use traditionally does not play a central role in programming-language concepts, such as operational semantics, type systems, and program logics. This course revisits these concepts to model and analyze resource use of programs in a compositional and mathematically-precise way. The emphasis is on practical, type-based techniques that automatically inform programmers about the resource use of their code. We first study such techniques for functional programs and then develop generalizations to imperative, probabilistic, and concurrent programs.

Course Website: https://www.cs.cmu.edu/~janh/courses/ra20/
15-821 Mobile and Pervasive Computing
Fall: 12 units
This is a course exploring research issues in mobile computing and its close relative, pervasive computing (aka "Internet of Things (IoT)"). Many traditional areas of computer science and computer engineering are impacted by the constraints and demands of mobile and pervasive computing. The course will offer significant hands-on experience: students will work in small groups under the guidance of a mentor on a project. Each student will present a research paper from the literature in a conference-style 30-minute talk. In teams of two, students will present a short (30 minutes) overview of the commercial landscape for one of the topics covered in class. There will a brief quiz at the start of each class, based on the readings for that class. Prerequisites Knowledge of operating systems, distributed systems, and computer architecture. If in doubt, check with one of the instructors before registering.

Course Website: http://www.cs.cmu.edu/~15-821
15-826 Multimedia and Data Mining
Intermittent: 12 units
The course covers advanced algorithms for learning, analysis, data management and visualization of large datasets. Topics include indexing for text and DNA databases, searching medical and multimedia databases by content, fundamental signal processing methods, compression, fractals in databases, data mining, privacy and security issues, rule discovery, data visualization, graph mining, stream mining.

Course Website: http://www.cs.cmu.edu/~christos/courses/826.F19/
15-853 Theory of Markov Processes: Selected Topics with Applications in ML and GenAI
Intermittent: 12 units
Markov processes are a fundamental mathematical concept with broad applications, including emerging fields such as reinforcement learning and diffusion models. This course is structured into two parts. Part I covers the core theory of Markov processes, including discrete-time and continuous-time Markov chains, as well as Markov processes with continuous state space such as diffusion processes. Part II builds on the core theory and covers selected topics in the theoretical foundation of reinforcement learning and diffusion models in generative AI.
15-856 Introduction to Cryptography
Spring: 12 units
This course is aimed as an introduction to modern cryptography. This course will be a mix of applied and theoretical cryptography.

Course Website: http://www.cs.cmu.edu/~goyal/15856/
15-857 Analytical Performance Modeling & Design of Computer Systems
Intermittent: 12 units
In designing computer systems one is usually constrained by certain performance requirements and limitations. For example, one might need to guarantee a response time SLA or certain throughput requirement, while at the same time staying within a power budget or cost budget. On the other hand, one often has many choices: One fast disk, or two slow ones? More memory, or a faster processor? A fair scheduler or one that minimizes mean response time? For multi-server systems, one can choose from a wide array of load balancing policies, a wide array of migration policies, capacity provisioning schemes, power management policies ... The possibilities are endless. The best choices are often counter-intuitive. Ideally, one would like to have answers to these questions before investing the time and money to build a system. This class will introduce students to analytic stochastic modeling with the aim of answering the above questions.

Course Website: https://www.cs.cmu.edu/~harchol/Perfclass/class.html
15-859 Special Topics in Theory: Cryptography
Intermittent: 12 units
This course is geared to cover advanced topics in cryptography. The course will have a theory focus and cover trending topics in cryptography (that might change depending on the year). The course is meant for students who are either already doing research in cryptography or considering research in the area. In the Spring 2025, we will cover advanced topics such as homomorphic crypto-systems, multi-party computation, zero-knowledge proofs and obfuscation.
15-883 Computational Models of Neural Systems
Fall: 12 units
This course is an in-depth study of information processing in real neural systems from a computer science perspective. We will examine several brain areas, such as the hippocampus and cerebellum, where processing is sufficiently well understood that it can be discussed in terms of specific representations and algorithms. We will focus primarily on computer models of these systems, after establishing the necessary anatomical, physiological, and psychophysical context. There will be some neuroscience tutorial lectures for those with no prior background in this area.

Course Website: https://www.cs.cmu.edu/afs/cs/academic/class/15883-f23
15-888 Computational Game Solving
Fall: 12 units
The course will focus on multi-step imperfect-information games because most real-world strategic settings are such games. Such games beget additional issues beyond perfect-information games like chess and Go, such as signaling, deception, and understanding deception by others. There has been tremendous progress in the AI community on solving such games since around 2003. This course covers the fundamentals and the state of the art of solving such games.

Course Website: https://www.cs.cmu.edu/~sandholm/cs15-888F21/
15-890 Computer Science Pedagogy
Spring: 12 units
A broad introduction to Computer Science Pedagogy. Although the course focus is on CS pedagogy and developing curricular content, students will learn some fundamentals of modern mobile application programming.
Back to top