提到“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-Ⅰ的思路,首先將計算機中每一個複雜而精細的硬件瞭解個透徹,才能運用自己的數學才能編寫程序。
這幾乎等同於先學會造電腦,才有機會學編程。
所以在剛到哈佛的那段時間,格蕾絲每天都會抓住電機維修工程師好“偷師學藝”。
就是因為對機器十分熟悉,才使她能在故障的電腦中很快地找到那隻“bug”(小飛蛾)。
當時MARK可是包含3500個繼電器、2300個存儲計數器和成千上萬條後面佈線的繼電器終端。
不過bug的發明只能算是個小小插曲,畢竟格蕾絲之後的貢獻可比這響亮得多。
二戰結束後,格蕾絲也帶著厚厚一疊榮譽勳章,加入到第一臺電子計算機ENIAC發明人莫契利和埃克特創辦的公司。
在那裡,她也產生了一個將來會改變所有程序員生活的新想法。
在計算機誕生伊始,所有的程序員編程都只能用機器語言,沒有任何組合語言及程序語言的存在。
所謂機器語言,簡單來說就是機器硬件本身能夠識別的語言,只有0和1。
所以那時的程序員都要以“0111001011”的機器碼形式,先在紙上打孔,再送到機器裡讀取。
除了編寫的過程複雜外,這密密麻麻的0和1檢查起來更是讓人想自挖雙目。
而且雖說所有的機器語言都為二進制,但不同的型號的計算機也有著不同的基本指令。
所以這也意味著只要換一臺電腦,就相當於要重新記一遍新的指令,煩不勝煩。
在幫Mark系列計算機編程時,格蕾絲就已經感受到被機器語言支配的恐懼。
所以她才想設計一種程序,能讓大家直接用人類看得懂的語言編程,然後這個程序便能把語言翻譯成機器碼,交給電腦執行。
這就是我們現在說的編譯器(Compiler)的原理。
只是在那個年代,大家都對她的這個“想法”表示懷疑。
因為在所有人眼裡計算機就像計算器一樣,只能處理數字,是看不懂人類語言的。
即使得不到認可,格蕾絲還是頭腦清晰地決定將想法變成行動,到處演講籌集資金。
因為她認為,編程就應該是高水平的腦力勞動,只有不斷地將繁雜的工作交給電腦完成,才能提高人類腦力的應用。
1952年,她就率先設計出了世界上第一個編譯程序A-0。
為了向大家證明計算機也能看得懂人類的語言。
格蕾絲還特意開發了三個版本,包括英文、德文、法文語版,甩當初不看好自己的人一臉。
之後她再用了5年時間,從這第一個編譯器發展到一整套完整的程序語言FLOW-MATIC。
這也是世界上第一個運用詞語的計算機語言。
從那以後,編程工作才確定了往化繁為簡的方向進發。
如果沒有格蕾絲,對著滿屏的0和1,程序員的禿頭率或許還要更高。
從FLOW語言中看到了未來,美國政府立馬就給了格蕾絲一個新的任務。
就在FLOW語言面世後的第二年,格蕾絲帶領著團隊又成功地研製出了第一個商用編程語言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歲。
而原本只打算留5年的格蕾絲,也因工程需要在崗位上一待就是20年。
這期間她的軍銜也一路被提升,1985年她也達到了女性罕見的成就,成為海軍少將。
為了表彰她這麼多年來的貢獻,美國海軍將一艘驅逐艦命名為“格蕾絲號”和將加利福尼亞海軍數據處理中心改名為“赫柏服務中心”。
到了1986年,格蕾絲才以80歲高齡從海軍中光榮退休。
在歡送會上,格蕾絲非常自豪地說。
“當初我40歲時就被告訴你太老了不能參軍,但是身上這套制服我一穿上就又是一個40年”。