Looking at some top CS schools they list where they rank in specialties. AI, Programming Language, Systems, and Theory. Would you provide a brief description for each specialty and how would one know which to specialize in?
As an undergraduate CS major, it is generally advisable to get a good general selection of upper level CS courses covering the major areas that those in all areas of CS will benefit from knowing (e.g. algorithms and complexity theory, operating systems, networks, databases, security and cryptography, software engineering). Additional upper level CS electives can be used to go into greater depth in areas of interest. For undergraduates, the strength of specialty is mostly relevant if an area of interest is completely absent in the department (obviously a disadvantage).
If you go on to graduate study in CS, your choice of specialty and how strong the department is in that specialty becomes much more important.
@ucbalumnus I guess what I mean for example is that people will say in regards to say Princeton for CS that they are very heavily focused on theory and rank very highly in that aspect but if you were looking at systems than you might want to choose Stanford as their method of teaching CS is vastly different in application than Princeton. Other colleges such as UPENN I believe incorporate AI into their undergraduate CS and rank very high in that specialty. Of course you can’t go wrong with any of the top CS colleges but how would one know which would be more in line with their strength in a theory based teaching vs programming language?
@Luska19 You should probably dive deeper into the programs at the schools your’re interested in. My son is an undergraduate CS student at Stanford in the AI track. As far as their CS classes, there are some core classes that are fairly common to all tracks. The track courses (AI in his case) are pretty much open to any student, and my son has taken AI classes since his freshman year (he’s now sophomore). One thing he found out pretty early is that “prerequisites” are for the most part guidance only. For instance, he took one very popular class in fall 2017 that consisted mostly of undergraduate juniors and seniors, MS, PhD, and industry students. There were also a handful of sophomores and a single brave freshman. You can pretty much take classes when you feel ready, and you don’t have to be in the AI track to take an AI class. All this is probably typical though, I’m not sure.
@Rivet2000 I certainly will thanks. I’ve just been reading a lot of different opinions on Reddit and other sites that describe some big differences in teaching and approach of CS courses at the top colleges. I’m just trying to get a handle as to which I might thrive at. Again as the example they set forth of Princeton really being theory based in their approach but not as strong in other areas as say Stanford in their teaching methodology.
Teaching approach and specialty strengths can be orthogonal too, so it seems you’re asking two different questions here. You can have a very theoretical school with an AI strength or a very practical school with an AI strength. Deciphering teaching approaches is an entirely different set of problems.
As mentioned, most undergrads won’t get very deep into a specialty and won’t take more than a few courses within an area beyond the basic core courses all CS majors anywhere will take. In general, here are some notes:
AI - usually very math/stats based, so those more mathematically and practically bent usually attract here
Systems / Networks - usually very low level, so people in this area tend to like languages such as C, C++, and Rust and will work on protocols / operating systems, which are usually pretty complex large codebases that must be very resilient.
PL - can vary in theory/practical focus, but people tend to prefer designing at the meta-level of what tools do I need for programming in general, how can I make a language with these tools, and how can I make it efficient.
There are plenty of other academic specialties you didn’t list such as:
Computer Graphics
Computer Vision
Natural Language Processing
Security / Cryptography
The long story short here is that upper-level specialties are plentiful and it’s hard to say what you’ll end up liking personally. A good CS school should allow you to explore any specialty you have an interest in through classes and research if wanted.
In terms of “theory versus practice”, good CS departments will include both in their lower and upper level CS courses (except for specifically-theory topics like algorithms and complexity and theory of computation, languages, and automata). In other words, you should be learning foundational theory and principles, and implementing them in programming assignments and projects (or hardware design projects for hardware courses).