獅子羔羊(公共微信平台)

創作的衝動來源於對過去的尊重和對未來的向往。字裏行間無意中表達出你的理念,你對生活,工作,愛情的詮釋。

文章均為獅子羔羊原創,版權歸獅子羔羊(CN) 及其筆名擁有者所有。為保護微信公眾平台的【原創】特性,有意轉載者請聯係作者
個人資料
正文

獅城歲月之七:NEC

(2015-10-21 21:24:24) 下一個

NEC Singapore 是日本NEC Co.的子公司,它提供從硬件,係統軟件,到應用軟件開發等IT服務。因為它是NEC Co. 的子公司,它所提供的IT服務都是基於其總公司的產品線。和大多數日本公司一樣,總公司提供給子公司的產品一般都是落後於其主要產品線一代或者更多。雖然當時NEC Co. 已經有基於UNIX 操作係統的產品係列,但是在新加坡的子公司所能有的還是其早期的非開放式的小型機係統,叫Astra. 這樣的情況直到95初才開始有了變化,那時我才有機會接觸到NEC UX, NEC 的UNIX 係統和Oracle 數據庫。我會在本章的後半部分詳談,現在讓我回到九二年我剛在NEC Singapore 工作的時候。

Astra 的主要開發平台是COBOL。 稍微了解這一行的人大都知道,或者聽說過COBOL程序設計語言。我第一次接觸到COBOL 是在大學二年級時選修課時選了COBOL, 不過我考試時不及格,原因是這個語言裏有大量英語單詞做為關鍵字,而我不會它們的拚寫。那是我四年中唯一不及格的課程。工作以後我唯一需要用的語言卻恰恰是COBOL. 我們工作後的幾個項目都是用COBOL。由於我比較懶惰,不願意做煩鎖的事,凡事都想法找捷徑。不滿足於重複別人做的做法。為此我讀了很多隨機資料,長時間裏待在機房裏做試驗寫程序。幾年後我成了COBOL高手, 許多別人不會的功能我都會。
象現在的C#或Java, 一兩年就有一個新版本。比如微軟的.Net 技術2002年發布了.Net 1.0 和 Visual studio 2002, 2003年發布了.Net 1.1 和visual studio 2003;2005年發布了.Net 2.0 和Visual studio 2005, 2008年發布了.Net 3.5 和Visual studio 2008, 中間還有一個.Net 3.0; 2010年發布了.Net4.0 和Visual Studio 2010; 2012年發布了.Net 4.5 和Visual studio 2012; 2013年又為Window 8.1 發布了Visual studio 2013.
隻是那時更新發展的沒有現在這樣頻繁。就COBOL 而言,從七九年我第一次接觸COBOL 到一九九九年我最後一次用COBOL,二十年中隻有三個版本:COBOL 74, COBOL 85 和 COBOL 95.
當時(九一年到九五年)NEC小型機上配備的COBOL 隻有COBOL 74 和COBOL 85,更令我吃驚的是沒有人用COBOL 85, 隻會用COBOL 74而且隻會用一些簡單功能和簡單語法。有一個人號稱會COBOL 85可是他寫的程序用COBOL 74 也能編譯。這並不是因為缺乏資料。隨機資料中有COBOL 74 和COBOL 85的全部資料。也不是象在中國程序員的英文水平不高,看不懂英文資料。真正的原因是工程師的基本知識不夠和沒有創新的敬業精神,有許多人都不是大學畢業的。相對之下,我這個南大計算機係的學生有八年編程經驗的COBOL 高手就有一點鶴立雞群了。
我的第一步就是啟用COBOL 85 並真正地使用COBOL 85 新增的功能和新的語法結構,用RD SECTION 設計報表。這樣我寫的程序較別人寫的程序有如下特點:
短,快(寫得快,運行也快),易讀易改,少出錯。我非常幸運的是當時的組長沒有基於保護自身利益的原因而壓製我這個連英語都說不清楚的外國臨時工的創新。他全力支持我的創新工作,並要求我給其他職員提供COBOL 85 的培訓,他讓我把我寫的程序提供給其他同事作為樣本,並不時地為其他人提供輔導。這樣一來經過半年多一年的時間,我所在的組的編程水平大大提高,我在組裏的地位也確立下來了。小組的幾個項目都做的很順利。大家都很高興。後來我被雇傭為資深工程師的時候,我想那還是有一定的群眾基礎的。
九三年三月,另外一個小組的一個項目出了些狀況,老板讓我去幫忙看看,我與小組長了解了一些情況,她說係統其它部分都是好的,就是有一個程序是另外一個中國工程師寫的,他沒有能按時完成。她讓我看看他的程序。我對那同事有一定的了解,應該不會出這樣的問題,出於維護同胞的心態,和仗著我COBOL 高手的名聲,我與她說:這樣吧,我就不看他的程序了,就當他還沒有寫。妳告訴我這個程序的邏輯,我兩天兩夜不睡覺把程序寫出來。那時我寫COBOL 程序的速度是一天一千行,寫完後半天一天時間調試,一個程序就寫好了。所以兩天兩夜寫好一個程序不是不可行的。
大家都說這是一個可行的方案。我提這個方案的原因是我不想陷入和中國同事爭論他寫的程序的細節,變成兩個中國工程師之間的爭論。就這樣,我們倆個關在一個小房間裏談了幾個小時,直到深夜十一點鍾,我得出結論:不是程序員的錯,根據係統的數據結構,她所想做的事是無法實現的。這是一個整體設計錯誤。我又與那位中國工程師談了。他說我發現的問題他也與那組長提過 ,隻是小組長回答說:這不關你的事,我叫你做什麽你就做什麽。我聞此言後無語了。
就這樣我向老板和我的組長匯報了情況。大家都覺得事關重大,必須一級一級地上報。就這樣一直報到最上層,上層經過討論做了如下決定:
1)NEC決不接受失敗,我們將向客戶通告並要求寬限三月,三個月中我們將用一切可用的資源把這個項目做成。
2)原來的項目組被重組,兩個組長和兩個資深工程師為骨幹成員。原來的項目廠組長被就地降職,與其他的原項目小組成員一道協助工作。兩個組長主要是負責客戶協調和係統功能定義,我主要是負責係統整體設計和其中一個主要模塊的具體設計工作(就是上一次出問題的核心模塊)。另外一個資深工程師負責與財務係統的接口。
就這樣我們開始了非常辛苦的項目拯救計劃。每天的正常工作時間是早晨九點到晚上十點,大概有三分之一的時間工作超過午夜,到了項目的關鍵時刻,我們一直工作到淩晨三四點,有兩三次我們四人通宵工作直到第二天早晨,回家洗澡休息幾個小時後再來公司繼續工作。每天晚上到了七點左右我們的部門經理就來帶我們四人出去吃晚飯或買好飯萊帶來給我們吃,然後一直與我們一起工作,了解情況,討論一些重要事宜並做出相應的決定,然後他就是用他的電腦寫項目情況匯報,我們就繼續我們的工作直到深夜。
現在回想起來我們幾十個人工作故然辛苦,那個原來的項目組長的日子也不比我們好過。她的老板(也是我的老板)對她的能力如何不了解,給了她力所不及的工作,難道他就沒有責任了嗎?想起來我當時應該多為她考慮一些。對比我在HP的情況,有一定相似之處。相同之處在於項目進展不好,很多錯,越改越多,最後三個客戶相繼退出。從管理層到工程師都不合格。在一個領導的要求下我曾經做過一個全麵的評估並對發現的問題提出了補救方案。可是我所得到的發應是與當時我在NEC告訴老板係統有嚴重設計錯誤完全相反。
第一反應是,你說的不一定對,我們不一定要做這麽多事情,也許我就這樣做下去,可能也能做成,客戶也不見得能發現。以後不要找他了。第二反應就是限製我的工作範圍和工作權限。第三就是盡量壓低我的地位,除非遇到了無法解決的技術難題,一般問題不找我,就算找到我,我提供了解決方案,他們也經常在不與我討論的情況下改動或不與使用。 
我想了許久才搞懂為什麽是這樣的。
從管理層來看,如果讓他的老板知道了我所發現的問題,並且知道了需要花多少時間來補救,他一定會因為失職而被問責,可能還會影響到他的老板的老板。所以他盡量大事化小,蒙混過關,就算以後證明我說的對,現在也要盡量拖,拖一時算一時。從中層技術人員來說,接受了我的說就是承認他們的技術錯誤。那決對不是好事。一定要讓管理層相信我 說的不一定對,反正管理層也不懂技術。從普通程序員來說,本來我的技術就這樣,以前從沒有人看我寫的程序,寫的好與不會沒有人知道,也沒有人有興趣知道,隻要能過了今天就好。現在這個架構師天天看我寫的程序,指出這樣那樣的問題,這樣一來我的技術水平就曝光了,另外為了按照架構師提出的方法來改又增加了許多工作量,在改動中要是出了錯還要被批評。總之,我這個架構師是一個不受到歡迎的人,但是也是一個難得的有用之人。如果客戶提出問題,架構師總有應對方案;不論客戶發現什麽問題,他們總可以說我們的應用架構師已經指出了這個問題並給出了解決方案,我們正在逐步解決這個問題。從另外一個考量,如果我所寫的文章和發現的問題被客戶看到,毫無疑問地,客戶會立即終止合同。
最近我想清楚了以後,我開始以提供新技術的名義寫與項目無關的文章,這樣既顯示了我的價值又不觸動項目的問題,就算是寫係統裏的技術問題我也隻寫那些無法改變的問題。我這樣做的原因是我認為項目一定會失敗或者被客戶拒絕,等到那時我再出手。象前麵三年裏我為了拯救項目得罪項目裏的各層人員,但是如果因為我的努力項目成功了,別人得好處的情況對我實在沒有什麽意義。這就像是一個病人拒絕承認有病,你想方設法地讓他吃苦藥。你讓他吃藥時他恨你;最後你把他治好了他說本來就沒有病。所以一是要讓他承認有病,二是要在他發燒了來找你的時候才出手。
言歸正傳,話說三個月後,經過重新設計的係統基本開發完畢,為了趕時間係統在沒有經過嚴格測試就投入使用。在試運行期間發現許多編程問題,不過隻是編程問題,沒有設計問題。我們幾個人白天陪伴用戶一同使用係統,一旦發現問題就詳細記錄下來。晚上用戶下班了,我們一一地分析每一個問題,找到根源後一組人改程序,一組人校正數據。每一組由一人操盤,其他人監督,從而確保修改動作是正確無誤特別是不能丟失數據。一般都是我和另一位資深工程師操盤。其工作壓力之大是難以想像的,因為我們是用生產運行來找錯改錯的,稍有不慎將會對客戶造成不可挽回的損失。算是我們運氣,也是我們幾人經驗老道,幾個星期下來,係統基本穩定,客戶基本滿意,NEC的聲譽終於保持下來了。項目搞定後公司做了一係列的人事變動:我們以前的老板被降級後轉到別的部門(用人不當)我們四人中的一個組長升級為部門經理(領導拯救工作有功)我被升級為組長(衝鋒陷陣,主持設計有功,展示技術水平高超)原來的項目組長被辭職(承擔責任或者難以麵對整個事件。這件亊進一步展現了我的技術實力,也為我在NEC的進一步展奠定了一定的基礎。其代價是數不盡的超時工作和不太少有的通宵達旦的工作。記得有一次我在公司工作直到早晨,七點鍾左右,我女兒打電話給我哭著說:爸爸,你在哪裏?家裏沒有人,媽媽也不在家。我怕,你什麽時候回來?”我接電話後立即放下工作往家趕。亊後我的小組長發出一些議論。我回答道:我七歲的女兒整夜一人在家,早晨醒來發現一人都沒有,哭著打電話給我。作為父親我一定要放下一切去照顧她。等以後我的孩子子有人照顧了,我會讓你知道我是怎樣瘋狂地工作的。
我在NEC做的最後一個項目是我最為驕傲的一個項目。那是NEC在開放平台上的第一個項目。在我被選中負責整體設計後其他幾個資深工程師頗有微詞。那個剛剛升任經理的前組長在工作會議上直言:”我知道有一些人對我的選擇有異意,但是如果讓我投注的話,我會投在我認為最有把握蠃的馬的名下。如果有人認為自己是更好的選擇,請私下與我交談。”從此之後,就沒有人議論了。
 
這個項目是NEC Singapore 的第一個在開放平台上的項目,數據庫是運行在NEC Unix 上的Oracle 7.0, 前端開發工具是在windows 上的Oracle Form 和Oracle Report.
係統是用於新加坡最大的煉油廠的生產監控係統(The Petroleum Co.簡稱TPC).
在一個日常工作日有兩萬多個釆集數據,如溫度,流速,髙度等。在這兩萬多個原始數據中有一半左右需要人工去讀表記錄,然後人工輸入 。一共大概有兩百多個輸入程序。根據這兩萬多個原始數據,係統需要計算另外兩千多個計算數據點,如:流速乘時間(24小時)得到日流量,油位乘截麵積得到體積,體級乘比重再乘溫度和溫度係數得到重量等。還有一些計算是月匯總,年匯總等。所以有兩千多個計算程序。然後就是數不盡的報表。與大多數軟件開發項目一樣,銷售人員把價格壓的很低,隻要客戶簽約就好,能否按時,按預算完成他們根本不管。根據傳統設計,兩百多個輸入程序(五個人天一個),兩千多個計算程序(兩個人天一個),就算是兩千個報表程序(兩個人天一個)。就算不做測試,程序沒有一個錯,設計時間不計也要有八千個人天。可是設計和開發我們隻有四千人天的預算。無論如何也不可能做完。
 
有好幾次老板問我能不能按時完成,可見那也是他的最大耽憂。這個情況下我沒有發表言論隻是埋頭研究需求和學習這些數據之間的關係和這些計算公式。我的回答是我還不知道,再給我一些時間,再給我一些時間。一個月後我覺得我有辦法在短於預算的時間內完成項目。並用C++寫了兩個試驗程序並與Oracle 做了聯接試驗。我的設計是這樣的:
 
 
1。用一個table為每一個數據點(tag)給出明確的定義,如果是記算Tag, 定義其計算公式。
2。用兩個table 定義每一個數據輸入模塊。
3。在oracle 裏用view 轉換數據結構從(tagid,date,value) to (date, tag value1, tag value 2,,,,)
4. 在oracle 裏用一個trigger 去激活一個計算程序當一個tag 值被加到數據庫裏。
5.這個計算程序就是根據計算公式為計算數據點計算數值並存入數據庫
 
根據這個設計
兩百個數據輸入程序變成了一個(四十個人天)
兩千個數據計算程序變成了一個(一百個人天)那是一個C++的程序是我親自寫的。
用於編寫報表的時間也大大減少了(一天一個,兩千人天)
再加上一個數據點設置程序(十個人天)
和其它數據設置工作(一百個人天)
總共設計和開發工作是三千人天以下。
 
而且我的的設計的可擴展性非常好。要加一個數據點,要加一個計算數據點,要加一個輸入程序隻是數據輸入而己。就這樣我把一個不可能的的項目變成了一個盈利的項目。
 
可是客戶就是不在我的設計上簽字。我與客戶的CIO有過一個私人會麵。他對我說:我看了你的設計,我非常喜歡。如果你有興趣的話,我希望你能到我這裏來工作。我之所以不在你的設計上簽字是因為我希望我的部下能真正懂得你的設計。我謝謝他的好意並答應好好訓練好他的手下。這樣一來一往兩個星期後他就簽字了。
 
但是他的手下有幾個笨蛋,為了解釋清楚費了我很大的勁。大半年後係統根據我的設計做成了,演示成功。大家對我的技術水平又有了新的認識。那是我在NEC 的第四年。由於人事的變動和我對開放式平台的向往和我的技術水平,我覺得我應該離開了。九五年十月,我辭職去了淡馬錫理工學院在電腦部職位是資深軟件專家。我離開NEC 主要有兩個原因。一是對管理層有些失望,二是我一心想到微軟的技術平台。在淡馬錫我實現了向微軟的轉移,並從此走上了微軟的技術道路。後來的事實也證明了我的判斷是正確的。當時其他的軟件現在都己被不同的工具取代了,唯有微軟的平台一步步向前越來越好。請看獅城歲月之八,也是獅城歲月的最後一集,淡馬錫理工學院。
 
 
 
.
 
 
[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.