本文要點(diǎn)
- 大型機(jī)程序開(kāi)發(fā)人員不僅正在退休,而且正在過(guò)時(shí)。年輕一代的開(kāi)發(fā)人員對(duì)大型機(jī)職業(yè)生涯興趣索然。
- 大型機(jī)程序開(kāi)發(fā)人員曾被比成是公共汽車駕駛員,他們唯一的工作就是讓大量的數(shù)據(jù)持續(xù)移動(dòng)。
- 大型機(jī)并非老化了。如果與 Microsoft 和 Linux 在性能、擴(kuò)展性、安全和可靠性上做對(duì)比,大型機(jī)完勝。
- 代碼重構(gòu)為可復(fù)用模塊的過(guò)程中,應(yīng)使用測(cè)試,并采納敏捷實(shí)踐。大型機(jī)應(yīng)用的現(xiàn)代化并不能體現(xiàn)為月度財(cái)報(bào)中的投資回報(bào)率。
我們經(jīng)常使用 Uber、瀏覽 Pinterest、發(fā)送推文并更新 Facebook。我們每天都會(huì)聽(tīng)說(shuō)一些人快速成為百萬(wàn)富翁,看到億萬(wàn)富翁的數(shù)量在不斷增長(zhǎng),他們不斷地在我們現(xiàn)在的高科技世界中推出一些最新玩意。但是我們忽視了一點(diǎn),所有業(yè)務(wù)的近乎 70% 是在大型機(jī)上處理的。那些年輕網(wǎng)紅匆忙拼湊起來(lái)的玩意,充斥了我們所見(jiàn)所聞的世界。但事實(shí)上,我們所坐的椅子、所支付的賬單、所使用的健康醫(yī)療,都是由大型機(jī)所管理的數(shù)據(jù)提供的。的確,80% 以上的制造業(yè)、銀行業(yè)和健康醫(yī)療行業(yè)是運(yùn)行在大型機(jī)上的。
我們能聽(tīng)到大量關(guān)于新市場(chǎng)貨幣化的宣傳,但卻沒(méi)有認(rèn)識(shí)到大型機(jī)代碼的重要性。當(dāng)然,這里存在一些問(wèn)題……很多大型機(jī)開(kāi)發(fā)人員是接近或已經(jīng)過(guò)了退休年齡的爺爺級(jí)人物?,F(xiàn)實(shí)中更嚴(yán)酷的一面是,他們不僅正在退休,而且正在過(guò)時(shí)。(讓我們?yōu)槿ツ耆ナ赖?Jim Stanicki 和 John Stalher 做一個(gè)短祈禱,他們是兩位典型的大型機(jī)開(kāi)發(fā)人員,也是我的朋友。)
代碼重寫
我們是否應(yīng)該重寫舊的大型機(jī)應(yīng)用?這不容易實(shí)現(xiàn)。當(dāng)然我知道,大家已對(duì)代碼重寫耳熟能詳了。不少并非大型機(jī)應(yīng)用的 Visual Basic、dBase III 和 PHP 程序會(huì)每隔五年就重寫一次,原因在于它們的代碼寫得并不是很好。而與此同時(shí),我們看到大型機(jī)應(yīng)用已經(jīng)良好運(yùn)行數(shù)十年了。重寫大型機(jī)應(yīng)用的 ROI(投資回報(bào),Return On Investment)并非在于此。舉個(gè)例子,我在上世紀(jì)八十年代中期為 Hanover Brands 有限公司編寫了的流量系統(tǒng)目前依然在使用。
但是現(xiàn)在我們面對(duì)著退休和過(guò)時(shí)的問(wèn)題。那么我們?yōu)槭裁床荒苡仓^皮去做重寫?
重寫從來(lái)就不是一件容易的事情。對(duì)于大型應(yīng)用,重寫常常會(huì)失敗。就在數(shù)個(gè)月前,我為 Ruby and Rails 重寫了一個(gè)小小的簡(jiǎn)單 PHP 應(yīng)用程序。盡管我精通 Ruby 并熟悉 PHP,并且這一程序只有一千行多點(diǎn),但我還是丟失了一些內(nèi)容。大型機(jī)的 COBOL 和 RPG 應(yīng)用則略為復(fù)雜。使用 RPG 編寫的程序,一萬(wàn)多行是很常見(jiàn)的;而如果使用 COBOL 編寫,動(dòng)輒具有兩萬(wàn)多行。如果代碼需要在上百個(gè)程序中復(fù)制,那么一個(gè)應(yīng)用就會(huì)有上百萬(wàn)行的代碼。更糟糕的是,其中不少程序是在模塊化編程技術(shù)出現(xiàn)之前編寫的。因此,在這樣龐大代碼中的所有變量是全局的。記得在數(shù)十年前,我曾在文章和研討會(huì)中十分關(guān)注這一問(wèn)題,我們像第歐根尼(譯者注:Diogenes,古希臘哲學(xué)家,犬儒學(xué)派的代表人物。他所做的一件事情是,每天白天打著燈籠在街上“尋找誠(chéng)實(shí)的人”)那樣在大型機(jī)代碼中尋找局部變量。第歐根尼從未發(fā)現(xiàn)誠(chéng)實(shí)的人,在 70 年代前后的代碼中尋找變量中也存在著同樣的問(wèn)題。
RPG 程序本身就是非常難以閱讀和理解的。多年來(lái),RPG 語(yǔ)言一直只能用六個(gè)字符表示變量名。事實(shí)上事情更糟,RPG 語(yǔ)言存在一些軟件缺陷。如果我們?cè)趦蓚€(gè)不同的表中使用了同一列名,那么它們將共享同一內(nèi)存空間。因此為了識(shí)別變量所關(guān)聯(lián)的系統(tǒng)表,RPG 程序人員需要使用二到四個(gè)如此珍貴的六字符列名。該軟件缺陷在二十年前才被修復(fù),現(xiàn)在它的變量和數(shù)據(jù)庫(kù)列名長(zhǎng)度支持 32 個(gè)字符。但是在 RPG 程序中,六字符變量名依然占據(jù)主流。
在 1992 年前后,此時(shí)我是 Circuit City 編程團(tuán)隊(duì)中的一員。當(dāng)時(shí)我就 COBOL 模塊化技術(shù)為團(tuán)隊(duì)做了一次演講。演講后,團(tuán)隊(duì)中一位最優(yōu)秀的 COBOL 編程人員指出,她并未看到 COBOL 模塊化的好處。
大家知道,在討論一個(gè)函數(shù)是否應(yīng)該超過(guò) 6 或 9 行的問(wèn)題上,我可以與其他 Ruby 開(kāi)發(fā)者爭(zhēng)得頭破血流。在 Ruby 開(kāi)發(fā)中,如果你肆意使用全局變量,完全可能會(huì)被解雇。所以當(dāng)我回想起這些一萬(wàn)到兩萬(wàn)行的程序時(shí),不禁啞然失笑。維護(hù)使用 Cobol 和 RPGb 編寫的龐大代碼,這往往比巫術(shù)更詭異。如果要嘗試做一些直覺(jué)上可以工作的更改,我們要點(diǎn)上香并撒上圣水,向各方神靈祈禱這一更改會(huì)奏效。
Cobol 和 RPG 的主流開(kāi)發(fā)實(shí)踐中充斥著過(guò)時(shí)的語(yǔ)法。我們談?wù)摰氖浅舐拇a。在一個(gè)程序中經(jīng)常會(huì)有數(shù)千行代碼被注釋掉,還有許多部分是完全沒(méi)有使用的。查看這樣的代碼就像走進(jìn)一個(gè)有囤積癖好的人的房屋,其中充斥著無(wú)用的垃圾。更過(guò)分的比喻是,垃圾堆越多,就越容易腐爛,并且會(huì)發(fā)出惡臭,正如我們所討論的代碼味道。事情是,我們每天都會(huì)用到的流程和數(shù)據(jù)都會(huì)流經(jīng)這個(gè)腐朽的舊代碼,而它的維護(hù)人員正在退休和過(guò)時(shí)。
敏捷
老實(shí)說(shuō)...我從這一職業(yè)生涯中跳出來(lái)的原因在于大型機(jī)開(kāi)發(fā)的速度,或者說(shuō)缺乏速度。RPG 和 Cobol 的開(kāi)發(fā)實(shí)踐和工具集已經(jīng)衰落。諸如測(cè)試驅(qū)動(dòng)開(kāi)發(fā)、源代碼控制、現(xiàn)代編輯、代碼重構(gòu)、敏捷等理念,多年來(lái)我一直致力于將它們轉(zhuǎn)化為文字,并付諸文章和研討會(huì)中。但是在 RPG 和 Cobol 開(kāi)發(fā)項(xiàng)目中,我不僅需要忽視其中大部分理念,而且?guī)缀跽也坏娇梢允褂眠@些理念的項(xiàng)目。
對(duì)于上一段話,我重點(diǎn)說(shuō)一下其中的敏捷性問(wèn)題。大型機(jī)應(yīng)用程序開(kāi)發(fā)實(shí)踐缺乏敏捷性,因此很難以適應(yīng)市場(chǎng)需求。通常,考慮到此類舊應(yīng)用程序的失敗,以及它們的支持人員即將退休,C級(jí)別高管(譯者注:指具有 CTO、CEO、CFO 等頭銜的企業(yè)高管)會(huì)建議采購(gòu)昂貴的 ERP 系統(tǒng),或是完全重寫。我們都聽(tīng)說(shuō)過(guò)這樣項(xiàng)目的相關(guān)恐怖經(jīng)歷。
現(xiàn)代機(jī)器
我們應(yīng)了解,大型機(jī)并非過(guò)時(shí)的。它們并非 System 360 和 AS/400 這樣的昨日黃花,而是 IBM z/OS 和 IBM i 這樣的 64 位操作系統(tǒng),具備 Linux 和 Windows 所無(wú)法企及的可靠性和可擴(kuò)展性。它們對(duì)于復(fù)雜數(shù)據(jù)中心而言,自建的整體成本也較低。我們可以橫向擴(kuò)展大型機(jī),而非縱向擴(kuò)展。 在大型機(jī)上也可以運(yùn)行最新的軟件。例如,我們可以在一臺(tái)主機(jī)上運(yùn)行數(shù)千個(gè) Docker 鏡像。運(yùn)行在i系列機(jī)器上的 DB2 數(shù)據(jù)庫(kù),可以說(shuō)是這個(gè)星球上最好的數(shù)據(jù)庫(kù)。至于熱門技術(shù),幾年前,我在一個(gè)團(tuán)隊(duì)中實(shí)現(xiàn)了將 Ruby and Rails 移植到本地 IBM i 操作系統(tǒng)上。銀行應(yīng)用程序是在大型機(jī)上運(yùn)行的,這主要出于安全上的考慮。正是銀行家資助了 Rails 遷移到 IBM i 平臺(tái)。大型機(jī)具有巨大的優(yōu)勢(shì),涉及從巨大的橫向增長(zhǎng)到最終的安全性、近乎 100% 的可靠性。當(dāng)然,盡管事實(shí)上 IBM 銷售大型機(jī)的數(shù)量在減少,但現(xiàn)有機(jī)器提供了很好的升級(jí)和擴(kuò)展,因?yàn)樗鼈兙哂刑煳膶W(xué)量級(jí)的水平可擴(kuò)展性。
老化的并非機(jī)器,而是大型機(jī)的應(yīng)用程序和程序開(kāi)發(fā)人員。
事情是否已經(jīng)搞砸了?
我們?cè)鴵?dān)心千年蟲會(huì)讓大型機(jī)崩潰,事實(shí)上它并沒(méi)有。一起都很好。這是因?yàn)楣芾韺幼罱K開(kāi)始認(rèn)真對(duì)待從兩位數(shù)轉(zhuǎn)到四位數(shù)的問(wèn)題。如果管理層能認(rèn)真對(duì)待關(guān)鍵技能的損失這一問(wèn)題,一切都會(huì)好起來(lái)的。
下面在詳解介紹具體細(xì)節(jié)前,讓我概括一下我給出的解決大型機(jī)編程人員退休和過(guò)期問(wèn)題的方案:
- 數(shù)據(jù)庫(kù)的現(xiàn)代化;
- 應(yīng)用代碼的重構(gòu);
- 培訓(xùn)現(xiàn)有大型機(jī)開(kāi)發(fā)人員的敏捷,并薪火相傳;
- 挑選優(yōu)秀者成為大型機(jī)開(kāi)發(fā)人員;
- 將已有代碼轉(zhuǎn)換為 API。
數(shù)據(jù)庫(kù)的現(xiàn)代化
第一步是數(shù)據(jù)庫(kù)的現(xiàn)代化。隱藏在這些二十至四十年前的應(yīng)用程序之后的,是保存在世界上最好的數(shù)據(jù)庫(kù)和操作系統(tǒng)中的大量數(shù)據(jù)。許多大型機(jī)數(shù)據(jù)庫(kù)的創(chuàng)建,要先于今天眾所周知的數(shù)據(jù)庫(kù)規(guī)范化和優(yōu)化技術(shù)的創(chuàng)立。就在十年前,我還是要把 Web 前端置于明顯之處,放在一張牌桌上。一些工具和可用技術(shù)可以讓我們繼續(xù)運(yùn)行遺留應(yīng)用,無(wú)需修改舊的數(shù)據(jù)庫(kù)模式結(jié)構(gòu)。根據(jù)我的經(jīng)驗(yàn),重構(gòu)數(shù)據(jù)庫(kù)并非難事。
應(yīng)用代碼的重構(gòu)
我早些時(shí)候?qū)Υ笮蜋C(jī)代碼現(xiàn)狀表示出了強(qiáng)烈的不滿?,F(xiàn)在我知道,大型機(jī)代碼可以被重構(gòu)到更為敏捷的程度。我并不是要探討重構(gòu)本身。重構(gòu)是一種在不改變代碼行為的情況下重新構(gòu)造代碼的過(guò)程,因此C級(jí)別高管不應(yīng)該擔(dān)心大規(guī)模重寫可能會(huì)導(dǎo)致停機(jī)的問(wèn)題。
重構(gòu)的第一步是將代碼置于源代碼控制下。我強(qiáng)烈推薦使用 git?;蛟S你的大型機(jī)代碼已經(jīng)使用源代碼管理包管理,但是我對(duì)大型機(jī)源代碼管理包的經(jīng)驗(yàn)是,它們助長(zhǎng)緩慢的開(kāi)發(fā),并阻礙常見(jiàn)的重構(gòu)策略。只要代碼置于 git 管理之下,那么我們可以刪除掉注釋的代碼,因?yàn)楸A襞f版本的代碼是源代碼管理的工作。
重構(gòu)的第二步是更新開(kāi)發(fā)環(huán)境。雖然功能強(qiáng)大的 IDE 出現(xiàn)了二十多年,許多大型機(jī)開(kāi)發(fā)人員仍然使用字符編輯器。這些現(xiàn)代 IDE 是與重構(gòu)工具一起綁定使用的。
第三步是建立單元測(cè)試策略。 單元測(cè)試通常會(huì)對(duì)程序行為做出非常具體和詳細(xì)的測(cè)試。這是我們沒(méi)有時(shí)間去做的事情。我建議遵循由 Llewellyn Falco (http://llewellynfalco.blogspot.com/)提出的“批準(zhǔn)測(cè)試”(Approvals Testing)策略。審批測(cè)試的基本理念是分別做執(zhí)行例程之前和之后的狀態(tài)快照。該快照可以是任何內(nèi)容,從數(shù)據(jù)庫(kù)的查詢結(jié)果到 PDF、CSV 格式的文檔。發(fā)揮你的創(chuàng)意吧!在存儲(chǔ)了快照后,我們就可以修改例程,并使用之前和之后的映像去驗(yàn)證重構(gòu)并沒(méi)有改變行為。雖然在調(diào)用大型機(jī)例程時(shí),最終可能會(huì)使用使用到 Java、Ruby 或 Python 的測(cè)試基礎(chǔ)結(jié)構(gòu),但此類操作并不復(fù)雜。
如果構(gòu)建了單元測(cè)試策略,重構(gòu)應(yīng)該最先實(shí)現(xiàn)變量名稱可讀和易于理解。然后再開(kāi)始進(jìn)入模塊化的過(guò)程中,盡量減少使用全局變量。在大型機(jī)代碼中,重復(fù)代碼泛濫,所以我們需要借助于工具去查找重復(fù)代碼,然后對(duì)它們創(chuàng)建一些通用模塊。
授權(quán)現(xiàn)有開(kāi)發(fā)人員
重構(gòu)策略的關(guān)鍵是在于最好的大型機(jī)開(kāi)發(fā)人員。忠言逆耳,但是大型機(jī)開(kāi)發(fā)人員已被他們的雇主看成是巴士司機(jī)的角色。管理層認(rèn)為開(kāi)發(fā)人員的工作就是在各點(diǎn)間移動(dòng)數(shù)據(jù)。一旦這一過(guò)程發(fā)生中斷,開(kāi)發(fā)人員就需要去修理引擎,直到他們能夠回到大巴上并繼續(xù)移動(dòng)數(shù)據(jù)。從我個(gè)人的經(jīng)驗(yàn)看,他們往往不受重視并且報(bào)酬過(guò)低。其中不少大型機(jī)開(kāi)發(fā)人員沒(méi)有學(xué)位,并且相對(duì)于C級(jí)別高管和常青藤聯(lián)盟 MBA 學(xué)員,他們似乎并不具備考慮下個(gè)季度投資回報(bào)率的能力。
我們應(yīng)授權(quán)這些大型機(jī)開(kāi)發(fā)人員。就敏捷開(kāi)發(fā)實(shí)踐對(duì)他們進(jìn)行培訓(xùn),并且他們自己也要成為培訓(xùn)師。他們需要在重構(gòu)和其后的模塊化 API 創(chuàng)建上得到幫助。我們還應(yīng)考慮到退休和過(guò)時(shí)的問(wèn)題,因此管理新開(kāi)發(fā)人員的培訓(xùn)應(yīng)是授權(quán)大型機(jī)開(kāi)發(fā)人員的一部分。
如果在現(xiàn)有的主機(jī)開(kāi)發(fā)人員中,沒(méi)有人能站出來(lái)成為項(xiàng)目主管,那么我們就應(yīng)該從外面招聘一名。問(wèn)題在于,雖然有許多人具備推進(jìn)此工作的能力,但他們可能已經(jīng)轉(zhuǎn)向了管理或培訓(xùn),或是像我一樣轉(zhuǎn)向了其它的編程語(yǔ)言和平臺(tái)。與這些人相關(guān)的一個(gè)問(wèn)題是,他們?cè)趲资昵熬蛥捑肓俗唏R燈式(Revolving door)的C級(jí)別高管,這些高管拒絕了大型機(jī)開(kāi)發(fā)現(xiàn)代化的建議。許多這些前主機(jī)開(kāi)發(fā)人員可能只是會(huì)建議去購(gòu)買 ERP,給 Oracle 打電話,或者完全重寫,盡管就他們的經(jīng)驗(yàn)來(lái)看這可能會(huì)是失敗。所以準(zhǔn)備好輪流與這些人打交道。
那么在哪里可以找到這些曾經(jīng)的大型機(jī)開(kāi)發(fā)人員?我們可以在 LinkedIn 上搜索具有良好溝通技能、新技術(shù)和敏捷上的經(jīng)驗(yàn)并試圖隱藏大型機(jī)經(jīng)歷的人,也可以參加 Java、Ruby、JavaScript 等會(huì)議并與 50 歲以上的開(kāi)發(fā)人員交談。從他們的年齡看,他們可能曾經(jīng)是大型機(jī)開(kāi)發(fā)人員,并熟悉新技術(shù),最重要的是敏捷開(kāi)發(fā)。
如果讀者知道自己在找什么樣的人,那么我們可能不需要介紹得過(guò)多。本段內(nèi)容可能會(huì)被裁掉,因?yàn)楸疚木庉嬙且幻笮蜋C(jī)開(kāi)發(fā)人員,也是一位敏捷教練。他可能會(huì)裁掉本段內(nèi)容,因?yàn)樗麕啄昵熬娃o去了“大巴司機(jī)”的工作,并找到了一個(gè)類似于他的人去管理大型機(jī)現(xiàn)代化項(xiàng)目。[編者按:不,我并未裁掉本段,因?yàn)槲彝庾髡叩恼f(shuō)法。]
挑選優(yōu)秀者成為大型機(jī)開(kāi)發(fā)人員
大學(xué)并不會(huì)教 Cobol 和 RPG。在一些關(guān)注“技能消亡”問(wèn)題的博客帖子和文章中,建議大學(xué)應(yīng)增加添加大型機(jī)的課程,吸引千禧一代從事大型機(jī)職業(yè)。
我不認(rèn)為吸引千禧一代是一種解決方案。我不會(huì)建議任何年輕人在大型機(jī)上發(fā)展自己的職業(yè)生涯。這一行業(yè)就業(yè)機(jī)會(huì)少得多,發(fā)展速度也緩慢,職業(yè)生涯不會(huì)太順利。我的建議是:一、對(duì)現(xiàn)有的非 IT 人員再培訓(xùn);二、強(qiáng)制三四十歲的人進(jìn)入大型機(jī)行業(yè)。這兩個(gè)建議聽(tīng)起來(lái)都很瘋狂,但是對(duì)于愿意在大型機(jī)上開(kāi)始其職業(yè)生涯的年輕 IT 畢業(yè)生,我對(duì)他們的能力心存質(zhì)疑。
比當(dāng)今風(fēng)行的的多態(tài)、多平臺(tái)的程序開(kāi)發(fā)人員,成為一名大型機(jī)開(kāi)發(fā)人員所需的技術(shù)知識(shí)更專一。公司需要的不是具有 NodeJS 和函數(shù)式編程技能的人,而是具有商業(yè)頭腦的人,他們渴望學(xué)習(xí),而且非常簡(jiǎn)單和聰明。有很多非 IT 專業(yè)的聰明人,他們正經(jīng)歷職業(yè)中期焦慮,在經(jīng)過(guò)一年的職業(yè)訓(xùn)練后會(huì)有機(jī)會(huì)薪酬翻倍。一個(gè)值得挖掘的領(lǐng)域是退休人員。
將代碼轉(zhuǎn)換為 API
將重構(gòu)的代碼轉(zhuǎn)換為 API,是大型機(jī)現(xiàn)代化過(guò)程的最后一步。這些應(yīng)用將成為可重用的軟件組件。通常,大型機(jī)代碼的參數(shù)列表非常復(fù)雜,創(chuàng)建 API 似乎是不可能的事情。鑒于此,我們要?jiǎng)?chuàng)建一個(gè)或多個(gè)包裝程序,這可以使用 Cobol 或 RPG 編寫,也可以選擇新語(yǔ)言編寫。我喜歡使用的技術(shù)是創(chuàng)建包裝傳統(tǒng)模塊的 SQL 存儲(chǔ)過(guò)程。使用 SQL 存儲(chǔ)過(guò)程時(shí),任何具有 SQL 接口(例如 JDBC,ODBC 驅(qū)動(dòng)程序或其它)的人都可以使用這些例程。
使用通過(guò) API(例如 SOAP,REST 或其它)提供的遺留代碼,并使用面向所有的單元測(cè)試,可以做到完全敏捷的開(kāi)發(fā)??梢赃x擇任何語(yǔ)言編寫新的代碼,當(dāng)然這些工作可以雇用千禧一代完成。
一些更為敏感和復(fù)雜的程序,它們可能在客戶流失報(bào)告中位列前茅,現(xiàn)在已經(jīng)可以轉(zhuǎn)換為新語(yǔ)言編寫。
大型機(jī)的敏捷
盡管大型機(jī)應(yīng)用程序在過(guò)去的半個(gè)世紀(jì)內(nèi)都是非常的可靠,但它們幾乎沒(méi)有做任何自動(dòng)化測(cè)試。而大型機(jī)從業(yè)者或者是不了解重構(gòu)策略,或者在啟動(dòng)重構(gòu)問(wèn)題上沒(méi)有得到C級(jí)別高管的支持??偠灾a已經(jīng)不適應(yīng)不斷變化的業(yè)務(wù)需求?,F(xiàn)有的大型機(jī)開(kāi)發(fā)人員正在以驚人的速度退休,勞動(dòng)力也沒(méi)有得到補(bǔ)充。
擺脫大型機(jī)遠(yuǎn)非最理想的解決方案。重寫或轉(zhuǎn)換為 ERP 的實(shí)現(xiàn)代價(jià)昂貴,并且充滿風(fēng)險(xiǎn)。但是大型機(jī)本身沒(méi)有老化。事實(shí)上,它們?cè)谛阅?、彈性、安全性和可靠性等方面完全超?Microsoft 和 Linux。并非是機(jī)器在老化,而是應(yīng)用程序和程序員正在老化。
我們要做的是實(shí)現(xiàn)數(shù)據(jù)庫(kù)的現(xiàn)代化、代碼的重構(gòu)、成為敏捷并加強(qiáng)對(duì)編程人員的內(nèi)部培訓(xùn)。最后在大型機(jī)展現(xiàn)出優(yōu)勢(shì)之處,開(kāi)始將新模塊化的代碼轉(zhuǎn)換成新語(yǔ)言編寫。
問(wèn)題在于,上述解決方案都取決于C級(jí)別高管的采納。高管在采納之前,需要審視季度業(yè)績(jī),并考慮未來(lái)兩到五年內(nèi),如果失去這些被低估的大型機(jī)開(kāi)發(fā)人員會(huì)有什么樣的后果。