>>11310399I double majored in math and CS, here’s what I think the bare bones should be. I’ll put in parentheses what I think the class should do.
Calculus 1-3 at the very least, with ODE’s and PDE’s being encouraged but not required. A lot of the latter is very important for graphics application (ie diff geo)
A year of physics + lab
Intro to proofs
Data structures
Computer architecture and digital logic
Linear algebra (proof based)
Combinatorics (proof based)
Number theory (proof based)
Graph theory (proof based)
Probability theory (discrete and continuous)
Stochastic theory
Programming language and compiler theory theory
Systems level design
Algorithms (ideally heavy on proofs, pure math, etc)
Operating system theory and design
Numerical analysis (heavy on derivations / proofs in class and heavy on fast implementation from scratch)
Graphics processing and theory (heavy on calculus and linear algebra)
Optimization methods and introductory ML
Automata and language theory
Complexity theory
Advanced algorithms (vEB trees, applying results like FFT to solve large polynomial mult., etc.)
Cryptography
Abstract algebra, two sem (insanely important for theory)
(Not required but recc) analysis, useful in CS going into grad school. Same goes for topology. Both are subjects you ought to know regardless imo.
Extra
If interested, see if you can take a signal processing class by asking an EE professor if you could sit in or if you have the right credentials (esp if you have calc 5 done). It’s a neat class that I feel was cool to learn.
I did this one more time to take a class teaching design in VLSI.
I tried to keep this as open as I could at the end so you can substitute the rest with electives you like so you can go in the direction you want. I personally took more theory and math courses, but you could take more systems, embedded, AI, bio applications, etc.. but this is the baseline what I think would be good for CS.