2. Linear algebra, probability statistics and discrete mathematics
3. Introduction to Algorithms, published by MIT. The Chinese version is called Introduction to Algorithms.
4. Operating system and compilation principle
5. Master a common programming language and technology.
Explain in detail:
Principles of Computer Organization (including the prerequisite course "Digital Logic and Digital System", referred to as "Digital Electricity" for short): This is a basic hardware course. After learning, you can clearly know how to construct the whole computer system from the simplest digital components like building blocks, and then you will pass the test. A course called Computer Architecture is an expansion package of this course, which is of course necessary for understanding modern computer architecture. However, since the discussion here is about Top 5, I think the principle of computer composition is relatively basic.
Linear algebra, probability statistics, discrete mathematics: you know, any major that can be called "science" must have a certain mathematical foundation, otherwise it is difficult to be called "science". I think these three courses are the most important mathematics courses at the undergraduate level, which are more important than advanced mathematics. If you want to go further on the road of computer science, these three courses are compulsory.
The Chinese version of Introduction to Algorithms provided by MIT is called Introduction to Algorithms: I think we should learn it instead of Data Structure, which is used to providing in China. Data structure is only a part of the algorithm. Domestic data structure courses avoid a lot of essential things, but list some common data structures, which is always a bit anodyne to learn. Although some chapters of Introduction to Algorithms are mixed with a lot of annoying "mathematics", it can help you appreciate this very necessary and interesting course in essence.
Operating system and compilation principle: operating system can be said to be an experimental course of introduction to algorithms. It is best to realize a small operating system or a Demo of each subsystem of the operating system during the study period. Compilation principle may be a difficult course for undergraduates, but as a CS undergraduate or a future software scientist, it is the foundation of the foundation. After learning, all languages should not be much different in your opinion. This course should be an experimental course of introduction to discrete mathematics and algorithms. It is best to implement a small compiler during the learning process. The language should be created by yourself or a basic subset of an existing language you like.
Master a common programming language and technology: You can know what all the programs you have used are like, and you can write most programs in a language you are familiar with, at least you can't be confused about any programs.