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

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

(原論文有很多圖,感興趣的可以去看看)
面對這個結果,作者恐怕也沒想到,他試圖解釋到:髒話代表了程式設計師對程式碼極其複雜性的情感!在寫程式碼的時候,罵幾句髒話,是緩解壓力的一種方式,這反過來⼜可以提⾼注意⼒,從而提⾼程式碼質量。
當然,你可千萬不要理解成只要在程式碼中用了髒話,程式碼質量就會有提高,那就大錯特錯了。
這個結果讓我立刻想到了Linus Torvalds,他經常Fuck 這個,Fuck那個的,Linus在核心原始碼中對別人程式碼的評論就足以扭曲統計結果。

在Linux最早的幾個版本中就出現fuck, shit ,damn這樣髒話,這似乎成了一種Linux的文化,在後續Linux原始碼中各種髒詞不斷出現。
在2005年7月28號,fuck*達到了頂峰,足足出現了68次,隨後逐漸下降。
而 idiot* 則一致是在緩慢上升,現在和damn* 並駕齊驅,不分上下。

(髒話在每個版本中出現的次數,點選看大圖)
但是,這些髒話並不影響Linux核心是優秀程式碼的典範,以Linus Torvalds為首的團隊對程式碼結構和風格做了嚴格的定義,在Review中堅持執行。
在Java社群,開原始碼中的髒話也不少。
2018年,IBM 軟體工程師 Adam Farley 給 OpenJDK 提交了一個 Bug ,說 OpenJDK 原始碼中髒話太多了,到處都是,OpenJDK是在專業領域使用的,這太不合適了吧?這不我特意提交了一個Changset把它們都刪了。



3天后,經過 OpenJDK 社群討論,大家認為:
Damn 和 Crap 不算髒話!還有3 個 f**k,是上游的鍋(回頭會跟進處理),只有一個檔案中的f**k,都是髒話,應該刪掉。
為什麼程式設計師喜歡在原始碼中用髒話表示自己的想法呢?
程式碼是程式設計師每天都要面對的工作物件,對程式碼確實會出現複雜的情感,有時候需要一種情緒的宣洩。
看到一段高深的,自己無法理解的程式碼,what the fuck?
好不容易把一段複雜邏輯的各種分支,邊界條件都搞定了,程式碼實在是亂,don't fuck with it !
花了很大的精力寫完了邏輯,卻發現有個異常無法處理,damn,damn,damn
……
咱們國內程式設計師似乎比較含蓄,很少在程式碼中寫髒話,更喜歡吐槽公司,吐槽系統,是不是這樣?
不過,一定要記住一點:當在程式碼評論中出現髒話時,你就要小心了,不要輕易動下面的程式碼,弄不好就是個大坑!
參考資料:
https://cme.h-its.org/exelixis/pubs/JanThesis.pdf
https://www.vidarholen.net/contents/wordcount
全文完,覺得不錯的話點個贊或者在看吧!
作者介紹:本文作者劉欣,著有暢銷書《碼農翻身》,《半小時漫畫計算機》,前IBM架構師,領導過多個企業應用架構設計和開發工作;洞察技術本質,擅長用故事去講解複雜技術。
– EOF –
關注「程式設計師的那些事」加星標,不錯過圈內事
點贊和在看就是最大的支援❤️