<p>What are the fundamental CS courses that I should take before applying to CS grad school?</p>
<p>Algorithms/Data Structures
Discrete Math
Operating Systems
Computer Organization
Networks
Programming Languages</p>
<p>Might be forgetting one or two, but these are the courses usually required as part of the core curriculum of any undergrad CS degree and are seen as foundational classes for grad programs.</p>
<p>Compilers is sometimes recommended for graduate school because it touches on hardware (computer architecture), software (generally), and theory (languages and parsing) topics.</p>
<p>so far my 4 year schedule is:
Java programming
Discrete math
C programming
Data Structures
Computer architecture
Systems programming
Data mining and machine learning
Artificial intelligence
compilers
operating systems
relational databases
and then some grad level courses that I can fit into my undergrad. Do you think that is a good curriculum to take before grad school?</p>
<p>Theory of Computation</p>
<p>That’s a decent curriculum. And yeah, if you can fit it in, theory of computation is worth it, as is algorithms.</p>
<p>Re: #4</p>
<p>Agree that algorithms and complexity and theory of computation should be included for graduate school preparation. If you take both theory of computation and compilers, taking theory of computation first is likely to be helpful for compilers (in terms of lexing and parsing).</p>