I am a current undergrad student, so here&#x27;s my understanding of the subject. There are some basic fundamental classes that are pretty consistent across the board. You&#x27;ll start with some  introductory classes that cover the basics of programming, such as loops, if&#x2F;then&#x2F;else statements and maybe basic OOP. You&#x27;ll have some level of Computer Architecture course(s) where you learn the basic structure of a computer. Things like CPU pipe-lining, memory, branch prediction, assembly programming and other things. You cover basic algorithms and data structures. Things like lists, queues, stacks, as well as different sorting algorithms, graph algorithms, and basic algorithm design principles such as Dynamic Programming and Divide and Conquer. Most programs also have some introduction to automata and computability. Finally, you probably will have something courses on things like Operating Systems.<p>I&#x27;ve noticed that some places then separate Computer Science from Software Engineering. I think this is a good idea as &quot;Computer Science&quot; becomes more and more synonymous with programming in general.<p>As far as mathematics is concerned, we take calculus, linear algebra, discrete Math, probability and statistics.<p>Other than this, the rest of your time is mostly filled with electives of your choice depending on your interest area. I have several extra math courses planned as well as some software design and a programming languages course.<p>Obviously it varies a lot from program to program, but this is what I&#x27;ve noticed. For what it&#x27;s worth, I&#x27;m a student at the University of Houston, and I also read up on the programs of some bigger name schools such as MIT, University of Texas, and Rice.