【最強上古程式語言】COBOL 強在哪,為何可以活 60 年又在疫情底下「復活」? | TechOrange 科技報橘
Search
Close this search box.

【最強上古程式語言】COBOL 強在哪,為何可以活 60 年又在疫情底下「復活」?

COBOL,程式語言

【為什麼我們要挑選這篇文章】新冠疫情讓 60 年前的程式語言「COBOL」重出江湖,GitHub 上的相關課程也衝上了熱門排行榜。一個程式語言能活 60 年不被打敗,當中一定有它無可取代的優勢,一起來了解 COBOL!(責任編輯:郭家宏)

先想像這樣一個畫面,60 年後,如今最熱的程式語言 Python 會是怎樣一幅景象?

被徹底淘汰?屆時今天這批 Python 熟練工已經徹底退休,那麼目前被 Python 編寫的這些基礎設施靠誰維護呢?

疫情期間,一門上古程式語言 COBOL 就面臨這樣的「復活」問題。疫情導致美國申請失業救濟人數激增,各州政府伺服器面臨崩潰,其中不少州的主機系統是基於 COBOL 建立起來的,而在過去幾年甚至幾十年的時間裡,這些系統都沒有更新過。

4 月 4 日,新澤西州州長 Phil Murphy 在記者會上明確表示急需 COBOL 工程師。

從四月初美國新澤西州都開始重聘 COBOL 人才,大批工程師開始重新學習 COBOL,相關學習課程登頂 GitHub 熱榜,這門壽命超過 60 年的上古語言忽然重回大眾視線。

TO 推薦閱讀:【coding 抗疫】美國政府急需會 COBOL 的工程師,退休工程師投身抗疫之戰

時隔一個月,作為一門「過時」的語言,COBOL 的熱度雖然逐漸散去,但是正如網友指出,和所有的程式語言一樣,COBOL 現在有兩條路可選,要麼被優化,要麼接受被逐漸取代的命運。

當一門語言站在這樣的分叉口,如何權衡抉擇下的個中利弊?COBOL 的現在是否也是其他語言終究會面臨的未來?

懷著這樣的關切,文摘菌(本文作者)特意聯繫到了登頂 GitHub 的 COBOL 學習項目的開發者之一 John Mertic,並跟他聊了聊這個問題。

John Mertic 目前是 Linux 基金會專案管理主任,從 2015 年加入 Linux 基金會開始,他就一直致力於發掘優秀的程式人才,其中就包括 COBOL。這次他聯合多位社區開發者共同編寫了 COBOL 學習課程,目前這門課程已經指導了一大批自學成才的年輕工程師,對解決美國 COBOL 系統問題起到了相當大的推動作用。

站在專業 COBOL 工程師的角度,John 指出,對於 COBOL 人才來說,他們始終充滿了活力和競爭力,公眾對他們的關注永遠不會顯得太遲,同樣,對於企業,能夠確保人才與業務直接相連將是確保業務持續發展的關鍵。

談到 COBOL 語言本身,John 也表現得相當樂觀,在他看來,一門語言一旦出現,其生命力就會一直綿延下去,更何況,如今人們對寫成是熱情不減,這也是十分重要的前提和基礎。

TO 推薦閱讀:【祖先級 coding 工具回歸】IBM 提供免費 COBOL 培訓課程,拯救美國瀕臨崩潰的失業保險金系統

在許多人眼中,COBOL 工程師是「高大上」的代名詞

COBOL 重新火起來之前,在不少人眼中,COBOL 工程師可以說是「高大上」的代名詞了,因為他們出沒的往往是銀行、保險公司,但從事相關行業的 COBOL 工程師表示,事實上他們只能在這些領域進行選擇。

例如知乎網友 @睿波斯 分享了他作為 COBOL 工程師的工作經驗:

從事 cobol 對日外包一年。

說點我知道的,零基礎培訓兩個月就可以跟著老 pg 做些常規的項目了,工作內容不是很難,繁瑣的是不同的 se 對提交的工作的形式(包括程序的編寫習慣,文檔的內容詳細程度),會讓你有種「我的工作很多時候不是編程,而是在滿足不同的 se 的一些不必要的要求」(當然,一些比較厲害的 se 不算,他們對整個項目有清晰的認識,因此知道殊途同歸這個道理)。

工作時間,號稱「彈性工作制」,比較自由,福利待遇一般,初期還好,在同學中屬於中等偏上的,後期的話,漲幅比較固定,知道自己最壞、最好能混成啥樣——壞不到哪去,也好不到哪去。可能跟地域和公司區別吧。

說點自己的感受,波瀾不驚,整個公司的氣氛是懶洋洋的,大家開玩笑說「適合養老」。當然也有的組幹勁十足,忙忙碌碌。可是工資差不多,這也就有了基層 pg 的不定期調動,組裡扛把子的基本不動。想要變成扛把子的,也不是很難,得用心,簡單粗暴的說——根正(所謂的期生),有點能力(當然越多越好),還有時間。

來源:知乎上有没有cobol程序员介绍一下相关从业情况?

如今 COBOL 工程師以肉眼可見的速度在減少,COBOL 學習資料基本靠企業內部分發,系統本身也逐漸落後於時代。大多數銀行也曾萌生過換掉 COBOL 系統的想法,但在業務支持方面,COBOL 的表現還是要遠勝於 JAVA、C 或者 C++。

對於 COBOL 憂喜參半的現狀,John Mertic 表現得相當樂觀,他說道,不管是哪一門程式語言,COBOL 也好,Java 也好,還 是Ruby、PHP,精通程式語言的頂尖人才一直都是行業裡的當紅炸子雞,這是恆定不變的。

事實上,許多基於 COBOL 建構的系統也都處於任務關鍵或重要的生產部署中,擁有支持和發展這些系統的人才也十分關鍵,因此,任何能夠有助於確保人才與需求直接相連的事都會是一件好事。

John 表示,現在大家對 COBOL 的關注是一時的,在媒體報導影響下,不少公司習慣性地認為「難以找到 COBOL 人才」,但其實一直以來,「招募 COBOL 工程師」相關話題在社區內一直很受關注,不少公司也始終在招募 COBOL 人才。

COBOL 優勢:程式碼簡潔易讀,新手可快速掌握

當然,這和 COBOL 本身的優點是分不開的,除了業務支持外,系統的簡潔性、程式碼的可讀性、可靠性,以及處理大量數據的能力,這些都使 COBOL 得以在商業環境中脫穎而出。

John 表示,與最近學習過 COBOL 的人或教授 COBOL 的人交談後發現,前兩點往往會讓學習者認為學習 COBOL 是一個很快很容易掌握的過程。

他指出,COBOL 肯定是令人生畏的(daunting),它的簡單性和可讀性使得學習曲線可以很短,這正是他們推出 COBOL 程式課程專案的原因和優勢所在,也正是因為較短的學習曲線,疫情時代的在線學習可以獲得更大的成功。

截止到目前,John 團隊發佈的 COBOL 在線學習項目在 GitHub 上的標星已經有了 1.4k。

GitHub 傳送門

同時,在 medium 上,一位叫 Jeremy Morgan 的版主分享了參加 COBOL 課程後的心得,在文中他更是明確地指出,COBOL 的不足在於知道它的人太少,並非語言本身的結構問題。

Jeremy 也在文章中寫道,深入學習後才知道,COBOL 之所以名聲不佳,很大程度是由於年代問題和「千年蟲」(Y2K)問題,雖然 COBOL 也存在缺點,但也無法否認其穩定性,也沒有人能夠質疑它運行數十年的系統持久性。

文章中,Jeremy 還總結了 COBOL 與其他現代語言的 7 大不同之處:

▌大型機。想認真開發 COBOL,大型機是不可少的,網上雖然能找到一些模擬器,比如 GnuCOBOL,但真實數據存在於大型機上,需要訪問才能進行真正的 COBOL 開發。

▌程式可讀性。任何東西都具備可讀性,程式碼用大寫字母表達,因此很醒目,申明被稱為「語句」,以句號進行標記,而句號很小,很難找到忘記添加的位置。

▌嚴格的語法。COBOL 以嚴格的語法著稱,每一行的開始和結尾的空格,以及每個空格和字元都很重要,這需要工程師們訓練出鋭利的眼神。

▌強制約束。COBOL 存在現代語言中不存在的空間約束,並追求向後兼容,COBOL 的程式碼每一行始終是 80 個字元的,報表寬度是 132 個字元,因為它基於打孔卡和老式打孔打印機。

▌內在的資源節約性。可以看到設計師如何圍繞節約資源來設計語言,記憶體、硬碟空間和 CPU 週期稀缺,所以要明智地進行使用,現代開發人員很容易忘記這點。

▌必須做到明確。在 COBOL 中沒有太多「鬆散的」編程,這也是不被允許的,每件事情都要有意義,看似很無情,但也是個好事。

▌作業。COBOL 是圍繞「作業」展開建模的,這些程式不像許多應用程式那樣進行實時交互,而是被設計來定時執行,並且程式碼是從上到下依次運行,這意味著先讀入數據,然後處理數據,最後吐出結果。

TO 推薦閱讀:【上課、拿認證費用全免】線上教學平台 Coursera 釋出 3,800 堂免費課程幫失業者紓困

我們應該優化 COBOL,還是捨棄它?

既然 COBOL 與現代語言的差異如此明顯,那麼它又是如何在語言「野蠻生長」的年代仍保持著如此頑強的生命力呢?

對此,Jeremy 表示,大概是因為 COBOL 的表現一直很優秀吧。雖然人們喜歡拿 COBOL 開玩笑,但別忘了,COBOL 可是一門追求可靠性的語言,當你給它投餵大量的數據,它也會很高興,畢竟 COBOL 經歷了處理百萬數據記錄的年代。

COBOL 如今主要應用於金融和政府機構並不是沒有道理的,因為這些機構有時間和金錢成本去構建 COBOL 系統,隨著系統不斷發展壯大,就能支持其在數十年後依然保持有效運轉,就像我們現在看到的一樣。可以說,在性能和向後兼容性上,COBOL 要領先其他語言太多。

因此,對於 COBOL,如果它本身沒有問題,千萬不要動手修理,因為 COBOL 最大的弱點在於知道它的人數量很少,而不是語言本身的結構問題。

一門語言是否終將被時代淘汰,John 認為,「一種語言一旦出現,它的生命就會無限期地延續下去。」

近年來,公眾對於寫成是越來越有興趣,這在很大程度上是基於人才的可用性、系統的易用性,以及程式語言解決影響開發者和企業面臨的問題的能力和易用性。

如果我們考慮直接丟棄 COBOL,轉而設計一門全新的語言,那麼除了理解如何分析詞法外,最大的挑戰在於確定這門語言要解決什麼問題,以及如何設計出最好的結構和語法,這和設計應用程式或產品是一個道理。

但萬事都不是絶對的,這一切還得要取決於現有語言生態系統的過渡難度。

John 認為 PHP 在這方面做得很好,它成功地解決了很多問題,同時也保持了向後兼容和簡潔性,但是一旦當某一環節出現問題,或者說其與語言設計原則相悖時,新的語言就會出現,這時的挑戰就是從基礎建立全新的語言生態系統。

COBOL 的強項是處理大規模數據,那它是如何運作的?

說了這麼多,如果對 COBOL 的工作原理沒有足夠的了解,似乎也只是「紙上談兵」。接下來,我們就來看看在參加 COBOL 課程後,Jeremy 眼中的 COBOL 是怎樣的。

即使作為一名資深工程師,當開始深入研究 COBOL 時,也會聽到許多不熟悉的術語和縮寫,但這種情況是非技術人員在嘗試理解新技術時也一定會遇到的。

對此 Jeremy 感嘆道,「這令人大開眼界,竟然存在一個如此廣闊的 COBOL 世界。」

在他看來,COBOL 程式是一種文本,它分為四個主要部分:

▌標識部:提供標識資訊,比如工程師姓名和編譯日期,現在在註釋和包文件中看到類似的東西。

▌環境部:它會告訴我們程式建構在什麼樣的系統上、使用什麼樣的編譯器,以及其他相關資訊,它不是聲明性的,但能夠給工程師提供構建它的運行環境的總體思路。

▌數據部:用於定義文件域,什麼類型數據能夠輸入?如何定義?可以是內部域(諸如累加器、標誌和計數器),也可以是外部域(諸如傳遞給程式的參數);

▌過程部:控制程式的運行,示例、方法、計算等等程式的核心要素都在這裡,這是 COBOL 程式中最大的部分。

這樣的語言架構非常好,在幾乎所有的現代語言中都能看到它的影子:輸入文本,然後被電腦編譯成可用執行的文本。

在使用上,COBOL 能夠讀取文件、處理數據,生成報表或是存儲新的數據。因此 COBOL 主要適合的地方就在於處理大規模的交易數據,可以試想 500 萬筆交易的數據量處理。因此,COBOL 能在金融和管理領域「開花結果」也就不足為怪了。

調查顯示,全球共有 23,943 家公司至今仍在使用 COBOL,Jeremy 也透露道,他工作過的公司有一半以上多多少少也都在某個地方用到過 COBOL,可以說,COBOL 無處不在,每天都在靜靜地處理日常交易。

對於這樣一門默默無聞的語言,它的現狀已經足以引起我們的擔憂,而 COBOL 的未來又該走向何處?

或許,我們正在見證歷史。

(本文經合作夥伴 大數據文摘 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為〈COBOL课程登顶GitHub后,我们找到了这门上古语言“传承人”:过时语言值得拯救吗〉。首圖來源:大數據文摘