宿州網(wǎng)站建設(shè)一條龍全包(著名的代碼)代碼最厲害的人,
神譯局是36氪旗下編譯團隊,關(guān)注科技、商業(yè)、職場、生活等領(lǐng)域,重點介紹國外的新技術(shù)、新觀點、新風(fēng)向編者按:Marc Andreessen十年前說的“軟件蠶食世界”不僅完全正確,而且似乎不僅如此:軟件正在重塑世界。
人類世界的運轉(zhuǎn)已經(jīng)無法離開軟件在浩如煙海的軟件代碼當(dāng)中,哪些對我們起到了關(guān)鍵作用呢?Slate網(wǎng)站邀請了各方人士對那些改變了一切的代碼進行評選,這里篩選出36個代碼片段如果你有更好的選項,不妨在評論區(qū)留下你的意見。
原文作者是Future Tense,標題是:The Lines of Code That Changed Everything鑒于篇幅太長,我們將分三部分刊出,此為第一部分
早在2009年,F(xiàn)acebook推出了改變世界的代碼段——點“贊”按鈕“贊”是幾名程序員和設(shè)計師的創(chuàng)意,其中包括Leah Pearlman和Justin Rosenstein在內(nèi)他們推測,F(xiàn)acebook用戶常常因為太忙而沒時間到朋友的帖子上發(fā)表評論,所以想如果有一個簡單的按鈕可以按一下的話,也許互動就會爆發(fā):這可以釋放出大量令人興奮的肯定。
就像Pearlman 后來所說那樣:“朋友們可以通過這種頻繁的多、容易得多的互動手段來相互驗證”這個點子奏效了,也許有點太好了通過把“贊”做成一個零阻力的手勢,到了2012年,大家的點贊次數(shù)已經(jīng)超過1萬億次,并且的確釋放出了大量的驗證。
但是它的副作用也令人不安我們發(fā)布了一張照之后片,就會坐在那里焦急地不斷刷新頁面,等待點贊數(shù)的增加我們想知道為什么別人拿到的點贊數(shù)會比自己的多于是我們開始給自己日常的在線行為放大功率:想變得更有趣、更刻薄、更迷人、更極端。
代碼塑造了我們的生活就像風(fēng)投家Marc Andreessen所寫那樣:“ 軟件蠶食整個世界”,盡管此刻說軟件正在消化世界可能會更準確些從文化角度上來講,代碼是比較下層的存在我們可以感覺到它對我們?nèi)粘,F(xiàn)實的神秘影響,但是卻很少能看到它,而且對于非初學(xué)者來說有點高深莫測。
(硅谷的人喜歡這樣這有助于他們自我神話為巫師)我們給電影、游戲和電視都立了十大排行榜,讓那些塑造了我們靈魂的作品揚名立萬但是,即便代碼跟這些類型的作品一樣反映了時代思潮,我們卻未曾坐下來匯編過世界上最重要的代碼清單。
所以Slate雜志決定自己來做這件事為了弄清楚有哪些讓世界為之傾斜的軟件,雜志編輯對計算機科學(xué)家、軟件開發(fā)人員、歷史學(xué)家、政策制定者以及新聞工作者進行了民意調(diào)查這些人需要做出以下選擇:哪些代碼段影響巨大?哪些代碼改變了我們的生活?約有75位受訪者提出了各種各樣的想法,Slate從中選擇了36位。
鑒于寫成的有影響的代碼如汗牛充棟,這里的清單并不完整,也不可能完整(我很喜歡的一個并沒有人選:快速排序算法!或者Ada Lovelace的伯努利算法也許也算一個)就像所有的榜單一樣,它的目的是啟發(fā),去幫助我們重新思考代碼是如何影響我們的生活,以及程序員所做的決策是如何影響未來的。
里面的有些代碼你可能已經(jīng)聽說過,比如HTML什么的有的代碼功能強大(比如用來對概率建模的蒙特卡洛模擬),但一般人完全不知道是什么有的則包含了致命錯誤,比方說波音737 Max的缺陷還有一些令人毛骨悚然,比方說讓營銷人員知道你是否已打開電子郵件的像素跟蹤。
有一個趨勢是很明顯的:最重要的代碼往往會通過消除阻力來塑造新行為當(dāng)軟件讓做某件事情變得更容易時,這種事情我們就會做得更多1988年編寫的代碼第一次建立起“Internet Relay Chat(IRC,多人在線交談系統(tǒng))”,這使得早期的網(wǎng)民彼此可以實時進行文字聊天。
現(xiàn)在,實時文字聊天已經(jīng)無處不在,從令人應(yīng)接不暇的Slack職場閑聊吹水,到Twitch直播的釣魚和反釣魚之戰(zhàn),不一而足某些代碼什么時候具備了劃時代意義未必總是很清晰一開始它只是個怪異的嘗試,一個實驗氣球。
《Spacewar !》是第一個獲得病毒式流行的視頻游戲可是在1961年的時候,用價值12萬美元(相當(dāng)于2019年的100萬美元)的機柜式計算機萬游戲被視為一種相當(dāng)無聊的使用方式但是它獨創(chuàng)了很多幫助計算機進入主流的概念:用圖標表示數(shù)據(jù),讓用戶用手持控制器操作這些圖標。
代碼的影響可能會讓所有人感到驚訝,包括寫代碼的人在內(nèi)—Clive Thompson,《程序員: 新部落的形成和世界的重塑(Coders: The Making of a New Tribe and the Remaking of the World)》作者。
1、二進制穿孔卡片年代:1725第一段代碼二進制編程早在計算機誕生之前就有了大家認為Basile Bouchon 是第一個給紙片打孔并用來控制機器的人:1725年,他發(fā)明了一種織布機,這種機器可以根據(jù)送入的穿孔卡片的指令編織圖案。
打孔的是“1”,沒有打孔是“0”盡管此后東西發(fā)生了很大的變化,但代碼的基本構(gòu)建塊并沒有改變— Elena Botella ,Slate2、執(zhí)行的第一段現(xiàn)代代碼年代:1948既開辟了計算機代碼的使用,也引領(lǐng)了塑造冷戰(zhàn)軍備競賽的核毀滅計算機模型的使用
ENIAC(電子數(shù)字積分計算機)是第一臺可編程的電子計算機機器于1945年建成,每解決一個新問題都要靠重新連線許多部件來完成當(dāng)一項任務(wù)(比如加法)完成時,會用一個脈沖來觸發(fā)下一項任務(wù)但是幾年后,克拉拉· 丹·馮·諾依曼和洛斯阿拉莫斯的科學(xué)家Nicholas Metropolis對ENIAC重新進行了接線,讓這臺機器跑出來有史以來在任何計算機上執(zhí)行的第一段現(xiàn)代代碼:從可尋址只讀存儲器(ENIAC的函數(shù)表開關(guān))執(zhí)行數(shù)百條數(shù)字指令。
他們模擬了新墨西哥州洛斯阿拉莫斯國家實驗室正在評估的幾種原子彈設(shè)計的爆炸情況,用蒙特卡洛技術(shù)來模擬一個復(fù)雜系統(tǒng),幾乎是一步步地把可能結(jié)果的概率分布呈現(xiàn)出來馮·諾依曼和Metropolis)向洛斯阿拉莫斯的核科學(xué)家發(fā)送了20000多張卡片,跟蹤彈頭引爆后模擬中子的變化情況。
知道今天,這段代碼的子孫后代還在洛斯阿拉莫斯那里發(fā)揮作用—Thomas Haigh ,《ENIAC in Action: Making and Remaking the Modern Computer(ENIAC實戰(zhàn):現(xiàn)代計算機的制造和改造)》合著者。
3、Grace Hopper的編譯器年代:1952令計算機處理文字成為可能IF END OF DATA GO TO OPERATION 14 .來自維基百科當(dāng)Grace Hopper決定通過以人類語言為基礎(chǔ)來簡化整個過程時,她正在對一臺早期計算機進行編程。
二戰(zhàn)期間,Hopper加入了美國海軍預(yù)備隊,她知道,像她在部隊的上司一樣,大家都在努力去理解二進制代碼而如果編程語言是基于英語的話,那么這項工作就不會那么容易出錯,并且對于那些沒有數(shù)學(xué)博士學(xué)位的人來說也更加平易近人了。
一些人對這種想法嗤之以鼻,但1950年代初時,她設(shè)計出了一種編譯器,也就是一組可以將更容易理解的代碼轉(zhuǎn)化為由機器處理的較低級代碼的指令通過這一工具,她和她的實驗室開發(fā)出了FLOW-MATIC,這是第一種將英語納入該過程的編程語言。
——Molly Olmstead,Slate4、星際飛行(Spacewar)!年代:1961年發(fā)行的第一款視頻游戲/ this routine handles a non-colliding ship invisibly
/ in hyperspacehp1, dap hp2count i ma1, hp2law hp3 / next stepdac i ml1law 7dac i mb1random scr 9ssir 9s
xct hr1add i mx1dac i mx1swapadd i my1dac i my1randomscr 9ssir 9sxct hr2dac i mdydio i mdxsetup .hpt,3
lac randac i mthhp4, lac i mthsmasub (311040spaadd (311040dac i mthcount .hpt,hp4xct hd2dac i ma1hp2, jmp .
Steve Russell,收集自Bitsavers.org1961年末,一群年輕的MIT雇員、學(xué)生和同事(其中很多是Tech Model Railroad俱樂部的成員)拿到了最近別人捐贈的DEC PDP-1計算機的深夜使用權(quán)。
屬于非軍事計算前沿技術(shù)的PDP-1售價為12萬美元(按今天計算將超過100萬美元),字長達18位,程序存儲用的是紙帶這幫程序員用五個月的時間開發(fā)了一個游戲,里面是兩名玩家控制著飛船(針和楔形物)進行一對一的太空戰(zhàn),同時還要避開位于屏幕中心的恒星的引力。
很快,星際飛行!就在早期的“黑客”社區(qū)中傳播開來后來DEC把它預(yù)裝進了每一臺PDP-1里面,并預(yù)裝到核心內(nèi)存里面,準備在安裝時進行演示這個程序?qū)?960年代規(guī)模還很小的編碼社區(qū)產(chǎn)生了重大影響,并啟發(fā)了后面數(shù)代的視頻游戲創(chuàng)作者。
現(xiàn)在它還從模擬者那里找到自己的存在,并且在計算機歷史博物館的最后一臺可操作PDP-1上還在定期演示2018年,游戲的首席開發(fā)者Steve Russell在史密森尼學(xué)會上說:“它已有50多年的歷史沒有未解決的用戶投訴。
沒有崩潰報告而且支持依舊提供”——Arthur Daemmrich ,導(dǎo)演,勒梅森發(fā)明與創(chuàng)新研究中心5、電子郵件的起源年代:1965拜托,這是電子郵件WHENEVER A(1).E.FENCE.OR.A(2).E.FENCE.OR.A(3).E.FENCE。
PRFULL.($R1INSTRUCTIONS:$)PRFULL.($ 4MAIL NAME1 NAME2 PROB1 PROG1 PROB2 PROG2 ...$)PRFULL.($ WHERE =NAME1 NAME2= IS THE FILE TO BE MAILED,$)
PRFULL.($ AND =PROBN PROGN= ARE DIRECTORIES TO WHICH 8$,1 $IT IS TO BE SENT.B$)CHNCOM.(0)END OF CONDITIONAL
CTSS 程序員MAIL手冊頁1961年,麻省理工學(xué)院的黑客開發(fā)了一個系統(tǒng),這個可以讓多個用戶登錄到同一臺計算機上,然后他們開始互相給對方簡短留言1965年,一群編碼人員決定開發(fā)一個正式的命令系統(tǒng)來發(fā)送、接收和顯示這些數(shù)字化的信函。
對于“MAIL”這個命令一開始上級是拒絕的,覺得有點輕率,但它的使用卻大行其道,以至于到1971年,麻省理工學(xué)院甚至出現(xiàn)了第一條垃圾郵件:一條反越戰(zhàn)的信息——Clive Thompson6、警察巡邏算法
年代:1968現(xiàn)代預(yù)測警務(wù)和種族定性計算機化的開始1965年,當(dāng)林登·約翰遜總統(tǒng)組建總統(tǒng)執(zhí)法與司法委員會時,他下令該委員會研究如何利用計算機來幫助解決美國的的“犯罪問題”,他和該委員會對這個問題的定性是“城市問題”和“黑人問題”。
這個問題的答案是“警察巡邏算法(Police Beat Algorithm,PBA)”,該算法旨在解決規(guī)劃問題,比方說在城市的特定區(qū)域需要安排多少名警察巡邏之類的問題通過將PBA與犯罪數(shù)據(jù)庫相結(jié)合,警方可以在犯罪實施之前根據(jù)種族人口統(tǒng)計數(shù)據(jù)自動生成嫌犯檔案,并相應(yīng)部署資源(警察,武器和其他裝備)。
今天的預(yù)測警務(wù)對黑人和棕色人種監(jiān)視并定罪的情況相對不成比例就像PBA的故事提醒我們那樣,這種情況并不是不可預(yù)見的技術(shù)故障的結(jié)果:相反,這是這項技術(shù)50年設(shè)計的完美體現(xiàn)——Charlton McIlwain,《黑人軟件(Black Software: The Internet & Racial Justice, From the Afronet to Black Lives Matter)》作者。
7、阿波羅11號登月艙的緊急救助代碼年代:1969防止登月艙的計算機在太空中耗盡空間的代碼POODOO INHINTCA QTS ALMCADRTC BANKCALLCADR VAC5STOR # STORE ERASABLES FOR DEBUGGING PURPOSES.
INDEX ALMCADRCAF 0ABORT2 TC BORTENTOCT77770 OCT 77770 # DONT MOVECA V37FLBIT # IS AVERAGE G ONMASK FLAGWRD7
CCS ATC WHIMPER -1 # YES. DONT DO POODOO. DO BAILOUT.TC DOWNFLAGADRES STATEFLGTC DOWNFLAGADRES REINTFLG
TC DOWNFLAGADRES NODOFLAGTC BANKCALLCADR MR.KLEANTC WHIMPER數(shù)字化:Virtual AGC與MIT Museum阿波羅制導(dǎo)系統(tǒng)計算機(AGC)是一個奇跡:就像計算阿波羅重返地球軌跡的Poppy Northcutt告訴我那樣,AGC的計算能力還比不上今天記錄個人信息的賀卡。
但是,它卻做到了該做的有限的計算能力和存儲空間意味著必須細致地管理好任務(wù),因此AGC始終聚焦在最重要的工作上如果它沒有足夠的空間來執(zhí)行任務(wù),那就不可能完成任務(wù)AGC軟件團隊知道,總有些事情是自己計劃不到的。
因此,他們開發(fā)了BAILOUT當(dāng)計算機有空間用完(或“溢出”)的風(fēng)險時,AGC會觸發(fā)BAILOUT把不太重要的數(shù)據(jù)和操作調(diào)走,從而讓重要的數(shù)據(jù)和操作保持正常運行當(dāng)Eagle著陸器準備降落到月球表面時,大概在30000英尺高空處,AGC 發(fā)出了“1202”的警報,尼爾·阿姆斯特朗和休斯敦的飛控都沒有馬上意識到這一點。
但是在不到30秒的時間內(nèi),指揮中心的計算機專家表示,AGC軟件正在按預(yù)期的方式運行:放棄了低優(yōu)先級的工作并重新開始重要的工作(這個過程很快,以至于大家都無法察覺)阿姆斯特朗和Buzz Aldrin可以繼續(xù)從AGC那里得到他們絕對需要的東西,好繼續(xù)安全著陸。
在阿姆斯特朗說出“鷹已降落”之前,溢出警報還會再響三聲,但永遠是因為事情按預(yù)期進行才會響“救助”一詞通常表示任務(wù)以失敗結(jié)束,但在這里卻讓人類的最高成就成為現(xiàn)實— 史密森尼國家航空航天博物館主任Ellen Stofan。
8、Hello, World!程序日期:1972年或更早把世代引入代碼的一句話main{ printf (“ hello,world n”); }當(dāng)你坐下來學(xué)習(xí)一門新的編程語言時,教程要你做的第一件事就是讓計算機顯示出 “Hello,world!”這句話。
也許早期最著名的例子來自貝爾實驗室備忘錄,《C語言編程教程》 這本書寫于1974年,盡管有人發(fā)現(xiàn)在1972年的B語言手冊里面也發(fā)現(xiàn)了它,而且可能時間比這還要早Hello, World!是一個很美麗的教材。
這是一項很小的、可完成的任務(wù),可以讓人早早獲得成就感這已成為了標準,有助于說明不同編程語言之間的差異對于高級程序員來說,這也是一個快速簡便的方法,可確保在安裝新環(huán)境后一切正常(有時候程序員會用“實現(xiàn)hello world的時間作為比較語言和環(huán)境的速度測試。
)也許最重要的是,“Hello,world!”天真、友善,而且有助于說明新程序員的代碼可產(chǎn)生的影響范圍那就是全世界——IBM AI設(shè)計主管Chris Noessel 9、空終止串——Null年代:1972
計算史上最災(zāi)難性的設(shè)計錯誤char yellow[26] = {y, e, l, l, o, w,