COBOL語言:“上古卷軸”的逆襲

COBOL語言:“上古卷軸”的逆襲

導語:“停在港口的船很安全,但我們造船並不是為了這個。”——格蕾絲·霍珀

美國新澤西州州長菲爾·墨菲對公眾講話,提出需要各位“Cobalt”(COBOL程序工程師)的支持。)

上週,美國新澤西州州長菲爾·墨菲對公眾發出徵集,希望州里的COBOL程序工程師志願幫助維護和優化失業保險系統。這套政府機關使用的系統已經運行了四十多年,由於最近的COVID-19疫情造成失業人口激增,為給他們辦理各類事務手續,系統已不堪重負,瀕臨癱瘓。問題在於,這套系統和美國大部分政務、商務機構一樣,依賴基於COBOL語言的遺留系統,而這種計算機語言已是六十年前的產物,在突然激增的維護需求面前,難以短時間徵募足夠的相關人員。

這位州長的呼籲在網絡上一石激起千層浪,圍繞當代信息社會對舊式系統的依賴性、遺留系統的利弊與相關業務知識傳承的話題,引來不少爭論。

雖然時常被戲稱為計算機語言世界的“上古卷軸”,COBOL語言仍是信息化歷史的里程碑之作,說到它就不能不提為其奠定理論基礎的傳奇科學家格蕾絲·穆雷·霍珀。

COBOL語言:“上古卷軸”的逆襲

格蕾絲·霍珀(右二)在UNVAC I計算機的操作檯前。

格蕾絲·霍珀本名格蕾絲·穆雷,1906年生於美國紐約市。生來對新事物充滿好奇心的她,據說小時候一口氣連拆了家裡七座鐘表,十六歲就報考著名的瓦薩學院,因拉丁文分數過低落選一次後,於十七歲那年入學,1928年畢業獲數學學士學位,三十年代初在耶魯大學取得碩士學位。在此期間,她與紐約大學學者文森特·霍珀結婚,因此改姓,後雖然二人離婚,也未曾更改。

1934年,她在耶魯大學獲得數學博士學位,是第一位獲得這一學位的現代女性。早在三年前,她就開始在母校瓦薩學院任教,1941年被聘為副教授。

太平洋戰爭爆發後,美國海軍於1942年7月開始接受女性進入預備役,成立了“女性志願應急服務部隊”,即WAVES。霍珀於1943年志願加入WAVES,儘管體重不達標[1],還是被破格錄用,以預備役中尉身份在哈佛大學與受IBM公司資助的的霍華德·艾肯合作,擔任一號計算機的程序工程師,合作發表了多篇關於這種設備的論文。一號計算機是世界上第一臺通用計算機,由霍華德·艾肯領導研製,當時被放置在哈佛大學,霍珀是其首批程序工程師之一。

日本投降後,霍珀曾申請轉入海軍現役,因年齡原因未獲批准,之後以海軍預備役身份成為哈佛計算機實驗室會士,在該單位工作到1949年,並被聘為瓦薩學院教授。

1947年,霍珀的團隊在哈佛使用二號計算機時遭遇故障,結果她發現是一隻飛蛾被壓死在繼電器部位導致了故障。霍珀把蛾子貼在日記頁,寫上了“第一個被發現的真正bug(蟲)”,後來“bug”逐漸演變為對程序錯誤的俗稱。這頁日記現收藏在美國曆史國家博物館。

COBOL語言:“上古卷軸”的逆襲

歷史上第一個計算機程序“BUG”,藏於美國曆史國家博物館。

1950年,她被聘為埃克特-默裡奇計算機公司的資深數學專家,參與開發UNIVAC I計算機。同年,埃克特-默裡奇被雷明頓·蘭德集團收購,UNIVAC I也研發完成,翌年投入市場,成為世界上第一種用於業務處理並實用化的商用計算機,革命性地運用磁帶作為存儲媒介,雖然價格昂貴,但仍被包括美國普查局在內的機構和企業採用,總共售出四十七臺,商業成績優異。

從1951年起,霍珀花費近兩年時間設計了歷史上首個實用化的編譯器,即A-0系統。這極大地方便了用高級語言編寫的源代碼與機器語言基礎的可執行文件之間的互換,顯著推動了計算機應用的普及。霍珀一直主張,相對於門檻較高的機器語言,面向大眾或初級開發/維護者的計算機語言應更接近日常生活使用的自然語言——在她的語境裡,即更接近英語。

1954年,霍珀被任命為雷明頓·蘭德的自動化編程主管,她領導的團隊在五十年代後期開發了兩種基於編譯器的編程語言,即MATH-MATIC[2]和FLOW-MATIC[3],後者於1959年完成,是世界上第一種接近英語表達的編程語言。

COBOL語言:“上古卷軸”的逆襲

1983年,格蕾絲·霍珀晉升海軍准將。她於1992年去世,身後,美國海軍伯克級驅逐艦的第二十艦以她命名。

此時,美國有多家企業機構都在開發商務處理語言。為確立統一標準,美國國防部建議開發一種通用商務處理語言,為此開設了數據系統語言會議(CODASYL)。1959年,CODASYL的一個臨時六人小組確立了“通用商用語言”(COmmon Business-Oriented Language),簡稱COBOL。雖然霍珀沒有親自參與,但COBOL沿襲拓展了她主導的FLOW-MATIC,以及IBM的COMTRAN語言。

COBOL承襲了霍珀團隊開發FLOW-MATIC的理念,命令與語法更接近英語,直接易讀,雖然不具反射機能,但學習門檻比只有函數和算式的語言低得多,便於非計算機專科的業務員使用。而且它便於處理文字列分析和編輯,以及財會計算等業務。

1960年初,COBOL被美國聯邦政府採納,作為業務處理系統的唯一指定語言,由此,以其為基礎的信息和處理系統開始在聯邦機構、各州及其他商務機構普及。和更早的FORTRAN語言一樣,COBOL也是最早國際標準化的高級語言之一。在漫長的歲月中,COBOL也得益於豐富的多平臺編譯器和不斷拓展的語言規格,始終易於遷移,且在2002年實現面向對象編程架構。

六十年來,COBOL程序已經形成龐大規模,和經其處理的海量數據一起長時間支持著歐美企業與政府機構的系統運作,從社會保障卡信息儲存和處理,到ATM機,其身影無處不在。而更新系統的成本和報批流程等源自科層的非技術性原因,使得這些陳年系統久久未能被有計劃地換代更新,形成了規模驚人的遺留系統(Legacy System)。

COBOL語言:“上古卷軸”的逆襲

直到2010年前後,美國海軍的口糧管理業務,仍部分依賴MS-DOS系統和3.5寸軟盤進行處理、存儲。雖然它們沒有COBOL年代久遠,但當時也已都是遺留系統了。

上世紀八十年代,計算機飛速小型化,開放系統與主從式架構快速普及,以往的那些封閉式系統的大型機、小型機等看似過時的技術構件,開始被稱作“遺留系統”。但雖然冠以此類名稱,這些系統仍在相當多的機構中起重要作用。

跑題一下。其實我和COBOL也算曾經擦身而過,因為我媽就是個COBOL程序工程師。七十年代末的時候,她的單位仍使用0和1組成的機器語言,到了八十年代初,COBOL即成為主流,主要應用在進口的NEC小型機。當時因為是雙職工家庭,一放寒暑假,有時候就得去機房寫作業,隔間對面就是極具肅殺感的小型機陣列。

不過我只學過BASIC語言,而且大部分注意力後來都放在機房裡那些微機的遊戲上了,比如《F-19隱形戰機》、《沙丘2》、《德軍總部3D》……

根據高德納諮詢公司的統計,在全球約一萬組大型機,仍存在38000個遺留系統,其程序代碼總計約3100億行,其中FORTRAN和其他彙編語言寫的代碼合計不到100億行,而COBOL寫的代碼有2000億行左右,佔比達65%,每年增長量約50億行。

根據英國Micro Focus軟件公司發佈的信息,全球商用數據的75%,以及商用數據處理的80%以上都依賴COBOL。

專注於支持COBOL遺留系統的美國COBOL COWBOYS公司則指出,美國財富500強企業中,有九成仍在使用COBOL。

由此,美國各級機構對COBOL的依賴,和其本身老化產生的各種問題之間,就形成了一個頗為魔幻的現實。一方面,時代變遷造成美國教育機構從三十年前就開始顯著削減或撤銷COBOL的教學課程,青壯年程序工程師大都沒有接觸過它。另一方面,就是新澤西州州長現在要面對的問題了——在過去兩週內,共有超過三十六萬名該州居民申領失業保險,這一失業激增是COVID-19肺炎導致的,是平時失業保險業務處理量的十六倍,處理系統不堪重負處於崩潰邊緣,大批申請阻塞,而這個已經運轉了四十多年的系統,和許許多多美國政府、企業機構的基礎系統一樣,是基於COBOL的。

陳舊語言和系統造成的社會服務癱瘓危機並不是什麼新鮮事物,二十多年前成為話題的“千年蟲”問題也與此有關。在計算機產業的起步階段,為儘量節省當時高昂的儲存成本,霍珀規定在一號計算機上只能用六位數字存儲時間,即年、月、日各兩位。這一定義被COBOL沿襲,年份只用後兩位存儲,雖然五十年代末就有人提出到了2000年,這會造成混亂,但畢竟當時很少人能想到那會兒寫的程序會用上幾十年。但如前所述,大量遺留系統的傳承,使得這樣的時間標記方式容易在2000年來臨時導致日期捲回等問題。

COBOL語言:“上古卷軸”的逆襲

2000年初,法國南特一所學校的屏顯因千年蟲問題,時間捲回到1900年。

為此,很多關鍵機構在九十年代末臨時召集COBOL程序工程師進行事先堵漏,或更新系統,總算沒有造成嚴重問題,但仍有一些無力負擔此類成本的中小型企業遭殃。

在此之後,美國國內時有呼聲,呼籲儘快將關鍵機構中基於COBOL的遺留系統換代,或儘量維持和培養相關技術支持人員。不過,成本等問題令這些呼聲往往是乾打雷不下雨,各級機構應對頗為緩慢。

不僅如此,COBOL開發者的人數也在逐年下降,2009年時估計有約二百萬人,到2019年已減少到約八十五萬人。綜合目前的環境,這是個必然的趨勢,拿新澤西州為例,政府肯定不會為了應對無法預測何時會到來的系統問題而保持常設的COBOL相關崗位和開支。

但只要美國社會仍在依賴基於COBOL的遺留系統並不願從系統層面想辦法逐步更新,那麼足以威脅整個社會穩定的威脅,就會一直是掛在這個特級大國的腦門子上頭的達摩克利斯之劍,這一次,是成千上萬失業者遲遲拿不到失業保險金和票券,那下一次呢?

這樣的情況也並非孤例,由於這樣那樣的“非技術性”原因,很多人們以為理所當然的事其實難比登天,而很多匪夷所思的事也往往司空見慣。

和老白聊起這個話題時,他評之為“建造在浮木上的城堡”,一語中的。

晚飯時候我跟我媽說,你知道不,COBOL就要great again了,縱橫時光六十載,你這個行當才真是屹立不倒。

但她竟然飛起一腳踢到我的牙齒。

[1] 當時僅有47公斤,標準為54公斤。 [2] 即三型代數式翻譯器(AT-3)。 [3] 即零式商用語言(B-0)。

COBOL語言:“上古卷軸”的逆襲

COBOL語言:“上古卷軸”的逆襲

COBOL語言:“上古卷軸”的逆襲


分享到:


相關文章: