What to Major in?

Hello everyone,

I am a homeschooled junior in high school interested in several fields (physics, math, and theoretical CS), but am unsure which to major in. I will first provide you a little background as to my specific interests/studies. Below are some topics I am currently studying on my own outside of school.

Math:

  1. Abstract Algebra
  2. Category Theory (useful for my CS work)
  3. Topology

Physics:

  1. Classical Mechanics (phase space, Lagrangians, Hamiltonians, etc.)
  2. Quantum Mechanics (just familiarizing myself with basic principles and working some problems at this stage)

CS:

  1. Information Theory
  2. Computability Theory
  3. Computational Complexity
  4. Quantum Computation (mostly from the perspective of computer science but I have been working on some of the theory behind physical implementations; I use "Quantum Computation and Quantum Information" by Nielsen and Chuang)

In school I am taking Calculus II and University Physics I (a Calculus based course in physics), which are both completely review for me so far. In fact, I have never received less than an A in a course in high school and I haven’t been studying much at all. I know that my work outside of school may appear to be a ridiculous exaggeration but my parents never let me accelerate in school to match my abilities. But enough of the rant. I am here to try to decide what to major in, considering my rather (wide!) range of interests. I am interested in a research job where I have the opportunity to discover new ideas.

I was originally considering CS as my major, but when I saw many of the universities’ course selections for that major, I was disappointed by the lack of theory and the extreme emphasis on programming, which will surely leave me unprepared for serious work at the graduate level. These are my thoughts. I hope that my frustration does not offend you and that you will be able to give some guidance as to what I should do.

Thank you,
syntacticalbeing

Email or call the department and ask what their graduates’ outcomes are like regarding grad school. I’m guessing these fears are unfounded.

The main reason why I am concerned about this is because the graduate level CS that I’m interested in (theory of computation related topics) is very different from what is taught in a standard undergraduate curriculum nowadays (databases, software engineering, systems programming), which is becoming increasingly applied to match the demands of the pragmatic general population. For example, at George Mason University there is no standard theory of computation course at the undergraduate level; the closest it gets to having one is CS 330 - Formal Methods and Models, which teaches a very small part of basic theoretical CS but mostly serves as an intro to proofs course. Their theory of computation course is only offered at the graduate level.

I do understand that the introductory programming courses are necessary for the CS major (and should be, given their broad use in work). What I am concerned about is the shifting of the CS major in the universities to effectively a software engineering major. To make matters worse this type of “CS” major isn’t optimal for budding computer scientists or software engineers; it fails the former due to lack of emphasis on the CS part of CS, and it fails the latter due to the niche systems programming-oriented selection of courses and inability to keep up with rapidly changing technology (which is why many people don’t bother majoring in CS and teach themselves how to program. Still, CS has some value at the undergraduate level due to the presence of algorithms courses which teach how to think through problems/troubleshoot in programming.

I have done enough work on my own in theoretical CS topics to know that I will need some upper-level math for the proofs (abstract algebra, real analysis, type theory, and many others which are generally applicable to the study of CS). Of course, I only expect to learn some basics of what I will need in undergrad and will continue that learning in graduate school. Other than the math I will need to learn basics of theory of computation. If I can learn these two main things (and will probably need to take some programming courses as proof that I can code, even though I have spent plenty of time programming on my own) I should be well-prepared to begin work at the graduate level. Now obviously I may need/want to do work in a related field as well as CS does intersect with physics/math/psychology in various applications, but that is merely supplementary work based on my interests which I can learn on my own if need be.

I have researched what the general opinion is for the major path of an aspiring theoretical computer scientist, and the consensus seems to be that CS would be the best major as long as it covers the right topics related to what the person will be using in grad school. This leads back to my dilemma in choosing the right major/judging what CS programs work for my goals. Thank you for your patience and willingness to help me with this rather difficult academic decision.