我們的世界,運(yùn)行在無(wú)人能懂的“屎山代碼”之上!
沒(méi)有一種編程語(yǔ)言像我這么尷尬。
60多年了,我依然支撐著43%的銀行系統(tǒng),處理著每天3萬(wàn)億美元的交易!
在我的發(fā)源地美國(guó),由于信息系統(tǒng)開(kāi)發(fā)得更早,我更是強(qiáng)勢(shì),95%的ATM和80%的銀行都在用我。
在這個(gè)世界上,我依然有2200億行代碼在運(yùn)行!
這讓C++,Java這些后輩看得目瞪口呆。
沒(méi)錯(cuò),我就是COBOL。
先讓大家看看我的樣子吧,這是個(gè)簡(jiǎn)單的Hello World
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
AUTHOR. Liu Xin.
DATE-WRITTEN. 2022-12-15.
PROCEDURE DIVISION.
DISPLAY "Hello, world".
END PROGRAM HELLO.
太簡(jiǎn)單了,我就不解釋了。
這段代碼稍微復(fù)雜一點(diǎn),則用來(lái)計(jì)算小時(shí)工的工資,如果工作時(shí)間超過(guò)40小時(shí),工資是1.5倍。
COMPUTE-GROSS-PAY.
IF HOURS-WORKED > 40 THEN
MULTIPLY PAY-RATE BY 1.5 GIVING OVERTIME-RATE
MOVE 40 TO REGULAR-HOURS
SUBTRACT 40 FROM HOURS-WORKED GIVING OVERTIME-HOURS
MULTIPLY REGULAR-HOURS BY PAY-RATE GIVING REGULAR-PAY
MULTIPLY OVERTIME-HOURS BY OVERTIME-RATE
GIVING OVERTIME-PAY
ADD REGULAR-PAY TO OVERTIME-PAY GIVING GROSS-PAY
ELSE
MULTIPLY HOURS-WORKED BY PAY-RATE GIVING GROSS-PAY
END-IF
讀起來(lái)是不是特別像普通的英語(yǔ)?
這就是當(dāng)年美國(guó)國(guó)防部要求的,要“最大限度地使用簡(jiǎn)單英語(yǔ)”,“這樣更多的人可以使用它來(lái)向計(jì)算機(jī)描述問(wèn)題?!?/p>
我的語(yǔ)法中keyword有400多個(gè),相比C和Python等語(yǔ)言的幾十個(gè),有人說(shuō)這種語(yǔ)法太拖沓,繁瑣,受不了。
但也有人很喜歡,說(shuō)這是一種自解釋、自包含的文檔,只需要把代碼念出來(lái),就知道什么意思了。
我在處理“格式化數(shù)據(jù)”方面富有盛名,從文件中讀取格式化的數(shù)據(jù)記錄(如姓名、地址、社保號(hào)碼、電話號(hào)碼等),進(jìn)行處理(如計(jì)算工資),然后保存到文件中,這是我的拿手好戲,所以我出現(xiàn)在了很多銀行,保險(xiǎn)、政府等重要的商業(yè)應(yīng)用之中。
但悲催的是,能用我編程的程序員已經(jīng)退休,在家抱孫子,學(xué)校也不教COBOL。
COBOL程序員徹底斷檔了!
由于代碼時(shí)代久遠(yuǎn),又無(wú)人能懂,COBOL代碼經(jīng)常被稱(chēng)為屎山代碼。
疫情期間,美國(guó)失業(yè)補(bǔ)助系統(tǒng)用戶量暴增,僅僅新澤西州就有32萬(wàn)新用戶注冊(cè),系統(tǒng)不堪負(fù)荷,急需COBOL程序員維護(hù),但就是找不到人。
各地州長(zhǎng)在電視上反復(fù)呼吁,對(duì)外求援。
為了改變這種窘境,人們想了很多招數(shù)。
1. 讓退休的COBOL程序員發(fā)揮余熱。
美國(guó)的Bill Hinshaw爺爺已經(jīng)75歲,60年代開(kāi)始寫(xiě)代碼,精通COBOL編程,幾年前本來(lái)計(jì)劃退休,但是客戶不斷地向他求救,于是他成立了一個(gè)公司:COBOL Cowboys (COBOL 牛仔),專(zhuān)門(mén)為那些絕望的客戶提供幫助。
這家公司有20個(gè)兼職員工,公司最年輕的員工是50多歲。
這些有經(jīng)驗(yàn)的COBOL程序員可以修復(fù)系統(tǒng)故障,編寫(xiě)手冊(cè),磨合新舊系統(tǒng),時(shí)薪可達(dá)100美元。
對(duì)企業(yè)來(lái)講,成本似乎很高,但是和重寫(xiě)相比,還是九牛一毛。
2. 重寫(xiě)代碼
還有些銀行,下定決心用別的語(yǔ)言把COBOL系統(tǒng)重寫(xiě)。
2012年,澳大利亞聯(lián)邦銀行在埃森哲和SAP的幫助下,更換了其核心COBOL銀行平臺(tái)。
這項(xiàng)工作最終耗時(shí)五年,耗資超過(guò) 10 億澳元(7.499 億美元),期間也遇到了很多問(wèn)題,2015年支付系統(tǒng)發(fā)生故障,60萬(wàn)筆交易丟失。三個(gè)月后又發(fā)生了一次重大故障,導(dǎo)致客戶無(wú)法使用銀行卡。
2018年,英國(guó)TSB銀行從基于COBOL的系統(tǒng)遷移,連續(xù)幾天無(wú)法交易,遷移成本高達(dá)3.3億英鎊。
任何一個(gè)想把我干掉的高管看到這些數(shù)字,恐怕心里都會(huì)哆嗦一下吧。
用我寫(xiě)的系統(tǒng)是金融、政府和商業(yè)世界24/7 運(yùn)轉(zhuǎn)的重要支柱,遷移它們相當(dāng)于在空中把飛機(jī)的螺旋槳拆下,安裝噴氣式發(fā)動(dòng)機(jī),這條路恐怕是走不通啊。
3. 人工智能
看到那些銀行吃了癟,大佬IBM坐不住了。
畢竟,大部分的COBOL代碼都運(yùn)行在他家的大型機(jī)之上,給大家找一個(gè)出路是IBM不容推脫的責(zé)任。
今年,IBM想了一招,利用人工智能自動(dòng)地把COBOL轉(zhuǎn)換成Java。
這個(gè)叫做wastonx的輔助工具可以幫助程序員理解、重構(gòu)COBOL代碼,甚至轉(zhuǎn)換成Java代碼。
嗯,有點(diǎn)意思。
圖片
但我根本不相信,現(xiàn)在的人工智能真的有智能,能完全無(wú)誤地把我大COBOL代碼改成Java。
后來(lái),IBM也承認(rèn),這只是個(gè)編程助手而已,程序員仍然需要對(duì)AI轉(zhuǎn)換的代碼進(jìn)行調(diào)整和驗(yàn)證。
調(diào)整和驗(yàn)證?也就是說(shuō)它并不能保證完全的正確性,最多是一個(gè)能提高程序員生產(chǎn)力的工具而已。
我放心了。
想想也挺神奇的,人類(lèi)世界運(yùn)行在60年前的無(wú)人知曉的COBOL代碼之上!
隨著老一代COBOL程序員的逐漸老去,下一代COBOL程序員在哪里呢?