作者丨Dave McKay、Ian King等
譯者丨核子可樂
策劃丨Tina
上古程式語言 COBOL 火遍全球,但我建議你不要學。
COVID-19 疫情的蔓延,讓美國 10% 的勞動力失業,人數達到了 1700 萬。但美國至少有 12 個州的失業救濟系統運行在已經有 60 年歷史、使用 COBOL 程式語言的大型機上。這迫使政府機構出手爭搶平均年齡已達 60 歲的 COBOL 程式設計師為他們解決各種系統故障。
不僅僅是政府機構,當下全球財富五百強企業的系統當中有 90% 都運行在 COBOL 基礎之上,這些系統構建於幾十年前,如今已經很難找到關於其設計思路的說明文檔,因此政府機構及企業只能依賴長期在職的程式設計師們回憶這些具體細節。這些系統的代碼編寫方式陳舊,沒有模塊化的概念,像「義大利麵條」一樣交織在一起,牽一髮而動全身,極難維護。
現在很多 COBOL 職位的招聘要求擁有 20 年工作經驗,但開出的年薪卻只有 35000 美元。年輕人也不願意學這種複雜的過時語言,這就意味著這些已經 60 歲高齡的 COBOL 程式設計師至少還需要在未來一二十年裡繼續維護這些老系統。
1 COBOL:60 歲的激進程式語言
COBOL 的發明人 Grace Hopper 絕對是個現象級的人物。她擁有耶魯大學數學博士學位、在瓦薩大學擔任教授,並曾出任美國海軍少將職務。她對整個計算領域的貢獻,單從專為紀念她而命名的項目數量就可見一斑。國家能源研究科學計算中心以她命名 Cray XE6 超級計算機,海軍當中也有一艘「Hopper 號」飛彈驅逐艦——該艦的座右銘是「Aude et Effice(敢想敢為)」,很可能正是 Hopper 本人的生活準則。
Hopper 致力於在計算機能夠理解的範圍之內,開發出一種更接近英語表達的程式語言;此外,她還開發出了世界上第一款編譯器。這也為 FLOW-MATIC 等一大批早期編譯語言打開了大門。這些貢獻,讓她在 1959 年的數據系統語言大會(CODASYL)上獲得了一個寶貴的席位。當然,她還協助制定並開發出了面向公共業務的 COBOL 語言。在 1959 年 6 月 23 日的首次 CODASYL 會議之後,她很快於次年 4 月發布了 COBOL 語言及編程規範。
COBOL 當中包含著一系列突破性概念。可以說,該語言最重要的特性就是能夠運行在不同製造商生產的硬體之上——在當時,這是一種前所未有的重要特性。COBOL 語言經過精心設計,允許程式設計師使用與英語相近的詞彙表達,能夠處理大量數據並擁有極高的數學運算精度。
COBOL 語言的保留字(構成該語言的可用字)總詞彙量接近400 條。程式設計師可以將這些字串連起來,建立起語法意義,進而開發出完整程序。任何熟悉其他語言的程式設計師朋友,都會馬上意識到 COBOL 的保留字確實相當豐富。相比之下,C 語言只有 32 個保留字,Python 語言則為 33 個。
COBOL 的另一大特性,在於其嚴格要求開發者將某些程序行放置在特定行當中。沒辦法,這是打孔卡時代遺留下來的問題。如今,程式設計師在 COBOL 編寫格式方面擁有更大的自由空間,也不必再用大寫字母輸入所有內容了。為了體驗 COBOL 的最初面貌,下面一起來看這段代碼示例:
IDENTIFICATION DIVISION. PROGRAM-ID. Hello-World. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. PROCEDURE DIVISION. MAIN-PROCEDURE. DISPLAY "Hello world, from How-To Geek!" STOP RUN. END PROGRAM Hello-World.
2 蓬勃發展幾十年,如今卻無法遷移和升級
雖然用今天的眼光看,COBOL 的設計已經非常笨拙,但在剛誕生的時候,這絕對是一種革命性的程式語言。COBOL 在金融部門、聯邦政府以及大型企業 / 機構中備受青睞。究其原因,出色的可擴展性、批處理功能以及數學精度成為 COBOL 的致勝之道。它被廣泛安裝在世界各地的大型機中,長久紮根並蓬勃發展。如同頑固的雜草,COBOL 似乎永遠無法被徹底消滅。
那麼,當下到底有多少系統仍然運行在 COBOL 之上?結果絕對令人驚訝。根據路透社 2017 年發布的報告,我們看到了以下令人瞠目結舌的統計數據:
目前,全球仍有 2200 億行 COBOL 代碼被持續使用。
COBOL 在全部銀行系統基礎設施中佔據 43%。
COBOL 支持的系統每天處理 3 萬億美元的商業交易。
COBOL 處理著 95% 的 ATM 機刷卡業務。
COBOL 支撐著高達 80% 的店面信用卡交易操作。
如大家所見,如果 COBOL 及相關系統突然消失,人類社會很可能會瞬間崩潰。銀行帳戶與支票清算服務,外加面向公眾的各類基礎設施(包括 ATM 機與交通信號燈)仍在使用幾十年前編寫的 COBOL 代碼。
這類陳舊系統的升級之路絕不像聽起來這麼簡單。因為此類系統往往扮演著極為重要的角色,意味著各分支機構、金融、政府乃至整個商業世界都在 24/7 全天候依賴於這些系統。另外,其中的 COBOL 代碼老舊、分層而且往往極度缺少說明文檔。再加上升級過程不能破壞系統的正常運行,導致整個過程就像是在正在前進的飛機上拆下螺旋槳、然後換個噴氣發動機上去。
那些遷移失敗的案例...
去年,美國政府問責辦公室曾在報告中 26 次提到 COBOL,並敦促各機構對核心陳舊技術進行現代化升級。HP Marin Group 首席技術官 Phil Teplitzky 表示,目前仍在使用的 COBOL 代碼數量超過 2400 億行,它們的存在完全是為了支撐企業繼續使用早已陳舊不堪的計算系統。
這些系統構建於幾十年前,如今已經鮮有關於其設計思路的說明文檔,因此政府機構及企業只能依賴長期在職的程式設計師們回憶這些具體細節。Teplitzky 將其稱為 COBOL「民俗學」。更可怕的是,很多專家已經去世,而在救市法案要求對這些系統的代碼做出重大修改時,在職人員往往感到無從下手。
COBOL 代碼的陳舊編寫方式,同樣給更新帶來了挑戰。現代計算語言會將程序拆分成多個塊,每個塊擁有明確且特定的用途。COBOL 程式設計師則往往將所有內容編織在一起,意味著對其中任意部分的代碼做出變更,都有可能影響或損壞程序的其他部分。這種現象被稱為「意面代碼」,彼此纏繞的狀態令代碼修改比學習程式語言本身難上十倍甚至百倍。
除了風險,遷移至現代系統的方案還存在不少經濟障礙。維持這類大型機與 COBOL 程序的正常運轉需要花費驚人的成本,考慮到代碼本身仍能正常運行,各機構真的有必要放棄一切、重新開始嗎?決策者很難做出這樣的判斷。
希爾斯伯勒縣學區的學生信息系統就是基於 COBOL 構建的。該系統最初安裝於 1984 年的 IBM 大型計算機中,由 14 名 COBOL 程式設計師和大型機操作員負責維護,每年維護花費 150 萬美元。與其他大型學區相比,該學區的學生需要在這種又老又笨重的大型臺式機組成的計算機實驗室中學習,而不是在配備較小平板電腦的教室中。他們不得不進行升級,希望能將該系統從 COBOL 遷移到 Java。「但他們花了四年,仍然沒有完成。」他們的顧問 COBOL Cowboys 公司的 Hinshaw 表示。
澳大利亞聯邦銀行曾在 2012 年藉助埃森哲和 SAP 替換了其核心 COBOL 平臺。這個項目十分複雜,不同時代的老系統緊密交織在一起,一旦失敗,成千上萬客戶的帳戶數據就會消失。轉換成功前後花去五年時間,最終成本為 7.499 億美元(約合 10 億澳元)。
這還是一切按計劃進行的結果。再來看另一例,英國銀行 TSB 在 2018 年被迫進行了一輪 COBOL 系統遷移,由於執行不力,導致整個銀行的正常交易中斷數日,最終遷移成本為 3.3 億英鎊——這還不包括實際遷移產生的工程費用。此外,TSB 在系統崩潰期間還因財務欺詐損失了 4910 萬英鎊。
客戶賠償總額更高達 1.25 億英鎊,TSB 方面還被迫投入 1.22 億英鎊僱用新員工以處理多達 204000 例客戶投訴案。執行長因此引咎辭職,到事件兩年後的今天,TSB 仍沒能徹底走出這片陰影。
3 「真心不推薦你學習 COBOL!」
大多數 COBOL 代碼都運行在大型機上,而這些計算設備出自 IBM 之手。多年以來,IBM 公司一直在努力幫助客戶物色 COBOL 技術專家,並說服年輕人繼承這門「老手藝」。
就在上周,IBM 方面宣布推出一項新的培訓課程,除了向初學者傳授 COBOL 知識之外,也幫助經驗豐富的專業人員進一步提升自身水平。IBM 公司副總裁 Barry Baker 表示,「事實上,某些關鍵系統一直沒能得到應有的關注。現在的年輕人有必要了解並掌握某些早期技術,這也足以支撐起理想的職業生涯。更重要的是,專業的傳承具有重大意義。」
Gartner 方面估計,目前全球 COBOL 程式設計師的平均年齡已經超過 60 歲。掌握 COBOL 編程技巧的程式設計師要麼退休了、要么正在考慮退休、要麼已經不幸離世。是的,能夠保障這些重要系統正常運轉的技術人員群體正在快速萎縮。新的、年輕的程式設計師們壓根不知道怎麼使用 COBOL,而且大多數人也不想維護或者更新這些陳舊的系統。
在 2004 年進行統計時,Gartner 方面發現擁有 COBOL 技能的專家約有 200 萬名,這一數字每年下降約 5%。瑞士聯合銀行的統計數據則顯示,目前全球軟體開發者總數約為 2500 萬。通常,當對程式語言的需求超過程式設計師供應量時,技術行業就會做出調整。近年來,大學中的計算機科學課程正成倍增加,也出現了不少幫助人們快速掌握 Java、Python 以及其他語言的開發訓練營。但 COBOL,顯然不在此列。
COBOL 的全稱為「面向商業的通用語言」,誕生於上世紀五十年代末,當時大學中甚至還沒有任何計算機科學課程。在缺少學術界支持的情況下,眾多 COBOL 程式設計師開始在政府機關、保險、銀行以及票務預訂等領域使用該語言,他們也被廣泛視為科技行業的第一代藍領工人。
史丹福大學退休教授 Gio WIederhold 指出,「我個人真心不推薦現在的學生們學習 COBOL。跟這種語言相關的全都是維護性工作,給不了人什麼有意義的啟發。」Wiederhold 曾經培養出成千上萬計算機科學家,他的學生先後在蘋果公司、Facebook 以及谷歌等矽谷科技巨頭工作。他還回憶道,史丹福大學自從 1979 年遷址以來就再沒設置過 COBOL 課程。
75 歲的 Mahmoud Ezzeldin 表示,「這是一場災難。」曾為保險公司 Blue Cross Blue Shield 與美國國稅局工作的他擁有數十年的 COBOL 計算機系統工作經驗,他說「COBOL 確實是種很難掌握的語言,而且在設計上也沒有考慮到網際網路這一運行背景。現在的大學生都喜歡學點簡單的東西,這不怪他們。」
Gartner 公司分析師 Thomas Kinect 則認為,企業及其他組織需要在招募 COBOL 人員方面再加把勁,包括開出更高的薪酬。否則,這些老設備和老系統就要停擺了。他強調,「看看那些招聘啟事,大家就能感受到這有多荒謬了。這些職位的入門要求是 20 年工作經驗,但開出的年薪只有 35000 美元。」
這個問題迫使已經退休的 COBOL 資深大牛 Bill Hinshaw 再度出山,建立了 COBOL Cowboys 公司。這是一家私人諮詢企業,專為那些身陷絕望、找不到任何 COBOL 程式設計師的企業客戶提供幫助。他們清楚地知道,當下全球財富五百強企業的系統當中有 90% 都運行在 COBOL 基礎之上。Hinshaw 說,在擔任兼職顧問的 20 位「牛仔」中,有許多已經達到退休年齡,儘管有些「年輕人」:「好吧,我稱他們為年輕人,但他們也已經 50 多歲了。」這些經驗豐富的 COBOL 程式設計師,他們修補各種故障,重寫編碼手冊,使新系統與舊系統一起工作,但每小時只賺 100 美元。
4 小結
維持現狀不可行,但全面升級似乎同樣不靠譜。無論如何,想要切實改善事態,唯一的方法就是尋找受控且謹慎的現代軟體與硬體遷移道路。
為了在實現這一目標的同時,不致引發業務中斷、數據丟失以及系統宕機,各類機構需要投入大量專業人才與金錢。而這,還僅僅是成功遷移的一半;另外一半則在於 COBOL 專家與時間周期。遺憾的是,目前我們既找不到充足的 COBOL 專家,也沒有太多時間可耗。
參考閱讀:
https://www.howtogeek.com/667596/what-is-cobol-and-why-do-so-many-institutions-rely-on-it/
https://news.bloomberglaw.com/banking-law/an-ancient-computer-language-is-slowing-americas-giant-stimulus
大會推薦
因疫情原因,華為 Welink 遠程協作平臺註冊企業和用戶指激增,為了承接激增的巨大流量,華為 Welink 基於 Kubernetes + Istio 基礎設施提供的彈性擴容、細粒度灰度發布特性,解決了高效擴容、特性快速上線、複雜應用管理等問題,維持了系統的穩定。張超盟老師會在 9 月 11 日深圳 ArchSummit 架構師峰會上介紹 Istio 服務網格在該大規模遠程協作平臺上實際應用案例。目前大會 8 折優惠報名,限時立減 1760 元!由於疫情原因,大會時間會有所調整,詳情可諮詢大會票務經理灰灰:15600537884(同微信)
InfoQ 讀者交流群上線啦!各位小夥伴可以掃描下方二維碼,添加 InfoQ 小助手,回復關鍵字「進群」申請入群。大家可以和 InfoQ 讀者一起暢所欲言,和編輯們零距離接觸,超值的技術禮包等你領取,還有超值活動等你參加,快來加入我們吧!
點個在看少個 bug