.Net 程式設計師走向高階必讀書單彙總
如今程式開發工作越來越簡單(豐富的API、智慧的IDE、越來越多的開發框架),普通人通過簡單的訓練,通過組合和複製就能完成眾多程式的功能。因此程式設計師這種過去高技術職業的代名詞,現在卻如此低賤,被稱之為碼農。借用微觀經濟學原理,當供應量增加而需求不變時,價格平衡點將下移,因此普通程式設計師工資越來越低。而且大街上眾多的培訓機構還不停的產出,可以預料到不久將來價格平衡點還將下移(不考慮通貨膨脹等因素)。那麼作為有遠見的程式設計師更應該加強自己內功,成為不可替代品。看書是對自己最有效的投資方式,我整理了已經看了和準備看的書籍,並按知識點分門別類供大家參考和討論。
一、知識樹
電腦科學與技術是一門龐大而複雜的學科,不可能瞭解完所有內容,但可以通過知識樹梳理了解整個領域的核心知識,為後續應用做好準備。
如果將電腦科學與技術看成是武學的話,左邊部分是內功,右邊部分則為招式。武學高手可以用簡單的招式發揮出巨大的威力,是因為內功的強大。因此要了解整個電腦科學與技術的全貌需要從內功開始。
1. 基本能力
1.1 數學
很多做應用系統的程式設計師會覺得數學基本上沒有用,因為在系統中基本沒有用過。但實際上數學是整個計算機的基石,因此對數學的瞭解不可或缺。如果是從事機器學習、資料探勘、計算機圖形學的更需要較強的數學功底。
- 具體數學:《具體數學-電腦科學基礎》
- 概率論與統計學:《概率論基礎教程》 https://book.douban.com/subject/1803862/
- 離散數學:《離散數學及其應用》 https://book.douban.com/subject/3125432/
- 線性代數:《線性代數及其應用》 https://book.douban.com/subject/1425950/
- 高等數學:《托馬斯微積分》 https://book.douban.com/subject/1231399/
1.2 英語
英語是程式設計師最重要的語言,大部分的技術書籍、協議、會議等均是英文,因此需要了解第一手的資料需要很強的英文讀寫能力,英語學習是一個循序漸進的過程,可利用碎片時間學習。
- 英文方法論:《把你的英語用起來》 https://book.douban.com/subject/3748247/
- 學習教材:《賴世雄從頭學美語系列》
1.3 語言表達
語言表達主要是書面和口頭,需要培養邏輯嚴密、語言流暢的語言表達能力。這個主要靠多寫多練比如在部落格園上寫文章(像我現在一樣),多和同事朋友美女交流。
2. 計算機組織與體系結構
計算機系統的組織結構,以 馮·諾依曼模型作為基礎,是計算機的硬體基礎。
核心知識點
- 資料的機器表示
- 彙編級機器組織
- 介面和通訊
- 儲存系統
- 多處理器
參考書籍
- 計算機結構:《深入理解計算機系統》 https://book.douban.com/subject/1230413/
3. 演算法與資料結構
很多人覺得現在應用系統根本就不需要資料結構,高階語言早已經封裝好了,不需要學習。這個問題類比於如果只幹搬磚砌牆的活,熟練掌握工具那也就夠了。但是要想設計建築的話,物理是必須學的。
核心知識點
- 演算法策略:
窮舉演算法
、貪心演算法
、分治演算法
、回溯法
、數值逼近
- 基本演算法:
查詢演算法
、排序演算法
、雜湊表
、圖演算法
、最小生成樹
- 基本資料結構:
列表
、樹
、圖
參考書籍
分類 | 書籍 | 難度 | 重要度 |
---|---|---|---|
資料結構與演算法分析 | 《資料結構與演算法分析》 https://book.douban.com/subject/1139426/ | 一般 | 精讀 |
演算法描述語言入門 | 《c和指標》 https://book.douban.com/subject/3012360/ | 一般 | 精讀 |
解釋下為什麼要把《c和指標》放到這裡,因為個人覺得所有演算法與資料結構描述語言中c是最爽的一種(沒有之一),並且在《c和指標》中不僅講解了c語言,更對簡單的資料結構和演算法做了講解,非常漂亮。建議一定在正式學習《資料結構與演算法分析》前先看這本。
4. 作業系統
作業系統中的很多概念需要了解,比如程序、執行緒、資源互斥,在實際開發中很多地方都需要用到。
核心點:
- 記憶體管理
- 裝置管理
- 排程演算法
- 併發性
參考書籍
分類 | 書籍 | 難度 | 重要度 |
---|---|---|---|
作業系統原理 | 《現代作業系統》 https://book.douban.com/subject/3667744/ | 較難 | 泛讀 |
5. 計算機網路
計算機和遠端通訊網路尤其是基於TCP/IP網路的發展,使得聯網技術變得十分重要。
核心知識點
- 網路分層(Tcp/ip 4層結構)
- 網路傳輸安全
- HTTP協議
參考書籍
分類 | 書籍 | 難度 | 重要度 |
---|---|---|---|
計算機網路 | 《計算機網路》 https://book.douban.com/subject/1179807/ | 較難 | 泛讀 |
HTTP協議 | 《圖解http協議》 https://book.douban.com/subject/25863515/ | 簡單 | 精讀 |
6. 資訊管理
資訊管理技術在計算機的各個領域都是至關重要的 , 它包括了資訊獲取、資訊數字化、資訊的表示、資訊的組織、資訊變換和資訊的表現 ; 有效存取演算法和儲存資訊的更新、資料模型化和資料抽象以及物理檔案儲存技術.
核心知識點
- 資料建模
- 資料庫系統
- 關係型資料庫系統(Mysql最佳)
參考書籍
分類 | 書籍 | 難度 | 重要度 |
---|---|---|---|
資料庫基礎 | 《資料庫系統概念》 https://book.douban.com/subject/1929984/ | 較難 | 泛讀 |
mysql資料庫 | 《高效能Mysql》 https://book.douban.com/subject/4241826/ | 一般 | 精讀 |
7. 開發語言及框架(以.net平臺為例)
這個主要到程式領域了,本文以.net平臺為例。
核心知識點
- CLR
- 面向物件程式設計
- Web程式設計
參考書籍
分類 | 書籍 | 難度 | 重要度 |
---|---|---|---|
虛擬機器技術 | 《CLR via c#》 https://book.douban.com/subject/4924165/ | 較難 | 精讀 |
面向物件程式設計 | 《敏捷軟體開發 c#版本》 https://book.douban.com/subject/1140457/ | 一般 | 精讀 |
C#語言 | 《深入解析c#》 https://book.douban.com/subject/4822302/ | 一般 | 精讀 |
《c#與.net4高階程式設計》 https://book.douban.com/subject/6062550/ | 一般 | 精讀 | |
ASP.NET | 《asp.net高階程式設計》 https://book.douban.com/subject/6428937/ | 一般 | 精讀 |
JavaScript | 《JavaScript權威指南》 https://book.douban.com/subject/10549733/ | 一般 | 精讀 |
《JavaScript模式》https://book.douban.com/subject/11506062/ | 一般 | 精讀 | |
《javaScript語言精粹》https://book.douban.com/subject/3590768/ | 一般 | 精讀 | |
HTML&CSS | w3c網站 | 簡單 | 精讀 |
8. 軟體工程
軟體工程學科涉及到為高效率地構建滿足客戶需求的軟體系統所需的理論、知識和實踐的應用。 軟體工程適用於各類軟體系統的開發 , 它包含需求分析和規約、設計、構建、測試、 執行和維護等軟體系統生存週期的所有階段。軟體工程使用工程化方法、技術和度量 , 它使用管理軟體開發的工具、軟體製品的分析和建模工具、質量評估與控制工具、確保有條不紊且有控制地實施軟體演化和複用的工具。 軟體可由個人開發者或者開發小組進行 開發 , 他們 要選擇 最適合 開發 環境 的工具、方法和途徑。質量、進度、成本等軟體工程的要素對軟體系統的生產都是十分重要的.
核心知識點
- 軟體設計
- 軟體過程
- 軟體專案管理
參考書籍
分類 | 書籍 | 難度 | 重要度 |
---|---|---|---|
軟體設計 | 《head first 設計模式》 https://book.douban.com/subject/2243615/ | 一般 | 精讀 |
《企業架構模式》 https://book.douban.com/subject/4826290/ | 一般 | 精讀 | |
軟體工程 | 《軟體工程》 https://book.douban.com/subject/6047742/ | 一般 | 精讀 |
專案管理 | 《如何管理軟體企業》 https://book.douban.com/subject/4178846/ | 一般 | 泛讀 |
專案管理 | 《軟體專案管理與敏捷方法》 https://book.douban.com/subject/4837350/ | 一般 | 精讀 |
二、學習方法
要想學完以上知識光靠死記硬背是不行的,要有科學的方法,下面書籍包括了科學的學習方法。
分類 | 書籍 | 難度 | 重要度 |
---|---|---|---|
學習方法 | 《整體學習》 https://book.douban.com/subject/25783654/ | 一般 | 精讀 |
閱讀方法 | 《如何閱讀一本書》 https://book.douban.com/subject/1013208/ | 一般 | 精讀 |
時間管理 | 《另外8小時》 https://book.douban.com/subject/10535830/ | 一般 | 精讀 |
《把時間當作朋友》 https://book.douban.com/subject/5171244/ | 一般 | 精讀 | |
禪修 | 《正念禪修》 https://book.douban.com/subject/23037911/ | 一般 | 精讀 |
三、後記
以上書籍是電腦科學上需要學習的書籍的整理,部分看過,也有很多還沒看過或沒看完,而且由於知識有限還有很多書籍或知識點沒有例出。希望可以有更多朋友一起來完善這個書單,讓我們每個人都可以享受到知識所帶來的樂趣。
我相信,只要合理利用時間,堅持學習,在加上科學的方法,定可獲得越來越多的知識,同樣的財富也會隨之而來。