Computing@UCLA

Career, major, and course guides to studying the computing fields at UCLA

Guide to Software Engineering and Computer Science at UCLA

This guide is still a work in progress, so please bear with me as I update it. This is a guide specifically about software engineering. If you’re interested in machine learning or data science, that guide is on a different page.

This guide is meant to be comprehensive and used as a reference, so please use the Table of Contents below to navigate to the most relevant section.

Table of Contents

Computer Science ≠ Software Engineering

Let’s start off by clarifying that Computer Science is not synonymous with Software Engineering. It’s true that most Computer Science graduates end up working in Software Engineering (and that most Software Engineers come from Computer Science programs), but CS covers so much more than SWE: hardware and computer architecture, programming languages, theory of computation, artificial intelligence and machine learning. An undergraduate degree program in Computer Science is not a job training program for Software Engineering. Computer Science is its own academic discipline, and software engineering is an engineering discipline that draws on many of the principles of computer science and applies an engineering methodology to design and create software under constraints.

Software Engineering Preparation

As mentioned above, there is so much more to computer science than just software engineering, but there are some computer science topics that are useful (or even absolutely essential) for software engineers. The two most important classes, by far, are Data Structures (CS 32) and Algorithms (CS 180). These are the most frequently tested topics in software engineering interviews, and the experience you gain in CS 32 will prepare you to actually work on software in the real world. I would venture to say that these two classes alone are the bare minimum you need to actually pass a software engineering interview—although it’s helpful to take additional classes.

The next most useful class is the infamous Software Construction (CS 35L), a Professor Eggert special. The class teaches the Unix shell and scripting, package management and version control, build systems, and a little bit of web programming and low-level programming. The biggest feature of the course (post-2020) is the collaborative final project, which requires you to design and build a full-stack web app using Node.js and React. If you think of CS 32 as teaching you how to write programs, you can think of CS 35L as teaching you all of the supporting processes that actually make your programs useful. You’re not likely to see CS 35L topics in an interview, but knowing them will make your experience much better when you start your first software engineering internship or job. The full-stack project is also something you can show off on your resume when you don’t have a lot of relevant experience to show yet.

The rest of the courses in the Computer Science department can be useful if you want to specialize in a specific area of software engineering.

Despite the course name, Software Engineering (CS 130) is of mixed usefulness. It teaches a lot of formal engineering processes, like requirements specification, software development methodologies, and testing. While these can make you a better software engineer, not every company uses the same formalisms, and it’s difficult to demonstrate the qualities of a good engineer to potential employers. One benefit of the course is that, like CS 35L, there is a major course project that involves developing an application from start to finish that you can show off on your resume.

Majors

The majors detailed below provide varying degrees of instruction in computer science, math, electrical engineering, physical sciences, and other topics.

Computer Science B.S.

The Computer Science department offers a range of three majors: Computer Science, Computer Science and Engineering, and Computer Engineering. CS&E and CE trade some of the core CS courses and electives for additional courses in Electrical Engineering. The differences between CS and CS&E are very minor, while CE is a greater mix of CS and EE. All three majors have very similar career prospects, so I’ll only focus on Computer Science here.

The Computer Science major provides a very broad education in theoretical computer science. The lower division prerequisites cover the full suite of math classes (calculus, linear algebra, and differential equations), including Discrete Math (MATH 61), as well as physics. The introductory computer science series covers basic C++ programming (CS 31), data structures (CS 32), machine structures (CS 33), common software construction tools (CS 35L), and digital logic (CS M51A).

The upper division courses cover most areas of computer science, including operating systems (CS 111), networking (CS 118) [no longer required as of Fall 2025], software engineering (CS 130), programming languages (CS 131), architecture (CS M151B), algorithms (CS 180), and theory of computing (CS 181). The major provides five free electives [or seven, as of Fall 2025], which cover a range of topics (though largely focused on machine learning).

One benefit of being housed in the School of Engineering is that Computer Science majors have half the GEs of L&S students, and no foreign language requirement, leaving more room to take technical classes. As engineers, Computer science majors have a Technical Breadth Area that requires students to take courses outside their major department. This can include courses in other engineering departments, mathematics, or the most popular options, digital humanities or technology management. If you want to absolutely maximize your technical courses, it’s possible to take cross-listed courses from the Electrical and Computer Engineering department like Machine Learning (CS/EC ENGR M146) and Data Science (CS/EC ENGR M148), or take computing courses offered solely by the ECE department, like Deep Learning (EC ENGR C147), Computer Vision (EC ENGR 149), and Numerical Computing (EC ENGR 133A and 133B).

In addition, the Sci-Tech Electives of the CS major (but not CS&E or CE) allow you to take courses from a number of departments across campus. While you can technically fulfill this requirement with additional CS electives [this option is no longer available for students entering after Fall 2025], I don’t recommend this path. At present, there aren’t enough elective offerings to take eight computer science electives. You can take Electrical Engineering courses, or courses in Statistics and Mathematics (which is especially good for graduate school preparation), as well as Economics and Management (for those interested in studying business as well).

The Computer Science major (and related CS&E and CE) is the most flexible path to study computer science and software engineering at UCLA. The large number of electives allows you to easily specialize your education, and the breadth of required courses covers all of the most important software engineering topics.

Mathematics of Computation B.S.

The Mathematics of Computation major is a mix of about 60% math and 40% computer science. It’s one of the most popular options for pursuing computer science in the College of L&S. The lower division prerequisites are nearly identical to the Computer Science major, with the full suite of math classes (calculus, linear algebra, and differential equations), including Discrete Math (MATH 61), as well as physics and the introductory computer science series (I recommend taking CS 31, 32, and 33 instead of the Math department’s C++ programming courses).

The upper division courses are split between math and computer science:

The major provides a lot of flexibility with course selection, especially with regards to computer science courses. Many essential topics like algorithms and machine learning are offered in both the Math and Computer Science departments, so you have the flexibility to choose the approach you prefer. Because the electives are unrestricted, Math of Comp majors have the ability to specialize in anything that Computer Science majors can (including systems and architecture), though only in one or two areas. The foundation in upper division math is extra helpful preparation for graduate school study in computer science, machine learning, data science, and similar fields.

Linguistics and Computer Science B.A.

As the registrar’s description states:

The major combines the basic courses of the general linguistics program with that of computer science, accommodating students who want professional preparation in computer science but do not necessarily have a strong interest in computer systems hardware.

Ling + CS is about equally linguistics and computer science courses (none of them in hardware). The lower division prerequisites include all of the introductory computer science courses (except CS M51A), and basic calculus (MATH 31A/31B), discrete math (MATH 61), and probability (MATH 70). The upper divsion courses are mostly in linguistics, with four required CS courses: Programming Languages (CS 131), Algorithms (CS 180), Theory of Computing (CS 181), and either Compilers (CS 132) or Artificial Intelligence (CS 161).

While Ling + CS includes all the essential courses I outlined above, the restriction on upper division CS courses makes it difficult for Ling + CS majors to specialize in systems, hardware, machine learning, etc. Depending on your viewpoint, that might be a benefit—if you’re not interested in hardware, the closest you will ever get is assembly in CS 33. Despite this, Ling + CS is still popular, as it requries the least preparation in math and physics but is still enough to pass most general software engineering interviews at tech companies.

Electrical Engineering B.S.

Electrical Engineering is a relatively popular choice for engineering students pursuing careers in computing fields. It includes most of the computer science lower division courses, with the exception of CS 35L, and all the same math and physics preparation. The upper division required courses are all in Electrical Engineering, but the major has three electives (one of which may be in Computer Science or another engineering department).

As mentioned above, it is possible to take cross-listed courses for the electrical engineering electives, or CS-adjacent courses like Deep Learning (EC ENGR C147) and Neural Signal Processing (EC ENGR C143A). Electrical Engineering majors (and Computer Engineering majors, since the major is offered jointly between the CS and ECE departments) can choose to take Computer Science courses for their Technical Breadth Area, which provides more flexibility to specialize in topics like Operating Systems, Algorithms, and Databases.

With the right TBA and elective selections, Electrical Engineering offers the opportunity to take about as many CS courses as either Math of Comp or Ling + CS. The remaining coursework is in a field related to computing, and the major comes with all the tradeoffs of being in the engineering school, including fewer GEs but more math and physics preparation required.

Cognitive Science B.S.

Cognitive Science (or “the other CS”) is a mixture of psychology and computer science, and is another route into software engineering from the College of Letters & Sciences. Besides software engineering, Cognitive Science is also a good major for students looking to work in other roles in tech, like UI/UX Designers, where the psychology background can really be a benefit over other technical majors. The lower division covers some basic sciences and psychology, single-variable calculus, as well as the introductory programming courses (CS 31-32 recommended).

CogSci majors have a core of three upper division psychology courses, two fieldwork/research courses, and four electives to choose from a wide array. The elective offers include courses from communications, linguistics, math, neuroscience, psychology, statistics, and most relevantly, computer science. Much like Math of Comp majors, CogSci majors have the flexibility to specialize in an area of computer science.

Minors

Unlike many similar institutions, UCLA does not offer minors in most engineering subjects, including Computer Science. There are a limited selection of minors that may help prepare you for software engineering, two of which are offered by the Computer Science department.

Data Science Engineering Minor

The Data Science Engineering minor is the closest thing that UCLA offers to a Computer Science or Electrical Engineering minor. It requires linear algebra (MATH 33A) and data structures (CS 32), which itself requires introductory C++ (CS 31). The upper division required courses include a probability course (STATS 100A or equivalent), and the CS versions of data science (CS M148) and machine learning (CS M146). There are two electives that you can use to shape the minor in a particular direction, from hardcore deep learning (with EC ENGR C147 and CS 162) and data analysis (with STATS 100B, 170, or C180) to signal processing (with EC ENGR 102, 113, and 114) and software engineering (with CS 180 and 143).

For students not majoring in Computer Science, the DSE minor can provide all the necessary courses and one of the recommended courses that I listed as preparation for software engineering above, while providing something computing-related to list on your resume. The minor does one major shortcoming: the list of Computer Science electives is heavily restricted to machine learning and data science, with no option to take courses in hardware, architecture, security, or theory. However, for Math of Comp and Ling + CS majors, the DSE minor can still be a good route to take additional CS electives beyond the number required by their major.

Bioinformatics Minor

More specialized than the DSE minor, Bioinformatics is the application of statistical and computational methods to biological (especially genomic) data. Predictably, the lower division requirements include introductory biology (LIFESCI 7A) in addition to data structures (CS 32), linear algebra (MATH 33A), and somewhat uniquely among the minors listed here, discrete structures (MATH 61). The upper division requirements include an algorithms course (CS 180), a course in computational biology (CS M184), two bioinformatics courses (CS CM121, CM122, or CM124), and one elective, which can be a range of bioinformatics-related courses in the Computer Science, Chemistry, Statistics, or various Biology departments.

Like the Data Science Engineering minor, Bioinformatics covers the two most important prep classes, but the rest of the courses are highly specialized. A big caveat to the minor is that the Computer Science department has struggled to offer the required courses in the past, with many being offered in only a single quarter or not at all. Most of the same bioinformatics courses in the CS department can be taken through the Data Science Engineering minor, so unless you have an interest in biology, DSE is the better practical choice.

Mathematics Minor

Although it is the least directly relevant minor on this list, the Mathematics minor consists of five free upper division electives. The Math department has many courses that are computing-adjacent, including algorithms (MATH 182), machine learning (MATH 156), graph theory (MATH 180), networks (MATH 168), optimization (MATH 164), applied numerical methods (MATH 151A and 151B), and cryptography (MATH 116). While most of these courses don’t include any engineering component, the mathematical foundations are still useful, especially for students looking to pursue graduate study in Computer Science later.

Recommendations

Bottom Line Up Front: Major in CS for the most flexibility to specialize. If you were admitted to L&S, pick the major with the most interesting other half (math, linguistics, or psychology), since the career outcomes are about the same.

Full Recommendations: As mentioned above, any of the majors detailed will be sufficient preparation for most software engineering jobs. Far more important is internship experience, personal projects and clubs, and interview skills.

For specific commentary on each major:

A Note On Graduate School

While grad school isn’t necessary for software engineers (and most undergrads go directly into software engineering), some students prefer to pursue graduate school to specialize in a specific field, to fill in gaps in their undergraduate major, or to forestall their inevitable dread over leaving the structured orbit of schooling and charting their own course through the heavens. Graduate school often comes in two flavors: a one— to one and a half—year “professional” Masters program, which only involves coursework and may be called by a variety of different names (M.S. in Computer Science, Masters of Engineering, Masters of Software Engineering), and a two—year program involving research that sometimes serves as a precursor to a PhD. Graduates of both programs (the ones that don’t go on to a PhD) are usually viewed similarly in terms of career benefits in software engineering. Depending on the school and the designation, the professional degrees may include more team projects and courses on leadership or engineering process, while a research Masters will cover more theoretical computer science. A Masters isn’t strictly necessary, but it can be useful if you feel like your undergraduate major wasn’t as much preparation as you wanted.