Computer Science has become the most popular major for undergraduates at Stanford University in the past decade.

A Job in Front of a Computer all Day — Who Would Want That?

In May 2015, as a graduating Masters student, I sat in a crammed room of almost 100. A preselected question was projected on to the screen to be addressed by the Chair of the Electrical Engineering Department (Professor Abbas El Gamal) at Stanford University, at its annual Town Hall Meeting. The question read, “There has been an ongoing trend of EE graduates pursuing software engineering careers instead of hardware jobs, what’s the department’s view on this trend?”. It’s true, software companies are throwing north of 100K in starting salary at grads fresh out of college. Graduates in math, EE, ME, and even physics PhDs are abandoning years of training in their perspective field and saying “Yes” to join the dark side.

Yes, I was one of traitors, as were many of my peers. To be honest, starting from elementary school, computers never really interested me except games like “Diablo” and “Starcraft”. Plus, having had a conscientious asian mom who would time how long I was in front of a computer or TV, any extra time spent on the computer outside of the an-hour-a-day-limit was frowned upon. When high school came around, I refrained from signing up for any programming class. I did not want a career that shackled me in front of a bright CRT for the rest of my life. I thought I rather preferred a job that I could interact with people, walk around from time to time, and hopefully didn’t have to clock-in and clock-out. I was good at math, the sciences, but had literally no idea what I wanted to do in my senior year. I applied to three different schools, each with a completely different major, hoping one of them would work out.

Coding bootcamps like Code Academy are offering 12-week courses that promise 98% hire rate and $100K+ average salary.

I went to Waterloo for undergrad in Mechatronics Engineering and the very first class was GENE 121. It was also known as General Engineering 121, the introductory programming course in C++ that every engineering student needed to take. This was my very first computers class, along with maybe a handful of others who also never programmed before. Almost instantly, it became the most difficult class. The first day was a simple “Hello World” program. Before we could wrap our mind around how to compile code, “recursion” assignment came, and it was a disaster. The experience was awful. The part that sucked wasn’t the material was difficult, it was the fact that others who took programming in high school were off to parties while I was debugging away. I was hoping that this was in fact the last programming course we will ever do, only to realize that in the subsequent semesters there will be “Data Structures and Algorithms”, “Operating Systems”, all mandatory for us aspiring robotics engineers. Really? I thought designing robot was hooking up a bunch of actuators and sensors. Let the softies worry about the code! A buddy of mine actually quit mechatronics after the first semester and switched to mechanical because there was way too much programming involved.

It kind of came together on my first co-op assignment (Waterloo engineering students were required to complete at least 5 co-ops, a.k.a. internships, in order to graduate). I worked as an IT front desk at a high school. Sorry, there were no robotics designer positions offered to freshmen. In between lending and checking back in usb cables and cameras, I was asked to maintain the school website. Having little experience in C# and HTML, it was until then I realized how fulfilling programming was. My work could be instantly reviewed by my boss, the pages can be visited by the users. There was the instant gratification that my work can be accessed and used by others.

I started to take a keen interest in programming even though it was not my major. Having this skill set also made me much more valuable in the job market. In the six co-ops that I’ve completed, none of them had the explicit title of “Software Engineer”, yet all required writing code in some capacity. I too was wooed by the big software companies upon graduation but wanted to stick through with my original major and attended grad school to study Electrical Engineering. Unfortunately, I still gave in, near graduation, I became a full-time software engineer. The will was strong but the flesh was weak.

A study done by Professor Philip Levis in the CS Department of Stanford University on the projected job openings per year and the degrees conferred (link)

Should I have jettisoned my training earlier and jumped into the bandwagon of computer science? A couple of my friends did just that during undergrad. They are very successful, but it probably wouldn’t have worked for me. I am a computer systems engineer. I also learned a lot (and forgot a lot) about vector calculus, convex optimizations, and Bode plots. However, thankfully at my day job, I mainly write Javascript and Python. God forbid I need to calculate the logical effort of a gate in circuit ever again. Nevertheless, a person who is an expert in Javascript and Python alone cannot perform my tasks. The engineering background taught me how to solve problems, specifically how to break a complex problem down to small manageable pieces and solve each via Googling or StackOverflow. I could visualize the software architecture as a system, figure out what are the inputs, what are the outputs, what are the bottlenecks, what are likely areas of failure. My previous experiences in hardware design also made me a much more disciplined software engineer, because poorly designed circuits in Verilog would almost never work. This discipline has helped me to think beyond functionality and more in terms of semantics, resources, and tricky corner cases. All the engineers whom I work with were not software engineers by training. Each brings a unique background outside of software to contribute to solving complex problems and designing user-friendly interfaces. I am finally starting to appreciate that what I learned outside of software engineering was not in vain. Plus, being a software engineer does not mean coding in front of a computer all day. I spend a huge chunk of my time reading, talking to various people inside and outside of the company, and oh, did i mention — a whole lot of Googling and learning new stuff on the fly.

Having a non-engineering major while complemented by coding skills are also becoming the norm. Lawyers are leveraging software programs to crunch through supporting documents when preparing a case. Artists are offering their work via Fiverr or personally designed websites. Family doctors were giving out diagnosis to their patients over Google Helpout (before it shutdown). Whatever the discipline you are in, software engineering will give you an unparalleled advantage in this field compared to those who do not have these skills. Knowing how to work with computers are no longer just for geeks.

Javascript is the most popular language on Github (link).

Now back to the Town Hall Meeting where the EE Department Chair was pondering a sensible response to the question asked: “There has been an ongoing trend of EE graduates pursuing pure software engineering careers instead of hardware jobs, what’s the department’s view on this trend?” I sat near the back of the room, dreadfully hoping the Chair of EE would not use this as cue to ask for a show of hands of all the traitors who have abandoned their trades and joined the dark side.

The Chair looked up to the audience and opened his mouth, then quickly closed it. He paused for a little longer and finally looked up. “You know what pisses me off?”, he barked, and the voice shook the entire room. I looked down, hoping this would not be a scathing denouncement of folks like me. “When people think that electrical engineering is hardware — IT’S NOT!”, he continued. “EE is the study of systems, energy, materials, and a whole lot of other fields that I don’t have time to get into. EE includes software, and is a core field because it enables us to manipulate computers. Today’s problems in academia and industry are no longer one dimensional, only a interdisciplinary mindset can tackle these problems.” He paused again, and with a smirk on his face he said: “I bet you those EE-trained software engineers are as good if not better than those coming out the CS building”.