一家之言,但大家可以看看。
-∞.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 )
理論是所有的基礎 應用是最終的目標
搞電腦科學的需要會[-∞, +∞]
專註於軟體開發的可以只管自然數
剛入門的同學一般都從第1關開始玩 第1關以前的都是隱藏關 通幾關以後你就會自然而然的想玩隱藏關了
以下的是對應的書目(只限於我看過的 迫切需要大家補充)
書名縮寫:
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》(工具書)《Linkers & Loaders》,有待補充)
-1.Operating System
(《CSAPP》,《Modern Operating System》)
0.Programming Fundamentals
(《CLRS》,《TAOCP》vol1.ch.2)
+1.Programming Language
(《Compilers》(龍書),《K&R》,《C++ Primer》,《Effective C++》,《Thinking in Java》,有待補充)
+2.Advanced Programming Frameworks and Libraries
(《Programming Windows》, 《APUE》, 《深入淺出MFC》,有待補充)
+3.Programming Design and Software Engineering
(《GOF》,知之甚少 有待補充)
+∞.Applications
(《Computer Network》, 《MySQL Manual》有待補充)
後記
1 紙上得來終覺淺,絕知此事要躬行
光看理論缺少實踐就會變得跟包老師我一樣只會忽悠, sigh~
看低層就要動手寫彙編和跟蹤程式,看作業系統就要去讀API的手冊,學語言就要在實踐中盡量把語言特性都用上
2 無劍勝有劍 Thinking Beyond Languages
進階語言只是工具而已 作者這麼設計必然是有他的道理的
不想當司機的廚子不是好裁縫 要像上帝一樣去思考 Know How, then Know Why
Concrete的書告訴你How Theoretical的書告訴你Why
3 好記性不如爛筆頭 看書不做筆記等於沒看
這就好像是為每本書的內容做一個緩衝 每次需要knowledge fetch的時候先查筆記cache
如果fault了就從書裡把內容添加到筆記cache裡
4 美國一位海軍將軍在總結中途島海戰時說,對手所用的語言不夠精確是他們失利的原因之一。
英語雖然沒有漢語博大精深,但是在描述複雜問題上卻可以化繁為簡,避免語義模糊。
不信你用漢語和英語分別表述一下int (*(*func_ptr[10])(int, int))(int)看看
書盡量讀英文版比較好 除非原書是中文寫的