作者:Jon Bentley
本書的作者通過一個一個實際生活中的例子來給引導我們對編程進行思考,雖然在實際工作中我們多半是只使用思考的結果,但本書更重要的是讓我們了解到發現問題本源,并真正解決問題的一個思考過程。本書主要提出了一些抽象概念,目的不是像《算法導論》那樣先提出抽象問題,然后進行實際的講解與編碼,而是一步一步帶領我們如何更好地解決問題。
其實本書后半部分包括續集,其質量都不高(我是這么認為的),都是講一些沒多大用的東西。其實我從中學到最多的就是位圖的使用以及實際開發過程中需要注意的一些問題。
沒想到,小小的位圖對于海量數據的處理還有這么大的功效。當然了,書中所說的所有問題以及思考我都沒有去真正編碼過,但我覺得自己能寫好80%的代碼(感覺和事實肯定不一樣的。)
語錄
1.對小問題的仔細分析有時可以得到明顯的實際益處。
2.明確了問題,那這場戰役就成功了90%
3.設計者確定其設計已經達到了完美的標準不是不能再增加任何東西,而是不能再減少任何東西。——Antoine de Saint-Exupery
4.程序員在節省空間方面無計可施時,將自己從代碼中解脫出來,退回起點并集中心力研究數據,常常能有奇效,(數據的)表示形式是程序設計的根本。——Fred Brooks
5.計算機系統中最廉價、最快速且最可靠的元件是根本不存在的。——Gordon Bell
6.當程序性能問題無法回避時,考慮設計層面會有助于程序員集中精力解決問題。如果僅需要較小的加速,就對效果最佳的層面做改進,因為“性價比”最高的那一個投入最小的精力就可以獲得最大加速系數的那個設計層面。如果需要較大的加速,就對多個層面做改進。
7.任何事都應盡量簡單,但不宜過于簡單。——愛因斯坦
8.代碼調優的最重要的原理就是盡量少用它
9.解決現有的問題是程序員任務的一部分,另一個也許更重要的部分是做好解決未來問題的準備。本章示例了編程過程中的幾個重要步驟:正確理解所遇到的問題;提煉出抽象問題;考慮盡可能多的解。
10.如果還沒想清楚,就用蠻力算法吧。——Ken Thompson
11.代碼寫得越急,程序跑得越慢。——Roy Carlson
12.如果你發現特殊情況太多,那你肯定是用錯方法了。——Craig Zerouni
13.在我所有的程序錯誤中,80%是語法錯誤。剩下的20%里,80%是簡單的邏輯錯誤。在剩下的4%里,80%是指針錯誤。只有余下的0.8%才是困難的問題。——Marc Donner
14.在系統測試階段找出并修正錯誤,要比開發者自己完成這一工作多付出2倍的努力。而當系統已經交付使用之后找出并修正一個錯誤,要比系統測試階段多付出9倍的努力。因此,請堅持讓開發者進行單元測試吧。——Larry Bernstein
15.新系統的每一個新用戶都可能發現一類新的錯誤。——Brian Kernighhan
16.對于那些快速算法,我們總是可以拿到一些速度差不多但是更容易理解的算法來替代它們。——Dougls W. Jones
17.在一個非I/O密集型的程序中,超過一半的運行時間是花在不足4%的代碼上的。——Don Knuth
18.在優化一個程序之前,請先用性能監視工具找到程序的“熱點”。——Mike Moron
19.【代碼規模守恒定律】當你為了加速,把一頁代碼變成幾條簡單的指令時,請不要忘了增加注釋,以使源碼的行數保持為一個常量。——Mike Morton
20.紙上的工作沒結束,整個工作也就還沒結束。
21.【90-90法則】前90%的代碼占用了90%的預定開發時間,余下的10%代碼又花費了90%的預定開發時間。——Tom Cargill
22.正確的判斷來源于經驗,然而經驗來源于錯誤的判斷。——Fred Brooks
23.如果有人基本上做出了你想要做的東西,你就沒必要自己寫一個新程序。就算你非寫不可,也請盡可能多地利用現有的代碼。——Richard Hill
24.先讓程序跑起來,再考慮怎么讓程序跑得快。——Bruce Whiteside