What to Major in?

syntacticalbeing
Fri, 16 Feb 2018 14:06:24 +0000

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.