創造了程序語言的女學霸,生前定義程序bug,死後引發千年蟲危機

2021-02-25 SME科技故事

提到「bug」,人們第一時間想到的便是程式設計師們深惡痛絕的系統漏洞。

然而在英語中,bug原意指的卻是小蟲、臭蟲。

不過現在IT行業所指的bug,還真的和當初那隻小臭蟲有關。

 

計算機剛出現的1947年,一位女程式設計師所用的電腦發生了故障。

經排查後發現,原來是某個繼電器內飛進了一隻蛾子,導致了整個計算機無法運作。

眼疾手快的她便用鑷子小心地將飛蛾夾出,並把它貼在記錄本中標上「First actual case of bug being found」。

 

對,就是這隻小蟲

而她對bug的詭異稱呼,後來竟變成了計算機行業的專業術語。

而除蟲「debug」也成了排除程序故障的代名詞。

這位發明世界上第一個「bug」的女程式設計師,其實就是IT界的祖師娘格蕾絲·赫柏。

 

她是耶魯大學第一位數學女博士,世界上第三位程式設計師,與圖靈喬布蓋茨等一同被評為「IT界十大最有遠見的人才」

在那個全靠機器語言和打孔條撐起計算機的年代,她開發了第一套編譯程序

自那以後,代碼才從「0101110...」變成了現在簡單易懂的模樣,為廣大碼農減輕了不少負擔。

谷歌塗鴉紀念格蕾絲

目前世界上的60%的商業數據,都還是要用到她發明的Cobol語言來處理。

因為實在太能幹,美國軍方為了留住她,甚至不惜去司法部將她的法定退休年齡延長5歲。

 

格蕾絲·赫柏從小就是個不折不扣的假小子,經常帶著弟弟妹妹上蹦下竄,爬樹、遊泳、划船。

除了熱衷體育運動外,她還是個好奇心十足的技術宅。

7歲時為了搞懂鬧鐘的工作原理,她就偷偷把家裡鬧鐘拆開研究。

拆一個搞不懂,她後面還陸續拆了共七個鬧鐘才收手。

因為沒有辦法把鬧鐘恢復原樣,那時的格蕾絲可沒少挨母親的批評。

 

年輕的格蕾絲

不過也多虧了母親的正確教導,格蕾絲才把自己的好奇心使對了地方。

母親雖是家庭主婦,但是卻對數學特別感興趣,是位業餘數學家。

所以在母親的指導下,格蕾絲的數學和物理等工科成績都異常出色。

考進大學後,她便一路開掛地同時獲得數學、物理雙學位和國優等生的榮譽。

當時才本科畢業的格蕾絲,就已被母校留任聘為教師。

 

不過格蕾絲可沒那麼容易滿足,利用獎學金她再次考進耶魯大學。

1934年,她也成了耶魯大學歷史上第一位數學女博士

據統計,1862年到1934年間,全美總共才發出了1279個數學博士學位,平均每年不到18個。

而且在那個年代的大環境下,以女性身份獲得耶魯數學博士學位的格蕾絲完全可以用不可思議來形容。

之後,她也將生活重心轉向教學。

到這個階段為止,差不多40歲的格蕾絲都還未曾與計算機有過聯繫。

不過二戰的打響,也成了格蕾絲人生最重要的轉折

珍珠港事件後,她就鐵了心要加入美國海軍為國家出力。

然而參軍是要經過嚴格考察的,無論是年齡、身高還是體重,她都沒有一項是及格的。

不過有一顆聰明的大腦比什麼都頂用,在她的軟磨硬泡下教官竟同意讓她參加培訓計劃。

在最後的考試中,她更是以第一名的成績完虐跟她同批的學員,讓所有人都刮目相看。

霍華德·艾肯與他的第一臺計算機

考慮到她的數學背景,格蕾絲之後也被派到了哈佛大學,有幸成為霍華德·艾肯教授(Howard Aiken)的助手。

霍華德·艾肯是世界上第一臺數字計算機Mark-Ⅰ的總設計師及製造者。

這個重達4噸的龐然大物也被譽為「現代電腦時代的開端」

 格蕾絲坐在艾肯教授(前排中間)旁邊,後面是Mark計算機

在這之前,已有兩位男性在Mark-Ⅰ上寫過程序。

所以格蕾絲也成了世界上第一臺計算機上的第三位程式設計師(雖然程式設計師這個稱呼是在多年以後才出現)。

不過一開始,這臺MARK-Ⅰ可沒少把格蕾絲搞瘋。

當時這個大傢伙雖然能被用於計算火箭彈道、低空爆炸信管和地雷等的破解方法,以及解決一系列工程的數學問題。

但是其本身卻遠沒有現代的計算機那麼「智能」,都需要格蕾絲手把手教(編程)它才會計算。

如果說艾肯賦予了MARK-Ⅰ生命,那麼格蕾絲的程序則像給機器帶來思維一樣,讓它能真正地「動起來」。

然而剛接觸計算機的格蕾絲也幾乎等同一張白紙。

所以她需要沿著艾肯製造MARK-Ⅰ的思路,首先將計算機中每一個複雜而精細的硬體了解個透徹,才能運用自己的數學才能編寫程序。

這幾乎等同於先學會造電腦,才有機會學編程。

所以在剛到哈佛的那段時間,格蕾絲每天都會抓住電機維修工程師好「偷師學藝」。

重達4噸的Mark-Ⅰ

就是因為對機器十分熟悉,才使她能在故障的電腦中很快地找到那隻「bug」(小飛蛾)。

當時MARK可是包含3500個繼電器、2300個存儲計數器和成千上萬條後面布線的繼電器終端。

 

Mark-Ⅰ背後複雜的布線

不過bug的發明只能算是個小小插曲,畢竟格蕾絲之後的貢獻可比這響亮得多。

二戰結束後,格蕾絲也帶著厚厚一疊榮譽勳章,加入到第一臺電子計算機ENIAC發明人莫契利和埃克特創辦的公司。

在那裡,她也產生了一個將來會改變所有程式設計師生活的新想法。

 

在計算機誕生伊始,所有的程式設計師編程都只能用機器語言,沒有任何組合語言及程序語言的存在。

所謂機器語言,簡單來說就是機器硬體本身能夠識別的語言,只有0和1。

所以那時的程式設計師都要以「0111001011」的機器碼形式,先在紙上打孔,再送到機器裡讀取。

老式的打孔紙帶

除了編寫的過程複雜外,這密密麻麻的0和1檢查起來更是讓人想自挖雙目。

而且雖說所有的機器語言都為二進位,但不同的型號的計算機也有著不同的基本指令。

所以這也意味著只要換一臺電腦,就相當於要重新記一遍新的指令,煩不勝煩。

在幫Mark系列計算機編程時,格蕾絲就已經感受到被機器語言支配的恐懼。

所以她才想設計一種程序,能讓大家直接用人類看得懂的語言編程,然後這個程序便能把語言翻譯成機器碼,交給電腦執行。

這就是我們現在說的編譯器(Compiler)的原理。

 

只是在那個年代,大家都對她的這個「想法」表示懷疑。

因為在所有人眼裡計算機就像計算器一樣,只能處理數字,是看不懂人類語言的。

 

即使得不到認可,格蕾絲還是頭腦清晰地決定將想法變成行動,到處演講籌集資金。

因為她認為,編程就應該是高水平的腦力勞動,只有不斷地將繁雜的工作交給電腦完成,才能提高人類腦力的應用。

 

1952年,她就率先設計出了世界上第一個編譯程序A-0

為了向大家證明計算機也能看得懂人類的語言。

格蕾絲還特意開發了三個版本,包括英文、德文、法文語版,甩當初不看好自己的人一臉。

之後她再用了5年時間,從這第一個編譯器發展到一整套完整的程序語言FLOW-MATIC。

這也是世界上第一個運用詞語的計算機語言。


從那以後,編程工作才確定了往化繁為簡的方向進發。

如果沒有格蕾絲,對著滿屏的0和1,程式設計師的禿頭率或許還要更高。

 

從FLOW語言中看到了未來,美國政府立馬就給了格蕾絲一個新的任務。

就在FLOW語言面世後的第二年,格蕾絲帶領著團隊又成功地研製出了第一個商用程式語言COBOL。

它被公認的優點便是是語法和英語十分接近,可以讓不懂電腦的人也能看懂程序。

格蕾絲也被稱為COBOL之母

即使是2000年出現了史上最大的bug「千年蟲」*,也未能撼動COBOL的地位。

 

*註:「千年蟲」,是因為50年代計算機存儲空間非常有限,為了節省內存格蕾絲只採用了6位數來表示日期,如DD/MM/YY表示日、月、年。但是從20世紀進入21世紀的2000年,系統就無法識別YY(00)表示的是1900還是2000,所以計算機裡的時間全亂了套,對世界的影響巨大,也稱千年蟲問題,縮寫「Y2K」。

 

到現在COBOL已走過了近60個年頭,雖然古老但在商業領域仍佔有重要的地位。

據計算機世界(Computerworld)統計,「千年蟲事件」後的2006年到2012年仍有超過60%的企業用COBOL處理數據。

甚至還有人預測說,即使到了下個世紀,COBOL仍有可能在老驥伏櫪。

所以在IT界也有個笑話,一個COBOL程式設計師因解決了千年蟲問題掙了大錢,以至於他可以用錢將自己冷凍起來。

未來的一天他突然被人復活,睜開眼一瞬間他就被告知:「現在是9999年,而你懂COBOL語言」。


到了1966年,格蕾絲也到了60歲該退休了。

但是自她走後,海軍還是有大量無法處理的工程管理程序亟待解決。

於是格蕾絲才剛休息了半年,就又被緊急地召回,負責海軍系統高級語言的標準化和普及工作。

 

為了使格蕾絲能名正言順地回來,軍方還特意修改了原來的規章,將退休年齡延長至65歲。

2016年格蕾絲被追授總統自由勳章

而原本只打算留5年的格蕾絲,也因工程需要在崗位上一待就是20年

這期間她的軍銜也一路被提升,1985年她也達到了女性罕見的成就,成為海軍少將

格蕾絲號

為了表彰她這麼多年來的貢獻,美國海軍將一艘驅逐艦命名為「格蕾絲號」和將加利福尼亞海軍數據處理中心改名為「赫柏服務中心」。

 

到了1986年,格蕾絲才以80歲高齡從海軍中光榮退休。

在歡送會上,格蕾絲非常自豪地說。

「當初我40歲時就被告訴你太老了不能參軍,但是身上這套制服我一穿上就又是一個40年」。

*參考資料

庫爾特·W·拜爾. 優雅人生:格雷斯·霍珀和資訊時代的創新[Z].機械工業出版社,2010.12

Grace Hopper.Wikipedia.2017.9.27COBOL.Wikipedia.2017.9.20

____________


作者系網易新聞·網易號「各有態度」籤約作者

內容為【SME】公眾號原創,歡迎轉載

白名單回復後臺「轉載」

相關焦點

  • 淺談千年蟲
    在本世紀初,人類社會曾經遭遇過一場空前的大危機,如果這場危機真的來臨,那麼可能會對人類現代文明造成巨大衝擊,甚至可能終結現代文明。大家不禁在想到底是什麼樣的危機會對人類現代社會造成這麼大的衝擊呢,是地震?海嘯?瘟疫?還是核戰爭?其實都不是,它只是一個在計算機發展始中,由編程引起的千年蟲問題。
  • 科普:計算機「千年蟲問題」,以及解決的複雜性
    什麼是計算機「千年蟲問題」計算機系統的2000年問題,簡稱Y2K,或千年危機、千年蟲問題,是指在計算機軟、硬體系統以及使用數位化程序控制晶片的各種應用系統中,由於只採用兩位十進位數字來表示年份,當日期從1999年12月31日轉入2000年1月1日時,用來表示年份的後兩位十進位數字「00」,與1900年的「00致,因而計算機作業系統誤認為是
  • 美國發出警告:今年4月6日一場關於GPS的千年蟲危機將會爆發
    全世界還從來沒有像今天這樣依賴全球定位系統,在過去的幾十年中,GPS為全球用戶提供了便捷準確的服務,但是這個光榮傳統可能會在今年的4月6日戛然而止,因為GPS系統將會遭遇千年蟲危機。一想到這個問題就讓計算機專家們感到頭疼,他們在千禧年到來之前拼命的修改算法,雖然還是有很多國家遭殃,但最終還是避免了一場由計算機bug所帶來的浩劫。那麼既然計算機已經度過了千年蟲危機,那麼為什麼GPS系統還會有千年蟲危機呢?
  • 18款最佳Bug跟蹤處理程序
    對於一個軟體或Web應用程式開發者來說,Bug通常是讓他們最頭疼的問題。那麼開發人員肯定需要一些bug跟蹤和問題跟蹤應用程式,通過這些軟體很容易地檢查一堆代碼的錯誤和問題,並幫助解決這些問題。特別是通過錯誤跟蹤應用程式,可以很好的管理你的項目,給予bug報告和修復它們。
  • 用C語言程序比大小及C語言程序的結構
    因為在主函數中要調用max函數,而max函數的定義卻在main函數之後,對對程序的編譯是自上而下進行的,在對程序c=max(a,b);進行編譯時,編譯系統無法知道max是什麼,因而無法把它作為函數調用處理。
  • 《黑寡婦》獨立電影將講述寡姐黑歷史,劇情與「千年蟲」有關
    2、故事劇情會跟「千年蟲」有關。除了確定其故事是起源故事,外媒還流傳出這樣一個傳聞,即《黑寡婦》的故事會跟「千年蟲」有關,「千年蟲」是一種電腦程式自身缺陷造成的系統漏洞,因為最開始電腦系統表示年份的時候都是用兩位數來表示的,比如1999年,系統只讀取後兩位99即可,也就是說前兩位會默認為19,但是到了2000年,末尾兩位變成00,系統就無法識別到底是1900年還是2000年,由此會引發各種各樣的連鎖反應
  • 再看千年蟲
    而說得上嚴重的如2000年剛到,美國一個間諜衛星系統就受到「千年蟲」的襲擾,衛星地面系統難以處理衛星上傳來的數據,時間長達2-3個小時,直至美軍啟用電腦備用程序才恢復正常。真正讓人虛驚一場的則是發生在日本:在新年到來之際志賀核電站出現了一些小故障,但並未出現核洩露事故。
  • 電視劇《在遠方》伊始的1999年,一隻神秘的千禧蟲險些了大危機!
    而在1999年,就曾經發生過這麼一件事情,險些釀成了危機,它的名字有些古怪,那就是——千禧蟲,也叫做千年蟲。所謂1999年外星人入侵事件自然只是以訛傳訛,毫無真實可言的,但千年蟲卻是真實存在。實際上,千年蟲屬於一種程序處理日期上的bug(電腦程式故障),它被稱作2000年問題,又叫做"2000年病毒"、"電腦千禧年問題"。
  • C++程序設計最佳實踐
    隨著計算機語言的發展,我們現在編寫一個程序越來越容易了。利用一些軟體開發工具,往往只要通過滑鼠的拖拖點點,計算機就會自動幫你生成許多代碼。但在很多時候,計算機的這種能力被濫用了,我們往往只考慮把這個程序搭起來,而不去考慮程序的性能如何,程序是否足夠的健壯。而此節課的目的主要是介紹一些編碼的經驗,讓大家編寫的程序更加健壯和高性能。
  • 程序語言的概念知識筆記
    高級語言:面向對象設計的各類應用的程序語言。比然:Java、C、C++、C#、PHP等。2、編譯程序和解釋程序高級語言必須經過計算機翻譯才能被計算機硬體所理解。語言之間的翻譯方式有彙編、解釋、編譯。源程序:用高級語言編寫的程序,源程序不能在計算機上直接運行,必須由對應的解釋程序、編譯程序翻譯成目標程序才能夠運行。解釋程序:也被稱為解釋器,它或者直接解釋執行源程序,或者將源程序編譯成某種中間代碼後執行。編譯程序(解釋器):是將源程序翻譯成目標程序,然後可以在計算機上運行。
  • 程序設計(C語言)
    選項:A:用C程序實現的算法必須要有輸入和輸出操作B:用C程序實現的算法可以沒有輸出但必須要有輸入C:用C程序實現的算法可以沒有輸入但必須要有輸出D:用C程序實現的算法可以既沒有輸入也沒有輸出答案: 【用C程序實現的算法可以沒有輸入但必須要有輸出】2、單選題:以下不能定義為用戶標識符的是( )。
  • 推薦15 款最好的 Bug 跟蹤應用程式 - OSCHINA - 中文開源技術交流...
    團隊會花費一部分的精力去跟蹤 bug ,並且找出問題所在,解決問題。如果你使用一個 bug 和問題跟蹤系統,那麼會得到更好的最終結果,除此之外,還能打打提高工作效率,加快項目的進度,更好的完成任務。在這裡,我們收集了最好的 15 款 bug 跟蹤應用程式,提供給用戶更舒適更方便的開發環境。欣賞完之後跟大家談談你的感想吧:)
  • PIC單片機C語言程序實例
    這就出現了精通51單片機彙編語言的人不能直接編寫PIC或其他單片機的彙編語言源程序,反之亦然的現象,以及產品升級換代和不同單片機問程序移植難的問題。而且,由於彙編語言是採用助記符的低級語言,可讀性較差,當源程序功能多、程序長時,即使加了注釋,閱讀自己編寫的程序也會感到困難,更不用說修改程序和增加功能了。
  • 第五代程序語言是什麼
    它建立在邏輯學的理論基礎之上, 最初被運用於自然語言等研究領域。       一種邏輯程序設計語言。1972年法國科莫勞埃小組為了提高歸結法的執行效率,研製出一個定理證明程序的程序執行器,取名為PROLOG(Programming In Logic),標誌著第一個邏輯程序設計語言PROLOG的誕生。
  • 如何掌握程序語言
    對程序語言的各種誤解  學習程序語言的人,經常會出現以下幾種心理,以至於他們會覺得有學不完的東西,或者走上錯誤的道路。以下我把這些心理簡要分析一下。        1. 程序語言無用論。        這是國內大學計算機系的教育常見的錯誤。教授們常常對學生灌輸:「用什麼程序語言不重要,重要的是算法。」而其實,程序語言卻是比算法更加精髓的東西。
  • 電腦程式語言的組成知識筆記
    程序語言的基本成分包括數據『運算、控制、傳輸。1、程序語言的數據成分數據成分指程序中的數據對象,數據是程序程序操作的對象,具有存儲類型、數據類型、數據名稱、作用域、生存周期等屬性。全局變量分配的存儲空間一般在程序運行過程中不會改變,局部變量分配的存儲單元是可以 動態改變的。1.3 數據類型按照數據的組織形式不同可以將數據類型分為基本類型、用戶自定義類型、構造類型。
  • 20年前差點讓世界崩潰的「千年蟲」,又回來襲擊人類了
    遙想當年,三星用一款NOTE7手機.重新定義了「易燃易爆」物品,以一己之力,改變了航空公司的安檢規則。自此之後,三星在中國的銷量一路滑坡存在感越來越低。可能是覺得自己戲份太少,三星又整了個么蛾子來搶熱搜。從5月23號開始,大批三星手機突然崩潰黑屏、顯示亂碼、無限重啟總之就是罷工了。
  • 期末考試樣卷——python程序語言
    機器語言 B. 彙編語言  C.JAVA語言  D.C語言2、pow(3, 2) 的運算結果是(  )。A. 8  B. 2  C. 3  D. 93、下面不符合Python語言變量命名規則的是(  )。A.
  • 20年前偷懶修復的千年蟲bug歸來,程式設計師:該來的總會來
    千年蟲主要集中在配備較早的主機系統上,如在 IBM 4381,IBM AS/400 等機型上運行的應用程式,比如美國的 AT&T 電訊公司,其內部就有超過 3.6 億行的應用程式需要檢測是否存在 Y2K 問題。另外,在自動化儀器儀表、電梯、警報系統、恆溫燈等嵌入式設備也容易存在千年蟲隱患。
  • 編程回顧-小程序
    開學後不久設計的小程序佔據了半個學年的回憶,它的編寫差不多貫穿整個學期,其涉及到資料庫編程、前後端編程,網絡爬蟲,算是一個集我所有編程能力創造出來的產品,並且投入商業化應用。這個時候,小程序闖入眼裡,它輕便,入口廣,依託微信,便捷,符合期望,故必然是它。