**PRIOR TO ENTRY YEAR 2017**

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

**Additional 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 Technical Communications course:
- 76-270: Writing for the Professions
- 15-300: Research and Innovation in CS
- 08-200: Ethics and Policy Issues in Computing

- One Algorithms & Complexity elective:
- 15-354: Computational Discrete Mathematics
- 15-355: Modern Computer Algebra
- 15-453: Formal Languages, Automata, and Computability
- 15-455: Undergraduate Complexity Theory
- 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-316: Software Foundations of Security and Privacy
- 15-317: Constructive Logic
- 15-414: Bug Catching: automated Program Verification and Testing
- 15-424: Foundations of Cyber-Physical Systems
- 17-355: Program Analysis (approved for Spring 2018 only)
- 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.