程式設計師如何挑選適合自己的編程技術書?

書籍仍然是學習編程和提高開發者技能的最好途徑,沒有之一。

程序員如何挑選適合自己的編程技術書?


但最大的問題是:程序員如何根據自己的興趣需求去選一本適合自己的書呢?這也是今天我們要和大家聊的一個話題。


如何快速評估一本書籍的好壞?


快速評估一本編程手冊適不適合你的最佳位置是在目錄(TOC)中。如果你想要學習的具體主題內容沒有出現在TOC的任何位置,那麼你基本可以認定這本書對你的幫助不大,你想要的知識點在這本書上基本是粗略帶過甚至沒有提及。

接下來,瀏覽幾個章節(如果在網上挑選,一般有試讀章節),看看書中的內容描述。有些作者僅用一個或兩個方法來講解一個主題,最好還是要提供三種或四種學習方法:包括實踐練習,源代碼,內容詳解和編碼過程。


閱讀部分知識點的介紹。長而沉悶的介紹可能表明這本書包含很多你可能並不需要的內容。另一方面,介紹的很簡短,你也可能會發現這些解釋不夠全面,並且會讓你讀起來有些摸不著頭腦。


程序員如何挑選適合自己的編程技術書?

信息檢索的重要性,它能使幫助你在浩瀚的書海中迅速全面地查找到所需信息。查找一些你感興趣的關鍵詞,如果它們沒有在索引中出現,那麼你基本就不用指望這本書會出現這些關鍵知識點,一個好的索引不僅包含你需要的關鍵字,而且它還會以一種特定的方式組織這些關鍵詞,使你在查閱你的關鍵詞時還能看到其他相關信息。

最後,請把重點放在作者身上,判斷一個作者對這門學科的專業程度,一個專業的作者撰寫的書是經過精心研究的,有組織的,內容充實的。但事實情況並不總是如此,很多書是由三個或者三個以上作者合作編寫的,這類書籍有時會缺乏重點,讓你迷惑於多種寫作風格中,甚至會包含相互矛盾的信息。


如何避免入坑


根據標題或者封面直接購買書籍的方式是最糟糕的

,但仍然有大量的程序員是以這種方式購書的,事實上,封面能給你的唯一信息就是對作者片面的簡介,以及這本書內容最簡單的概括。

書評確實可以給你這本書是否值得讀的建議,不過,請記住一點,任何評價都是帶有主觀情緒在裡面,甚至有些評論只是讀者從別的地方複製粘貼過來的,因此要注意辨別。

程序員如何挑選適合自己的編程技術書?


根據特定標題來選擇編程書籍也很重要,而不僅僅是基於出版商或系列圖書的聲譽。每一個出版商都可能出版劣質書籍,因此也不能單靠出版商選擇書籍。

最後,要小心暢銷書。暢銷書籍往往會排在列表前面幾位,無論是在實體書店還是在線上。它都可能可能會列在暢銷書列表中,因為它們寫得非常好。但有時書籍會暢銷是因為出版商投入了大量營銷資金。因此,單靠暢銷書列表並不總是確定這本書是否真的是你需要的理想資源。你還需要結合其他因素綜合判斷。


以算法圖書為例


下面,我們以算法圖書為例,在京東搜索 {算法},並且按照綜合排序,得出的搜索結果如下:


程序員如何挑選適合自己的編程技術書?



排除第一、第二的《未來簡史》,接下來的幾本算法書,都是在業內的口碑良好、備受關注的圖書,至於選擇哪一本,你還應該更進一步比較。

程序員如何挑選適合自己的編程技術書?


比如取《算法導論》而言,在上圖銷量中的豆瓣評分是最高的,達到9.3分,這說明大部分讀者對於它的評價還是很高的,當然也不排除個別覺得本書不好的

程序員如何挑選適合自己的編程技術書?


程序員如何挑選適合自己的編程技術書?


程序員如何挑選適合自己的編程技術書?


接下來再看本書的內容結構安排:

目錄(滑動查看)

譯者序

前言

第一部分 基礎知識

第1章 算法在計算中的作用 3

1.1 算法 3

1.2 作為一種技術的算法 6

思考題 8

本章註記 8

第2章 算法基礎 9

2.1 插入排序 9

2.2 分析算法 13

2.3 設計算法 16

2.3.1 分治法 16

2.3.2 分析分治算法 20

思考題 22

本章註記 24

第3章 函數的增長 25

3.1 漸近記號 25

3.2 標準記號與常用函數 30

思考題 35

本章註記 36

第4章 分治策略 37

4.1 最大子數組問題 38

4.2 矩陣乘法的Strassen算法 43

4.3 用代入法求解遞歸式 47

4.4 用遞歸樹方法求解遞歸式 50

4.5 用主方法求解遞歸式 53

4.6 證明主定理 55

4.6.1 對b的冪證明主定理 56

4.6.2 向下取整和向上取整 58

思考題 60

本章註記 62

第5章 概率分析和隨機算法 65

5.1 僱用問題 65

5.2 指示器隨機變量 67

5.3 隨機算法 69

5.4 概率分析和指示器隨機變量的進一步使用 73

5.4.1 生日悖論 73

5.4.2 球與箱子 75

5.4.3 特徵序列 76

5.4.4 在線僱用問題 78

思考題 79

本章註記 80

第二部分 排序和順序統計量

第6章 堆排序 84

6.1 堆 84

6.2 維護堆的性質 85

6.3 建堆 87

6.4 堆排序算法 89

6.5 優先隊列 90

思考題 93

本章註記 94

第7章 快速排序 95

7.1 快速排序的描述 95

7.2 快速排序的性能 97

7.3 快速排序的隨機化版本 100

7.4 快速排序分析 101

7.4.1 最壞情況分析 101

7.4.2 期望運行時間 101

思考題 103

本章註記 106

第8章 線性時間排序 107

8.1 排序算法的下界 107

8.2 計數排序 108

8.3 基數排序 110

8.4 桶排序 112

思考題 114

本章註記 118

第9章 中位數和順序統計量 119

9.1 最小值和最大值 119

9.2 期望為線性時間的選擇算法 120

9.3 最壞情況為線性時間的選擇算法 123

思考題 125

本章註記 126

第三部分 數據結構

第10章 基本數據結構 129

10.1 棧和隊列 129

10.2 鏈表 131

10.3 指針和對象的實現 134

10.4 有根樹的表示 137

思考題 139

本章註記 141

第11章 散列表 142

11.1 直接尋址表 142

11.2 散列表 143

11.3 散列函數 147

11.3.1 除法散列法 147

11.3.2 乘法散列法 148

11.3.3 全域散列法 148

11.4 開放尋址法 151

11.5 完全散列 156

思考題 158

本章註記 160

第12章 二叉搜索樹 161

12.1 什麼是二叉搜索樹 161

12.2 查詢二叉搜索樹 163

12.3 插入和刪除 165

12.4 隨機構建二叉搜索樹 169

思考題 171

本章註記 173

第13章 紅黑樹 174

13.1 紅黑樹的性質 174

13.2 旋轉 176

13.3 插入 178

13.4 刪除 183

思考題 187

本章註記 191

第14章 數據結構的擴張 193

14.1 動態順序統計 193

14.2 如何擴張數據結構 196

14.3 區間樹 198

思考題 202

本章註記 202

第四部分 高級設計和分析技術

第15章 動態規劃 204

15.1 鋼條切割 204

15.2 矩陣鏈乘法 210

15.3 動態規劃原理 215

15.4 最長公共子序列 222

15.5 最優二叉搜索樹 226

思考題 231

本章註記 236

第16章 貪心算法 237

16.1 活動選擇問題 237

16.2 貪心算法原理 242

16.3 赫夫曼編碼 245

16.4 擬陣和貪心算法 250

16.5 用擬陣求解任務調度問題 253

思考題 255

本章註記 257

第17章 攤還分析 258

17.1 聚合分析 258

17.2 核算法 261

17.3 勢能法 262

17.4 動態表 264

17.4.1 表擴張 265

17.4.2 表擴張和收縮 267

思考題 270

本章註記 273

第五部分 高級數據結構

第18章 B樹 277

18.1 B樹的定義 279

18.2 B樹上的基本操作 281

18.3 從B樹中刪除關鍵字 286

思考題 288

本章註記 289

第19章 斐波那契堆 290

19.1 斐波那契堆結構 291

19.2 可合併堆操作 292

19.3 關鍵字減值和刪除一個結點 298

19.4 最大度數的界 300

思考題 302

本章註記 305

第20章 van Emde Boas樹 306

20.1 基本方法 306

20.2 遞歸結構 308

20.2.1 原型van Emde Boas結構 310

20.2.2 原型van Emde Boas結構上的操作 311

20.3 van Emde Boas樹及其操作 314

20.3.1 van Emde Boas樹 315

20.3.2 van Emde Boas樹的操作 317

思考題 322

本章註記 323

第21章 用於不相交集合的數據結構 324

21.1 不相交集合的操作 324

21.2 不相交集合的鏈表表示 326

21.3 不相交集合森林 328

21.4 帶路徑壓縮的按秩合併的分析 331

思考題 336

本章註記 337

第六部分 圖算法

第22章 基本的圖算法 341

22.1 圖的表示 341

22.2 廣度優先搜索 343

22.3 深度優先搜索 349

22.4 拓撲排序 355

22.5 強連通分量 357

思考題 360

本章註記 361

第23章 最小生成樹 362

23.1 最小生成樹的形成 362

23.2 Kruskal算法和Prim算法 366

思考題 370

本章註記 373

第24章 單源最短路徑 374

24.1 Bellman-Ford算法 379

24.2 有向無環圖中的單源最短路徑問題 381

24.3 Dijkstra算法 383

24.4 差分約束和最短路徑 387

24.5 最短路徑性質的證明 391

思考題 395

本章註記 398

第25章 所有結點對的最短路徑問題 399

25.1 最短路徑和矩陣乘法 400

25.2 Floyd-Warshall算法 404

25.3 用於稀疏圖的Johnson算法 409

思考題 412

本章註記 412

第26章 最大流 414

26.1 流網絡 414

26.2 Ford\Fulkerson方法 418

26.3 最大二分匹配 428

26.4 推送重貼標籤算法 431

26.5 前置重貼標籤算法 438

思考題 446

本章註記 449

第七部分 算法問題選編

第27章 多線程算法 453

27.1 動態多線程基礎 454

27.2 多線程矩陣乘法 465

27.3 多線程歸併排序 468

思考題 472

本章註記 476

第28章 矩陣運算 478

28.1 求解線性方程組 478

28.2 矩陣求逆 486

28.3 對稱正定矩陣和最小二乘逼近 489

思考題 493

本章註記 494

第29章 線性規劃 495

29.1 標準型和鬆弛型 499

29.2 將問題表達為線性規劃 504

29.3 單純形算法 507

29.4 對偶性 516

29.5 初始基本可行解 520

思考題 525

本章註記 526

第30章 多項式與快速傅里葉變換 527

30.1 多項式的表示 528

30.2 DFT與FFT 531

30.3 高效FFT實現 536

思考題 539

本章註記 541

第31章 數論算法 543

31.1 基礎數論概念 543

31.2 最大公約數 547

31.3 模運算 550

31.4 求解模線性方程 554

31.5 中國餘數定理 556

31.6 元素的冪 558

31.7 RSA公鑰加密系統 561

31.8 素數的測試 565

31.9 整數的因子分解 571

思考題 574

本章註記 576

第32章 字符串匹配 577

32.1 樸素字符串匹配算法 578

32.2 Rabin\Karp算法 580

32.3 利用有限自動機進行字符串匹配 583

32.4 Knuth-Morris-Pratt算法 588

思考題 594

本章註記 594

第33章 計算幾何學 595

33.1 線段的性質 595

33.2 確定任意一對線段是否相交 599

33.3 尋找凸包 604

33.4 尋找最近點對 610

思考題 613

本章註記 615

第34章 NP完全性 616

34.1 多項式時間 619

34.2 多項式時間的驗證 623

34.3 NP完全性與可歸約性 626

34.4 NP完全性的證明 633

34.5 NP完全問題 638

34.5.1 團問題 638

34.5.2 頂點覆蓋問題 640

34.5.3 哈密頓迴路問題 641

34.5.4 旅行商問題 644

34.5.5 子集和問題 645

思考題 647

本章註記 649

第35章 近似算法 651

35.1 頂點覆蓋問題 652

35.2 旅行商問題 654

35.2.1 滿足三角不等式的旅行商問題 654

35.2.2 一般旅行商問題 656

35.3 集合覆蓋問題 658

35.4 隨機化和線性規劃 661

35.5 子集和問題 663

思考題 667

本章註記 669

第八部分 附錄:數學基礎知識

附錄A 求和 672

A.1 求和公式及其性質 672

A.2 確定求和時間的界 674

思考題 678

附錄註記 678

附錄B 集合等離散數學內容 679

B.1 集合 679

B.2 關係 682

B.3 函數 683

B.4 圖 685

B.5 樹 687

B.5.1 自由樹 688

B.5.2 有根樹和有序樹 689

B.5.3 二叉樹和位置樹 690

思考題 691

附錄註記 692

附錄C 計數與概率 693

C.1 計數 693

C.2 概率 696

C.3 離散隨機變量 700

C.4 幾何分佈與二項分佈 702

C.5 二項分佈的尾部 705

思考題 708

附錄註記 708

附錄D 矩陣 709

D.1 矩陣與矩陣運算 709

D.2 矩陣基本性質 712

思考題 714

附錄註記 715

參考文獻 716

索引 732


通過本書的內容結構,去查找你想要看的內容是否在裡面。

如前面提及的,我們還應該通過作者簡介,去判斷一個作者對這門學科的專業程度,能否很好的講解書中的知識點,下面就是《算法導論》本書的四位作者

Thomas H. Cormen (托馬斯·科爾曼),達特茅斯學院計算機科學系教授、系主任。目前的研究興趣包括:算法工程、並行計算、具有高延遲的加速計算。

Charles E. Leiserson(查爾斯·雷瑟爾森),麻省理工學院計算機科學與電氣工程系教授,Margaret MacVicar Faculty Fellow。他目前主持MIT超級計算技術研究組,並是MIT計算機科學和人工智能實驗室計算理論研究組的成員。

Ronald L. Rivest (羅納德·李維斯特),現任麻省理工學院電子工程和計算機科學系安德魯與厄納·維特爾比(Andrew and Erna Viterbi)教授。他是MIT計算機科學和人工智能實驗室的成員,並領導著其中的信息安全和隱私中心。

Clifford Stein(克利福德·斯坦),哥倫比亞大學計算機科學系和工業工程與運籌學系教授,他還是工業工程與運籌學系的系主任。他的研究興趣包括:算法的設計與分析,組合優化、運籌學、網絡算法、調度、算法工程和生物計算。


此外,你還應該對本書進行一個粗略的試讀,再綜合以上因素,多對比幾本書,相信一定可以找到一本適合自己需求的書籍。

你平常都是怎麼挑選自己的技術書籍的呢,留言分享給大家。






分享到:


相關文章: