大數據

COBOL課程登頂GitHub後,我們找到了這門上古語言“傳承人”:過時語言值得拯救嗎

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

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

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

4月4日,新澤西州州長Phil Murphy在新聞發佈會上明確表示急需COBOL程序員。

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

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

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

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

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

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

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

成為一名COBOL程序員到底意味著什麼?

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

比如知乎網友@睿波斯分享了他作為COBOL程序員的工作經驗:
從事cobol對日外包一年。
說點我知道的,零基礎培訓兩個月就可以跟著老pg做些常規的項目了,工作內容不是很難,繁瑣的是不同的se對提交的工作的形式(包括程序的編寫習慣,文檔的內容詳細程度),會讓你有種“我的工作很多時候不是編程,而是在滿足不同的se的一些不必要的要求”(當然,一些比較厲害的se不算,他們對整個項目有清晰的認識,因此知道殊途同歸這個道理)。
工作時間,號稱“彈性工作制”,比較自由,福利待遇一般,初期還好,在同學中屬於中等偏上的,後期的話,漲幅比較固定,知道自己最壞、最好能混成啥樣——壞不到哪去,也好不到哪去。可能跟地域和公司區別吧。
說點自己的感受,波瀾不驚,整個公司的氣氛是懶洋洋的,大家開玩笑說“適合養老”。當然也有的組幹勁十足,忙忙碌碌。可是工資差不多,這也就有了基層pg的不定期調動,組裡扛把子的基本不動。想要變成扛把子的,也不是很難,得用心,簡單粗暴的說——根正(所謂的期生),有點能力(當然越多越好),還有時間。
https://www.zhihu.com/question/19747089/answer/57567186

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

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

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

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

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

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

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

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

GitHub鏈接:
https://github.com/openmainframeproject/cobol-programming-course

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

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

文章中,Jeremy還總結了COBOL與其他現代語言的7大不同之處:
大型機。想認真開發COBOL,大型機是不可少的,網上雖然能找到一些模擬器,比如GnuCOBOL,但真實數據存在於大型機上,需要訪問才能進行真正的COBOL開發;
程序可讀性。任何東西都具備可讀性,代碼用大寫字母表達,因此很醒目,申明被稱為“語句”,以句號進行標記,而句號很小,很難找到忘記添加的位置;
嚴格的語法。COBOL以嚴格的語法著稱,每一行的開始和結尾的空格,以及每個空格和字符都很重要,這需要程序員們訓練出銳利的眼神;
強制約束。COBOL存在現代語言中不存在的空間約束,並追求向後兼容,COBOL的代碼每一行始終是80個字符的,報表寬度是132個字符,因為它基於打孔卡和老式打孔打印機;
內在的資源節約性。可以看到設計師如何圍繞節約資源來設計語言,內存、硬盤空間和CPU週期稀缺,所以要明智地進行使用,現代開發人員很容易忘記這點;
必須做到明確。在COBOL中沒有太多“鬆散的”編程,這也是不被允許的,每件事情都要有意義,看似很無情,但也是個好事;
作業。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的未來又該走向何處?

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

Leave a Reply

Your email address will not be published. Required fields are marked *