1, Basic English
Although for junior programmers, English only needs to write simple vocabulary, but if you want to go further, you still have to learn and master it.
I strongly recommend English, because IT is unthinkable to read without professional documents when learning IT technology. Chinese versions are often published in the Year of the Monkey, but now many publishing houses simply print English directly. The learning method is to force yourself to read the original textbook, which will make you unable to understand it at first. Any industry absolutely needs to use more natural skills and eat hard.
2. Computer architecture and assembly language
Books about architecture are everywhere, and they are similar, but there is a very good book "80x86 Assembly Language Programming Course" (written by Tsinghua University Press, black cover, Yang Jiwen), and you need to focus on the programming of post-386 protected mode. Otherwise, when you learn something at the bottom of modern operating system, you will feel that you are reading a gobbledygook.
3. Principles of computer operating system
Our development is always carried out on a specific operating system. If not, there is only one possibility: you are implementing an operating system yourself. In any case, operating system principles are required reading. This is just like when we make a peripheral for a chip, we must understand the basic working sequence of the chip.
There are many such books. I haven't found any excellent books yet. I just think I should go and see InsideWindows2000 if I have time after reading these books.
4. Data structure and algorithm
This course can determine a person's programming level and is the core course. My first choice is the Tsinghua version. Many people like to buy the C++ version, but I don't think it is necessary. The syntax of C++ makes the algorithm more complicated, and many teachers like to use modules to make the algorithm more complicated. After learning the C version, you'd better browse the C++ version.