Undergraduate Major in
Computer Science
Undergraduate Option Rep
Prof. Adam Wierman
Options Administrator
Maria Lopez
mlopezcms.caltech.edu
Computation is now pervasive, widereaching, and unavoidable in our daily lives, and in science and engineering. The Computer Science option gives students a strong grounding in the mathematical and algorithmic foundations of computing, provides an introduction to cuttingedge research in a variety of subfields of Computer Science, and prepares them to apply computational thinking to a diversity of applications in Computer Science and beyond. Our students and faculty strive to:
 understand information and computation as intrinsic components of a broad array of natural and engineered systems
 tackle challenging and fundamental problems with the potential for longterm and realworld impact
 develop underlying theory
 nurture collaboration between traditionally separate disciplines
The undergraduate computer science option introduces students to the mathematical and engineering foundations of the discipline. It provides considerable flexibility in course selection, together with a capstone project giving an opportunity for independent work in an area of the studentâ€™s choice. A set of "core" courses give students a strong foundation in programming principles, algorithms and complexity, and computing systems. Additional advanced coursework is organized around several "tracks" in which greater depth is obtained in topic areas such as networking, distributed systems, robotics, machine learning, graphics, databases, and more. Students are provided a variety of research opportunities, both through the SURF (Summer Undergraduate Research Fellowships) program and the required capstone project sequence.
The department expects undergraduate majors to achieve
 a thorough understanding of the mathematical and algorithmic foundations of computer science,
 a depth of knowledge, and an understanding of the research frontiers, in at least one subfield of computer science,
 experience in working on a significant project, typically as part of a team,
 an appreciation of the scope of applications of computing in information systems and across science and engineering,
 an ability to apply computational thinking to a wide variety of problems both inside and outside Computer Science,
 an understanding of how to critically evaluate computer science research
 an ability to effectively communicate their ideas in writing and in oral presentations.
The undergraduate degree equips students with the tools and knowledge necessary for a successful research, industrial, and entrepreneurial career in computing.
Option Requirements
 CS fundamentals. CS 1; CS 2; CS 4; CS 11,
 Intermediate CS. CS 21; CS 24; CS 38.
 CS Project Sequence. One of the following
 An undergraduate thesis (CS 80abc) supervised by a CS faculty member.
 A project in computer science, mentored by the studentâ€™s academic adviser or a sponsoring faculty member. The sequence must extend at least two quarters and total at least 18 units of CS 81abc.
 Any of the following threequarter sequences. Each of the sequences is expected to be available (nearly) yearly.
 Databases: CS 121, CS 122, CS 123.
 Graphics: CS/CNS 174 and two other CS 17x courses.
 Learning & Vision: At least three courses chosen from ME/CS 132 ab, EE/CNS/CS 148, CMS/CS/CNS/EE 155, CS/CNS/EE 156 ab, CS/CNS/EE 159, CNS/Bi/EE/CS 186, CNS/Bi/Ph/CS 187, ACM/CS/EE 218, including at least one of 132 b, 148, 156 b, 159, or 186.
 Networking & Distributed Systems: CS/EE 145 combined with two courses chosen from CS 142, CS/EE 143, and CS/EE 144.
 Quantum & Molecular Computing: At least three courses chosen from BE/CS/CNS/Bi 191 ab, BE/CS 196 ab, BE/ChE 130, Ph/CS 219 abc.
 Robotics: At least three courses chosen from ME 115 ab, ME/CS 131, ME/CS 132 ab, EE/CNS/CS 148, CNS/Bi/EE/CS 186.
 Advanced CS. A total of 72 CS units that are not applied to requirements 1 or 2 above, and that either (i) are numbered CS 114 and above or (ii) are in satisfaction of requirement 3 above. Included in these units must be at least one of CS 122, CS 124, CMS/CS 139, or CS 151.
 Mathematical fundamentals. Ma 2; Ma 3; Ma/CS 6a or Ma 121a.
 Communication fundamentals. E10; E11.
 Scientific fundamentals. In addition to all above requirements, 18 units selected from the following courses Bi 8, Bi 9, Ch 21abc, Ch 24, Ch 25, Ch 41abc, Ph 2abc, Ph 12abc, or any 100+ course in Bi, Ch, or Ph.
 Breadth. In addition to all above requirements, 36 units in Ma, ACM, or CS; 18 units in EAS or Ma; and 9 units not labeled PE or PA.
Units used to fulfill the Institute Core requirements do not count toward any of the option requirements. Pass/fail grading cannot be elected for courses taken to satisfy option requirements. Passing grades must be earned in a total of 486 units, including all courses used to satisfy the above requirements.
Double Majoring
Students interested in simultaneously pursuing a degree in a second option must fulfill all the requirements of the computer science option. Courses may be used to simultaneously fulfill requirements in both options. However, it is required that students have at least 63 units of computer science courses numbered 80abc, 81abc, or 114 and above that are not simultaneously used for fulfilling a requirement of the second option, i.e., requirement 4 in computer science must be fulfilled using courses that are not simultaneously used for fulfilling a requirement of the second option. To enroll in the program, the student should meet and discuss his/her plans with the option representative. In general, approval is contingent on good academic performance by the student and demonstrated ability for handling the heavier course load.
Advising
Because of large enrollments, students will not usually be able to have an advisor from the CS faculty during their freshman year. Starting in the sophomore year CS students will be assigned a faculty advisor whom they should meet with regularly, typically once per quarter. Students seeking a CS advisor should contact the undergraduate option secretary at academicscms.caltech.edu.
Research
There are many opportunities for undergraduate research in the computer science field, both at Caltech and outside of Caltech. There are a wide variety of research opportunities in computing across campus and at JPL, ranging from pervasive computing using wireless devices, to building and exploiting novel graphics devices, to algorithms, networking, molecular computing, or to using computing to search for quasars. In particular, upperclass students can pursue an Undergraduate Thesis (CS 80), Undergraduate Projects (CS 81), or Undergraduate Projects (CS 90), carried out under the supervision of a member of the computer science faculty (or other faculty as approved by the computer science undergraduate option representative). Campuswide, there is also a SURF (Summer Undergraduate Research Fellowships) program, please visit the SURF website for more information. The application deadline is typically in February. Students should begin talking with professors at least two months before the deadline. Outside of Caltech, there are also excellent oportunities for summer undergraduate research in computer science through NSF sponsored REUs (Research Experience for Undergraduates), please visit the REU website for more information.
Typical Course Schedule
The first year for a CS major is generally spent on satisfying most of the core requirements, but CS 1, CS 2, and/or CS 4 may be taken as well. After that, a typical course schedule looks as follows:

^{1}Commonly taken during the freshman year.
Study Tracks
We have collected here, for the benefit of Computer Science students and their advisors, various recommended study tracks in a few areas:
 Algorithms & Complexity
Ma/CS 117 Computability Theory
CS 139 Analysis and Design of Algorithms
CS 149 Introduction to Algorithmic Economics
CS 150 Probability And Algorithms
CS 151 Complexity Theory
CS/CNS/EE 154 Artificial Intelligence
CS/CNS/EE 155 Machine Learning & Data Mining
Ph/CS 219 abc Quantum Computation  Algorithmic Economics
CS 139 Analysis and Design of Algorithms
CS 149 Introduction to Algorithmic Economics
CS 152 Introduction to Data Privacy
SS/CS 241 Advanced Algorithmic Economics  BioComputes
ACM/EE/CMS 116 Introduction to Stochastic Processes and Modeling
CDS 110 Introductory to Feedback Systems
CS/EE/Ma 129ab Information & Complexity
CS/CNS/EE 156ab Learning Systems
CNS/Bi/Ph/CS 187 Neural Computation
BE/CS/CNS/Bi 191 ab Biomolecular Computation
Ph/CS 219 abc Quantum Computation  Graphics
CS/CNS 171 Introduction To Computer Graphics Laboratory
CS/CNS 174 Computer Graphics Projects
CS 176 Introduction To Computer Graphics Research
CS 177 Discrete Differential Geometry: Theory And Applications
ACM 106ab Introductory Methods Of Computational Mathematics  Machine Learning & Artificial Intelligence
ACM/EE/CMS 116 Introduction to Stochastic Processes and Modeling
EE/CNS/CS 148 ab Selected Topics in Computational Vision
CS 150 Probability and Algorithms
CS/CNS/EE 154 Artificial Intelligence
CS/CNS/EE 155 Machine Learning & Data Mining
CS/CNS/EE 156 ab Learning Systems
CNS/Bi/Ph/CS 187 Neural Computation  Networks & Distributed Systems
ACM/EE/CMS 116 Introduction to Stochastic Processes and Modeling
CS 142 Distributed Computing
CS/EE 143 Communication Networks
CS/EE/CMS 144 Networks: Structure & Economics
CS/EE 145 Projects in Networking
CS/EE 146 Advanced Networking
CS/EE 147 Network Performance Analysis  Robotics & Control
CDS 110 Introductory to Feedback Systems
ACM/EE/CMS 116 Introduction to Stochastic Processes and Modeling
EE/CNS/CS 148ab Selected topics in Computational Vision
CS/CNS/EE 156ab Learning Systems
CNS/Bi/Ph/CS 187 Neural Computation
ME 115ab Introduction To Kinematics And Robotics
ME/CS 132ab Advanced Robotics: Navigation And Vision  Systems
CS 115 Functional Programming
CS 116 Reasoning about Program Correctness
CS 118 Logic Model Checking for Formal Software Verification
CS 119 Reliable Software: Testing and Monitoring
CS 121 Introduction to Relational Databases
CS 122 Database System Implementation
CS 123 Projects in Database Systems
CS 124 Operating Systems