程序員上下50年—程序員和BUG的斗爭(zhēng)史
程序員和BUG的斗爭(zhēng)史
BUG,原意“昆蟲(chóng)”或“蟲(chóng)子”。而現(xiàn)在,BUG又多了一個(gè)意思:系統(tǒng)或程序上存在的隱藏的缺陷或錯(cuò)誤。

而這個(gè)小小的BUG,卻嚴(yán)重拖長(zhǎng)了程序員的工作時(shí)間,也嚴(yán)重消耗了程序員的頭發(fā)。
那么,BUG為什么叫BUG呢?

時(shí)間回溯到1947年的9月9日。曾經(jīng)設(shè)計(jì)了Cobol語(yǔ)言的杰出計(jì)算機(jī)科學(xué)家格蕾絲·赫柏剛剛對(duì)一臺(tái)Harvard Mark II完成了編程工作。這個(gè)擁有17000個(gè)繼電器的龐然大物著實(shí)讓她花了不少時(shí)間。
赫柏把整機(jī)運(yùn)行的工作交待給幾位技術(shù)人員,自己倒上一杯水,正準(zhǔn)備好好享受一下難得的閑暇時(shí)光??删驮谶@時(shí),Harvard Mark II卻突然罷工了。

在那個(gè)一臺(tái)計(jì)算機(jī)比幾個(gè)房間還大的年代,技術(shù)人員除了自己爬上去尋找原因,別無(wú)他法。
終于,他們?cè)谀辰M繼電器的觸點(diǎn)之間發(fā)現(xiàn)了罪魁禍?zhǔn)?mdash;—一只不小心闖入被高電壓當(dāng)場(chǎng)擊死的飛蛾。就是因?yàn)檫@個(gè)小倒霉蛋兒,罷工才會(huì)發(fā)生。

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

在諸多類型的BUG中,有一種BUG可能是對(duì)程序員最友好的。
這種BUG被叫做波爾bug。因?yàn)橹灰屲浖谙嗤臈l件下運(yùn)行,就可以讓這種bug輕而易舉地再次顯現(xiàn)。就像波爾模型中的電子路徑和動(dòng)量,一切都是可預(yù)知的。

對(duì)程序員來(lái)說(shuō),bug既然無(wú)法避免,那么最好全都是波爾bug??上?,現(xiàn)實(shí)總是殘酷的。海森堡bug的出現(xiàn)簡(jiǎn)直令人抓狂。
學(xué)過(guò)大物的朋友想必都知道大名鼎鼎的“測(cè)不準(zhǔn)原理”。在諸多bug中,就有這樣一種“測(cè)不準(zhǔn)”的bug。程序遇到bug崩潰了,可是在重啟之后,這個(gè)bug卻消失了。無(wú)論怎么努力debug這個(gè)程序,這些bug都永遠(yuǎn)不會(huì)再出現(xiàn)。
因?yàn)?ldquo;測(cè)不準(zhǔn)”的狀況像極了“測(cè)不準(zhǔn)原理”,這種bug便被稱為海森堡bug。

如果說(shuō)海森堡bug只是偶然事件可以忽略,曼德博bug卻讓人根本無(wú)法忽視它的存在。
當(dāng)bug產(chǎn)生的原因過(guò)于復(fù)雜,復(fù)雜到難以理解的時(shí)候,bug的出現(xiàn)也就變得不是那么有規(guī)律。以不規(guī)則幾何形態(tài)為研究對(duì)象的分形幾何學(xué)與這種bug有種莫名的相似度,所以,分形幾何學(xué)之父本華·曼德博的名字也就被借來(lái)描述這種bug了。

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

bug的類型遠(yuǎn)不止這四種。而且,程序員與bug的斗爭(zhēng)史一經(jīng)開(kāi)始,就再也不會(huì)結(jié)束。

這場(chǎng)堵上了頭發(fā)和尊嚴(yán)的戰(zhàn)斗,贏或不贏有那么重要嗎?




