開發速度和代碼質量,你的選擇是?
英文原文:Velocity vs. Quality
不得不承認,現在幾乎每個軟件開發項目都會不可避免地都會出現一個問題,那就是關于開發速度與代碼質量該如何抉擇。忽略一些細枝末節、偷工減料毫無疑問能讓我們的項目進展地更快,所需時間更短。
關于這個話題,幾年來一直反反復復糾結在我的腦海里,我開始漸漸發現這個論題本身就是一個既危險又錯誤的悖論。也許重新規劃這個論題能幫助我們達到一個共贏的局面:做出更好的產品、成就更優秀更有沖刺力的團隊。
當我們談及產品質量的時候,往往包含測試覆蓋率、變量命名法、代碼格式化、組件化、界面設計、bug 情況、邏輯錯誤等眾多指標。甚至有的時候,擴展能力、優化算法復雜度、服務延時、類庫推廣以及產品功能完整性方面也在考慮之中。
為了使討論更明確,區分不同的類別,我更喜歡將第一類的產品質量稱為“代碼質量”,而稱第二類為“執行質量”或“深度”:執行的深度、完成的深度。
偷工減料的代碼質量可能短期內會有立竿見影的成效與收益,但是這只是水中月鏡中花,在不久的將來需要我們連本帶利地償還:花大量的時間重構、花 大量的時間修復 bug、花大量的時間搞清楚究竟該如何才能使程序運作起來。因此,為了開發速度而犧牲代碼質量其實就是作繭自縛,時間一到它就會像“高利貸“一樣,利滾利 地讓你付出更高的、甚至是高不可攀的代價:不得不推遲其他的工作、苦不堪言、悔不當初。
良好的代碼質量其實能讓我們的進程跑得更快。保持一致的風格和帶點提示的命名法能幫助其他人——還有將來的你——理解代碼;干凈又周密的接口能 讓我們即使卸下或者更換整個組件,也不需要重新檢查代碼庫的角角落落;良好的測試覆蓋率能讓我們在做改動時更有信心、能減少 bug 的數量、能使得 QA 時間最少化。
隨著時代的發展,現在的實施深度已經演變成另外一個問題。如今有很多方法可以在不降低產品整體質量的同時簡化開發。
項目實施本身并不需要是非常完美的,一開始我們只要保證功能具備即可。而在之后的某個階段,我們可以再慢慢改善或者完全用新的內容取而代之。
例如,在一個新的 app 里,其 RPC 層起初可能只是簡單地做了一個 HTTP 類庫。這樣我們就可以把省下來的時間用到迭代應用層,以及那些還不夠精致需要再接再厲的內容上。然后在未來的某個時間點——也有可能是當我們正準備發布的 那一瞬間——突然覺得這些個 RPC 層需要更為迷人;或者是應該添加重試邏輯、異常處理、安全功能甚至是改變傳輸協議,沒錯,即便是在這樣的情況下去完善 RPC 層也完全 ok。
在建設項目時,我們常常會歷盡千辛萬苦、嘔心瀝血、廢寢忘食,不斷地經歷開發、重新開發、刪除功能這個循環,最終導致大約 6 萬行代碼胎死腹中,不出現在預覽版上。
如果我們忽視代碼質量,后期要想維護和擴展就會困難重重,并且產生大量的冗余代碼。如果我們不能針對性地進行優化,事半功倍做出來的成果最終也跳脫不了記載于 Git 日志里而被靜靜遺忘在角落里的命運。
事實上,現如今我們不但有能力給一些多余內容減肥,迅速給產品瘦身,還能在大多數情況下依舊保持其成為迭代和實驗的良好基礎。
所以,要是下次有人再問你,“如果不關注代碼的質量,能不能工作得更快?”的時候,理直氣壯氣地告訴他,“你問了一個愚蠢的問題!”
譯文鏈接:http://news.html5tricks.com/velocity-vs-quality.html
翻譯作者:IT 新聞 – 蔣麗麗