Each undergraduate program has a unique set of academic requirements associated with it. Detailed information about each program or a link to the program's home department is included below.

Students pursuing a B.S. in Computer Science must take a minimum of 360 units in the following categories: Computer Science, Mathematics/Probability, Engineering and Natural Sciences, Humanities and Arts, Required Minor, Computing @ Carnegie Mellon and Free Electives.

*Curriculum Requirements **Revised August, 2016*

*(Requirements below are binding on students admitted for the fall of 2014, 2015 and 2106; students admitted prior to fall 2014 should refer to curriculum information under Current Students.)*

**Computer Science**The following computer science courses are required:

- 15-128: Freshman Immigration Course*
- 15-122: Principles of Imperative Computation**
- 15-150: Principles of Functional Programming
- 15-210: Parallel and Sequential Data Structures and Algorithms
- 15-213: Introduction to Computer Systems
- 15-251: Great Theoretical Ideas in Computer Science
- 15-451: Algorithm Design and Analysis

**Students with no prior experience with software tools (editors, scripting, code management, etc.) are encouraged to take 15-131: Great Practical Ideas in Computer Science concurrently with this course.*

***Students with no prior programming experience take 15-112: Fundamentals of Programming before 15-122.*

**Communications Course (choose one)**

- 76-270 Writing for the Professions
- 15-300 Research and Innovation in Computer Science (currently available in Pittsburgh only)
- 15-221 Technical Communication for Computer Scientists (currently available in Doha only)

**Algorithms & Complexity Elective (choose one)**

- 15-354: Computational Discrete Mathematics
- 15-355: Modern Computer Algebra
- 15-453: Formal Languages, Automata, and Computability
- 15-455: Undergraduate Complexity Theory
- 15-456: Computational Geometry
- 21-301: Combinatorics
- 21-484: Graph Theory
- Others as designated by the CS Undergraduate Program

**Applications Elective (choose one)**

- 02-510: Computational Genomics
- 05-391: Designing Human-Centered Software
- 10-401: Introduction to Machine Learning (or 10-601 Introduction to Machine Learning)
- 11-411: Natural Language Processing
- 15-313: Foundations of Software Engineering
- 15-323 Computer Music Systems & Information Processing (or 15-322 Introduction to Computer Music)
- 15-381: Artificial Intelligence: Representation and Problem Solving
- 15-415: Database Applications
- 15-462: Computer Graphics
- 16-384: Robot Kinematics and Dynamics
- 16-385: Computer Vision
- Others as designated by the CS Undergraduate Program

**Logics & Languages Elective (choose one)**

- 15-312: Foundations of Programming Languages
- 15-317: Constructive Logic
- 15-414: Bug Catching: Automated Program Verification and Testing
- 15-424: Foundations of Cyber-Physical Systems
- 21-300: Basic Logic
- 80-310: Formal Logic
- 80-311: Undecidability and Incompleteness
- Others as designated by the CS Undergraduate Program

**Software Systems Elective (choose one)**

- 15-410: Operating System Design and Implementation
- 15-411: Compiler Design
- 15-418: Parallel Computer Architecture and Programming
- 15-440: Distributed Systems
- 15-441: Computer Networks
- Others as designated by the CS Undergraduate Program

**Computer Science Electives (choose two)**Choose two courses from any SCS department, usually at the 200-level or above. Departments include Computer Science (15-xxx), Computational Biology Department (02-), Human-Computer Interaction Institute (05-), Institute for Software Research (08, 17-), Machine Learning (10-), Language Technologies Institute (11-) and the Robotics Institute (16-).

NOTE: The following courses do NOT count as Computer Science electives: 02-223, 02-250, 02-261, 05-341, 08-200, 08-532, 08-533 and 15-351 (or any equivalent cross-listed courses to these courses). Check with your academic advisor before taking any new SCS courses to determine eligibility.

**Mathematics & Probability**Five mathematics courses are required.

- 21-120: Differential and Integral Calculus
- 21-122: Integration and Approximation
- 15-151: Mathematical Foundations for Computer Science (if not offered, substitute 21-127: Concepts of Mathematics)
- One of the following Linear Algebra courses: 21-241: Matrices and Linear Transformations; 21-242: Matrix Theory
- One of the following Probability courses: 15-359: Probability and Computing; 21-325: Probability; 36-217: Probability Theory and Random Processes; 36-225: Introduction to Probability Theory

**Engineering & Natural Sciences**Four engineering or science courses are required, of which at least one must have a laboratory component and at least two must be from the same department. Courses with a primary focus on programming, computation or mathematics are not acceptable for science or engineering courses.

Courses meeting the lab requirement include:

- 02-261: Quantitative Cell and Molecular Biology Laboratory
- 03-124: Modern Biology Laboratory (coreq 03-121)
- 09-101: Introduction to Experimental Chemistry (this 3 unit lab together with 09-105, Introduction to Modern Chemistry, satisfies the lab requirement)
- 09-221: Laboratory I: Introduction to Chemical Analysis
- 27-100: Engineering the Materials of the Future
- 33-104: Experimental Physics
- 42-203: Biomedical Engineering Laboratory (crosslisted with 03-206)
- 85-310: Research Methods in Cognitive Psychology
- 85-314: Cognitive Neuroscience Research Methods

The following courses from the Dietrich College of Humanities and Social Sciences and University Wide Studies can be used to satisfy the Science and Engineering requirement:

- 85-219: Biological Foundations of Behavior
- 85-310: Research Methods in Cognitive Psychology
- 85-314: Cognitive Neuroscience Research Methods
- 99-238: Materials, Energy and Environment

The following courses from the Lane Center can be used to satisfy the Science and Engineering requirement and can be paired with a Biology [03-] course for two courses from one department:

- 02-223: Personalized Medicine: Understanding Your Own Genome
- 02-250: Introduction to Computational Biology (or 02-251 + 02-252)
- 02-261: Quantitative Cell and Molecular Biology Laboratory (also meets the lab requirement)

The following courses cannot be used to satisfy the Science and Engineering requirement:

- 03-511: Computational Molecular Biology and Genomics
- 03-512: Computational Methods for Biological Modeling and Simulation
- 06-262: Mathematical Methods for Chemical Engineering
- 09-103: Atoms, Molecules, and Chemical Change
- 09-231: Mathematical Methods for Chemists
- 12-271: Introduction to Computer Applications in Civil & Environmental Engineering
- 18-090: Introduction to Signal Processing for Creative Practice
- 18-200: Emerging Trends in Electrical and Computer Engineering
- 18-202: Mathematical Foundations of Electrical Engineering
- 18-213: Introduction to Computer Systems
- 18-345: Introduction to Telecommunication Networks
- 18-411: Computational Techniques in Engineering (crosslisted with 27-410)
- 18-482: Telecommunications, Technology Policy & Management
- 18-487: Introduction to Computer & Network Security & Applied Cryptography
- 18-540: Rapid Prototyping of Computer Systems
- 18-6xx/7xx/8xx/9xx: All graduate level ECE courses, 600 and above
- 19-101: Introduction to Engineering and Public Policy
- 19-211: Ethics and Policy Issues in Computing
- 19-325: Technology and Policy Writing for Lay Audiences
- 19-402: Telecommunications, Technology Policy & Management
- 19-411: Global Competitiveness: Firms, Nations and Technological Change
- 19-432: Special Topics: Bitcoin and Cryptocurrencies
- 27-410: Computational Techniques in Engineering
- 33-100: Basic Experimental Physics
- 33-115: Physics for Future Presidents
- 33-124: Introduction to Astronomy
- 33-232: Mathematical Methods for Physicists
- 39-100: What Is Engineering?
- 39-200: Business for Engineers
- 42-201: Professional Issues in Biomedical Engineering

**Humanities and Arts**All candidates for a bachelor's degree must complete a minimum of 63 units offered by the Dietrich College of Humanities & Social Sciences and/or the College of Fine Arts. The humanities and arts (or general education) courses for SCS students are to meet the distribution requirements found on the SCS Humanities and Arts page.

**Required Minor**All CS undergraduates must complete a minor. Completion of a second major (or double degree) also satisfies this requirement. If permitted by the minor or second major department, courses taken in satisfaction for the minor or second major may also count toward any category other than required courses in computer science. More information can be found on the minor requirement page.

**Computing @ Carnegie Mellon**All CMU students must take 99-10x Computing @ Carnegie Mellon.

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

The bachelor of science program in computational biology is administered by the Computational Biology Department. You can see a full list of requirements and courses here.

Bachelor of Computer Science and Arts

The BCSA curriculum requires students to fulfill general education requirements, and requirements for their CFA and SCS concentrations. For full details about the program's academic requirements, click here.

In the Music and Technology undergraduate program, students complete either a music concentration or the technical concentration. A complete breakdown of the curriculum is available here.

The additional major in computer science allows students pursuing a primary major in another department to also earn a CS degree. Students must complete the following requirements.

**Prerequisite Courses**

- 15-112: Fundamentals of Programming
- 15-122: Principles of Imperative Computation (requires 21-127 as a co-req)
- 15-150: Principles of Functional Programming
- 21-120: Differential & Integral Calculus
- 21-122: Integration, Differential Equations, and Approximation
- 21-127: Concepts of Mathematics

**Double Major Requirements**

- Computer Science Core
- 15-210: Parallel and Sequential Data Structures and Algorithms
- 15-213: Introduction to Computer Systems
- 15-251: Great Theoretical Ideas in Computer Science
- 15-451: Algorithm Design and Analysis

- One of the following Linear Algebra courses:
- 21-241: Matrices and Linear Transformations
- 21-242: Matrix Theory

- One of the following Probability courses:
- 15-359: Probability and Computing
- 21-325: Probability
- 36-217: Probability Theory and Random Processes
- 36-225: Introduction to Probability and Statistics I

- One Communications course:
- 15-221: Technical Communication for Computer Scientists

- One Algorithms & Complexity elective:
- 15-354: Computational Discrete Mathematics
- 15-355: Modern Computer Algebra
- 15-453: Formal Languages, Automata, and Computability
- 21-301: Combinatorics
- 21-484: Graph Theory

- One Applications elective:
- 02-450: Automation of Biological Research
- 05-391: Designing Human-Centered Software
- 05-431: Software Structures for User Interfaces
- 10-401/10-601: Machine Learning
- 11-411: Natural Language Processing
- 15-313: Foundations of Software Engineering
- 15-322/15-323: Computer Music
- 15-381: Artificial Intelligence: Representation and Problem Solving
- 15-415: Database Applications
- 15-462: Computer Graphics
- 16-384: Robot Kinematics and Dynamics
- 16-385: Computer Vision

- One Logics & Languages elective::
- 15-312: Foundations of Programming Languages
- 15-317: Constructive Logic
- 15-414: Bug Catching: automated Program Verification and Testing
- 15-424: Foundations of Cyber-Physical Systems
- 21-300: Basic Logic
- 80-310: Formal Logic
- 80-311: Computability and Incompleteness

- One Software Systems elective:
- 15-410: Operating System Design and Implementation
- 15-411: Compiler Design
- 15-418: Parallel Computer Architecture and Programming
- 15-440: Distributed Computer Systems
- 15-441: Computer Networks

- Two Computer Science electives (can be from any SCS department; usually 200-level or above)

In order to avoid excessive double-counting, students pursuing a double major or minor in computer science must complete at least six courses in their home department, of at least 9 units each, none of which are required by (or are cognates for requirements in) the computer science major.

Students working toward a CS minor must take the prerequisite courses 15-112: Fundamentals of Programming and 21-127: Concepts of Mathematics.

Required courses include:

- 15-122: Principles of Imperative Computation (requires 21-127 as a co-req)
- 15-150: Principles of Functional Programming
- 15-210: Parallel and Sequential Data Structures and Algorithms
- One of the following courses: 15-213: Introduction to Computer Systems; 15-251: Great Theoretical Ideas in Computer Science
- Two Computer Science electives (15-213 or higher; one can be from any SCS department, with prior approval)