可讀性代碼:爲什麼、怎樣以及什麼時候

如果你對開發團隊進行問卷,大多數人會說“我們想要可讀性高的代碼”。你甚至發現有些人認爲可讀性比功能更重要。但是,當要求人們對可讀性做出定義時,他們的意見就會出現分歧。Laura Savino在Explore DDD 2018大會上的演講就是以這個作爲前提。她闡述了爲什麼我們想要可讀性高的代碼、可讀性究竟意味着什麼,以及什麼時候必須優先考慮可讀性。

Savino擁有小學法語教師的背景,後來成爲iOS開發人員和導師,因此,她能夠提供更多有關比較自然語言和編程語言的見解。剛開始學習新編程語言的程序員通常先學寫一個基本的“Hello,world!”應用程序。同樣,“Bonjour”、“Hola”或“Guten-tag”可能是學習法語、西班牙語或德語的人學會的第一個單詞。

正如程序員將迅速學會“Hello,world!”,口語也會很快進入中間階段。Savino舉了一個例子,在法語課上問一個同學是否願意在課後和你一起去喝咖啡(Voulez-vous prendreuncaféavelve moiaprèslescours?)。即使他拒絕了(Désolé,je ne peux pas prendredecaféprèslescours),在別人看來這是有史以來最無聊的談話,但你自己卻感覺飄飄然:你說了一個句子,然後有人理解它,因爲你收到了適當的迴應,而你瞭解迴應是什麼意思。這就像在iOS應用程序中顯示數據一樣——它不是那麼吸引人,但當你第一次成功完成這個任務時,你的腎上腺素會飆升。

學習語言的高級階段超越了對語法的思考。你的目標已經超越了只是相互理解,你現在需要深入細節。這時候編程語言與人類語言之間的類比開始不再奏效,或者至少需要更深入的分析。

在進行代碼評審時,經常會有人說,“我無法理解這些代碼”,而另一個人(可能是作者)反駁說,“但這種方式更具可讀性”。Savino用這個例子來說明“可讀性取決是誰在閱讀代碼”。讓可讀性變得複雜的是代碼有兩種不同的受衆:其他開發人員和計算機。因爲計算機如果無法讀懂我們的代碼,它們很快就會告訴我們,我們自然會基於計算機的反饋做出調整。我們承認這種偏見的存在,有時候會在代碼周圍加上人類可讀的註釋。但是,Savino警告說,“註釋並不能帶來具備可讀性的代碼”。

Savino解釋瞭解讀文本或代碼與流利閱讀之間的區別。她使用E. E. Cummings的詩“when serpents bargain for the right to squirm”作爲例子,一個美麗而複雜的作品需要閱讀多次才能真正開始理解其中的含義。當你在閱讀代碼時遇到不熟悉的術語時需要經歷類似的過程——查找一個,然後是下一個,然後是下一個,你就像進了一個兔子洞,直到你忘記了最初想要理解的內容爲止。Savino警告說,雖然可以從深刻的理解中獲得快樂,但“寫詩與開發軟件不是一回事”。

相反,流利的閱讀是一種快速而正確的理解,不會佔用你的工作記憶。多年的閱讀經驗讓你能夠快速瀏覽文章並仍然能夠理解其中的內容。Savino認爲,閱讀可讀性高的代碼也是如此。當代碼很容易閱讀時,大腦可以騰出一部分發現其中可能出現的問題,讓代碼評審更加高效。

在給出了高可讀性代碼爲什麼如此重要的原因之後,Savino探討了如何寫出高可讀性代碼的技術。在與語言不流利的談話對象溝通時應該避免使用俚語,並使用明確的表達方式。在代碼中,方法的命名可以用beginApp(),而不是releaseTheHounds(),並在每一步給出變量和調用結果,而不是將函數調用鏈接在一起。

Savino還探討了我們的本能模式匹配能力。在抽象層面,需要使用“斜視測試”來查看代碼的一般性結構,看看是否有任何異常的東西。在更低的層面,儘量避免使用看起來相似的字符和符號,包括!、I、l和1,這些可能會導致反模式匹配。最後,如果你正在做一些與衆不同的東西,那就以一種可以讓它從脫穎而出的命名方式。

對於作家來說,最好的建議是“瞭解你的受衆”。Savino說,當你的受衆是閱讀你的代碼的人時,你應該更進一步,並信任他們。當有人告訴你代碼不夠清晰時,相信他們,然後問他們因爲缺少了哪些信息導致代碼難以閱讀。用他們的反饋來提高代碼的可讀性。

最後,Savino提到了一些可讀性需要成爲主要驅動因素的例子。簡單地說,一段代碼越重要,它的可讀性就應該越高。Savino引用了美國宇航局噴氣推進實驗室的編碼指南,該指南指出,“任務關鍵代碼不應該只是可以辯證的,還必須是絕對正確的”。與人類溝通有關的一個更爲實際的場景是火災逃生標誌,在逃離火災時,人們不需要額外的努力看懂這些標誌。

你的團隊應該針對是否以及何時需要可讀代碼展開討論。你的目標應該是所有團隊成員都能流利地閱讀代碼。Savino最後鼓勵每個人進行“更少的解讀,更多的創造”。

查看英文原文Readable Code - Why, How and When You Should Write It

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章