臟話越多,代碼越好!
?你在讀開源代碼的時候有沒有遇到過這種注釋?
What the fuck ?
Dude,WTF
Fuck this !
我遇到過,每次都忍不住笑,心想老外可真是性情中人,遇到不爽的地方就開罵,還直接寫到注釋中,甚至代碼中。

Bob大叔在《Clean Code》一書中諄諄教導我們:要對變量、函數(shù)、類精心命名,避免耍小聰明,別使用雙關語。
那么在注釋甚至在代碼中說臟話,會不會影響總體代碼質(zhì)量呢?
還真有人做了這個研究,Jan Strehmel,一個來自德國卡爾斯魯厄理工學院的學生發(fā)表了一篇論文,名稱就叫《在開源代碼中臟話的使用和代碼質(zhì)量之間有相關性嗎?》
為了研究這個問題,作者從GitHub中抓取了3800個含臟話的C代碼庫,7600個不含臟話的C代碼庫,用自家的軟件SoftWipe分析它們對編碼標準的遵守情況,逐個打分。
然后發(fā)揮他在統(tǒng)計學的技能,用了中心極限定理,Bootstrapping,Significance testing,Jarque-Bera test,Shapiro-Wilk test,Q-Q plot,Kolmogorov-Smirnov test ......,一頓操作猛如虎,最后他得到了一個驚人結(jié)論:
包含臟話的開源代碼明顯比不含臟話的質(zhì)量更好!

(原論文有很多圖,感興趣的可以去看看)
面對這個結(jié)果,作者恐怕也沒想到,他試圖解釋到:臟話代表了程序員對代碼極其復雜性的情感!在寫代碼的時候,罵幾句臟話,是緩解壓力的一種方式,這反過來?可以提?注意?,從而提?代碼質(zhì)量。
當然,你可千萬不要理解成只要在代碼中用了臟話,代碼質(zhì)量就會有提高,那就大錯特錯了。
這個結(jié)果讓我立刻想到了Linus Torvalds,他經(jīng)常Fuck 這個,F(xiàn)uck那個的,Linus在內(nèi)核源碼中對別人代碼的評論就足以扭曲統(tǒng)計結(jié)果。

在Linux最早的幾個版本中就出現(xiàn)fuck, shit ,damn這樣臟話,這似乎成了一種Linux的文化,在后續(xù)Linux源碼中各種臟詞不斷出現(xiàn)。
在2005年7月28號,fuck*達到了頂峰,足足出現(xiàn)了68次,隨后逐漸下降。
而 idiot* 則一致是在緩慢上升,現(xiàn)在和damn* 并駕齊驅(qū),不分上下。

但是,這些臟話并不影響Linux內(nèi)核是優(yōu)秀代碼的典范(詳情參見這一篇文章《漫畫 | 因為用了C語言,Linux內(nèi)核代碼一團糟?》),以Linus Torvalds為首的團隊對代碼結(jié)構(gòu)和風格做了嚴格的定義,在Review中堅持執(zhí)行。
在Java社區(qū),開源代碼中的臟話也不少。
2018年,IBM 軟件工程師 Adam Farley 給 OpenJDK 提交了一個 Bug ,說 OpenJDK 源碼中臟話太多了,到處都是,OpenJDK是在專業(yè)領域使用的,這太不合適了吧?這不我特意提交了一個Changset把它們都刪了。



3天后,經(jīng)過 OpenJDK 社區(qū)討論,大家認為:
Damn 和 Crap 不算臟話!還有3 個 f**k,是上游的鍋(回頭會跟進處理),只有一個文件中的f**k,都是臟話,應該刪掉。
為什么程序員喜歡在源碼中用臟話表示自己的想法呢?
代碼是程序員每天都要面對的工作對象,對代碼確實會出現(xiàn)復雜的情感,有時候需要一種情緒的宣泄。
看到一段高深的,自己無法理解的代碼,what the fuck?
好不容易把一段復雜邏輯的各種分支,邊界條件都搞定了,代碼實在是亂,don't fuck with it !
花了很大的精力寫完了邏輯,卻發(fā)現(xiàn)有個異常無法處理,damn,damn,damn
......
咱們國內(nèi)程序員似乎比較含蓄,很少在代碼中寫臟話,更喜歡吐槽公司,吐槽系統(tǒng),是不是這樣?
不過,一定要記住一點:當在代碼評論中出現(xiàn)臟話時,你就要小心了,不要輕易動下面的代碼,弄不好就是個大坑!
參考資料:
https://cme.h-its.org/exelixis/pubs/JanThesis.pdf
https://www.vidarholen.net/contents/wordcount



























