原创 61. 統一二進制

統一二進制         我見過幾個在構建時重寫部分代碼來爲每個目標環境生成定製的二進制文件的項目。這往往讓事情變得比它本應該的要複雜,也引入了團隊可能在每次安裝時沒有一致的版本的風險。至少它造成了多次的構建,每個副本都只有很少的差別,

原创 67. 專業的程序員

專業的程序員         如何才能一位專業的程序員?         專業程序員唯一的最重要的特質就是個人的責任感。專業的程序員對他們的職業、評估、計劃、錯誤和技藝負責;專業的程序員不會把責任推給其他人。        如果你很專業,

原创 60. 奇聞異事:測試人員是你的朋友

奇聞異事:測試人員是你的朋友         不管他們自稱是“質量保證”(Quality Assurance)還是“質量控制”(Quality Control),許多程序員稱他們爲“麻煩”。在我的經歷中,程序員們經常與測試他們的軟件的人有

原创 65. 優先使用領域特定類型而不是基礎類型

優先使用領域特定類型而不是基礎類型         1999年9月23日,價值3.276億美元的火星氣候探測者號在進入繞火星的軌道時失去了聯繫,就因爲地球上的一個軟件錯誤。這個錯誤後來被稱爲“公制單位混淆”。地球上的指揮站的軟件使用的是“

原创 70. 閱讀代碼

閱讀代碼         我們程序是古怪的生靈。我們喜歡編寫代碼,但要閱讀代碼時,卻唯恐避之不及。畢竟,寫代碼中的樂趣更多,而讀代碼則很艱難,有時候幾乎是不可能的。閱讀其它人的代碼尤爲困難,不只是因爲其他人的代碼不好,也可能是因爲他們所想

原创 62. 只有代碼會告訴你真相

只有代碼會告訴你真相         程序的終極語義由它的運行代碼給出。如果它只有二進制的形式,那將非常難以閱讀!然而,如果是你的程序、任何典型的商業軟件開發、開源項目或者動態的解釋型語言程序,都是有源代碼的。看一下源代碼,程序的意思就應

原创 63. 掌握(並重構)構建

掌握(並重構)構建         對編碼實踐高標準嚴要求,卻對構建腳本極其忽視的團隊並不罕見,可能是認爲構建腳本不重要,也可能是認爲構建腳本太複雜了,需要狂熱的發佈工程才能完成。無法維護的、有着各種重複和錯誤的構建腳本會導致問題,正如很

原创 75. 簡單來自刪減

 簡單來自刪減         “重做......”,我的老闆一邊對我說一邊用手指重重地按着刪除鍵。我看着電腦屏幕,隨着我的代碼一行又一行地消失於虛無,心裏一種再熟悉不過的不祥預感。         我的老闆,Stefan,並不是總是

原创 74. 性能調優的道路上遍佈髒代碼炸彈

性能調優的道路上遍佈髒代碼炸彈         通常,系統的性能調優需要你修改代碼。當你需要修改代碼的時候,每個過於複雜或者高耦合的代碼塊都是一個髒代碼炸彈,隨時會讓你需要付出的努力變得失控。髒代碼對你造成的第一個傷害就會是你的日程安排。

原创 64. 結伴編程,感受心流

 結伴編程,感受心流         設想一下,你完全投入了你正在做的事,專注它,奉獻它,參與它,可能忘記了時間,可能感受到了歡樂。你這就是在檢驗心流。整個團隊中的程序員們要同時達到並保持心流是很難的,因爲有非常多的中斷、交互和其它的

原创 59. 錯過多態的機會

錯過多態的機會         多態(Polymorphism)是OO的一條主要的基礎思想。這個詞源來希臘語,意思是多種(poly)形態(morph)。在編程中,多態是指一個特定的對象類或者方法類的多種形態,但多態並不簡單地是變化的實現。

原创 76. 單一職責原則

單一職責原則         好的設計的一個最基本的原則就是:         把因相同原因變化的東西聚合到一起,把因不同原因變化的東西分離開來。         這個原則就是“單一職責原則”或者SRP。簡短地說,即一個子系統、模塊、類甚

原创 58. 給未來的消息

給未來的消息         可能是因爲其中的大多數都是聰明人,這些年來我教導過的和一起工作過的程序員們,似乎大多數都認爲既然他們曾經研究的問題很難,那麼答案對於每個人(可能即便是對於代碼編寫幾個月後的自己)也應該一樣難以理解和維護。  

原创 66. 防止錯誤

防止錯誤         錯誤消息是用戶和系統其餘部分之間最關鍵的交互,它們在用戶和系統的交流接近崩潰時出現。         很容易認爲錯誤是由於用戶的不當輸入造成的,但是人們是會犯一些可預測、系統的錯誤的。於是,“調試”用戶和系統其餘

原创 68. 把一切都置於版本控制之下

把一切都置於版本控制之下         把項目中的一切都放在版本控制之下。你需要的資源有:免費的工具,比如Subversion,Git,Mercurial和CVS;充足的磁盤空間;便宜又強大的服務器;無處不在的網絡;甚至是項目主機服務。