根本原因是什么?天知道,只要重試次數夠多,你就可以掩蓋任何問題。但如車身修補一樣,某一位置的霸道膠水(Bondo)比實際殘留的車本身部件還要多。
更難找的問題發生在補丁并沒有解決問題根本原因的時候,問題通常根本沒有消失—它只是轉移到別處。在前面的對話中,重試100次可能很好地掩蓋了問題,但萬一需要101次重試怎么辦?經理只是隨便捏了個數字,這種膏藥式修補只會讓問題更難查。
沿著“快速修補”上行,我們現在得到了一個增加代碼規模的完整閉環。
明確兩點會有助于我們減少軟件偶然復雜度:清晰思考和清晰表達。
在分析問題的原因時,我們試圖做出像“保存時間的方式應該只有一種”這樣的清晰陳述。那為何UNIX C代碼里還混雜著像time_t、struct timeval和struct timespec這樣的結構呢?那并不是太清晰。
如何調和你的清晰陳述和UNIX計時功能的復雜度?你需要隔離復雜度,或將其抽象到單個模塊中。在C里,這可能是結構體和操作它的函數;在C++里,它會是一個類。模塊化設計讓程序的其余部分可以用一種清晰的方式推導時間,而不用了解系統計時功能的內部機制。
一旦能將時間作為程序的一個單獨模塊進行對待,你也就能證明你的計時機制的正確性。完成這一工作的最佳方式就是單獨測試,但是同行評審或書寫規格說明也行。當一組邏輯是隔離的而不是內嵌在一大段代碼體內時,它的測試和嚴格證明要容易得多。
隨著你清晰地思考模塊并將它與其余程序隔離,最終程序也就能更清晰地表達它的用途。處理問題域的代碼應該真正專注于問題域。
將輔助代碼抽出放入自己的模塊之后,剩余邏輯讀起來應該越來越像問題域的規格說明(雖然有更多分號)。
讓我們看看前后對比。我已經無數次看到過如下這種C++代碼:
[cpp] view plaincopy
讓我們把所有時間代碼放入它自己的類:
[cpp] view plaincopy
[cpp] view plaincopy
當工作在巨大丑陋的代碼上時,依次考慮:這段代碼想表達什么含義?它有沒有辦法說得更清楚一點?如果它是清晰表達的問題,你需要把那些礙事的代碼段抽象出來,同前面展示的Timer類一樣。若代碼還是有點混亂,那可能是沒有清晰思考的產品,需要在設計層面返工。
聚焦于可被隔離和嚴格推導的一個編程方面,如計時。挖掘你正在從事的項目,識別出這樣的代碼段:若那部分邏輯被抽象到自己的模塊,它能否表達得更清晰。
動手嘗試更模塊化的方法:選一組混亂的代碼,分離必然復雜度和偶然復雜度。在這一刻不要操心細節,只看如何可以清晰地表達必要的業務邏輯,假設你有獨立模塊來處理支撐邏輯。
------------------------------------
本文節選自《程序員修煉之道:專業程序員必知的33個技巧》“技巧4:馴服復雜度”。
書名:《程序員修煉之道:專業程序員必知的33個技巧》
原書名:New Programmer's Survival Manual: Navigate Your Workplace, Cube Farm, or Startup
作者:Josh Carter
譯者:胡鍵
頁數:212
定價:49.00元
ISBN:9787111411642
豆瓣收藏:http://book.douban.com/subject/21323647/
PDF下載:http://vdisk.weibo.com/s/paFl8
當當購買:http://product.dangdang.com/main/product.aspx?product_id=23185207
內容簡介:
這是每一位致力于成為專業程序員的軟件開發新手都應該閱讀的一本書。它是資深軟件開發專家Josh Carter 20余年編程生涯的心得體會,從程序員成長的視角,系統總結和闡述了專業程序員在專業技能、編程工具、自我管理、團隊協作、工作態度以及需要采取的行動等方面應該掌握的33個非常重要且實用的技巧。作者以自己以及身邊的同事積累下來的經驗、犯過的錯誤為素材,旨在為新人們引路,讓他們在能力修煉的過程中少走彎路!
全書分為四個部分:第一部分(技巧1~14),從編程技能和工具使用兩個方面總結了14個技巧,包含如何正確地書寫代碼、測試驅動設計、管理代碼復雜度、改善遺留代碼、代碼評審、開發環境優化、自動化等;第二部分(技巧15~24),從自我管理和團隊協作兩個方面總結了10個技巧,包括如何樹立自我形象、壓力管理、建立良好人脈和高效會議等;第三部分(技巧25~30),介紹了典型高科技公司的組織結構以及你在整個公司中的位置,并且闡述了薪酬分配的問題;第四部分(技巧31~33),介紹了在日常工作中如何持續改善自己的工作和學習狀態。
作者簡介:
Josh Carter,資深軟件設計師,具有超過20年編程行業從業經驗。熱衷于編程和追逐前沿技術,但同時謹記史蒂夫?喬布斯的箴言“真正的藝術家能讓產品面市”。他還涉足工程管理領域,曾經主管大型企業軟件開發團隊。目前已出版多本關于計算機軟件的技術書籍,同時他還在主流計算機雜志的技術專欄發表文章。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com