可读性代码:为什么、怎样以及什么时候
如果你對開發(fā)團(tuán)隊(duì)進(jìn)行問卷,大多數(shù)人會說“我們想要可讀性高的代碼”。你甚至發(fā)現(xiàn)有些人認(rèn)為可讀性比功能更重要。但是,當(dāng)要求人們對可讀性做出定義時(shí),他們的意見就會出現(xiàn)分歧。Laura Savino在Explore DDD 2018大會上的演講就是以這個(gè)作為前提。她闡述了為什么我們想要可讀性高的代碼、可讀性究竟意味著什么,以及什么時(shí)候必須優(yōu)先考慮可讀性。
\\Savino擁有小學(xué)法語教師的背景,后來成為iOS開發(fā)人員和導(dǎo)師,因此,她能夠提供更多有關(guān)比較自然語言和編程語言的見解。剛開始學(xué)習(xí)新編程語言的程序員通常先學(xué)寫一個(gè)基本的“Hello,world!”應(yīng)用程序。同樣,“Bonjour”、“Hola”或“Guten-tag”可能是學(xué)習(xí)法語、西班牙語或德語的人學(xué)會的第一個(gè)單詞。
\\正如程序員將迅速學(xué)會“Hello,world!”,口語也會很快進(jìn)入中間階段。Savino舉了一個(gè)例子,在法語課上問一個(gè)同學(xué)是否愿意在課后和你一起去喝咖啡(Voulez-vous prendreuncaféavelve moiaprèslescours?)。即使他拒絕了(Désolé,je ne peux pas prendredecaféprèslescours),在別人看來這是有史以來最無聊的談話,但你自己卻感覺飄飄然:你說了一個(gè)句子,然后有人理解它,因?yàn)槟闶盏搅诉m當(dāng)?shù)幕貞?yīng),而你了解回應(yīng)是什么意思。這就像在iOS應(yīng)用程序中顯示數(shù)據(jù)一樣——它不是那么吸引人,但當(dāng)你第一次成功完成這個(gè)任務(wù)時(shí),你的腎上腺素會飆升。
\\學(xué)習(xí)語言的高級階段超越了對語法的思考。你的目標(biāo)已經(jīng)超越了只是相互理解,你現(xiàn)在需要深入細(xì)節(jié)。這時(shí)候編程語言與人類語言之間的類比開始不再奏效,或者至少需要更深入的分析。
\\在進(jìn)行代碼評審時(shí),經(jīng)常會有人說,“我無法理解這些代碼”,而另一個(gè)人(可能是作者)反駁說,“但這種方式更具可讀性”。Savino用這個(gè)例子來說明“可讀性取決是誰在閱讀代碼”。讓可讀性變得復(fù)雜的是代碼有兩種不同的受眾:其他開發(fā)人員和計(jì)算機(jī)。因?yàn)橛?jì)算機(jī)如果無法讀懂我們的代碼,它們很快就會告訴我們,我們自然會基于計(jì)算機(jī)的反饋?zhàn)龀稣{(diào)整。我們承認(rèn)這種偏見的存在,有時(shí)候會在代碼周圍加上人類可讀的注釋。但是,Savino警告說,“注釋并不能帶來具備可讀性的代碼”。
\\Savino解釋了解讀文本或代碼與流利閱讀之間的區(qū)別。她使用E. E. Cummings的詩“when serpents bargain for the right to squirm”作為例子,一個(gè)美麗而復(fù)雜的作品需要閱讀多次才能真正開始理解其中的含義。當(dāng)你在閱讀代碼時(shí)遇到不熟悉的術(shù)語時(shí)需要經(jīng)歷類似的過程——查找一個(gè),然后是下一個(gè),然后是下一個(gè),你就像進(jìn)了一個(gè)兔子洞,直到你忘記了最初想要理解的內(nèi)容為止。Savino警告說,雖然可以從深刻的理解中獲得快樂,但“寫詩與開發(fā)軟件不是一回事”。
\\相反,流利的閱讀是一種快速而正確的理解,不會占用你的工作記憶。多年的閱讀經(jīng)驗(yàn)讓你能夠快速瀏覽文章并仍然能夠理解其中的內(nèi)容。Savino認(rèn)為,閱讀可讀性高的代碼也是如此。當(dāng)代碼很容易閱讀時(shí),大腦可以騰出一部分發(fā)現(xiàn)其中可能出現(xiàn)的問題,讓代碼評審更加高效。
\\在給出了高可讀性代碼為什么如此重要的原因之后,Savino探討了如何寫出高可讀性代碼的技術(shù)。在與語言不流利的談話對象溝通時(shí)應(yīng)該避免使用俚語,并使用明確的表達(dá)方式。在代碼中,方法的命名可以用beginApp(),而不是releaseTheHounds(),并在每一步給出變量和調(diào)用結(jié)果,而不是將函數(shù)調(diào)用鏈接在一起。
\\Savino還探討了我們的本能模式匹配能力。在抽象層面,需要使用“斜視測試”來查看代碼的一般性結(jié)構(gòu),看看是否有任何異常的東西。在更低的層面,盡量避免使用看起來相似的字符和符號,包括!、I、l和1,這些可能會導(dǎo)致反模式匹配。最后,如果你正在做一些與眾不同的東西,那就以一種可以讓它從脫穎而出的命名方式。
\\對于作家來說,最好的建議是“了解你的受眾”。Savino說,當(dāng)你的受眾是閱讀你的代碼的人時(shí),你應(yīng)該更進(jìn)一步,并信任他們。當(dāng)有人告訴你代碼不夠清晰時(shí),相信他們,然后問他們因?yàn)槿鄙倭四男┬畔?dǎo)致代碼難以閱讀。用他們的反饋來提高代碼的可讀性。
\\最后,Savino提到了一些可讀性需要成為主要驅(qū)動(dòng)因素的例子。簡單地說,一段代碼越重要,它的可讀性就應(yīng)該越高。Savino引用了美國宇航局噴氣推進(jìn)實(shí)驗(yàn)室的編碼指南,該指南指出,“任務(wù)關(guān)鍵代碼不應(yīng)該只是可以辯證的,還必須是絕對正確的”。與人類溝通有關(guān)的一個(gè)更為實(shí)際的場景是火災(zāi)逃生標(biāo)志,在逃離火災(zāi)時(shí),人們不需要額外的努力看懂這些標(biāo)志。
\\你的團(tuán)隊(duì)?wèi)?yīng)該針對是否以及何時(shí)需要可讀代碼展開討論。你的目標(biāo)應(yīng)該是所有團(tuán)隊(duì)成員都能流利地閱讀代碼。Savino最后鼓勵(lì)每個(gè)人進(jìn)行“更少的解讀,更多的創(chuàng)造”。
\\查看英文原文:Readable Code - Why, How and When You Should Write It
總結(jié)
以上是生活随笔為你收集整理的可读性代码:为什么、怎样以及什么时候的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当Elasticsearch遇见智能客服
- 下一篇: 使用“即时消息服务框架”(iMSF)实现