天天看點

盤點那些改變過世界的代碼

代碼塑造着我們的生活。正如風險投資家 Marc Andreessen 所言,“軟體正在吞噬整個世界。”或者結合當下實際,說軟體正在消化整個世界也許更為準确。

從文化層面講,代碼處于底層區域。我們雖然能夠感受到代碼對我們日常現實産生的不可思議的影響,但卻很少實際接觸到代碼,其運作原理也很難為外行人所了解。我們總會整理出最傑出的電影、遊戲以及電視劇集榜單,認為這些作品塑造了我們的靈魂。但即使是向來以大膽激進著稱的《時代》雜志,也 從來沒有釋出過什麼影響整個世界的軟體代碼榜單。

但沒有不代表不需要,我們就打算嘗試一下。為了選擇對世界影響力最大的軟體成果,我們對計算機科學家、軟體開發人員、曆史學家、政策制定者以及新聞工作者展開了廣泛的民意調查。

他們需要回答的問題包括:哪些代碼段擁有巨大的影響?哪些代碼改變了我們的生活?入選的軟體成果共有 75 項,我們最終選擇了其中 36 項。當然,這份榜單并不完整,事實上也不可能真正完整。與其他榜單一樣,這份清單是為了激發大家的奇思妙想,幫助我們重新考量代碼對日常生活的影響,以及程式員們如何做出關于未來的種種決定。

有些代碼的知名度比較高,例如 HTML。也有些代碼雖然強大(例如用于模拟機率的蒙特卡洛模拟),但在普通群眾中卻毫無存在感。也有一些代表着緻命的錯誤,例如波音 737 Max 中的軟體缺陷。還有一些則讓人不寒而慄,例如通知營銷人員收件人是否已經打開郵件的跟蹤機制。

但無論如何,重要的代碼都有一種共性:通過消除摩擦創造出新的行為模式。當軟體能夠降低某種行為的執行難度時,我們就會更多執行這類行為。1988 年首次出現的“網際網路聊天”代碼,使得網際網路上的早期居民們得以實時進行文本互動。如今,實時文本早已無處不在——從令人眼花缭亂的 Slack 協作平台,到 Twitch 上的網絡暴民互噴,皆屬此列。

另外,我們也很難在一開始就斷定哪些代碼能夠帶來劃時代的影響。一般來說,這些軟體項目往往始于某種奇怪的實驗,就像是那種探測氣球。1961 年,第一款廣受歡迎的電子遊戲《Spacewar!》誕生于一台價格高達 12 萬美元(根據購買力計算,相當于 2019 年的超過 100 萬美元)的中型機上,這樣的背景本身就相當令人難以了解。但它的出現仍然開創了目前早已成為主流的諸多概念,包括将資料表示為圖示形式,以及允許使用者利用手持控制器操作這些圖示等。

代碼的影響力可能遠超所有人(包括程式設計人員)的預料之外。 ——Clive Thompson,《程式員:新族群的誕生與世界的重構(Coders: The Making of a New Tribe and the Remaking of the World)》

1二進制打孔卡

年份:1725 年

第一批代碼

二進制程式設計的誕生甚至比計算機本身更早。人們認為 Basile Bouchon 是第一個在紙上打孔并借此控制機器的人:1725 年,他發明了一種紡織裝置,能夠根據送入的打孔紙調整紡織圖案。有孔代表“1”,無孔代表“0”。雖然在此之後發生過無數變化,但這種基本的代碼建構單元從未改變。—Elena Botella

2第一段實際執行的現代代碼

年份: 1948

随着能夠運作計算機代碼與核毀滅模型的計算裝置的出現,冷戰軍備競賽也正式拉開帷幕

“電子數字積分器與計算機(ENIAC)”是第一台可程式設計的電子計算機。其誕生于 1945 年,通過在元件之間配置不同的接線以實作對具體問題的處理。當一項任務(例如加法)完成之後,将有新的脈沖觸發下一項操作。幾年之後,馮·諾依曼與洛斯阿拉莫斯國家實驗室科學家 Nicholas Metropolis 接手 ENIAC,并在計算機上執行了第一條現代代碼:在可尋址隻讀存儲器(ENIAC 中的功能表開關)中執行數百條數字指令。他們利用蒙特卡洛技術模拟了新墨西哥州洛斯阿拉莫斯國家實驗室正在評估的幾種原子彈設計方案,并通過這種方式逐漸模拟出一套複雜系統,進而反複規劃可能的機率分布結果。馮·諾依曼和 Metropolis 向該實驗室的核科學家們發送了 2 萬多張打孔卡,上面記錄着通過引爆彈頭追蹤模拟出的中子運動結果。

如今,這批代碼的“子子孫孫”仍然運作在洛斯阿拉莫斯國家實驗室的計算機當中。——Thomas Haigh,《ENIAC 在行動:現代計算機的誕生與重生( ENIAC in Action: Making and Remaking the Modern Computer)》合著者

3Grace Hopper 編譯器

年份: 1952

讓計算機獲得處理單詞的能力

(Wikipedia)

Grace Hopper 當時打算對一台早期計算機進行程式設計,并決定利用人類語言元素簡化程式設計流程。Hopper 曾在第二次世界大戰期間加入美國海軍預備隊,是以非常清楚軍事機構的從業人員都在努力……或者說掙紮着學習了解二進制代碼。但如果能夠在程式設計語言中引入英語元素,那麼這項工作的難度将大大降低、出錯的可能性更小,進而讓那些沒有數學博士學位的從業人員也能更快上手。

有些人對這一想法嗤之以鼻,但到 1950 年初,她設計出第一款編譯器。這是一組指令,能夠将人類更易懂的代碼形式轉換為可供機器直接處理的低級代碼。她和她的實驗室利用該工具開發出 FLOW-MASTIC,第一種利用這一過程使用英語單詞的程式設計語言。—Molly Olmstead

4《Spacewar!》

年份: 1961

第一款正式發行的電子遊戲

(Steve Russell via Bitsavers.org)

1961 年末,一群年輕的麻省理工學院教員、學生及助理人員(其中不少人是當時 Tech Model Railraod 俱樂部的成員)夜以繼日地圍坐在一台捐贈而來的 DEC PDP-1 計算機面前。PDP-1 計算機代表着非軍事計算技術的最高水準,單台售價高達 12 萬美元(換算成目前的金額超過 100 萬美元),能夠支援 18 位字長并使用紙帶存儲程式。在五個月時間中,這些程式員開發出一款遊戲,允許兩名玩家控制飛船(其實就是螢幕上的簡陋線圖)一邊躲避螢幕中央恒星的引力幹擾,一邊展開激烈的太空炮戰。

《Spacewar!》在早期“黑客”社群當中迅速傳播開來,随後以 DEC PDP-1 計算機上内置程式的身份預加載至核心記憶體當中,以供示範之用。該項目極大鼓舞了上世紀六十年代的編碼社群,并啟發了一代又一代電子遊戲創作者。時至今日,這款遊戲仍然以模拟的形式在計算機曆史博物館中定期展覽。這款遊戲的首席開發者 Steve Russell 在 2018 年史密森尼學會的小組會議上表示,“這款遊戲已經有 50 多年曆史了。從來沒有使用者投訴,也從來沒有崩潰報告,且時至今日仍在正常運作。”——Arthur Daemmrich,勒梅爾森發明與創新研究中心主任

5元初電子郵件

年份: 1965

來吧,這可是電子郵件。

(CTSS Programmer's Manual Page for MAIL )

1961 年,麻省理工學院的黑客們建立一套系統,允許多位使用者登入至同一台計算機,并互相傳遞非常有限的消息。1965 年,一群程式設計人員決定開發一套正式的指令系統,用于發闊達、接收以及顯示這些短小的數字消息。雖然當時的“高端人士”拒絕使用 MAIL 這條看似草率的指令,但其用法卻大行其道。到 1971 年,麻省理工學院甚至收到曆史上第一條垃圾郵件:一段反越戰資訊。—Clive Thompson

6警察執法算法

年份: 1968

标志着現代警務預測與種族特征計算機化的開端

1965 年,時任美國總統的 Lyndon Johnson 組建總統執法與司法委員會,并要求該委員會研究如何利用計算機解決美國國内的“犯罪問題”。他和該委員會為這個問題設定了兩個關鍵詞,其一是“都市”、其二是“黑人”,計算機給出的答案即為“警察執法算法”。該算法旨在解決規劃問題,例如在城市特定區域内應部署多少名巡邏警員。通過将該算法與犯罪資料庫相結合,警務人員即可根據種族人口統計資料自動生成嫌疑人檔案,并在發生犯罪活動之前部署對應資源(包括警員、武器以及其他裝備)。時至今日,預測性警務方案仍然将黑人及棕色人種定為重點監控對象與犯罪高發群體。從執法算法的故事來看,這并不是什麼不可預見的技術偏見,而是計算機技術 50 年來完美設計的直接展現。——Charlton Mcllwain,《黑色軟體:網際網路與種族正義對非洲及非裔群體的重要意義(Black Software: The Internet & Racial Justice, From the Afronet to Black Lives Matter)》一書作者

7阿波羅 11 号登月計劃 BAILOUT 代碼

年份: 1969

這段代碼用于防止登月艙計算機耗盡自身資源

阿波羅制導計算機(AGC)堪稱人類科技發展史上的奇迹。根據阿波羅計劃傳回地球軌道規劃負責人 Poppy Northcutt 的介紹,這台古老計算機的計算能力甚至不及一張能夠記錄祝福消息的電子賀卡。然而,它還是成功完成了任務。

有限的計算容量與存儲空間,要求其必須認真管理每一項任務,是以 AGC 必須始終專注于最重要的工作内容。一旦計算量超出承載能力,整個登月計劃都将是以失敗。為此,項目成員開發出 BAILOUT。當計算機遭遇空間耗盡(或者說「溢出」)風險時,AGC 會觸發 BAILOUT 以丢棄重要度相對較低的資料與運算,進而確定核心資料與運算保持正常運作。

當鷹号着陸器接近月球表面時,AGC 在距離月面 3 萬英尺處發出了“1202”警報,遺憾的是阿姆斯特朗以及身處休斯頓宇航中心的控制員們并沒有馬上察覺。不到 30 秒之後,控制中心的計算機專家們得出結論:AGC 軟體仍在按預期方式運作,即放棄低優先級工作并集中資源處理核心負載(整個切換過程很快,是以機組人員無法察覺)。阿姆斯特朗與奧爾德林繼續使用由 AGC 提供的寶貴資料,引導登月艙一步步完成着陸。

在阿姆斯特朗上報“鷹号成功着陸”之前,溢出警報總共響了三次,但一切仍然按照預期方式運作。“Bailout”一詞原本是指任務未能完成,可在阿波羅 11 項目中卻成了人類最高成就的代名詞。—Ellen Stofan,史密森尼國家航空航天博物館主任

8Hello, World!

年份: 1972 或更早

這句短語首次出現在代碼當中

當我們集中注意力學習一種新的程式設計語言時,教程上的第一個案例就是如何在計算機螢幕上顯示短語“Hello,world!”也許這條短語最知名的來源是貝爾實驗室的備忘錄《C 語言程式設計——一份教程》。這份材料編寫于 1974 年。不過在編寫于 1972 年的 B 語言教程中,我們同樣看到了這條短語的身影。

Hello, World! 是一種偉大的教學方法。這是一項能夠輕松完成的小任務,同時也代表着一種标準,展現出不同程式設計語言之間的重要差異。此外,這也是進階程式員在安裝新環境測試一切是否正常的快速簡便方法。(有時候,程式員們也會使用「hello world」運作時間來比較不同語言與環境的速度水準。)也許更重要的是,“Hello, world!”具有一種溫暖而柔和的力量,對程式設計新人有着一種莫名的親和力。代碼擁有無窮威力,而新的世界已經向你張開懷抱。—Chris Noessel,IBM 公司 AI 設計負責人

9空終止字元串

年份:1972

計算技術發展史上最嚴重的設計錯誤

(The GNU C reference manual)

1972 年,Dennis Ritchie 做出一個重大決定:在新語言中用一種名為“空終止字元串”表示文本。這個概念早已出現,但他決定将其引入自己的新成果 C 語言當中——而這個決定,給無數程式設計後繼者帶來了深遠的影響。

程式設計語言表示一段文本的主要方式有兩種:其一是提供固定的顯式長度,相當于聲明“我隻包含 10 個字元,且無法容納更多字元”;其二是采用空終止結尾——“我包含很多字元,直到出現零位元組結尾。”

C 代碼中的一類常見錯誤,就是把一條長字元串複制到某個較短字元串内并導緻結尾處溢出,如此一來其鄰近資料就會受到破壞。打個比方,這就像是本應在白闆上作畫,卻把顔料塗到了闆後的牆面上。

除了導緻程式故障之外,攻擊者還能夠主動通過這類 bug 誘導程式利用經過精心設計的特定資料覆寫某些内容,進而改變程式行為。而這,就是經典的緩沖區溢出攻擊。大家聽說過的幾乎所有安全漏洞,都有着一位共同的“老祖宗”——1988 年的 Morris 蠕蟲。

雖然可以在 C 語言中通過認真編碼避免此類 bug,但這種語言的設計特性使得此類 bug 極易出現且難以檢測。從路由器到“智能”燈泡,雖然幾乎每一種現代語言都會刻意避免空終止字元串問題,但 C 與 C++ 仍然統治着整個世界。是以,直到近 30 年之後,我們仍然無法徹底擺脫這個 bug。—Jamie Zawinski,Netscape 開發人者、Mozilla.org 創始人、DNA Lounge 負責人。

10Telenet

年份:1975

第一個基于資料包交換機制的公共資料網絡,當今網際網路的主幹

在網際網路誕生之前,ARPANET 首先出現。這是一套計算機網絡,主要供進階研究計劃局(DARPA)的研究人員在機器之間進行資料交換。随着 ARPANET 在政府内部的快速擴張,其創造者意識到這項技術可能對普通大衆也擁有重要價值,甚至有望帶來巨大的财富收入。1975 年 8 月,ARPANET 的商業版本 Telenet 在七座城市首批上線,允許早期客戶(主要是計算機或資料庫企業)利用電話撥号實作資料上傳與下載下傳——相關用例包括原始電子郵件服務,以及遠端通路存儲在中央計算機上的代碼。盡管 ARPANET 被普遍視為現代網際網路的最早版本,但更準确地講,為公衆消費而設計的 Telenet 才是真正的網際網路鼻祖。上世紀八十年代,Telenet 最大的客戶之一正是 Quantum Link,也就是後來的 AOL 美國線上。——Jane C. Hu,Future Tense 貢獻者

11溫哥華證券交易所的四舍五入錯誤

年份:1982

由小數點後取舍引發的“一場血案”

溫哥華證券交易所當初本應使用以上代碼求取近似值。

1982 年初,溫哥華證券交易所釋出一項電子股票指數,基準定為 1000 點。在兩年之内,其跌到了原始值的一半,但當時股票市場的漲幅相當強勁,是以人們感到大惑不解。一項調查顯示,相關代碼使用了 floor() 而非 round(),并導緻指令中的指數計算存在錯誤。這條指令執行的是四舍五入運算,而沒有按設計預期原樣保留三位小數。(當時的數字計算機處理能力有限,是以必須使用四舍五入或者直接舍去等方法。)這意味着如果指數計算結果為 532.7528,那麼正确的舍去結果應該是 532.752,而非四舍五入後的 532.753。雖然這種差異看似微小,但經過每天成千上萬次計算之後,股指開始出現急劇下跌。最終,這一 bug 在 1983 年 11 月得到解決:在上周末收盤于 500 點左右之後,周一重新開放時公布的指數終于正确超過 1000 點。——Lav Varshney,伊利諾伊大學香槟分校副教授

12Therac-25

年份:1985–1987

事實證明,過度自信是會死人的

頭條新聞第一次釋出由技術發展導緻的事故。《洛杉矶時報》宣稱,“過于複雜的現代軟體正引發故障率的急劇提升。”一種被多家醫療機構中用于治療癌症的機器在運作過程中發生爆炸,共波及六名患者,其中至少三人死亡。

調查人員事後發現,這台 Therac-25 裝置在程式設計中存在緻命錯誤。該機器提供低功率與高功率兩種照射模式,而高功率模式需要利用金屬裝置過濾光束。但由于存在軟體 bug,在未比對适當金屬裝置時,操作人員同樣可能意外觸發高功率模式。

Therac-25 機型實際上是 Therac-20 的“改進”版本,當時人們認為其軟體萬無一失,是以不需要額外的安全檢查。結果就是,工程師的過度自信引發了慘痛的傷亡事故。—Molly Olmstead

13網際網路中繼聊天

年份:1988

最早的網絡續聊技術

網際網路中繼聊天(簡稱 IRC)甚至在大多數人聽說“網際網路”這個字眼之前就已經存在。這是一種通過小組頻道與他人進行實時聊天的流行技術方案。早期使用者能夠通過登入共享新聞内容——包括 1991 年媒體集體噤聲時,使用者借此傳播蘇聯解體的爆炸性消息。當然,這種聊天方式本身也以代碼的形式實作:要加入頻道,需要輸入“/join #[頻道名稱]”。(如今的 Slack 達人對此應該比較熟悉。)如果使用者希望表達一些與自己相關的消息,也可以輸入“/ 我太累了”,或者用 * 加“太累了”直接顯示自己的名稱與“太累了”字段。總而言之,雖然功能非常基礎,但對大多數人來說,線上聊天成為他們接觸網際網路的第一站,也成為後世無數線上會話應用的基礎雛形。—April Glaser

14Morris 蠕蟲

一場噩夢,讓人們意識到網際網路已經發展得如此龐大

Morris 蠕蟲代碼中一條關鍵函數的内容摘錄。

那時候,Robert Morris 自己乃至網際網路都還非常年輕。時年 23 歲的康奈爾大學研究所學生 Morris 釋出了 Morris 蠕蟲,并造成“網際網路上的首次大規模攻擊。”在全球接入網際網路的約 6 萬台計算機中,有 10% 左右遭到破壞,引發數百萬美元損失,并導緻《紐約時報》首次在紙媒上登出“網際網路”一詞。即使是精通技術的從業者,也無法想象這股蠕蟲攻勢居然帶來如此廣泛的影響。Morris 表示,他從沒想過要造成如此重大的損害,但嚴重後果使其成為因《計算機欺詐與濫用法》遭到起訴的第一人。在被判處三年緩刑之後,他成為著名創業孵化器項目 Y Combinator 聯合創始人兼麻省理工學院計算機科學副教授。—Elena Botella

15單行病毒

年份:上世紀九十年代

單行代碼的威力首次顯現,不斷發展的計算機暴露緻命弱點

請勿在自己的計算機上嘗試。

上面這行代碼,實際上是一種被稱為“叉路炸彈”的單行病毒。其需要一些特定條件才能起效(例如使用較為陳舊且易受感染的 Unix 作業系統版本)。但隻要滿足這些條件,我們就可以在 Bash 中鍵入此指令,它會一遍又一遍自我複制,直到耗盡計算機的全部可用記憶體并導緻系統崩潰。

之是以如此著名,不單單是因為它既體形小巧又威力巨大,同時也因為它使用了冒号作為函數名稱。大多數函數(一種可重複使用的代碼行)都會以描述性方式命名,例如“Print”或者“isThisEmailValid”,但這隻是一種習慣而并非強制要求。雖然在大多數計算語言中,我們無法使用冒号作為函數名稱,但 Bash 是個例外。

我在 2002 年參觀德國法蘭克福 Angewandte Kunst 博物館時,第一次看到這行代碼。很明顯,沒有多少代碼值得在博物館這樣的地方展出。—Chris Noessel

16HTML 超連結

年份:1990

這款以難以想象的方式幫助我們将一切串連了起來

Tim Berners-Lee 創造的超連結概念,改變了整個世界。連結資訊的概念并不算特别新穎,但超連結的新特性在于能夠将計算機系統規則中的标點符号拼湊起來,進而建立起:// 這一标準 URL 格式。這種格式可以用于命名一切現在條目。雖然 Berners-Lee 一直很關注向下相容問題,但事實證明超連結基本概念的強大使得這一設計思路永遠不會過時。Berners-Lee 提出的超連結如今轉化成了立即購買、點贊以及轉發等多種形式。這些當初根本無法想象的用例告訴我們,當一波技術浪潮達成頂峰時,接下來又會有新的成果迅速跟上。—Charles Duan, R Street 技術與創新總監

17JPEG 的誕生

年份:1992

永遠改變了我們與圖像間的關系

以上代碼代表離散餘弦變換,也就是 JPEG 檔案格式背後的基本思路。

時至今日,我們已經習慣于在相機裡面塞滿大量照片。但是,過去的圖像資料需要占用巨大的存儲空間。1992 年,聯合攝影專家組釋出了 JPEG 規範,旨在縮小圖像檔案的體積。雖然當時也出現了其他一些壓縮格式,但 JPEG 之是以能夠最終成為全球标準,憑借的就是其免版稅許可制度。JPEG 運用的是有損壓縮方法,這種處理過程會破壞某些人眼無法察覺的内容,例如顔色的細微變化。事實上,有損壓縮思路還影響到 1992 年誕生的另外一項重大技術成果:mp3。這種音頻檔案格式,同樣是通過丢棄人耳無法聽到的資料比特幫助音頻成功實作瘦身。—Aaron Mak

18Mosaic 浏覽器

年份:1993

我們所熟知的 Web 由此誕生

以上為 2.7 版本中的部分代碼

此前的浏覽器往往非常笨重,雖然能夠很好地渲染文本,但卻強迫使用者在單獨的視窗中檢視圖像。由 Marc Andreessen 帶領的 Mosaic 技術團隊希望打造一款能夠同時顯示圖像與文本的浏覽器。他們計劃讓 Web 看起來更類似于傳統的雜志或者報紙。這一舉措同時令 HTML 标準得到快速普及,并推動全球各地的網站管理者們積極利用更多标簽讓自己的站點看起來更酷。(事實上,當時的框體顯示構圖已經成為一種經典的視覺符号。) —Clive Thompson

19像素跟蹤

現代資料收集,始于這些看不見的圖像

這些小小的 HTML 片段看起來不多,但卻是當今數字廣告的實作基石,同時也導緻了監控、媒體整合甚至是誤導性資訊等現代問題的出現。

早在上世紀九十年代,網頁設計師就利用透明的單像素圖像調整頁面布局。但是,那時候計算機必須下載下傳網頁上的每一張圖檔,包括其中的每一個像素。1993 年,企業開始利用這一機制,進而通過對像素下載下傳活動的跟蹤了解通路者是誰、身在哪裡,并在使用者的浏覽器中觸發某條已下載下傳 cookie。通過這條 cookie,廣告商即可在多個網站上跟蹤到特定使用者。

像素跟蹤的成功,直接催生出 Facebook 的“點贊”按鈕,其能夠嵌入到每一個網站并對使用者展開跟蹤。規模如此龐大的資料收集體系,使得 Facebook 成為一家極為成功的廣告商,每年從傳統媒體企業手中奪取數十億美元收入。随着傳統新聞業的衰敗,有針對性的誤導資訊開始大量湧現,以監控為基礎的商業模式亦層出不窮。——Sara Wachter-Boettcher,《技術性錯誤:性别歧視應用、偏見算法以及其他有害技術(Technically Wrong: Sexist Apps, Biased Algorithms, and Other Toxic Tech)》一書作者

20Robots.txt

年份:1994

一款小小的工具,卻給搜尋等衆多領域帶來巨大影響

我們自己的 robots.txt 檔案

如果大家使用過谷歌搜尋,應該碰到過這樣的情況:頁面提示“由于此網站的 robots.txt,相關結果描述不可用。”畢竟并不是每個人都希望自己的網站内容被搜尋引擎直接列出,是以我們可以在網站上添加一個 robots.txt 檔案,要求負責 web 内容歸類的機器人(或者說爬蟲)繞過該網站而非直接顯示其内容。這種強大的網站内容隐藏能力,也使得 robots.txt 成為最具争議的代碼片段之一,先後引發大量與版權、黑客、非法入侵以及侵權法相關的案件。2009 年,第九巡回法院首席法官 Alex Kozinski 甚至還是以接受過司法不當行為調查。—Amanda Levendowski,喬治敦法學院知識産權與資訊政策系主任

21維基

為維基百科的誕生鋪平了道路

2000 年 6 月 13 日進行最後一次編輯的 WikiWikiWeb WikiBase

Ward Cunningham 首先通過自己的網站 WikiWikiWeb 發明了維基,在他看來 WikiWikiWeb 代表着最簡單的資訊共享方式。他使用了一種基本的标記語言,其中包含括号,能夠将單詞以不留白格的方式直接串連在一起,并在文本周圍加上大括号,以表示可進行編輯更新及組織的跨頁面連結資訊——時至今日,各類維基網站(包括 2001 年推出的維基百科)仍然廣泛應用這套系統。這種可通路格式,使得維基成為衆多重要線上活動的首選協作工具,從跟蹤安全漏洞到釋出線上筆記皆在此列。但與其他線上可編輯内容一樣,維基系統也極易受到影響,使用者往往對于應該及不應該釋出哪些内容而爆發激烈的争論。正因為如此,維基百科才決定添加關于如何管理與編輯會話頁面、以及如何添加新資訊的明确規則。—April Glaser

22第一個彈窗廣告

年份:上世紀九十年代中期

網際網路的禍害由此而起

以上代碼會打開帶有特定 url 的新視窗。

對于彈窗廣告,很多朋友應該都很熟悉了,畢竟“屠龍寶刀,點選就送”這類内容幾乎已經成為我們網絡生活的固定組成部分。

二十多年之前,我曾編寫過一段代碼,能夠在打開使用者請求的頁面時開啟另一個小小的網絡浏覽器視窗。這個新視窗,代表的正是如今令人們頭痛不已的彈窗廣告。在接下來幾年中,我驚恐地發現彈窗廣告開始在網絡上迅猛傳播,并成為網際網路領域最糟糕、最具侵入性的廣告宣傳途徑。

當時開發彈窗廣告的原因非常簡單:我所在的公司 Tripod 允許人們将自己需要的任意内容釋出在免費的首頁上。為了補貼這項服務,我們開始進行廣告招商,但問題是廣告商并不太喜歡我們在首頁面中給出的展示内容。于是,我們決定把廣告内容與使用者内容分開,這就是彈窗廣告的來曆。

我知道彈窗廣告不是什麼好語音,第一次嘗試時我就很清楚。但這是條賊船,上去了就很難下來。是以我們隻能眼睜睜看着這一切發生,然後随波逐流。

自從這隻誕生自我手的猛獸出世以來,我還出過書、辦過企業、在大學當過老師。但最終,讓我被人記住的永遠隻有彈窗廣告。直到現在,我還經常收到謾罵郵件。—Ethan Zuckerman, 麻省理工學院公共媒體系主任

23一段代碼,讓 T 恤衫成為非法商品

年份:1995 左右語言:Perl

最早的代碼激進主義行為之一

(Munitions T-Shirt Homepage)

襯衫上寫有“警告:這件襯衫屬于軍火類商品,不得從美國出口或向外國公民展示。”

有一段時間,美國政府曾經把強大的加密技術視為如同地對空飛彈般的武器,認為其極度危險是以絕對不可落入美國敵人的手中。當初,加密技術隻能運作在笨重且昂貴的裝置當中,是以這樣的想法似乎也有那麼點道理。但到上世紀九十年代,當密碼學研究人員接觸到網際網路之後,美國國務院提出的此類要求已經完全淪為一紙空談。如今,RSA 加密算法早已成為現代密碼學的基礎。這種算法非常優雅,隻需要四行密集的 perl 代碼就能寫完——這樣的長度,使其完全可以被列印在一件 T 恤衫上。最早的一批 T 恤衫早已成為收藏品;而出口管制雖然沒有完全取消,但也早已大幅放寬。—James Grimmelmann,康奈爾理工大學法學院法學教授

24谷歌的 PageRank 算法

年份:1996

革新我們對知識内容的組織方式

在 PageRank 誕生之前,搜尋引擎會根據我們的查詢詞與文檔内容的比對情況進行資訊查找。但在 PageRank 中,Larry Page 與 Sergey Brin 注入了絕妙的新思路:知識即社交——搜尋也應如此。他們開發出一種算法,能夠根據線上連結至某一頁面的其他頁面數量,對該頁面的重要度進行估算并形成結果排序。憑借着這一點,谷歌才逐漸建立起如今無可匹敵的強大力量。—Clive Thompson

25GeoCities 滑鼠軌迹

年份:九十年代中期

它使網站上最平凡的元素也爆發出耀眼的光輝

(Roy Whittle)

Douglas Englebart 與 Bill English 在上世紀六十年代發明的滑鼠,徹底改變了我們與計算機互動的方式。雖然滑鼠的使用方式非常直覺,但當時的顯示技術卻往往跟不上滑鼠的快速移動功能。為此,作業系統開發人員添加了滑鼠軌迹,旨在顯示光标原先所在位置的瞬間陰影圖像,進而幫助使用者更輕松地跟蹤并查找目前光标位置。

九十年代中期,GeoCities 是第一家允許使用者免費且輕松建立自有 Web 内容的服務廠商。GeoCities 的 WYSIWYG 編輯器允許使用者輕松拖放内容,并添加自定義代碼片段,其中就包括對通路者觀看到的滑鼠軌迹進行自定義的代碼。在 GeoCities 頁面中,我們的光标可以顯示出七彩魔塵、小泡泡或者萬聖節小蝙蝠等豐富多彩的軌迹。這些光彩奪目的像素引發了一場網絡狂歡,讓我們能夠在“網絡空間”當中第一次體會到彰顯個性的感覺。—Nikki Stevens, 亞利桑那州立大學博士生

26RSS

年份:1999

讓人們一次讀遍《紐約時報》、每周熱點以及其他最新資訊

通過将新聞報告、部落格、文章、播客以及其他各種形式的釋出内容轉換為統一的标準格式,rss(全稱為富站點摘要,也有人将其解釋為極簡聯合)代碼允許我們以一種簡單且高效的方式整合來自各種來源的釋出資訊。從 2005 年誕生的 Google Reader,到 2013 年 RSS 1.0 核心開發者、網際網路自由活動家 Aaron Wartz 不幸逝世,RSS 在其巅峰時期幾乎壟斷了整個網際網路上的資訊釋出管道。盡管如今 Google Reader 早已不複存在,RSS 仍然在網際網路中占據着前沿位置,并影響着從新聞整合器到播客應用的各類釋出平台。—David S. Levine, 埃隆大學法學院副教授

27失落的火星氣候軌道器

因數學錯誤而失敗的太空探索項目

1999 年 9 月 23 日,NASA 的科學家們發現價值 1.25 億美元的火星氣候軌道飛行器與控制中心徹底失去聯系。後來的一項調查确定了失敗原因:某位承包商為軌道飛行器編寫了一款采用英制機關的程式,問題是雖然美國國内使用英制機關,但 NASA 的軟體卻使用公制機關。正是代碼中的機關錯誤,導緻軌道飛行器前進至計劃外的未知位置。

這當然可以說是個不小心造成的失誤,但同時也讓我們意識到如今的軟體世界有多麼脆弱。一切連接配接技術,包括電話、宇宙飛船、智能榨汁機,都需要特定的接口來定義其實際通信方式。而即使是最小的誤差,也可能引發巨大的災難。—Charles Duan

28一段代碼讓無人機變身地獄火飛彈發射平台

年份:2000–2001 左右

無人機戰争由此正式打響。

早期“捕食者”無人機的武器化,不僅代表着技術史上的一個标志性時刻,同時也成為軍事與政治史中的一大裡程碑。無人機系統如今在戰場上大量湧現,改變了士兵的作戰甚至思維方式。另外,捕食者無人機的武器化也推動美國進入了“無人機戰争”新時代。而考慮到 AI 技術支援下的機器人正獲得越來越強大的自主能力與武裝水準,我們無疑正處于這一新時代的起步階段。換言之,一款簡單的程式可能已經打開了這個裝有合法性、倫理性乃至存在性沖突的潘多拉魔盒。——P.W. Singer,《戰争連線:二十一世紀的機器人革命與沖突(Wired for War: The Robotics Revolution and Conflict in the 21st Century)》一書作者

29Roomba 導航系統

年份:2002

為技術與現實世界的對接建立起新的通道

(iRobot)

大家肯定還記得第一次看見 Roomba 的情景:我是在 17 年前在朋友家第一次見到。這台掃地機器人在屋裡轉來轉去,我則在沙發上開懷大笑。但就是這台略顯笨拙的小裝置,卻代表着一場機器人技術革命的新曙光。(就在這台機器人為無數家庭清掃家居環境的同時,與其具有相同基因的兄弟機型則在戰場上清除殘留炸彈,這着實令人震驚。)自那之後,我們很久沒有見到同樣令人印象深刻的成就了。Roomba 證明,雖然我們的注意力很容易被波士頓動力那些會開門、采用反關節設計的狗型機器人所吸引,但無法全面普及的産品永遠登不上時代的巅峰。Roomba 之是以形成了自己的小衆市場,并不是因為它能夠帶來多理想的清掃效果,而是因為它能夠提供非常強大的室内導航功能。我們喜愛 Roomba 的根本心理,與喜愛小貓基本一緻——我們會一直盯着它在屋裡轉悠、撞上桌腿、換個方向、再繼續前進,同時獲得巨大的心理滿足感。—Lowen Liu, Slate

30無線網絡的等比例公平排程

年份:2003 左右

這一解決方案,讓手機蜂窩網絡成為可能

2002 年 9 月 10 日,美國專利号 6449490,“定向發射器、多接收器系統采用路徑分集機制,最大限度提高了資料吞吐量。”

無論何時、無論何地,基站信号覆寫範圍内的手機數量都相當可觀。如果不進行排程,所有傳輸通道都将互相幹擾,并阻止其他裝置以可靠方式接收資訊。是以,基站必須優先實作一項基本要求:確定所有使用者都能夠完成通話。考慮到噪音較大位置的使用者需要利用更多的資源才能獲得相同的服務品質,解決方案必須在個體使用者需求與整體網絡性能之間進行折衷。等比例公平排程機制確定所有使用者至少享有同樣的最低服務水準,同時最大限度提升總體網絡吞吐量。這一目标的實作離不開對使用者資源需求優先級的調整。區區三行代碼,讓全世界所有 3g 與 4g 蜂窩網絡全面運作了起來。—Lav Varshney

31比特币

年份:2008

代碼,成就了一種前所未有的新型貨币形式

無論你是比特币的支援者、質疑者還是旁觀者,至少應該對該項目的巨大影響持肯定态度。比特币本身已經積累起數千億美元的直接投資,但更重要的是,從保障民主選舉到結束非感官性接觸,其背後的基礎技術區塊鍊似乎擁有着無窮無盡的可行應用方向。

一切始于 2008 年,當時自稱為“中本聰”的比特币締造者釋出白皮書,這也标志着這種全新貨币的正式誕生。比特币項目中的代碼,決定了攻擊者幾乎不可能接管比特币區塊鍊體系。強大的數學原理讓全世界相信,這樣一套由互不相識的人們建立起的系統完全值得信任。以此為開端,後續總計出現了至少 2777 種其他加密貨币。—Elena Botella

32Conficker 蠕蟲

年份:2008 年 10 月至 2009 年

将受感染的計算機裝置轉化為一支惡意殭屍電腦大軍

安全研究人員 Tillmann Werner 與 Felix Leder 共同編寫了這段代碼,并在對抗 Conficker 蠕蟲的過程中證明了其功能等價性。

十年之前,多達 1500 萬台計算機感染了 Conficker 病毒。這種病毒利用的,正是 Windows 作業系統中的固有安全漏洞。這種病毒令人恐懼,但其中先進的設計理念也讓其背後的操縱者備受尊敬:該并不比會将每台計算機轉化為超大規模殭屍電腦叢集的一部分,等待指令,并阻止受感染計算機打開安全程式或者下載下傳任何能夠清除該病毒的更新檔程式。其最早版本還擁有一項有趣的特性:它會在任何使用烏克蘭語鍵盤布局或者烏克蘭 IP 位址的系統中自毀。幾年之後,對該病毒進行逆向工程的權威機構及研究人員得出結論,表示 Conficker 的幾位創造者确實是烏克蘭人,他們設計出的這一特性也是為了避免觸犯國内法律。幸運的是,黑客們從未利用 Conficker 建立起真正的僵屍網絡。截至 2018 年,估計仍有 35 萬台電腦中感染有該病毒,這也再次提醒我們高水準程式員完全有能力輕松發動跨國攻擊,并有針對性地對特定使用者群體造成嚴重破壞。—Jane C. Hu

33點贊按鈕

年份:2009

它促進了監控經濟的出現與發展

Facebook 公司通過“點贊”按鈕,幫助使用者獲得了一種向全世界表達個人喜好的方式。但實際上,它同時也在利用我們的認知偏見與設計之力,引導我們分享更多資訊。正如之前提到的像素跟蹤技術會不斷收集關于使用者浏覽習慣的資料,點贊按鈕實際上也在我們的網絡生活中長伴身旁。接下來,Facebook 公司會将這些資訊賣給廣告商。如果某家戶外産品公司想做做宣傳,Facebook 很清楚這類内容應該被優先推送給那些曾給徒步旅行、露營網站以及戶外運動等話題點贊的使用者。如果這些使用者又給廣告本身點了贊,那麼資訊又會進一步回報到目标定位算法當中。整個監控與商業操縱循環不斷持續,而其根源正是這個小小的藍色拇指圖形。—Ari Ezra Waldman,紐約法學院教授

34HTTP STRICT TRANSPORT SECURITY

年份:約 2009

通過為網站預設設定安全通道,我們得以輕松實作資料保護

當我們通過簡單而又陳舊的 HTTP 向某網站發送資訊時,内容實際上已經外洩,可能被他人所截獲,奪取您的信用卡資訊、病曆記錄甚至是伴侶與寵物姓名。HTTPS 的出現很好地解決了這個問題,但在很長一段時間内,這種更先進的協定一直以可選方案的形式存在。這時,我們可以輸入 http strict transport security(HSTS)。這是一種能夠確定自始至終加密一切發出與收入消息的 Web 通信解決方案。如果您嘗試通路 http://google.com,它會自動引導您通路 https://google.com。是的,HSTS 就負責這一項工作,而且完成得很好。

HSTS 目前仍然不太普及:隻有 11.1% 的網站在實際使用。但重要的轉折發生在 2015 年春季,當時美國聯邦政府與各行業合作夥伴在 19 個政府域名中引入了 HSTS,其中包括 whiteouse.gov、aids.gov 以及 donotcall.gov。不久之後,所有聯邦機構都接到通知,要求必須采用該标準。——Rusty D. Pickens,奧巴馬政府前白宮新媒體代理主任

35Heartbleed

年份:編寫于 2012 年,發現于 2014 年

計算科技史上影響範圍最廣、危害最嚴重的安全漏洞之一

(Naked Security)

2014 年,安全研究人員發現了 OpenSSL 中的一項安全漏洞。OpenSSL 是一套非常流行的開源庫,約有三分之二的網站(包括 dropbox、twitter、yahoo 以及 github 等)利用它實作兩台計算機之間的線上通信。Heartbleed 允許惡意攻擊者利用數百萬裝置中的緩沖區過度讀取漏洞竊取未經加密的受保護資訊,包括登入憑證與加密密鑰。它的出現,讓人們注意到利用開源軟體實作關鍵安全功能所帶來的巨大風險,以及從代碼中發現漏洞是何等艱難(這些包含漏洞的代碼已經完美運作了多年)。但好消息是,Heartbleed 也很快引發一波全球反應,包括世界範圍内的協調、宣傳與補救工作,這讓我們對未來的安全形勢又有了一些信心。—Josephine Wolff, 塔夫茨大學副教授

36波音 737 Max

年份:釋出于 2017 年

一個軟體錯誤,加上企業的貪婪,最終導緻數百人死亡以及整個機型的停飛

2018 年 10 月,泰國獅子航空的 610 次航班在出發後不久即墜入大海。這起事故雖然看似反常,但波音公司向公衆保證該機型絕對安全,并表示隻是需要進一步加強飛行員教育訓練以及“軟體更新”工作。但就在 4 個月之後,埃塞俄比亞航空公司的一位飛行員發現飛機的自動駕駛系統試圖将機頭向下推。他連續 20 次嘗試将機頭拉起,但幾分鐘之内,全機乘客仍然不幸遇難。作為回應,世界各地的航空公司立即決定停飛這一機型。調查顯示,墜機事故源自 737 Max 的設計問題,特别是一些難以察覺的軟體故障。這些軟體可能引導飛機反複俯沖。——Mar Hicks,科技史學家、《程式不平等問題(Programmed Inequality)》作者。

文章來自公衆号 InfoQ,歡迎搜尋關注。

 相關連結

https://slate.com/technology/2019/10/consequential-computer-code-software-history.html

-END-

繼續閱讀