Let's take a look.
-∞. Theory
(Math, number theory, graph, automata, geometry)
-3. Hardware
(Processor architecture, Memory Hierarchy, cache, system I/O)
-2. Machine-level programming
(Assembly, executable file format, linking & loading)
-1. Operating System
(Process & Thread, memory management, file system, I/O, Kernel & drivers)
0. Programming fundamentals
(Data Structure, algorithms)
+ 1. Programming Language
(Compilation, C is a must,; C ++ Java recommended; C # Python JS, etc, optional)
+ 2. Advanced Programming Frameworks and libraries
(Windows programming, Unix/Linux programming; STL, MFC, boost, tr1, QT, GTK optional)
+ 3. programming design and software engineering
(OOP design pattern is a must; agile, RUP, iterative, and other models are optional; debugging and QA)
+ ∞. Applications
(Computer network, database, HTTP & web, concurrent programming, distributed system)
Theory is the ultimate goal of all basic applications
[-∞, + ∞]
The focus on software development can only be on natural numbers.
Beginners usually start from 1st and start from 1st. Before, they all hide and turn off a few things. Then you will naturally want to hide and turn off the things.
The following are the corresponding bibliography (only for those I have read and want to add)
Abbreviation:
Advanced Programming in the Unix environment => apue
Computer System: a programmer's perspective => csapp
The art of computer programming => taocp
Introductin to algorithms, 2nd => CLRS
The C programming language => K & R
Design Patterns => gof
-∞. Theory
(Taocp Vol.1, ch.1)
-3. Hardware
(Csapp)
-2. Machine-level programming
(Csapp, intel X86 Assembly reference manual (Tool Book), linkers & loaders, to be supplemented)
-1. Operating System
(Csapp, modern operating system)
0. Programming fundamentals
(CLRS, taocp vol1.ch. 2)
+ 1. Programming Language
(Compilers, K & R, C ++ primer, tive C ++, and thinking in Java, to be supplemented)
+ 2. Advanced Programming Frameworks and libraries
(Programming windows, apue, and MFC to be supplemented)
+ 3. programming design and software engineering
(Gof, little to be supplemented)
+ ∞. Applications
(Computer network and MySQL manual need to be supplemented)
Postscript
1. I have to get a glimpse of it on the paper. I am sure this is the case.
If you look at the theory without practice, it will become the same as pack teacher and I will only be fooled, sigh ~
To look at the lower layer, you need to write compilation and tracking programs. to read the API manual, you need to use the language features whenever possible in practice.
2. Do not win thinking beyond ages
Advanced languages are just tools. The author's design must have his own principles.
I don't want to be a driver's cook, not a good tailor. I want to think about know how, then know why like God.
The concrete Book tells you how theoretical Book tells you why
3 good memory is not as good as reading a book without taking notes.
This is like a cache for the content of each book. You need to check the note cache every time you need the knowledge fetch.
If fault occurs, add the content from the book to the note cache.
4 a us Naval General concluded that the language used by his opponent was not accurate enough to be one of the reasons for their failure.
Although English is not extensive and profound in Chinese, it can simplify the problem of complicated description to avoid fuzzy semantics.
Do not believe that you can express int (* func_ptr [10]) (INT, INT) (INT) in Chinese and English respectively.
It is better to read the English version unless the original book is written in Chinese.