Don't Major in Computer Science
Or put less provocatively: college students should probably explore more than they currently do
Originally written Dec. 27, 2020.
I wrote this piece during my second year of college as an introspective way to navigate my career. Hope to respond to this in a few months as a soon-to-graduate senior!
Throughout my junior and senior year of high school, I was certain that I'd primarily study computer science in college. After all, I enjoyed coding apps, building games, and generally geeking out with others about technology. It wasn't until my first quarter at Stanford that I formed my opinion against studying computer science.
I don't have anything against those who study CS in college. I have no doubt the skills you pick up are invaluable and well worth the long nights of studying. However, I urge those who are majoring in computer science to deeply revaluate if that is really the best option for them, especially if pay and/or "this seems cool" are the primary factors for their decision1.
Thanks for reading Public Experiments! Subscribe for free to receive future posts.
Anyone Can Code
I thought computer science was right for me because programming pushed me into a state of "flow". When I was attempting to solve different problems with code, I often ceased to feel the passage of time and felt surrounded by my work. Whether I was working out, taking a shower, or eating food, all I could think about was the problem at hand.
What I didn't realize at the time was that I was not infatuated with programming. Rather, I had an innate affinity for working on tough problems and building things. Coding was the easiest outlet for this deeper trait: all I needed was a computer and an internet connection. This past year, I've felt the same "flow" state when thinking through tough abstract math proofs, deriving physics equations, and wiring breadboards.
Computer science seemed like an obvious major for me, but I came to realize that ultimately it was just a means to solve problems, just like math, physics, and any other engineering major. In my opinion, CS provides a comprehensive set of tools to solve problems. A traditional curriculum packed with data structures, algorithms, discrete math, probability, and development skills enable one to solve the large majority of practical problems.
In fact, I'd argue that these tools are so important that most individuals in any STEM major will pick the most valuable ones during their time in college, even if they do not major in CS. Students from not just other engineering disciplines, but also the social sciences, can take computer science courses to fulfill major requirements. However, recognize that CS doesn't provide the background knowledge on many of world's most pressing problems that it can be applied to. For example, many novel drug discovery methods rely on computation; however, without having the adequate background in medicine and biology, a CS major would have trouble understanding the problem, scoping it out, and picking the best tools for the job.
In general, I've also come to learn that computer science skills are the easiest to pick up when compared to other fields. It is really difficult to teach yourself about processor design or CRISPR or market economics. However, there are so many incredible free resources available online to learn CS that many can build the CS major toolset without ever stepping foot into a CS class.
People who enjoy coding should select a major based on a problem space they are interested in. If you enjoy tinkering with human computer interaction or programming languages, computer science may be the best major for you. However, if you want to work on problems in biology, study bioengineering. If you want to build rockets, study mechanical/aerospace engineering. For those interested in quantum information or optics, physics or math will likely be a better choice. If you have a passion for building, pick a major that gives you the skills to critically think and build, but also explore and understand problem spaces.
Almost everyone I’ve ever met would be well-served by spending more time thinking about what to focus on. It is much more important to work on the right thing than it is to work many hours. Most people waste most of their time on stuff that doesn’t matter.
- Sam Altman in How to Be Successful
Most successful ventures today will not only require the ability to build, but also to find interdisciplinary problems that you are uniquely qualified to solve. In 2020, there are no more low-hanging fruit on the internet (in other words, it is unlikely that your basic React website connected to Firebase will succeed due to its easy replicability).
Purpose of a University Education
As a final note for reflection, I strongly believe the purpose of a university education is to put yourself in uncomfortable situations. When it comes to academics, this means challenging yourself (obviously this is individual dependent and you should never do much, much more than what you can feasibly handle). Many students I've run into during my limited time in college are risk-averse. When given two options to fit into their schedule, 9 out of 10 will pick the easier one.
Their reasoning makes sense. Both classes satisfy the same requirement but they have a better chance of earning an A/A+ in one over the other. This bolsters their GPA, making them a better candidate for grad school and industry. Moreover, they have extra time they can allocate to other activities.
This thinking is problematic and is aptly described by Randy Pausch in "The Last Lecture".
“The brick walls are there for a reason. The brick walls are not there to keep us out. The brick walls are there to give us a chance to show how badly we want something. Because the brick walls are there to stop the people who don’t want it badly enough. They’re there to stop the other people.”
- Randy Paush in The Last Lecture
Courses that tackle challenging material are brick walls2. Those who succeed in those classes open themselves up to more opportunities earlier than later. Moreover, you learn to normalize challenge and become a hard worker by default. Hard work early on in life pays off later in an exponential fashion.
No Clue? Stay Upwind.
I discovered pg's essays during my senior year of high school and I credit one in particular for pushing me away from computer science and more towards exploration.
Suppose you're a college freshman deciding whether to major in math or economics. Well, math will give you more options: you can go into almost any field from math. If you major in math it will be easy to get into grad school in economics, but if you major in economics it will be hard to get into grad school in math.
Flying a glider is a good metaphor here. Because a glider doesn't have an engine, you can't fly into the wind without losing a lot of altitude. If you let yourself get far downwind of good places to land, your options narrow uncomfortably. As a rule you want to stay upwind. So I propose that as a replacement for "don't give up on your dreams." Stay upwind.
How do you do that, though? Even if math is upwind of economics, how are you supposed to know that as a high school student?
Well, you don't, and that's what you need to find out.
- Paul Graham in What You'll Wish You'd Known
The goal of college is to prepare yourself for the future. If you know exactly what this looks like, the choice for your major is obvious. But for most, it isn't clear cut. Therefore, we must travel upwind and pursue undergraduate degrees in broader fields that focus on first principles. Physics, math, and philosophy are great examples of this. If you want to build things like me, I'd extend this to any engineering major as well. Engineering majors can easily pick up computer science (and use it all the time) but the opposite is not true3.
Computer science is really, really freaking cool. Especially with new developments in AI (see: GPT-3, Deepmind protein folding, and progress in autonomous vehicles), CS seems like a go-to major for those who want to change the world. However, all these advances leverage other domains of knowledge that may be difficult to grasp after graduating. For example, protein folding is an intrinsically biological problem and many sensor technologies used in autonomous vehicles rely on device physics. You will not learn about these in a CS program unless you push yourself to take classes on them.
The one caveat here is that there are courses that appear more challenging because of the amount of work they require each student to put in. In my experience, these classes are not worth it since a motivated student in the class with less work will have an equal knowledge on the material to a student who took the class with more work. Be careful.
It is interesting how interviews for coveted software engineering internships are almost entirely based on LeetCode-esque problems and a resume screen. In theory, if you want to gain a SWE internship, all you have to do is take a course on algorithms and have a couple projects on your resume.