- About
- Events
- Calendar
- Graduation Information
- Cornell Tech Colloquium
- Student Colloquium
- Student Recognition
- 2020 Celebratory Event
- BOOM
- CS Colloquium
- SoNIC Workshop
- Conway-Walker Lecture Series
- Salton Lecture Series
- Seminars / Lectures
- Big Red Hacks
- Cornell University High School Programming Contest
- Game Design Initiative
- CSMore: The Rising Sophomore Summer Program in Computer Science
- Explore CS Research
- Research Night Fall 2020

- People
- Courses
- Research
- Undergraduate
- M Eng
- MS
- PhD

Choosing a Coherent Set of Electives

The grade point average is but one way to measure the quality of an undergraduate record. An equally important attribute concerns depth-of-education, something that is best measured by the choice of elective courses. While required core CS courses ensure breadth-of-education and set the stage for more specialized work, it is through the choice of electives that you can communicate an appealing level of curiosity and a readiness for the future.

With this in mind, the faculty have developed a collection of vectors that promote coherent, in-depth study. Each vector has a magnitude (typically four to five courses, which may be internal or external to CS) and a direction representing a particular "line of inquiry" within CS.

- Artificial Intelligence
- Computational Science and Engineering
- Graphics
- Network Science
- Programming Languages
- Software Engineering
- Systems / Databases
- Theory

The faculty expect the set of vectors to evolve over time and plan to introduce or modify vectors as they see new directions for the department and the field.

Pursuing a vector (or one of its more specialized tracks) is optional and not a requirement for graduation. It should be driven by academic interest alone rather than based on risky predictions of where the field is going. The best way to ensure a successful career after you graduate as a CS major is to practice *now* the art of being intellectually nimble. Tumultuous times call for mobility. Cultivate a broad knowledge of the field and show the world through your transcript that it empowers you to go deep and to learn new areas. Choose your electives as if your life depended on it. It does.

### Vector Descriptions

*NOTE: The "F" notation Fxxx (or variants like F7xx) is used, informally speaking, to denote an Four or Five or, um, Six-thousand level Full-Fledged elective. It does not mean a 4000-level course (otherwise, we would have written "4" instead of "F".) Specifically and technically, it stands for any course that's at the 4000-6000 level, at least 3 credits, not an independent study or teaching for credit, and not required by the CS major. For example, Fxxx includes 4700, 5620, and 6110, but not 4820 (required by the major), 4090 (teaching experience in CS), 4999 (independent study), or 4121 (fewer than 3 credits). As another example, CS F4xx includes CS 4450 and 5430, but not CS 4410 (required by the major), 4411 (too few credits) or 4700 (doesn't match the pattern!)*.

### Vector name: ARTIFICIAL INTELLIGENCE

*Focuses on understanding and creating intelligent systems.*

**Explanation of requirements:** the core AI course and associated practicum, machine learning, an AI elective, and either connections to human intelligence or further grounding in techniques.

**Required courses: **Five total (4 full and 1 half)

- CS 4700, Foundations of Artificial Intelligence
- CS 4701, Practicum in Artificial Intelligence
- An additional course numbered CS F78x;
- An additional course numbered CS F7xx or CS 4300 (Language and Information) or CS F67x (Computer Vision) or CS 5846 (Decision Theory);
- An additional course chosen from the following list: COGST, PSYCH or LING Fxxx, CS F2xx. (Recall that independent studies such as LING 4493 or courses below 3 credits are disallowed according to the Fxxx naming convention.)

**Also recommended are coursed on **scientific computing (e.g., CS 4210 or 4220), game theory or related economics topics.

#### Track: Human-Language Technology

*Focuses on creating natural-language processing and information retrieval systems that can analyze and generate information in unstructured, natural-language format (e.g., English). Applications include search engines, automatic translations between languages, and human-computer interaction, among others.*

In addition to core AI and machine learning, the track focuses on courses covering the fundamentals of computational linguistics, natural language processing and/or information retrieval, and linguistics. The track also adds another course from those areas or from programming languages. In addition to the vector requirements:

- the course taken under (4) is either CS F74x or CS 4300
- the course taken under (5) is LING Fxxx (e.g. LING 4485)
- students take one additional course LING Fxxx (includes CS 3470) or CS F74x or CS F110

Also recommended are CS 2043 (UNIX Tools and Scripting), statistics, scientific computing (courses number x2xx), a foreign language.

#### Track: Machine Learning

*Focuses on machine learning methods and theory, with their numerous applications to large-scale data analysis problems in areas like search engines, natural language processing, data mining, robotics, and computational biology.*

In addition to the core AI course and the first machine learning course, the track includes a second course in machine learning or statistics. It also includes a course in an application area of machine learning or in an area that machine learning draws upon. In addition to the vector requirements (1)-(3), students take the following two courses which might count under (4) and (5), only if permitted by the AI vector:

- another course from CS F78x or CS 4850 (Math Found for the Info Age) or STSCI Fxxx (excluding STSCI 4080).
- one course from CS 4300 (Language and Technology) or CS F74x (Natural Language Processing) or CS F75x (Robotics) or CS F67x (Computer Vision) or CS F2xx (Scientific Computing).

### Vector name: COMPUTATIONAL SCIENCE AND ENGINEERING

*Focuses on the numerical algorithms that support computer modeling and simulation to guide experimental and design work in data-intensive scientific computing.*

**Explanation of requirements:** Effective numerical computing in science and engineering requires an understanding of the fundamental algorithms that have been devised to solve the continuous problems of applied mathematics. Requirements include a year-long sequence in numerical analysis that covers data fitting and approximation, nonlinear systems and optimization, ordinary and partial differential equations, and the essential methods of numerical linear algebra. An applied mathematics course that covers differential equations and/or optimization together with a programming versatility requirement completes the vector.

**Required courses: **Five minimum (3 full and 2 or more half). Note that a prerequisite for this vector is MATH 2930 (Differential Equations for Engineers) or Math 2220 (Multivariable Calculus).

- Two (different) courses numbered F2xx, with the following exception: one cannot count both CS 4220 (Numerical Analysis II: Linear and Nonlinear Problems) and CS 6210 (Matrix Computations), due to overlapping content.

Note that one can take CS 4210 (Numerical Analysis I: Numerical Analysis and Differential Equations) and CS 4220 in either order.

- One of the following applied mathematics courses: OR 3300 (Optimization I), TAM 3100 (Applied Mathematics I), Math 4200 (Differential Equations and Dynamical Systems), Math 4240 (Wavelets and Fourier Series), Math 4280 (Introduction to Partial Differential Equations), AEP 4210 (Mathematical Physics I), CEE 3310 (Fluid Mechanics), CEE 3710 (Structural Modeling and Behavior), MAE 3230 (Introductory Fluid Mechanics).

- A minimum of four-credit hours of programming experience obtained through any combination of CS 20xx courses: CS 2022 (Introduction to C), CS 2024 (C++ Programming), and CS 2043 (UNIX Tools and Scripting).

Also recommended are CS 3300 (data-driven web applications), CS 4320 (introduction to database systems), computer graphics courses with significant mathematical content numbered (typically numbered CS F6xx or corresponding cross-lists), CS F78x (machine learning courses).

### Vector name: GRAPHICS

*Focuses on computing with visual images*

**Explanation of requirements:** The introductory graphics course and practicum, scientific computing, and two electives (in various combinations) in graphics and related fields

**Required courses: **Five total (4 full and 1 half)

- CS 4620, introduction to computer graphics
- CS 4621, computer graphics practicum
- CS F2xx
- A course drawn from the following list: CS 5625, CS 6620, CS 6630, CS 6640, CS 6650. Note that the 5000-level courses have a comparable level of difficulty with 4000-level CS courses.
- An additional course drawn from the following list: CS F6xx (graphics and vision courses) or CS 3152 or CS 4152 or CS 4154 [game design courses]

Also recommended are courses in visual art or photography, as well as additional 4000-level mathematics courses.

### Vector name: NETWORK SCIENCE

*The social, technological, and natural worlds are connected; the study of networks sheds light on these connections. This vector provides preparation in the network- and data-analysis tools to understand and develop predictive models of physical, biological, and social network phenomena.*

**Explanation of requirements:** Two core courses in the analysis of networks; a course in machine learning; and a course on application areas

**Required courses: **Four total (4 full and 0 half)

- Two different courses numbered CS x85x (complex networks/information access), or INFO 4220(Networks II). To be clear: CS 2850 counts towards this requirement.
- One advanced technical cuourse dealing with understanding data. Courses that count towards this requirement are coursees numbered CS F78x (machine learning courses) or CS 4758 (Robot Learning) or CS 4740 (Natural Language Processing) or CS 3300 (Data-driven Web Applications) or CS 4300 (Language and Information).
- One course chosen from the following list: ORIE x350 (Game Theory), ECON 4020 (Game Theory; formerly, ECON 3680), CS F84x (game theory courses), or INFO 4220 (Networks II) if not already used to satisfy the requirements above.

### Vector name: PROGRAMMING LANGUAGES

*Spans logics and language semantics, language design, compilation and optimization.*

**Explanation of requirements:** Requirements include a course on programming languages; a course on compilers and the associated practicum; an elective in either applied logic, computability and complexity, or advanced programming languages; and a (short) course on a particular language.

**Required courses: **Five total (3 full and 2 half)

- CS F110 (programming-language and logics courses)
- CS 4120 (introduction to compilers)
- CS 4121 (practicum in compilers)
- An additional course chosen from the following list: CS 4860 (applied logic), CS 5114 (network programming languages), CS 5860 (intro to formal methods), CS F810 (computability and complexity), or CS 611x if not already used to satisfy the requirements above.
- One short course, CS 202x, on an additional programming language. For example, 2022 (C), 2024 (C++) qualify.

Since 4110 and 4120 are typically offered in alternate years, completion of this vector usually requires taking one of these courses by fall of one's junior year.

### Vector name: SOFTWARE ENGINEERING

*Provides students with the fundamentals of software engineering and extensive implementation experience in a variety of application areas.*

**Explanation of requirements: **a masters-level course on software engineering, two programming-intensive practica in different areas, and an additional course with a heavy implementation component. Experience in C++ is strongly recommended (note that many CS majors are exposed to Linux through the core course CS 3410).

**Required courses: **Four total (2 full and 2 half, but at least one additional full course corresponding to one of the half-course practica is strongly recommended (and in some cases required))

- CS 5150 (Software Engineering) or CS 5152 (Open_source Software Engineering)
- Two different courses numbered 4xx1 (practicums, such as 4121 (compilers), 4321 (databases), 4411 (operating systems), 4621 (computer graphics), 4701 (artificial intelligence)).

Note: It is strongly recommended (and in some cases required) that one also take the corresponding "full" course; for example, if one takes 4621 (the graphics practicum), it is recommended that one also take 4620 (introduction to computer graphics) - One of CS 3152(Introduction to Computer Game Development), CS 4152 (Advanced Topics in Computer Game Architecture), CS 4154 (Analytics-Driven Game Design), CS F45x (computer networks), CS 5412 (Cloud Computing), 5414 (Distributed Computing Systems), or the following implementation-heavy computer graphics courses: CS 5625, 6620, 6630, 6650.

Also recommended are exposure to C++, either through 2024 (C++ programming) or practica taught in C++; 2043 (UNIX tools and Scripting); CS 2300 (intermediate design and programming for the web), CS 3300 (data-driven web applications).

### Vector name: SYSTEMS / DATABASES

*Focuses on design and implementation of the fundamental software systems that comprise our computing infrastructure.*

**Explanation of requirements: **the core operating-systems practicum, and three systems electives (areas include networking, architecture, and so on). The launch-point for this vector is CS4410 (operating systems, a core CS course) and its practicum, CS 4411. Many students follow on with CS4450/5450 (networks, not offered every year), CS 5430 (security) and/or CS 5412/14 (intermediate computer systems: cloud and distributed computing and high performance systems and networking), and other 54xx courses). Note: undergraduates should not have difficulty taking these CS 54xx courses provided that they had no difficulty in CS4410/CS4411.

**Required courses: **Four total (3 full, 1 half)

- CS 4411 (Practicum in Operating Systems) or CS 4321 (Practicum in Database Systems)
- 3 additional courses chosen from the following list: CS F4xx, CS F12x (compilers courses), CS F32x (database courses), and ECE 4450 (computer networks and telecommunications)

Although any group of courses from the acceptable list will do, many systems students find it especially useful to get a solid background in databases.

Given the definition of "Fxxx" from above, CS F4xx includes CS 4450/5450, CS 5430, CS 5412, CS 5413, and CS 5414, but does not include CS4410 or CS 4411; similarly, CS 4321 is not included under F32x, and CS 4121 is not included under CS F12x.

#### Track: Operating Systems

*Provides detailed and hands-on knowledge of operating systems and low-level systems software.*

In order to build a detailed understanding of operating systems and low-level systems software, the following course is required in addition to the vector requirements:

- the practicum under (1) is CS 4411 (Practicum in Operating Systems).

#### Track: Security & Trustworthy Systems

*Addresses fundamental problems in ensuring the security and reliability of our global critical computing infrastructure.*

Combines operating systems with mathematical tools for cryptography or verification, system security, and the second course in the systems core sequence. In addition to the vector requirements:

- the practicum under (1) is CS 4411 (Practicum in Operating Systems).
- one course under (2) is CS 5430 (System Security)
- one course under (2) is CS 5412 (Cloud Computing) or 5414 (Distributed Computing Systems).
- students take one additional course CS 4830 (Introduction to Cryptography) [preferred] or CS4860 (Applied Logic) or MATH 3360 (Applicable Algebra)

Also recommended are INFO 5150 (Culture, Law and Politics of the Internet) or other relevant law or policy courses. Note: undergraduates should not have difficulty taking the CS 54xx courses provided that they had no difficulty in CS 4410/CS 4411.

#### Track: Data-Intensive Computing

*Focuses on the foundations of managing, processing, and analyzing large datasets*

Combines one course plus practicum on data management and courses on large data-driven systems, with machine learning/data mining or information retrieval. In addition to the vector requirements:

- the practicum under (1) is CS 4321 (Practicum in Database Systems);
- one of the three courses under (2) isCS 4320 (Database Systems);
- students take one additional course from CS F78x (Machine Learning) or ORIE 4740 or CS 4300 (Language and Technology) or CS 4740 (Natural Language Processing)

### Vector name: THEORY

*Focuses on the study of efficient computation, models of computational processes, and their limits.*

**Explanation of requirements:** a course in computability/complexity, two theory electives and an upper-level technical mathematics course

**Required courses: **Four total (4 full, 0 half)

- CS 481x (intro theory course)
- Two additional courses numbered CS F8xx or from the following list: ECE 6890 (An Algorithmic and Information-Theoretic Toolbox for Massive Data), ORIE 6330 (Graph Theory and Network Flow), ORIE 6335 (Scheduling Theory), ORIE 6334 (Combinatorial Optimization). (Recall that CS 4820 does not satisfy this requirement, since the "F" notation indicates a 4000-6000 non-CS-major-required 3+ credit course.)
- An additional 3+ credit course numbered MATH THxx, where the thousands digit T is between 3 and 6 inclusive and where the hundredths digit is between 1 and 9 inclusive, or MATH 4010 (Honors seminar: Topics in Modern Mathematics) or CS 4860 (Applied Logic).

Also recommended are CS 4210 or 4220 (Scientific computation, numerical analysis); MATH 4320 or 4340 (Abstract algebra); MATH 4810 (Logic).