《程式碼大全》讀書筆記
1,軟體建立
建立活動主要指編碼和除錯過程。主要包括:
· 問題定義
· 需求分析
· 實現計劃
· 總體設計
· 詳細設計
· 建立即實現
· 系統整合
· 單元測試
· 系統測試
· 校正性的維護
· 功能強化
先決條件:
問題定義
需求分析
結構設計
選擇程式語言
程式設計約定
2,子程式
程式設計語言(PDL)
設計、編碼、檢查
高質量子程式:
恰當的命名
強內聚
鬆耦合
合適的長度
防錯性程式設計
較少的引數
· 建立子程式的最重要原因是加強可管理性(即降低複雜性),其它原因還有節省空間、改進正確性、可靠性、可修改性等等。
· 強調強內聚性和鬆散耦合的首要原因是它們提供了較高層次的抽象性,你可以認為一個具備這種特性的子程式執行是獨立的,這可以使你集中精力完成其它任務。
· 有些情況下,放入子程式而帶來巨大收益的操作可能是非常簡單的。
· 子程式的名稱表明了它的質量,如果名稱不好但卻是精確的,那麼說明它的設計也是非常令人遺憾的。如果一個子程式的名稱既不好又不精確,那它根本就無法告訴你程式作了些什麼。無論哪種情況,都說明程式需要改進。
· 防錯性程式設計可以使錯誤更容易被發現和修復,對最終軟體的危害性顯著減小。
3,模組化設計
“模組化”同時涉及到子程式設計和模組設計。這是一種值得研究的,非常有用的思想方法。
模組的內聚與耦合
資訊隱蔽
· 不管呼叫哪一個,子程式與模組的不同是很重要的,要認真考慮子程式與模組的設計。
· 從模組資料是被幾個子程式使用的這一角度來說,它與全域性資料是相同的,但從可以使用它的子程式是有限的,而且清楚地知道是哪些子程式可以使用它這一角度來說,模組資料與全域性資料又是不同的。因此,可以使用模組資料而沒有全域性資料的危險。
· 資訊隱蔽總是有益的。其結果是可以產生可靠的易於改進的系統,它也是目前流行的設計方法的核心。
· 建立模組的原因有許多是與建立子程式相同的。但模組概念的意義要比子程式深遠得多,因為它可以提供一整套而不是單獨一個功能,因此,它是比子程式更高層次的設計工具。
· 可以在任何語言中進行模組設計。如果所採用的語言不直接支援模組,可以用程式設計約定對其加以擴充套件,以達到某種程度的模組化。
4,結構設計
設計的層次:
劃分成子系統
劃分成模組
劃分成子程式
子程式內部設計
受迎的設計特點:
智力上的可管理性
低複雜性
維護的方便性
最小的聯絡性
可擴充性
可重複使用性
高扇入
低或中等程度扇出
可移植性
簡練性
成層設計
標準化技求
· 設計是一個啟發的過程。 固執地堅持某一種方法只會抑制創造力,從而產生低質量的程式。堅持設計方法上有一些不屈不撓的精神是有益的,因為這可以迫使你對這種方法進行充分理解。但是,一定要確信你是在不屈不撓而不是頑固不化。
· 好的設計是通過迭代逼近得到的:你嘗試過的設計方案越多,你最終所確定的設計方案也越好。
· 結構化設計比較適合於小規模的子程式組合,同時,它對於功能變化可能性比資料大的問題也是較適用的。
· 面向物件設計更適於子程式與資料的組合,通常在比結構化設計抽象程度更高些的層次上適用。它尤其適合於資料變動可能性大於功能變動可能性的問題。
· 設計方法僅是一種工具,你對工具運用得好壞決定了你所設計的程式的質量。利用不好的設計方法,也可能設計出高質量的程式。而即使是好的方法,如果運用不當的話,也只能設計出拙劣的程式。但不管怎樣,選擇正確的工具更容易設計出高質量的軟體。
· 許多關於設計的豐富而有用的資訊都是在本書之外的。在這裡所論述的,不過是冰山的一角而已。
5,資料
· 在你的工具箱中需要一張全部資料結構的清單,以便用最合適的方法處理每一種問題。
· 建立自己的資料型別,以增加程式的可變動性,並使其成為自說明的。
· 資料初始化很容易產生錯誤,因此應採用本章推薦的技術來避免由意外初始值所產生的錯誤。
命名:
· 恰當的變數名是可讀性好的必要條件之一。特殊的變數如迴圈變數和狀態變數要予以特殊考慮。
· 命名約定可以區分區域性、模組和全域性變數。同時它還可以區分型別名稱,比如可以對命名常量、列舉型別和變數加以區分。
· 不管你從事的是哪種專案,都應該採用命名約定。所採用的命名約定取決於程式的規模和從事這一程式的程式設計師的人數。
· 匈牙利約定是一種非常有效的命名約定,比較適於大規模專案和程式。
· 在現代程式語言中幾乎不需要採用縮寫技術。
6,基礎程式碼結構
變數
基本資料型別
複雜資料型別
順序程式語句
條件語句
迴圈語句
控制結構
佈局和風格
7,單元測試
單元測試——對單個子程式和模組而不是對整個系統的測試。
單元測試的一般方法:
· 對每個需求進行測試,以便確保需求得到實現。在需求階段上計劃測試或儘量使測試早一些——在你編寫單元測試前。你應考慮測試對需求的遺漏。安全性、儲存、安裝程式、系統可靠性都是測試的物件,並且在需求分析時它們都易被疏忽。
· 對和設計有關的程式進行測試以確保設計得到了實現。在設計階段儘早計劃測試——在你開始進行子程式的詳細編碼工作之前測試。
· 在詳細測試的基礎上對需求和設計測試增加基本測試。使用資料流測試和其它測試方法仔細檢查你的程式碼。從最低限度來說,你應對每行程式碼進行測試。下節將討論基本測試和資料流測試。
8,除錯與調整
除錯並不是提高軟體質量的一種方法。它只用於改正錯誤。
科學除錯方法:
1.通過重複實驗收集資料
2.建立假設以解釋儘可能多的相關資料
3.設計實驗以便證實或否定假設
4.證實或否定假設
5.按要求重複以上步驟
以上過程和除錯有著對應的關係。以下是發現錯誤的有效方法:
1.固定錯誤
2.確定錯誤源
3.改正錯誤
4.測試修改
5.尋找類似錯誤
· 注意你的編譯警告資訊,並及時改正編譯所提示的錯誤。如果你忽略了明顯錯誤的話,你就難以改正微妙的錯誤。
程式碼調整方法:
1 用高度模組化設計開發軟體,這樣易於理解,修改。
2 如果效能很差,測量系統,找出頻繁執行位置。
3 判斷效能的弱點是否是由不合格的設計資料結構演算法引起的,判斷程式碼調整是否合適;如果程式碼調整不合適,返回步驟1。
4 調整步驟3中識別出來的系統中的薄弱環節,測量每一個改進,如果它不能提高系統性能就放棄重來。
5 重複步驟2。
9,個人性格
程式設計工作極強的內部特點使得個人特點異常重要。,在程式設計師成為高階程式設計師的過程中,性格是更有決定意義的因素。
聰明和謙虛
好奇心
誠實
交流和合作
創造力和紀律
懶惰
· 你的個人性格直接影響你編寫計算機程式的能力。
· 最有明顯作用的性格為:謙虛、好奇心、誠實、創造性和紀律,還有文明的“懶惰”。
· 高階程式設計師的發展和生成與天才並無多大聯絡,任何事情都和個人的發展有關。
· 令人吃驚的是,小聰明、經驗、堅持和慾望既可幫助你也能妨礙你。
· 許多程式設計師不主動去吸收新資訊和新技術,而是靠偶然地上獲得一些新資訊,如果你抽出少量時間學習別人的程式設計經驗,過一段時間後,你將在你的同行中脫穎而出。
· 好的性格對養成良好習慣有很大影響。為了成為一位高水平的程式設計師,你應養成良好的習慣,其餘的就會隨之而來。
讀書心得:
一本十分經典的書。概念性的東西太多,不容易看懂。雖經典,但看完也沒覺得有多大收穫。瞭解了軟體建立是怎麼一回事,都有哪些工作。對子程式、模組、高階結構、資料等的設計,有了更好的理解。對基本程式碼結構可能較為熟悉了,就沒什麼看點了。單元測試是個好東西,可惜目前都還沒在專案中用過,以後有機會再細細研究吧。個人性格確實對程式設計有極大的影響,從這些年的工作中深有體會,特別是交流和合作。唯有良好的習慣,才能成為優秀的程式設計師。