Additional Major in Computer Science (prior to entry year 2017) PRIOR TO ENTRY YEAR 2017The 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 Courses15-112: Fundamentals of Programming15-122: Principles of Imperative Computation (requires 21-127 as a co-req)15-150: Principles of Functional Programming21-120: Differential & Integral Calculus21-122: Integration, Differential Equations, and Approximation21-127: Concepts of MathematicsAdditional Major RequirementsComputer Science Core15-210: Parallel and Sequential Data Structures and Algorithms15-213: Introduction to Computer Systems15-251: Great Theoretical Ideas in Computer Science15-451: Algorithm Design and AnalysisOne of the following Linear Algebra courses:21-241: Matrices and Linear Transformations21-242: Matrix TheoryOne of the following Probability courses:15-359: Probability and Computing21-325: Probability36-217: Probability Theory and Random Processes36-225: Introduction to Probability and Statistics IOne Technical Communications course:76-270: Writing for the Professions15-300: Research and Innovation in CS08-200: Ethics and Policy Issues in ComputingOne Algorithms & Complexity elective:15-354: Computational Discrete Mathematics15-355: Modern Computer Algebra15-453: Formal Languages, Automata, and Computability15-455: Undergraduate Complexity Theory21-301: Combinatorics21-484: Graph TheoryOne Applications elective:02-450: Automation of Biological Research05-391: Designing Human-Centered Software05-431: Software Structures for User Interfaces10-401/10-601: Machine Learning11-411: Natural Language Processing15-313: Foundations of Software Engineering15-322/15-323: Computer Music15-381: Artificial Intelligence: Representation and Problem Solving15-415: Database Applications15-462: Computer Graphics16-384: Robot Kinematics and Dynamics16-385: Computer VisionOne Logics & Languages elective::15-312: Foundations of Programming Languages15-316: Software Foundations of Security and Privacy15-317: Constructive Logic15-414: Bug Catching: automated Program Verification and Testing15-424: Foundations of Cyber-Physical Systems17-355: Program Analysis (approved for Spring 2018 only)21-300: Basic Logic80-310: Formal Logic80-311: Computability and IncompletenessOne Software Systems elective:15-410: Operating System Design and Implementation15-411: Compiler Design15-418: Parallel Computer Architecture and Programming15-440: Distributed Computer Systems15-441: Computer NetworksTwo 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.