程序員上下50年—程序員和BUG的斗爭史
程序員和BUG的斗爭史
BUG,原意“昆蟲”或“蟲子”。而現在,BUG又多了一個意思:系統或程序上存在的隱藏的缺陷或錯誤。

而這個小小的BUG,卻嚴重拖長了程序員的工作時間,也嚴重消耗了程序員的頭發。
那么,BUG為什么叫BUG呢?

時間回溯到1947年的9月9日。曾經設計了Cobol語言的杰出計算機科學家格蕾絲·赫柏剛剛對一臺Harvard Mark II完成了編程工作。這個擁有17000個繼電器的龐然大物著實讓她花了不少時間。
赫柏把整機運行的工作交待給幾位技術人員,自己倒上一杯水,正準備好好享受一下難得的閑暇時光。可就在這時,Harvard Mark II卻突然罷工了。

在那個一臺計算機比幾個房間還大的年代,技術人員除了自己爬上去尋找原因,別無他法。
終于,他們在某組繼電器的觸點之間發現了罪魁禍首——一只不小心闖入被高電壓當場擊死的飛蛾。就是因為這個小倒霉蛋兒,罷工才會發生。

在報告文件中,赫柏直接將這只飛蛾用膠條貼了上去,此外,她還在報告中將其描述為BUG。
于是,BUG便被沿用了下來。

在諸多類型的BUG中,有一種BUG可能是對程序員最友好的。
這種BUG被叫做波爾bug。因為只要讓軟件在相同的條件下運行,就可以讓這種bug輕而易舉地再次顯現。就像波爾模型中的電子路徑和動量,一切都是可預知的。

對程序員來說,bug既然無法避免,那么最好全都是波爾bug。可惜,現實總是殘酷的。海森堡bug的出現簡直令人抓狂。
學過大物的朋友想必都知道大名鼎鼎的“測不準原理”。在諸多bug中,就有這樣一種“測不準”的bug。程序遇到bug崩潰了,可是在重啟之后,這個bug卻消失了。無論怎么努力debug這個程序,這些bug都永遠不會再出現。
因為“測不準”的狀況像極了“測不準原理”,這種bug便被稱為海森堡bug。

如果說海森堡bug只是偶然事件可以忽略,曼德博bug卻讓人根本無法忽視它的存在。
當bug產生的原因過于復雜,復雜到難以理解的時候,bug的出現也就變得不是那么有規律。以不規則幾何形態為研究對象的分形幾何學與這種bug有種莫名的相似度,所以,分形幾何學之父本華·曼德博的名字也就被借來描述這種bug了。

這些bug可能還在程序員們的常識范圍內。一種用虐貓狂人薛定諤冠名的bug則詭異到令人完全摸不著頭腦。
想象這樣一個畫面,一個程序員正喝著咖啡美滋滋地看著正常運行程序的代碼,突然發現代碼中存在一個非常致命的bug,而這個程序完全不可能在這樣的bug下運行!當他滿腹狐疑再次運行這個程序的時候,程序卻又不出意料地崩潰了。
盡管非常詭異,但是這種當你觀察到它,它就起作用的bug確實存在。并被稱為薛定諤bug。

bug的類型遠不止這四種。而且,程序員與bug的斗爭史一經開始,就再也不會結束。

這場堵上了頭發和尊嚴的戰斗,贏或不贏有那么重要嗎?




