Bug 背后的隱藏劇情
flyfish
1. 「bug」:70多年前那只被拍進史書的飛蛾
故事原型:1947年哈佛實驗室的「昆蟲命案」
1947年的計算機長啥樣?像一間教室那么大,塞滿了幾萬根繼電器(類似老式開關),運行時咔嗒聲能吵死人。當時美國海軍女程序員格蕾絲·霍珀(后來成了「COBOL語言之母」)正在調試Mark II計算機,突然發現程序算著算著就罷工了。團隊拆開機箱找了倆小時,最后在繼電器縫隙里捏出一只被電焦的飛蛾(moth)——這只倒霉蟲子的翅膀卡在了電路里,導致開關失靈。
霍珀把飛蛾貼在工作日志本上,旁邊用鉛筆寫了句:「First actual case of bug being found」(首次發現真·蟲子導致故障),還在下方畫了個箭頭標「就是這貨!」。這頁日志現在被收藏在史密森尼博物館,成了計算機界的「罪證標本」。
為啥現在寫代碼錯了也叫「bug」?
早期計算機全是機械零件,蟲子、灰塵卡進去是家常便飯(比如1945年就有工程師記錄過「甲蟲導致故障」)。但霍珀團隊第一次把「蟲子」和「故障」直接掛鉤,還發明了「debug」這個詞(把蟲子弄出來)。后來程序里的邏輯錯誤(比如該加1寫成減1)也被叫做「bug」——就像煮面忘關火算「做飯bug」,本質都是「本該正常的事被幺蛾子干擾了」。
2. 「debug」和「debugging」:程序員的「找蟲」和「馬拉松」
舉個生活例子秒懂:
- debug:好比自行車漏氣,找到輪胎上的破洞并補上,這個「找洞+補洞」的動作就是debug。
- debugging:是從發現車胎癟了,到拆輪子、涂肥皂水找漏點、補胎、打氣、裝回輪子的一整套流程——程序員對著屏幕敲代碼、查日志、改邏輯、反復測試的全過程,就叫debugging。
程序員的真實debug日常:
比如手機APP點「下單」按鈕沒反應。程序員要干這些事:
- 打開代碼看是不是按鈕鏈接寫錯了;
- 查數據庫是不是沒存訂單數據;
- 測試不同手機型號會不會適配問題(比如安卓機顯示正常,蘋果機按鈕位置跑偏)。
3. spam(垃圾郵件):被喜劇小品「詛咒」的午餐肉
- 1970年喜劇團的「洗腦攻擊」:英國Monty Python喜劇團有個經典小品:一群維京人圍坐在餐桌前,不顧旁人對話,扯著嗓子反復唱「SPAM! SPAM! SPAM! Lovely SPAM! Wonderful SPAM!」(SPAM是美國午餐肉品牌)。觀眾被吵到崩潰,這場景成了「無腦重復信息」的代名詞。
- 1994年律師的「廣告炸彈」:倆美國律師為了幫移民事務所拉生意,用腳本給2萬多個新聞組群發郵件,標題全是「美國移民法改革!」。當時互聯網還沒廣告過濾,用戶打開郵箱全是這種垃圾,氣得把「SPAM」和「廣告」劃等號。后來連午餐肉公司想注冊「spam.com」都被拒,因為法院說這詞已經成了「垃圾代名詞」。
4. cookie(網頁小餅干):網景程序員的「偷懶發明」
- 1994年的「懶人需求」:網景瀏覽器剛推出時,用戶逛網店加購物車得反復登錄,程序員Lou Montulli嫌麻煩,想找個辦法讓電腦「記住」用戶。他聯想到去餐廳吃飯時,服務員會給顧客一張帶桌號的小餅干當憑證(比如吃完結賬,餅干上寫著「3號桌」),于是發明了「HTTP cookie」——本質是網站存在電腦里的小紙條,記著「選了什么商品」「登錄狀態」。
- 后來的「隱私風波」:比如逛完內衣店,下次打開網頁就看到內衣廣告——這就是cookie在偷偷記錄的瀏覽歷史。2018年歐盟忍不了,出臺GDPR法規,要求網站必須彈窗問用戶「能不能存cookie」,現在上網看到的「同意隱私政策」彈窗,全是這事兒的后遺癥。
5. hacker(黑客):從「校園搗蛋鬼」到「網絡蝙蝠俠」
- 1960年代MIT的「叛逆少年」:MIT校園里有群理工科學生,閑著沒事就「黑」學校系統:把校園時鐘改成「23:59」讓老師以為要下課,用打印機打出全校師生的惡搞名單。他們把這種「用技術搞創意惡作劇」叫「hacking」,自己叫「hacker」(黑客),信條是「打破規則才能懂規則」。
- 被電影「帶跑偏」的詞義:1983年電影《戰爭游戲》里,高中生黑客誤闖軍方系統差點引發第三次世界大戰,從此媒體把hacker等同于「搞破壞的壞人」。但真正的hacker分兩種:
- 「白帽子」:比如幫銀行找漏洞的安全專家,拿工資的「合法黑客」;
- 「黑帽子」:偷數據賣錢的壞人,正確叫法是「cracker」(駭客)。
6. virus(病毒):從科幻小說爬進現實的「電子怪物」
- 1975年小說里的「預言」:科幻作家John Brunner在《震蕩騎手》里寫了個程序叫「tapeworm」(絳蟲),能偷偷復制自己、感染其他程序,就像生物絳蟲在腸道里繁殖。8年后,科學家Fred Cohen在論文里首次提出「計算機病毒」概念,還在蘋果II電腦上做了實驗:寫了個程序,只要運行就會復制到其他文件里——這就是病毒的原型。
- 1988年「差點搞崩互聯網」的大學生:康奈爾大學研究生Robert Morris想測試網絡安全,寫了個「蠕蟲」程序(能自己在電腦間傳播的病毒)。結果程序失控,3小時內感染了6000多臺主機(占當時互聯網10%),NASA、國防部的電腦全癱瘓。他最后被罰款1萬美元,成了美國第一個因「電腦犯罪」坐牢的人(雖然只坐了3天)。
7. bootstrap(自舉程序):程序界的「自我拉扯魔法」
- 一句不可能的俗語:老話說「無法拽著自己的鞋帶把自己提起來」,但程序能做到!電腦開機時,最底層的BIOS程序會先自己啟動(就像人先睜開眼),然后加載操作系統(像坐起來穿衣服),這個「自己啟動自己」的過程就叫「bootstrap」。
- 前端框架的「借力打力」:2011年Twitter工程師開發了Bootstrap框架,目的是讓新手快速搭網站——就像bootstrap幫程序「自己啟動」,這個框架幫開發者「用幾行代碼啟動一個漂亮的網站」,所以名字沿用了「自舉」的隱喻。