Thoughts as an ECE & CS double major at UT Austin

blog-feature-image

Disclaimer: This is written from the perspective of someone who pursued undergraduate studies in 2011 to 2015.

Like many other high school tech enthusiasts, I had difficulty deciding whether to apply to university for Electrical Engineering (or often Electrical and Computer Engineering) or Computer Science. I ultimately decided to study both. Where I pursued my undergraduate studies—The University of Texas at Austin (UT Austin)—the departments are not only separate, but they’re in different colleges altogether. In this post, I share my personal experience as a double major.

Curriculum

Though there is some overlap between the fields, e.g., computer architecture, data science, and algorithms, Electrical and Computer Engineering (ECE) extends deeper into the theory and applications of circuitry, and Computer Science (CS) extends deeper into the theory of computation and a broad range of software applications.

ECE students initially build a broad foundation of coursework that provides glimpses into the main specializations of Electrical Engineering and Computer Engineering. Mandatory coursework includes Introduction to Circuits, Introduction to Embedded Systems, Software Design and Implementation, and Linear Systems and Signals. Upon completion of the foundational courses, which typically consume 1.5 years, students can choose a specialization, or technical core. The most popular cores (in increasing popularity) are the parts of ECE that are most closely related to CS: Computer Architecture and Embedded Systems, Software Engineering and Design, and Data Science and Information Processing. Each technical core has its own coursework requirements that fill in the most of the remaining years of the degree plan. Additionally, for variety, students are required to take a handful of ECE courses outside their technical core. Finally, in the last year of the program, students are required to complete a capstone project. Students team up in groups of four or five and are paired with either an industry sponsor—if pursuing an implementation-focused project—or a faculty mentor—if pursuing a research-focused project. Overall the curriculum emphasizes depth, focus, and practicality.

As with ECE, CS students begin their educational journey by taking a handful of foundational courses—much fewer than ECE—including Data Structures, Principles of Computer Systems, and Algorithms and Complexity. Shortly into the program, CS students are granted access to a wide variety of courses ranging from Theory of Computation to Object-Oriented Programming to Game Development. From there, students can pick and choose whichever courses they see fit to achieve their personal goals; or, they can pursue one or more pre-planned concentrations. Unlike ECE, the CS department doesn’t impose regimented schedules of coursework. Overall, the curriculum emphasizes flexibility and variety.

Teaching Style

Due to the notoriously high salaries of software jobs, there is massive interest in the software-oriented sides of ECE and CS. In 2022, 20% of all applicants to UT selected CS as their first choice, and, as reflected by the most popular technical cores, ECE is often their Plan B. However, ECE at UT Austin feels completely different from CS.

A case study that, in my opinion, encompasses the characteristics of both departments is the operating systems course. Both departments offer an operating systems course, and the syllabuses of both offerings look similar. In the CS version, students complete 5 projects in groups of 4, and there are a couple of simple exams throughout the semester. CS students consider this course to be one of the most challenging in the program. In the ECE version, students complete the same 5 projects in groups of 2. Additionally, there is a 6th project, and the exams are much more rigorous, often resulting in averages close to 60%. ECE students consider the difficulty of this course to be on par with most other courses in the program.

That’s not to say that ECE students are stronger than CS students. In fact, the comparison is a little disingenuous: The ECE class is generally taken in the 3rd or 4th year, whereas the CS class is taken in the 2nd year. Rather, the ECE department just sets a tighter requirement for what they consider to be a “successful” student.

As another example, the first two ECE classes that students are required to take are considered to be “weed-out” classes—the average on exams hovers around 40% including copious partial credit, and students who do poorly on exams are incentivized to drop the major. On the other hand, the initial CS courses provide a much gentler introduction to the field and encourage students to keep learning. To ECE’s credit, however, students who successfully make it out of these introductory courses, and ECE courses in general, are rewarded with an unshakable foundation.

To put it succinctly, the ECE program feels harder and more rigorous than the CS program, which fosters learning through exploration. There are pros and cons of both, and, if you’re struggling to pick between the departments, pick the one that matches your learning style. It will make a big difference.

Bonus: Courses I Enjoyed

I pursued the Computer Architecture and Embedded Systems technical core in ECE, and many of my CS courses were related. Below are my favorite courses (undergraduate and graduate). This is by no means a comprehensive list of good courses, and some courses may have changed or may no longer be offered.

  • CS 439: Principles of Computer Systems
  • CS 341: Automata Theory
  • CS 350C: Advanced Computer Architecture
  • CS 378: Programming for Performance
  • CS 384G: Computer Graphics
  • CS 395T: Physical Simulation
  • CS 395T: Prediction Mechanisms
  • EE 306: Introduction to Computing
  • EE 445M: Embedded and Real-Time Systems
  • EE 360C: Algorithms
  • EE 460M: Digital Systems Design Using HDL
  • EE 380L.5: Engineering Programming Languages
  • EE 382N.10: Parallel Computer Architecture
  • EE 382N.20: Computer Architecture: Parallelism/Locality