《代碼閱讀方法與實踐之讀書筆記之一》

                                                                              《代碼閱讀方法與實踐之讀書筆記之一》程序員

   閱讀代碼是程序員的基本技能,同時也是軟件開發、維護、演進、審查和重用過程當中不可或缺的組成部分。《代碼閱讀方法與實踐之讀書筆記之一》這本書圍繞代碼閱讀,詳細論述了相關的知識與技能。我但願經過仔細閱讀並學習本書,能夠快速地提升個人代碼閱讀的技能與技巧,進而從現有的優秀代碼、算法、構架、設計中汲取養分,提升自身的開發與設計能力。這次讀了此書的前四章,如下是我從中汲取到的寶貴營養:算法

  從第一章《導論》一節中我體會到了咱們要養成一個常常花時間閱讀別人編寫的高品質代碼的習慣,由於閱讀高品質的代碼能夠提升咱們的編寫代碼的水準; 要有選擇地閱讀代碼,同時,還要有本身的目標;要注意並重視代碼中特殊的非功能性需求,這些需求也許會致使特定的實現風格;若是在現有的代碼上工做時,要與做者或維護人員進行必須的協調,以免重複勞動或所以而產生厭惡情緒;在尋找BUG時,要從問題的表現形式到問題的根源來分析代碼,不要誤入歧途;尋找bug,這種狀況下,關鍵的思想是使用工具,咱們要充分利用調試器,編譯器給出的警告或輸出的符號代碼,系統調用跟蹤器,數據庫結構化查詢語言(SQL)的日誌機制、包轉儲工具和Windows的消息偵查程序,定出BUG的位置;當向系統中增長新功能時,首先的任務就是找到實現相似特性的代碼,將它做爲待實現功能的模板;在移植代碼或修改接口時, 能夠經過編譯器直接定位出問題涉及的範圍,從而減小代碼閱讀的工做量;閱讀代碼尋找重構機會時,先從系統的構架開始,而後逐步細化,可以得到最大的效益;軟件部件通常要通過逐漸地擴展,並重復改寫以適用於兩個或三個不一樣系統以後,纔會成爲可重用的部件;在複查軟件系統時,要注意,系統是由不少部分組成的,不只僅只是執行語句,還要注意分析如下內容:文件和目錄結構、生成和配置過程、用戶界面和系統的文檔,能夠將軟件複查做爲一個學習、講授、援之以手和接受幫助的機會。數據庫

   從第二章《基本編程元素》中我再次溫習了以前學習的知識:分析一個程序時, main是一個好的起始點;層疊if-else if-...-else序列能夠看做是由互斥選擇項組成的選擇結構.;在分析重要的程序時最好首先識別出重要的組成部分.;解決困難的代碼要從容易的部分入手;要養成遇到庫元素就去閱讀相關文檔的習慣,這將會加強咱們的閱讀和編寫代碼的能力;.for (i=0; i<n; i++)形式的循環執行n次;高效的算法和特殊的優化確實有可能使得代碼更爲複雜從而更難理解但這並不意味着使代碼更爲緊湊和不易讀會提升它的效率;do循環的循環體至少執行一次;每次只分析一個控制結構將它的內容看做是一個黑盒;return, goto, breakcontinue語句還有異常都會影響結構化的執行流程.,因爲這些語句通常都會終止或從新開始正在進行的循環,所以要單獨推理它們的行爲。編程

   第三章高級《C數據類型》讓我對C語言又有了更進一步的認識:只有瞭解特定語言構造所服務的功能以後纔可以更好地理解使用它們的代碼;在C程序中指針通常用來構造鏈式數據結構|動態分配的數據結構|實現引用調用|訪問和迭代數據元素|傳遞數組參數|引用函數|做爲其餘值的別名|表明字符串|以及直接訪問系統內存;指向數組元素地址的指針能夠訪問位於特定索引位置的元素;C語言中的結構將多個數據元素集合在一塊兒使得它們能夠做爲一個總體來使用用來從函數中返回多個數據元素|構造鏈式數據結構|映射數據在硬件設備|網絡連接和存儲介質上的組織方式|實現抽象數據類型|以及以面向對象的方式編程;共用體在C程序中主要用於優化存儲空間的利用|實現多態|以及訪問數據不一樣的內部表達方式;動態分配的內在塊能夠電焊工地釋放或在程序結束時釋放或由垃圾回收器來完成回收,在棧上分配的內存塊當分配它的函數退出後釋放;能夠將typedef聲明理解成變量定義變量的名稱就是類型的名稱,變量的類型就是與該名稱對應的類型。數組

   我從第四章《C數據結構》中獲取到如下精華:C語言中通常使用內建的數組類型實現向量再也不對底層實現進行抽象;表達式sizeof(x)總會獲得用memsetmemcpy處理數組x(不是指針)所需的正確字節數;不對稱區間中元素的數目等於高位邊界與低位邊界的差;動態分配的矩陣通常存儲爲指向數組列的指針或指向元素指針的指針,這兩種類型均可以按照二維數組進行訪問;數組能夠經過存儲供程序內的抽象機(abstract machine)或虛擬機(virtual machine)使用的數據或代碼控制程序的運做;若是結構中含有指向結構自身|名爲next的元素通常說來該結構定義的是單向鏈表的結點;包含指向自身的nextprev指針的結構多是雙向鏈表的結點;圖的結點經常順序地存儲在數組中連接到鏈表中或經過圖的邊連接起來;.在無向圖中表達數據時應該將全部的結點看做是等同的相似地進行處理任務的代碼也不該該基於它們的方向來區分邊;在非連通圖中執行遍歷代碼應該可以接通孤立的子圖;處理包含迴路的圖時遍歷代碼應該避免在處理圖的迴路進入循環;複雜的圖結構中可能隱藏着其餘類型的獨立結構。網絡

相關文章
相關標籤/搜索