打開網(wǎng)易新聞 查看精彩圖片

整理 | 蘇宓

出品 | CSDN(ID:CSDNnews)

據(jù)外媒 《連線》最新報(bào)道,馬斯克領(lǐng)導(dǎo)的美國(guó)政府效率部(DOGE)當(dāng)前正在展開新一輪的技術(shù)革新,其計(jì)劃是升級(jí)美國(guó)社會(huì)保障局(SSA)的核心支付系統(tǒng),將原本用 COBOL 編寫的舊代碼遷移到另一種更為現(xiàn)代的編程語言如 Java 上, 并希 望在幾個(gè)月內(nèi)完成。

打開網(wǎng)易新聞 查看精彩圖片

這一消息引發(fā)了技術(shù)圈的熱議。要知道,作為一門“上古”編程語言,COBOL 雖然并非不可替代,但是其在銀行、保險(xiǎn)、政府機(jī)構(gòu)等大型業(yè)務(wù)系統(tǒng)中依然廣泛使用。如今 DOGE 計(jì)劃在短短幾個(gè)月內(nèi)完成遷移遺留代碼,這也讓眾人好奇它究竟如何能完成?莫不是想要靠著 Grok 這樣的 AI 大模型?

打開網(wǎng)易新聞 查看精彩圖片
打開網(wǎng)易新聞 查看精彩圖片

超 6000 萬行代碼,外媒:DOGE 計(jì)劃幾個(gè)月內(nèi)遷移完成

眾所周知,COBOL誕生于 20 世紀(jì) 50 年代末,它的起源可以追溯到美國(guó)國(guó)防部主導(dǎo)的一個(gè)項(xiàng)目,旨在開發(fā)一種通用的、高度可讀的編程語言,以用于政府和企業(yè)的數(shù)據(jù)處理任務(wù)。彼時(shí),隨著美國(guó)國(guó)防部和大型企業(yè)的推廣,COBOL 迅速成為商業(yè)計(jì)算的標(biāo)準(zhǔn)語言之一。

時(shí)至今日,這門語言依然活躍在上述提及的多個(gè)應(yīng)用中,甚至在本月它還闖進(jìn)了 TIOBE TOP 20 之列,位居第 20 位。

打開網(wǎng)易新聞 查看精彩圖片

《連線》報(bào)道稱,截至 2016 年,SSA 的軟件系統(tǒng)中包含超過 6000 萬行 COBOL 代碼,并且還有數(shù)百萬行其他遺留編程語言編寫的代碼。

此外,SSA 軟件的“核心邏輯”部分也是用 COBOL 編寫的,這部分代碼負(fù)責(zé)頒發(fā)社會(huì)保障號(hào)碼、管理支付、計(jì)算受益人應(yīng)獲得的總金額等關(guān)鍵任務(wù)。

對(duì)于政府機(jī)構(gòu)使用的系統(tǒng)及軟件,其實(shí)鮮少會(huì)升級(jí),以防影響日常業(yè)務(wù)處理,SSA 內(nèi)部亦是如此。回看SSA 代碼庫上一次重大迭代升級(jí)還要追溯到 20 世紀(jì) 80 年代,當(dāng)時(shí)該機(jī)構(gòu)引入了一個(gè)名為 MADAM 的數(shù)據(jù)庫。該數(shù)據(jù)庫不僅采用 COBOL 編寫,還使用了匯編語言。

多年來,隨著現(xiàn)代編程語言的崛起,COBOL 程序員日漸稀缺,且 COBOL 程序多為單體架構(gòu),難以適應(yīng)云計(jì)算、微服務(wù)、API 等現(xiàn)代技術(shù)趨勢(shì),不少人也想過盡早替換掉 COBOL 這樣的過時(shí)語言, 然而,實(shí)際實(shí)施的難度極高,畢竟如今 已有的 COBOL 系統(tǒng)運(yùn)行數(shù)十年,代碼龐大、文檔缺失,原開發(fā)人員大多已退休,導(dǎo)致維護(hù)和升級(jí)極具挑戰(zhàn)性。此外, 不少 COBOL 應(yīng)用依賴專有數(shù)據(jù)庫。

一位曾在 SSA 首席信息官辦公室工作的前高級(jí)技術(shù)專家表示,即便是對(duì)這些代碼的微小調(diào)整,也可能引發(fā)系統(tǒng)級(jí)的連鎖故障。

話雖如此,2017 年,SSA 還是做了一份 97 頁的 PDF 文檔(https://www.ssa.gov/open/materials/IT-Modernization-Plan.pdf),想要將內(nèi)部系統(tǒng)進(jìn)行現(xiàn)代 IT 升級(jí)改造,其中就提到過要將用數(shù)億美元的資金來更換其核心系統(tǒng),包括一些 COBOL 舊代碼的改造。彼時(shí)該機(jī)構(gòu)預(yù)測(cè),這些系統(tǒng)的現(xiàn)代化大約需要五年時(shí)間。只不過,由于 2020 年“黑天鵝”事件的影響,該機(jī)構(gòu)放棄了這項(xiàng)工作,轉(zhuǎn)而專注于更多面向公眾的項(xiàng)目。

打開網(wǎng)易新聞 查看精彩圖片

可是隨著 DOGE 對(duì) SSA 調(diào)查的深入,他們也發(fā)現(xiàn) COBOL 舊代碼帶來的遺留問題似乎到了不得不解決的時(shí)刻。

此前,我們。其中,馬斯克自去年 11 月接手 DOGE 部門后,大刀闊斧地改革政府機(jī)構(gòu),目標(biāo)是削減開支。而在一次檢查中,DOGE 團(tuán)隊(duì)竟然發(fā)現(xiàn)社會(huì)保障系統(tǒng)里居然還有“150 歲”的人在領(lǐng)福利。馬斯克調(diào)侃道:“你認(rèn)識(shí) 150 歲的人嗎?反正我沒見過。如果他們真活著,早就該進(jìn)吉尼斯世界紀(jì)錄了?!?/p>

然而,技術(shù)專家很快指出,這可能并不是什么驚天騙局,而是 COBOL 這門“上古編程語言”惹的禍。不少技術(shù)人認(rèn)為,早期 COBOL 版本在處理缺失的出生日期時(shí),默認(rèn)會(huì)填上 1875 年 5 月 20 日,并用這個(gè)日期作為計(jì)算基準(zhǔn)。換句話說,如果某人的出生日期缺失,系統(tǒng)就會(huì)自動(dòng)認(rèn)定他“出生于 1875 年”,也就是“150 歲”。

由此被 DOGE 誤以為“150 歲的人還在領(lǐng)取保障金”。而之所以會(huì)產(chǎn)生這場(chǎng)鬧劇,很多人將其歸咎于 DOGE 年輕的技術(shù)團(tuán)隊(duì)對(duì) COBOL 語言不夠了解導(dǎo)致?;蛟S也是眼看著 COBOL 舊代碼已經(jīng)成了政府效率的絆腳石,DOGE 這才有了“急著換掉社保系統(tǒng)”的心思。

打開網(wǎng)易新聞 查看精彩圖片

借助 AI 來完成?

據(jù)《連線》透露,DOGE 已經(jīng)開始組建團(tuán)隊(duì),該項(xiàng)目由埃隆·馬斯克的親信史蒂夫·戴維斯(Steve Davis)組織。他曾是 SpaceX 的早期員工,近期被《紐約時(shí)報(bào)》稱其為 DOGE 的實(shí)際負(fù)責(zé)人。目前,據(jù)說至少有 10 名 DOGE 員工在 SSA 工作。

不過,具體的遷移計(jì)劃何時(shí)啟動(dòng)還不清楚。據(jù)報(bào)道,SSA 最近給員工發(fā)了一份內(nèi)部文件,列出了 5 月前的重點(diǎn)任務(wù),但里面并沒有提到這次遷移,而是更關(guān)注削減“非必要合同”,以及引入 AI 來優(yōu)化行政和技術(shù)文檔處理等。

有消息人士透露,DOGE 的首要任務(wù)是改進(jìn)社保福利的在線身份驗(yàn)證系統(tǒng)。SSA 內(nèi)部人士預(yù)計(jì),一旦他們完成身份核查,并把分散的政府?dāng)?shù)據(jù)庫整合起來,遷移項(xiàng)目就會(huì)正式啟動(dòng)。

事實(shí)上,項(xiàng)目啟動(dòng)倒也沒什么,真正讓人擔(dān)心的是 DOGE 計(jì)劃在幾個(gè)月時(shí)間內(nèi)完成項(xiàng)目遷移。

SSA 前技術(shù)專家指出,僅 DOGE 計(jì)劃的 COBOL 重寫項(xiàng)目的測(cè)試階段就需要數(shù)年時(shí)間。而如果在幾個(gè)月內(nèi)完成整個(gè)遷移,DOGE 的開發(fā)人員可能會(huì)跳過關(guān)鍵的質(zhì)量保證環(huán)節(jié),從而增加技術(shù)風(fēng)險(xiǎn)。

也有技術(shù)專家警告說,即使在最理想的情況下,完成如此大規(guī)模的系統(tǒng)遷移也極具挑戰(zhàn)。而現(xiàn)在匆忙推進(jìn),可能會(huì)導(dǎo)致超過 6500 萬人的社保福利發(fā)放出現(xiàn)問題。

“一旦系統(tǒng)出錯(cuò),不僅僅是有人收到的錢不對(duì),更可怕的是,可能有人根本收不到款項(xiàng),而我們甚至意識(shí)不到?!币晃?SSA 技術(shù)專家說道。

《連線》報(bào)道稱,知情人士透露,如果想在幾個(gè)月內(nèi)完成 COBOL 代碼的遷移,DOGE 可能要依賴生成式 AI,把數(shù)百萬行代碼自動(dòng)翻譯成現(xiàn)代語言。一位 SSA 技術(shù)專家表示:“DOGE 的想法是,如果他們能在幾個(gè)月內(nèi)清理掉所有 COBOL 代碼,那就說明他們是對(duì)的,而我們這些沒敢‘亂搞’的人就是廢物。

“SSA 的 IT 系統(tǒng)就像是用鐵絲和膠帶拼起來的。”一位曾在 SSA 首席信息官辦公室工作的前技術(shù)專家告訴《連線》,“領(lǐng)導(dǎo)層得明白,他們面對(duì)的是一座‘紙牌屋’或者一局‘疊疊樂’。如果他們開始隨便抽掉某些關(guān)鍵部分——而他們已經(jīng)打算這么做了——整個(gè)系統(tǒng)可能會(huì)崩盤?!?/p>

打開網(wǎng)易新聞 查看精彩圖片

重寫 COBOL 代碼難度如何,多位開發(fā)者現(xiàn)身說法

這樣的擔(dān)憂并非空穴來風(fēng),不少技術(shù)專家在聽聞此消息后紛紛現(xiàn)身分享自己編寫和維護(hù) COBOL 代碼的經(jīng)歷,其中 @Skytooeen 表示:

我曾在多年前擔(dān)任項(xiàng)目經(jīng)理,為我的雇主——一家財(cái)富 50 強(qiáng)公司——負(fù)責(zé)一個(gè)遷移項(xiàng)目,目標(biāo)是擺脫我們的主機(jī)系統(tǒng)。當(dāng)時(shí)的 COBOL 代碼規(guī)模與這次的差不多。我可以告訴你,這絕對(duì)不可能在三個(gè)月內(nèi)完成,不管有沒有 AI。

從集中式系統(tǒng)遷移到分布式系統(tǒng),會(huì)遇到各種問題和復(fù)雜情況,比如競(jìng)態(tài)條件(race conditions)、批處理與流處理的差異、完全不同的應(yīng)用間通信方式等。而 COBOL 本身也是一門難搞的語言,里面有許多其他語言沒有的“坑”。

最理想的情況是,他們?cè)趪L試折騰新系統(tǒng)的同時(shí),仍然保持舊系統(tǒng)的正常運(yùn)行。最糟糕的情況則是,他們?cè)跊]有徹底測(cè)試新系統(tǒng)的情況下,就開始關(guān)閉舊系統(tǒng)的部分(甚至整個(gè)系統(tǒng)),然后直接“在生產(chǎn)環(huán)境中測(cè)試”??紤]到馬斯克的風(fēng)格,我實(shí)在不抱太大希望。

另一位開發(fā)者 walnut close 現(xiàn)身評(píng)論道:

我在企業(yè)平臺(tái)遷移方面有 30 年的經(jīng)驗(yàn),既從系統(tǒng)供應(yīng)商的角度參與過,也曾作為企業(yè) IT 架構(gòu)師和高管負(fù)責(zé)相關(guān)工作。我可以毫不夸張地說,從服務(wù)交付、一致性、安全性和業(yè)務(wù)連續(xù)性的角度來看,這次遷移注定會(huì)失敗。

系統(tǒng)和編程語言的選擇確實(shí)重要,但它們本身并不是決定成敗的關(guān)鍵,甚至通常都不是最主要的因素。架構(gòu)設(shè)計(jì)、項(xiàng)目管理、測(cè)試、范圍和質(zhì)量控制、過渡與上線規(guī)劃……這些才是影響成敗的核心。而現(xiàn)在這些家伙談?wù)摰哪切┘夹g(shù)問題,遠(yuǎn)遠(yuǎn)沒有這些因素重要。選錯(cuò)技術(shù)確實(shí)會(huì)毀掉一個(gè)項(xiàng)目,但光是選對(duì)技術(shù),絕對(duì)無法保證項(xiàng)目成功。

還有——這一點(diǎn)我必須強(qiáng)調(diào)——即使他們?cè)诩夹g(shù)、架構(gòu)和項(xiàng)目管理上做得滴水不漏,也不會(huì)因此減少欺詐和錯(cuò)誤,除非他們真正理解欺詐和錯(cuò)誤的來源,并在項(xiàng)目需求中明確設(shè)計(jì)出檢測(cè)和糾正機(jī)制。COBOL 既不是欺詐的根源,也不會(huì)天然導(dǎo)致系統(tǒng)性錯(cuò)誤。而 DOGE 至今沒有拿出任何有說服力的欺詐證據(jù),甚至連系統(tǒng)性錯(cuò)誤的實(shí)際問題都幾乎沒找到,所以在這方面,他們注定也要失敗。

這讓我想起過去那些由大型咨詢公司主導(dǎo)的企業(yè)級(jí)系統(tǒng)遷移災(zāi)難——只是這次的規(guī)模被無限放大了。唯一的區(qū)別是,這次涉及的金額高達(dá)數(shù)萬億美元,影響范圍遍及整個(gè)國(guó)家,而負(fù)責(zé)這個(gè)項(xiàng)目的“專家”對(duì)他們要替換的系統(tǒng)幾乎一無所知,這種錯(cuò)配的程度,比以往任何一次大型企業(yè)咨詢?yōu)碾y都要嚴(yán)重幾個(gè)數(shù)量級(jí)。

打開網(wǎng)易新聞 查看精彩圖片

不僅如此,開發(fā)者 Lemon640 此前在深入研究 COBOL 后嘗試升級(jí)自家的舊項(xiàng)目,但現(xiàn)實(shí)卻給了他當(dāng)頭一棒。他直言:“我遇到了難以逾越的障礙?!?以下是他列舉的一些嚴(yán)重問題:

1. 真實(shí) COBOL 代碼的復(fù)雜性遠(yuǎn)超預(yù)期

Lemon640 稱,自己最初接觸的 COBOL 代碼僅限于入門級(jí)教材中的“玩具”版本,而實(shí)際應(yīng)用中的 COBOL 代碼與任何標(biāo)準(zhǔn)(包括 1985/2002 版本)都存在巨大差異。這些差異并非源于對(duì)新標(biāo)準(zhǔn)的遵循或現(xiàn)代編程實(shí)踐的引入,而是由于長(zhǎng)期積累的各種自定義擴(kuò)展。統(tǒng)一不同版本的 COBOL 代碼到一個(gè)通用轉(zhuǎn)換目標(biāo)語言,幾乎是不可能完成的任務(wù),尤其是當(dāng)關(guān)鍵字、語法結(jié)構(gòu)(如 PICTURE 句法)被廣泛修改,甚至引入了全新的關(guān)鍵字和數(shù)據(jù)類型時(shí)。

2. COBOL 生態(tài)系統(tǒng)鼓勵(lì)通過修改語言本身來擴(kuò)展功能

與現(xiàn)代編程語言主要依賴庫或模塊來擴(kuò)展能力不同,COBOL 生態(tài)更傾向于直接修改語言,引入新的動(dòng)詞或 PICTURE 類型。這種做法導(dǎo)致在構(gòu)建兼容的目標(biāo)語言時(shí),必須考慮如何處理大量的自定義擴(kuò)展,而相比之下,現(xiàn)代語言通常通過庫、函數(shù)和內(nèi)置數(shù)據(jù)類型實(shí)現(xiàn)類似功能,以確保更好的可維護(hù)性。

3. 函數(shù)和子程序調(diào)用機(jī)制極其混亂

  • 在 COBOL 中,變量是按值傳遞或按引用傳遞并非由函數(shù)定義決定,而是由調(diào)用位置決定。這意味著,一個(gè)接受 4 個(gè)參數(shù)的函數(shù),實(shí)際上可能有 16 種不同的調(diào)用方式。

  • 函數(shù)調(diào)用時(shí)沒有類型檢查,甚至連參數(shù)大小都不驗(yàn)證。這就好比 JavaScript 或 PHP 的弱類型機(jī)制,但實(shí)際上更類似于 FORTH——調(diào)用者只是將數(shù)據(jù)填充到一段原始內(nèi)存中,而被調(diào)用的函數(shù)則隨意解釋這段內(nèi)存內(nèi)容。如果調(diào)用者和被調(diào)用者的理解不一致,程序就會(huì)崩潰。

  • 默認(rèn)情況下,局部變量是持久化的,除非手動(dòng)使用 CLEAR 語句清除狀態(tài),這意味著所有函數(shù)默認(rèn)都是有狀態(tài)的,并且數(shù)據(jù)全局可見。

4. 程序的控制流設(shè)計(jì)極其落后

  • GOTO 仍然廣泛存在,令人堪憂。

  • PERFORM THRU 語句的存在,使得程序邏輯混亂不堪。

  • ALTER 語句允許動(dòng)態(tài)修改代碼邏輯,導(dǎo)致代碼的可維護(hù)性極差。

5. COBOL 語言的動(dòng)詞設(shè)計(jì)極為復(fù)雜

  • COBOL 的核心動(dòng)詞(如 UNSTRING)的行為可能根據(jù)使用方式的不同而發(fā)生變化,且返回結(jié)果會(huì)直接修改變量,而不是通過返回值的方式處理。

  • 由于 COBOL 語言本身缺乏良好的函數(shù)調(diào)用機(jī)制,因此大量復(fù)雜功能被塞進(jìn)了動(dòng)詞系統(tǒng)中,導(dǎo)致解析和轉(zhuǎn)換難度陡增。

6. COBOL 的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)混亂

  • 盡管 PICTURE 句法的基本設(shè)計(jì)勉強(qiáng)可以接受(尤其是對(duì)十進(jìn)制數(shù)的支持),但字符串處理方式已完全過時(shí)。

  • 由于 COBOL 早期是基于字符串存儲(chǔ)所有數(shù)據(jù)的,其復(fù)合類型(Group 數(shù)據(jù)項(xiàng))非常原始,遠(yuǎn)遠(yuǎn)無法與現(xiàn)代編程語言的結(jié)構(gòu)體或?qū)ο笙到y(tǒng)相比。

正因此,Lemon640 認(rèn)為,「這一切仍然是一個(gè)巨大的技術(shù)債務(wù)問題——COBOL 代碼本身的問題只是表象,真正最大的技術(shù)債務(wù),是那些深埋在 COBOL 代碼中的業(yè)務(wù)邏輯和知識(shí)體系,它們?nèi)匀浑y以訪問、難以理解、難以變更?!?/p>

最后,盡管不少人推薦 IBM 早前推出的watsonx Code Assistant for Z,這一生成式 AI 工具能夠?qū)?COBOL 代碼重構(gòu)為 Java,以加速 COBOL 應(yīng)用現(xiàn)代化,但它仍只是整體解決方案的一部分。

同時(shí),也有人設(shè)想馬斯克可能會(huì)對(duì) AI 說:“Grok,我需要你非常努力,為我編寫一個(gè)新的 SSA 系統(tǒng)。” 然而,現(xiàn)實(shí)是這樣的任務(wù)遠(yuǎn)非幾個(gè)月內(nèi)能夠完成,重寫代碼也絕非“發(fā)射火箭”那么快。

打開網(wǎng)易新聞 查看精彩圖片

真正的現(xiàn)代化進(jìn)程,仍依賴于技術(shù)積累、系統(tǒng)設(shè)計(jì)與長(zhǎng)期優(yōu)化的協(xié)同推進(jìn)。

參考:

https://www.reddit.com/r/programminghorror/comments/1jlwbyj/doge_moving_ssa_from_cobol_to_java/

https://www.reddit.com/r/cobol/comments/10kqonw/i_tried_upgrading_cobol_heres_what_happened/

https://www.wired.com/story/doge-rebuild-social-security-administration-cobol-benefits/

https://arstechnica.com/tech-policy/2025/03/what-could-possibly-go-wrong-doge-to-rapidly-rebuild-social-security-codebase/

4 月 2 日 20:00,CSDN《萬有引力》欄目特別邀請(qǐng)到OpenManus 項(xiàng)目一作、MetaGPT 開源核心貢獻(xiàn)者梁新兵,DeepWisdom 算法研究員、OpenManus 核心作者向勁宇相聚 CSDN 視頻號(hào)直播間,在CSDN &《新程序員》執(zhí)行總編、《萬有引力》主理人唐小引主持下,一起聊聊 00 后程序員的故事,以及 OpenManus 背后的秘密!