Update (2019-06-19): In a previous version of this post, I unintentionally painted CS at UT in a slightly negative light, so I’ve changed the wording to be more neutral (which is genuinely what I intended).
When I was a senior in high school, I debated whether to apply for Electrical Engineering (Electrical and Computer Engineering at some schools) or Computer Science. I never ended up making a decision. For those that are less keen on double majoring though, I hope that I can shed some light on the differences. Disclaimer: My comments are in the context of UT and may not transfer to departments at other universities. Even within UT, I focus on the general feel for the differences rather than describe it at a finer granularity.
Broadly speaking, ECE involves the theory and applications of analog and digital circuits. There are two specializations of ECE at UT: Electrical Engineering and Computer Engineering. Each can be further broken down into technical cores; EE includes communications and signal processing, energy systems, and integrated circuits; CE includes computer architecture, embedded systems, and software engineering. Computer Science’s closest sibling in the ECE department is software engineering, the most popular technical core. In CS, the emphasis is placed on learning a breadth of languages and material through projects and other practical means. Software engineering focuses more on design paradigms that help keep programs maintainable. Some of the undergraduate ECE classes I’ve found most useful are Introduction to Computing (EE 306), Computer Architecture (EE 460N), Real Time Operating Systems (EE 445M), Verilog Design (EE 460M), and Algorithms (EE 360C). I found everything I needed to prepare me for industry work in computer architecture in these classes.
Computer science as a term is more widely understood than ECE (I’ve had more encounters than I’d like to admit with people who ask me why I need a Master’s degree to change a light bulb, but I digress…). In its purest form, computer science studies the theory behind algorithms and software. Practically, anything written in some programming language falls under computer science. CS is an umbrella as wide as ECE is, but the CS department at UT doesn’t try to group classes together into cores like ECE does. Instead, the CS curriculum gives you flexibility to learn through a variety of project-driven classes. The CS classes I personally enjoyed most were Operating Systems (CS 439), Compilers (CS 375), Automata Theory (CS 341), Computer Graphics (CS 384), Physical Simulation (CS 395T), Programming for Performance (CS 378), and Advanced Computer Architecture (CS 350C).
Note that there are several great undergraduate and graduated classes in both ECE and CS that I didn’t get the chance to take, so my list is by no means comprehensive.
In my opinion, teaching style should be a first class citizen when deciding what major or class to pick. If the teaching style does not match your way of learning, then you’ll be less motivated to go to classes and you’ll start off at a disadvantage.
ECE classes at UT feel rigorous. The first two ECE classes in the curriculum, Introduction to Computing and Introduction to Electrical Engineering, are both difficult and give a sense of what future classes will be like. A general theme through the ECE department is to lecture on the fundamentals and then have the students understand the concepts through projects, problem sets, and exams. It is common to feel completely lost when starting a project or problem set, but by the end the concepts are much more accessible. Projects focus on practical applications of the material. Exams are almost “brutal” because they often require applying fundamentals to impractical and challenging scenarios. In doing so, however, exams test for a deep understanding of the fundamentals, even if the questions themselves can be unreasonable. As such, ECE classes take a departure from the high school grading norm and assign grades by class average, which typically hovers around 60.
The CS program has a starkly different environment. Professors spend time explaining the details of a concept and in general the exams test for practical applications of the material. Problem sets are less common and instead traded off for larger projects, which end up being the bulk of the workload. In the upper division classes especially, the assignments prepare the students for a final project of their choice, which takes several weeks to complete. CS classes can take up a significant amount of time and the value of a class is highly dependent on the amount of interest and effort put into the class.
In a single, somewhat reductive, sentence: ECE focuses on learning through a regimented schedule and a fire hose of coursework, whereas CS focuses on learning through exploration and hands on experience.
Logistics (potentially out of date at this point)
This section wouldn’t exist in an ideal world, but alas. The ECE department at UT has had a hard cap of 1500 students for over 9 years now, so class sizes are similar between semesters and availability of classes isn’t a significant concern. Due to its wildly increased popularity, the CS department has had an influx of students and is struggling to hire enough professors to meet the demand. Furthermore, the ECE and CS departments have developed a sort of enmity for each other, since many ECE students were “double majoring” with CS to take the interesting classes, only to drop the CS degree before graduating. Registration is tight, and double majoring is nigh impossible now. It has been getting better, but it’s still a noteworthy problem.