Choosing my major: CS, CE, or EE

posted: February 9, 2019

tl;dr: I would have gotten a BSCE had it existed at the time, but I was a year too early...

The tweet below from Pythonista David Beazley brought back memories about how I ended up choosing my major at Cornell.

Like David Beazely, apparently, I had an early exposure as a teenager to assembly language programming on the 6502 processor, as well as a few of its 8-bit brethren such as the Z80. This wasn’t too surprising given the hobbyist market for early personal computers and the fact that the 6502 powered two of the most popular computers in the early 1980s, the Apple II and the Commodore 64. It was tinkering around with computers, both hardware and software, that spurred my desire to study them further in college and to continue working in the field after college.

I chose to attend Cornell, and fortunately they chose me. At Cornell, as is the case at many large universities, you don’t apply to the university as a whole: you apply to a particular college or school. So you already have to have some idea of what degree you want to earn and what you want your major to be. My dad was an engineer and I was interested in computers, so I applied to the College of Engineering as a 17 year-old high school senior.

I’ve always felt that having to choose to enter engineering college at the age of 17 is a barrier of entry that prevents many from getting an engineering degree. Yes in theory it is possible to transfer between colleges once at the university, but in practice at Cornell it is very rare for someone to transfer into the College of Engineering; the opposite direction is much more common. There are only a few engineering courses required in the first two years, but there are lots of required physics, chemistry, and math courses. If someone in another college doesn’t start taking those courses immediately as a first semester freshman, he or she will quickly be behind the rest of the class and may need an extra semester or two to catch up. With the price of tuition being what it is, this can be cost prohibitive to say the least.

So I was lucky to be in the Cornell College of Engineering as an incoming freshman, which is actually one of the most pioneering engineering colleges in the world. Cornell has a strong claim, along with MIT, of having invented the Electrical Engineering (EE) degree. Cornell also established one of the first departments of Computer Science (CS) in 1965, decades ahead of Ivy League peers such as Harvard, which didn’t start offering an undergraduate CS degree until 1984 (I started at Cornell in 1982).

Much of academia seems to take simple concepts and explain them in complex ways

The professors in the 1960s Cornell CS department, and the older ones when I arrived in 1982, typically had one of two degree backgrounds: mathematics or electrical engineering. Early computer science was a blend of those two fields. You had to first build a computer in order to do something with it, and as computers long ago evolved from mechanical systems to electrical ones, that was in the domain of the electrical engineers. Once you had a computer, you could do all sorts of interesting computations and abstract logic with it, and that was the domain of mathematicians.

Computer science in 1982 was less than twenty years old as an academic field of study at Cornell, whereas electrical engineering had been around for nearly a century. The electrical engineering course book was a lot thicker than the computer science course book. Some of the more applied computer science courses also had an electrical engineering course number and were listed in both departments. I actually took more computer science courses than electrical engineering courses my first two years at Cornell before I had to choose my major. I also worked in the computer science department as a tutor/consultant and grader. But I ultimately went with electrical engineering as my choice, for the reason alluded to in David Beazely’s tweet.

Engineering courses at a place like Cornell tend not to be as applied and practical as many think: there’s a lot of abstract theory, too. Cornell’s CS department actually invented their own high level language variant, PL/C (Programming Language/Cornell), and used it to teach the lower level CS courses, because they did not want to teach students the syntactical details of a particular language: they wanted to teach general language and programming concepts.

Much of the theory in academic CS at the time revolved around proving program correctness in a mathematical sense. I found these proofs to be tedious. Having already worked as a programmer, I had a pretty strong feeling that I would never do one of these proofs in industry, which thirty years later has turned out to be an absolutely correct premonition. Electrical engineering has its theoretical side too, but its theoretical side is physics, including Maxwell’s equations and quantum mechanics. I really enjoyed physics, and had three semesters of it anyway as a general requirement of the College of Engineering. I even briefly toyed with the idea of majoring in Applied and Engineering Physics (A&EP), but my dad talked me out of that, correctly stating that if I majored in A&EP, a somewhat esoteric field of study, I would forever be explaining to people just what my degree field was. When it came time in my second semester sophomore year to choose a major, I chose electrical engineering over computer science.

That decision didn’t stop me at all from taking the courses I wanted to take, but it did mean I could skip out of the most theoretical CS courses, and avoid those tedious proofs. I took nearly as many CS classes as EE classes, plus classes that were listed in both departments, which tended to be the ones I enjoyed the most, such as operating systems.

I ended up with a BSEE degree, class of 1986. As it turned out, there were enough students doing what I had done, taking a mix of both CS and EE courses, that the very next year Cornell awarded its first BSCE degree in the field of computer engineering. Had it existed just a year earlier, that’s the degree I would have gotten. To further emphasize computer engineering Cornell’s EE school itself was renamed the School of Electrical and Computer Engineering.

Like those early professors in Cornell’s CS department in 1965, who held degrees in either mathematics and electrical engineering, my degree doesn’t exactly match what I ended up doing in my career. It was, however, close enough.

Related post: Software developer education over the years