聊完了好代碼的三個標準,接下來,我們就開始從這三個標準出發,看看我們如何修煉“好代碼”這門手藝。看起來寫出來的代碼都完成了同樣的功能,但是,為什么高手寫出來的代碼效率和質量就會更高呢?因為高手的做事方式不一樣,高手會在想清楚之后再來寫代碼。下面,我們就來聊聊好代碼的七個先。
什么是七個先,就是七個先于實際寫代碼的事情,想清楚再來寫代碼,就能提升寫代碼的效率和質量。看似這樣做浪費了時間,但是,磨刀不誤砍柴工,這樣做反而效率和質量最高。
先來看第一個先,需求先于設計。很多時候,我們還沒有完全吃透需求的時候,就開始編寫代碼。這時候,往往編寫的過程中我們才發現問題,再去修改,甚至到系統上線才發現,只能下一個版本才能修復。整體來看,這樣的效率和質量都不高,所以,吃透需求應該是第一個要做的事情。
第二個先,設計先于開發。吃透了需求,馬上就可以進入開發嗎?也不是,因為除了業務提的功能性需求之外,我們還有一些非功能性需求要額外關注。哪些是非功能性需求呢?比如系統的性能、可用性以及可擴展性。以性能為例,我們需要預估一下有多少用戶會并發訪問,不同的用戶數,系統的設計就是不一樣的。非功能需求就要求我們要做好架構的設計。
第三個先,模塊先于接口。搞定了設計,可以寫代碼了嗎?還是不行,還得需要看一下,哪些接口是可以復用的,哪些功能可以放到一個模塊里。這有點類比于我們收拾行李,用途類似的物品可以放到一起,這樣收納起來比較方便,使用的時候也方便拿取。其實這就是一種歸類,人的大腦能同時記住的信息數是有限的,通過歸類就可以降低我們記憶和理解的難度,讓事情變得可控。
第四個先,接口先于邏輯。搞定了模塊劃分,就可以寫代碼了嗎?還是不行,寫代碼之前還得需要先確定接口邊界,程序開發是一個多工種配合的團隊作戰,接口就是大家的邊界和合作方式,不把這個事情弄清楚,大家就沒法高效的并行工作。
第五個先,注釋先于代碼。尤其是復雜的業務邏輯或者抽象的算法實現,最好要先通過文字形式把事情說清楚再來寫代碼。一方面,這是一個梳理自己思路的過程,另一方面,也能方便后期維護的同事,讓他可以快速理解代碼的背景。
第六個先,算法先于實現。不一樣的算法,效率的差異是巨大的,所以,在寫具體實現之前,要想清楚采用哪些算法,分別的優缺點是什么,算法就是時間與空間的平衡藝術。
第七個先,自測先于交付。完成了編碼,我們一定要在交付給合作方之前先進行自測,Bug發現的越晚,解決他所花費的代價就越大。舉個例子,如果我們在客戶端功能測試的才發現的問題,每個功能都需要調用多個接口來實現,復現和定位問題都需要花掉額外的時間,還得需要多方配合才可以。所以,盡量把問題扼殺在萌芽階段。
磨刀不誤砍柴工,做事的方式不一樣,帶來的效率和質量就會不一樣。道理很簡單,但是做起來很難,很多時候,我們會因為時間的緊張,行動就會變形。就像優秀的運動員,高手在技術水平都一樣的情況下,比的是誰犯的錯誤更少,誰的表現更穩定和高效。下面,我們會分為七個章節,具體給大家拆解這七個先應該如何做。