What classes should I take for grad school in CS?

<p>So at this point, I'm pretty sure I want to go to grad school for theory, but I'm not too sure about my coursework. I've taken like, algorithms, computability/complexity theory and this software engineering class so far, and will probably try to take as many theory classes as possible, and maybe a course in AI and a course in systems. Is this enough to get into grad school for CS? I'd rather take math classes like topology and algebra and stuff since they seem more interesting and useful, but I'm not sure if this would be a problem with CS admissions.</p>

<p>Bump .</p>

<p>I have taken point-set Topology and Algebra I as well as graduate-level CS theory classes. Beyond things like homomorphisms and proof-writing skills, the classes you mentioned weren’t very useful. I think the only time they really get any use is in certain branches of theoretical physics.</p>

<p>What do you want to do “when you grow up”? You may wish to take more “applied” classes such as compilers or operating systems in order to expand your job skills.</p>

<p>Right now, I want to go into academia, but if that doesn’t work out, then I’m not really sure. Not to be arrogant, I don’t think getting a job if grad school doesn’t work out should be a problem (I actually had a few offers for internships before I decided I wanted to do research this summer).</p>

<p>Also, I don’t want to get into a huge discussion about this, but it seems as if Algebra is extremely useful - it’s shown up in a lot of different cs classes I’m taking (and not just homomorphisms, but maybe I’m misinterpreting the usage). Maybe point-set Topology is not that useful, but I think I would find it more interesting than a compilers or operating systems course. Not that I don’t think those aren’t interesting also, but there’s only so many classes I can take.</p>

<p>I’m not a computer scientist, but I’m married to one. Operating systems is an important course to have before you go to graduate school. Even though you will eventually specialize in one narrow area, you still have to have a broad understanding/background.</p>

<p>

</p>

<p>Even if you’re going into theory, you should understand the systems your work will eventually be applied to. Otherwise, your work will be inaccessible and judged irrelevant by your peers. I see this all the time in theoretical Physics where researchers will present their work as a function of the derived units that they used to make their calculations easier that may, in fact, take days to convert back to anything an experimentalist can readily measure.</p>

<p>I honestly think as long as you have taken combinatorics, graph theory and a proofs-based linear algebra course that you are well-prepared for CS graduate school.</p>

<p>I think you should take what interests you. If it is topology and algebra to complement your CS courses, then go for it.</p>

<p>of course, I’ve never applied to grad school, but my ug degree was in Math and CS.</p>

<p>

I’d actually be really curious to hear where you have encountered algebra in computer science. I had never heard algebra and topology being described as useful by someone who’s not a pure mathematician! :slight_smile: </p>

<p>By the way, if you take topology for fun, I’d recommend taking more than one class. Topology uses a lot of heavy machinery and a first course is spent almost entirely on setting up notation and verifying simple relationships between the definitions. You don’t really get to use them for anything tangible until your second or third course.</p>

<p>

</p>

<p>This was my main point I guess, how much do I need to be able to understand everything?</p>

<p>And for algebra coming up in cs classes, finite fields seem to get used a lot in complexity theory, like in the proof of IP = PSPACE, and other theorems, linear algebra is pretty important for spectral graph theory which has a lot of cs applications, tensor products are needed for the proof of the PCP theorem. And I think linear programming and FFT used a few ideas from linear algebra too. Cryptography uses a lot of number theory and I feel like algebraic combinatorics should have a lot of applications, but I wouldn’t know.</p>

<p>Theory is a very active and diverse field, so the best preparation is very dependent on the area you go into or the professor you work for. </p>

<p>One major active area in theory draws deeply from statistics, probability, and linear algebra: randomized algorithms. There are very active areas that use game theory, quantum mechanics, graph theory, combinatorial optimization, computer security…</p>

<p>Just check out the abstracts in the top theory conferences (STOC, SODA, FOCS, etc)
[STOC</a> 2011 Accepted Papers](<a href=“http://www2.research.att.com/~dsj/stoc11/AcceptedPapersWithAbstracts.htm]STOC”>http://www2.research.att.com/~dsj/stoc11/AcceptedPapersWithAbstracts.htm)</p>

<p>Don’t assume you’ll get your dream job if you go into theory. Funding is tight, 99.99% of employers wouldn’t know what to do with you, and faculty positions are nonexistent (even the very top 3-4 graduating theory PhD students in the country rarely get offers from T20 institutions). So unless you get a coveted faculty position, or a spot at MSR or one of the other few theory research labs, there’s very little chance you’ll be able to work in the field after your PhD, and you’ll probably end up as a software engineer or underpaid postdoc.</p>

<p>In the schools to which I had applied to, following were the pre-requisite undwr grad classes that we need:
Probabilty/statistics and Calculus
Discrete mathematics
DAta structures
one or two courses in programming
computer organization and architechture</p>

<p>and getting a job without going to grad school is very much possible. Many jobs in fact only ask for a bachelor’s degree in computer science/information systems/MIS.</p>

<p>Good Luck :)</p>

<p>aaaneha, was that for a terminal masters or for a PhD program? Because that doesn’t seem like very much at all.</p>