為什麼程式設計師不遵循簡單性?

發表於2011-01-06

發表在LessWrong.com上的一個實驗引起了人們激烈的爭論,爭論的焦點在於合理性與理性思維陷阱,這也讓我有所思考。事情是這樣的:

從前有一個物理老師。一天她把自己的學生叫進教室,讓他們看取暖電爐旁的一個方形金屬板。每個學生都把手放在金屬板上,發現金屬板靠近電爐的一端要涼一些,而離電爐稍遠點的一端卻要熱一些。老師問,你們覺得產生這種現象的原因是什麼?一些學生猜是由於空氣對流,還有人猜是由金屬板內特殊的金屬材質造成的。他們想出了很多有創意的答案,但始終沒有人原意屈服說“我不知道”或者“這不太可能。”

最終的原因是學生進教室之前,老師把金屬板兩端進行了調換。

這算是奧卡姆剃刀原理①一個最好的例子。但是這些不知情的學生跟那些面對著錯誤報告的一般程式設計師沒什麼兩樣。舉個例子,有一個哥們在Linux核心包遇到奇怪的邏輯錯誤:

幾周前,儘管我的桌面出現了一些異常,實在是說不通。我花了約半個小時埋頭苦尋錯誤的根源,最終發現問題出在RAM上的一個未被檢測到的翻轉位上。

這位哥們讓人欽佩地用了很長時間痛苦地追蹤錯誤,最後在RAM中找到了故障位置。但他找出的最可能出錯原因是什麼?

對我來說,宇宙射線造成的位翻轉這一問題,我經常假設發生在“別人”身上。我還想過即使我真的遇到了隨機宇宙射線翻轉位,我的電腦估計也只是崩潰了,我從來都不能真正地分辨出它跟隨機核心錯誤的區別。

宇宙射線!如今,這種可能性存在了,是真的。但是這是最可能的解釋嗎?不,絕對不是。更可能的是:設計中的Bug造成的RAM錯誤。在RAM故障文件記錄中,歸結為問題的數量多於歸結於宇宙射線。

為什麼我們都固執地認為所有的問題都是客觀造成的、不尋常的、超出正常的?

當你在程式碼中發現Bug時,你的反應是否如下:

  • 1. 嗯,我懷疑自己在簡單的問題上弄錯了?
  • 2. 我懷疑這是不是Linux中的核心錯誤造成的?

簡單性不僅是優化的目標之一,也是追蹤漏洞來源的目標。我總是說,別讓真相被自己的想象矇蔽了。

注:①奧卡姆剃刀原理的內容概括為八個字:“如無必要,勿增實體”,即“簡單有效原理”。

 

原文作者:Dave  編譯:伯樂線上 敏捷翻譯組 – 高志翔

如需轉載,但請註明原文/譯文出處、譯文超連結和譯者等資訊,否則視為侵權,謝謝合作!

相關文章