Categories
程式開發

80歲都無法退休的COBOL程序員:他們非要扶我起來遷移老系統


上古編程語言COBOL火遍全球,但我建議你不要學。

COVID-19疫情的蔓延,讓美國10%的勞動力失業,人數達到了1700萬。但美國至少有12個州的失業救濟系統運行在已經有60年曆史、使用COBOL編程語言的大型機上。這迫使政府機構出手爭搶平均年齡已達60歲的COBOL程序員為他們解決各種系統故障。

不僅僅是政府機構,當下全球財富五百強企業的系統當中有90%都運行在COBOL基礎之上,這些系統構建於幾十年前,如今已經很難找到關於其設計思路的說明文檔,因此政府機構及企業只能依賴長期在職的程序員們回憶這些具體細節。這些系統的代碼編寫方式陳舊,沒有模塊化的概念,像“意大利麵條”一樣交織在一起,牽一發而動全身,極難維護。

現在很多COBOL職位的招聘要求擁有20年工作經驗,但開出的年薪卻只有35000美元。年輕人也不願意學這種複雜的過時語言,這就意味著這些已經60歲高齡的COBOL程序員至少還需要在未來一二十年裡繼續維護這些老系統。

80歲都無法退休的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.

蓬勃發展幾十年,如今卻無法遷移和升級

雖然用今天的眼光看,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仍沒能徹底走出這片陰影。

“真心不推薦你學習COBOL!”

大多數COBOL代碼都運行在大型機上,而這些計算設備出自IBM之手。多年以來,IBM公司一直在努力幫助客戶物色COBOL技術專家,並說服年輕人繼承這門“老手藝”。

就在上週,IBM方面宣布推出一項新的培訓課程,除了向初學者傳授COBOL知識之外,也幫助經驗豐富的專業人員進一步提升自身水平。 IBM公司副總裁Barry Baker表示,“事實上,某些關鍵系統一直沒能得到應有的關注。現在的年輕人有必要了解並掌握某些早期技術,這也足以支撐起理想的職業生涯。更重要的是,專業的傳承具有重大意義。”

80歲都無法退休的COBOL程序員:他們非要扶我起來遷移老系統 2

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美元來獲取相應報酬。

小結

維持現狀不可行,但全面升級似乎同樣不靠譜。無論如何,想要切實改善事態,唯一的方法就是尋找受控且謹慎的現代軟件與硬件遷移道路。

為了在實現這一目標的同時,不致引發業務中斷、數據丟失以及系統宕機,各類機構需要投入大量專業人才與金錢。而這,還僅僅是成功遷移的一半;另外一半則在於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