Alright, I actually just graduated with a Bachelor's degree in Computer Science this December.
I'm going to list what I feel were the important classes and the textbooks we used in them. Other than these and some software engineering courses, the rest of my classes were more focused on subfields like databases, AI, web development, and ethical hacking.
This class is essentially an introduction to different types of data structures along with their performance characteristics. The class I took was focused around C++ so it discussed STL data structures such as vectors (dynamic arrays), link list, trees, maps, sets, stacks, queues, and hash tables. Touches upon some algorithm analysis stuff too but really only Big O notation for worst case performance scenarios.
Explores many different types of algorithms and how to measure their performance characteristics. Some types of algorithms include Divide & conquer, dynamic programming, greedy approaches, backtracking, and branch and bounding.
Discusses networking, interprocess communication, UDP and TCP sockets, and a bunch of distributed computing paradigms (Client-Server, P2P, distributed objects, etc)
Self explanatory. Explains how all the hardware works and collaborates together.
Program Language Concepts
Covers different aspects and characteristics of different languages. Syntax, semantics, variable scope and binding, data types, expressions and assignmnet statements, control structures, etc.
Covers from top to bottom all the essential task and concepts behind a operating system. This includes handling processes and threads, scheduling and synchronizing processes, memory (virtual, paging, segmentation, etc), file systems, and IO systems.