程式碼整潔之所以重要的七個理由

jobbole發表於2014-03-17

首先要承認,大學畢業的時候我是個糟糕的程式設計師。我拿到了學位,學到了一大堆書本知識,然後,我開始做一個不太重要的專案,每天晚上花大量的時間做簡化。 起初,一切正常,但是我的程式碼風格一直在添亂。複製、貼上、蹩腳的命名,混亂的思考,而且總用長期連續執行的方法,執行各種各樣本可以分開的任務。幾個月之後,我意識到一個嚴峻的現實:這個專案要崩潰了。原本我以為一個人開發,可以避免混亂。但是最終不得不承認,這個專案被我弄得一團糟,沒法維護,更別說去理解了。

儘管我的程式碼通常能正常執行,但我確實在編碼時玩忽職守,因為我寫的程式碼,不經過仔細重構,沒人能看懂。那時,我是個超高效的技術債務製造者。 你一定不想那樣。

再簡單的問題,一個糟糕的程式設計師都能把它變複雜。——Steve Bohlen

哇,Steve是在說我吧?我早期的專案就很好驗證了這句話。沒有良好的實現,再簡單的邏輯都能變得晦澀難懂。早期的經驗讓我明白,我該研究下怎麼改進程式碼風格了。

 

什麼是整潔的程式碼?

程式碼整潔是一種以讀者為中心的開發風格,以此開發的軟體易於讀寫和維護。開發人員總以為他們的工作在應用程式能夠正常執行時就完成了。但是我們編寫程式碼,並不只是為了給計算機用。

編碼是一種和另外一個人交流你希望計算機做什麼的藝術。——高德納

保持程式碼整潔,首先要意識到你的讀者不只是計算機,還是活生生的人!牢記這個原則,我們來討論程式碼整潔之所以重要的七個簡單理由。

 

1. 你是個作家

想讓媽媽覺得你很厲害?告訴她你是個作家!作家就是那些練習寫作並以此為職業的人。開發人員每天都在寫。但是作為開發人員,我們總會忘記我們寫的每一行程式碼都會被人閱讀十遍以上。這些人,就是我們的同事。他們閱讀程式碼,忙著修復漏洞和新增新的特性。

卓越的作家以寫敘述清晰、扣人心絃的故事著稱於世。他們使用諸如章節、標題和段落等工具,有條理組織他們的想法,並耐心的引導讀者。開發人員的工作模式也很類似,只是他們簡單的使用名稱空間、類和方法這些行話來講述故事罷了。

9a3ea672e38521a979f9d33e1d483da94

程式碼整潔的人能夠聰明使用這些工具來降低複雜度,使故事變得清晰。

 

2. 程式碼整潔是基礎

近年來,專業的重構、單元測試、測試驅動的開發等軟體實踐備受關注。這些實踐提升了程式碼質量和軟體的可維護性。實現程式碼整潔的原則是一項基本技能,它的優勢會在進行重構程式碼或者對程式碼進行單元測試時顯現。程式碼整潔的原則使得原始碼高度模組化並且易於閱讀和測試。如果將那些軟體實踐看作是房子的話,整潔的程式碼則是地基。

 

3. 證明你的技能

假設你正在參加一場技術面試。如果被問到程式碼質量,為證明你的程式碼質量,你能夠舉出專業且合理的理由嗎?

或者,你會這樣回答?

如果這就是你關於程式碼整潔所能想到的,那可是個壞兆頭。如果你從未有條有理的深入思考過程式碼風格的質量問題,那麼你可以改進的機會估計很多。程式碼整潔的人能夠傳授很多他們使用的具體行為、模式和技巧。但是,程式碼整潔畢竟不是偶然現象,它要求可行的規律的專注於清晰的表達意圖。

能夠被衡量的東西,都能被管理。—— Peter Drucker

建立一個整潔程式碼的詞彙表,不僅有利於面試和提升程式碼質量;而且,在程式碼審查時,建立大家公認的程式碼可讀性的詞彙表和框架,能夠促進冷靜的對話。

 

4. 讀程式碼才是難事

開發人員常以能夠解決難題為傲。不過相對來講,寫程式碼比較簡單,讀程式碼才是件難事。這就是為什麼 Eric Lippert 寫文章說閱讀程式碼很難。這也是為什麼這麼多的程式設計師寧願重寫,也不願做閱讀和理解已有的程式碼這種苦差事。既然看程式碼原本就很挑戰,如果一些程式碼你寫的時候都只能勉強理解,你會發現過後你一點都看不懂。專業的程式設計師寫了太多的程式碼,以至於只要間隔幾周,就能忘記大部分的結構和設計,像以全新的視角看這個專案。過段時間看不懂自己的程式碼確實是很尷尬的事。相信我,我經歷過好幾次。

 

5. 技術債務讓人沮喪

馬虎混亂的程式碼會給我們的專案埋下技術債務。仔細考慮情境時,技術債務也會是有用的,但是過度的技術債讓人沮喪,並且會導致團隊的人才流失。當簡單的事情變得複雜時,開發人員就會開始撤退去別的地方了。他們更看重工作質量帶來的成就感,而不是工作數量。技術債務會降低程式碼重用的機會,並且處處拉低其他程式碼庫的質量。

 

6. 你太懶惰

PERL語言的作者Larry Wall說過程式設計師的三大美德:懶、缺乏耐心、自大。是的,在合適的情境中,懶惰確實是積極因素。早些年,當我還在跌跌撞撞的寫程式碼的時候,我認識到保持程式碼整潔所付出的艱辛真的會得到回報。專業的開發人員努力做到正確的懶惰。這種懶惰是把更多的精力放到程式碼中,以至於開始時不難寫,以後也不會難以重用。程式碼整潔不會多花費很多時間,而且一旦你掌握這些原則,你的編碼速度實際上會更快。因為精煉的、表達充分的程式碼最大的優點就是易於管理。

人們處於壓力中時,容易偷工減料並且忽略最佳做法。然而像Bob Martin大叔在他的《程式碼整潔之道》中提醒我們的那樣:我們沒有時間不認真。長遠來看,馬虎草率所增加的出錯次數和後期的維護代價,最終會拖延專案速度。歷史經驗告訴我們,後期你基本不可能有時間再去整理你的程式碼。所以為什麼不在一開始就好好做呢?

 

7. 不要成為那個動詞

好吧,其他的原因都解釋的站得住腳,但是這個理由最關鍵。大家都知道前同事的名字變成動詞來描述“髒”程式碼的事:糟糕,這些程式碼是Jimmy寫的。“Oh man, this code has been Jimmy’d.”

這樣的評價,簡直就是長遠就業前景的剋星啊。我們都希望未來的職位上,同事能夠推薦或者錄用我們不是嗎?想要確保今後同事會推薦你,並且期待和你以及你的程式碼合作,讓別人知道你的程式碼整潔是最好的方式。

 

程式碼整潔的原則

以下是程式碼整潔的三個核心原則:

1. 選擇正確的工具

2. 優化訊雜比

3. 盡最大努力寫出能夠自解釋的程式碼

Cory在PluralSight的新課程程式碼整潔之道:寫程式碼給人看詳細的闡述了這三個原則。如果你有興趣提升程式碼質量,建立評價和編寫整潔程式碼的詞彙庫,去看看吧!

 

關於作者

Cory House,軟體架構師,獨立顧問。精通響應式網頁設計、程式碼整潔之道以及臭高爾夫球技。

相關文章