人間的一切意外,都是上天的有意安排——霍桑。 不幸的是:我們無法預知這個安排會在哪一天出現,因此我們不去臆想,不去猜測,我們所能做的,首先是預防意外的出現,然後是一旦意外出現就盡快地消除意外...... 正在下載更新軟件的光通信模塊被拔掉電源後“死機”了,而且“死”得很徹底——連重新開機都無法重啟了! 怎麼會這樣呢? 這恐怕是當時所有在場的LunX工程師們心中的問題。 而琳達,自然是特別地沮喪,因為她是代理項目經理,現在在這麼重要的OFC上,出了這樣的問題,實在是出乎她的意料。 Tom見狀,轉身問那位拔掉電源的AT&T長著大胡子的人道:“電信機房也會斷電?不是有UPS麼?!” 沒錯,電信機房都有UPS電源(不間斷電源),為的就是應對突然斷電的情況。 Tom的意思很明顯,那就是:這不是一個問題,因為電信機房是不可能斷電的。 那位來自AT&T長著大胡子的人看了一眼Tom,目光中似乎流露出些許不滿,說道:“If it should......(如果萬一斷電了呢)?” “Ok.This is a new issue.(這是一個新的情況)”Tom仿佛準備輕描淡寫地把問題掩飾過去。 “No! This is not a new issue! This is a product!(這不是一個新情況,這是一個電信級的產品)”那位來自AT&T長著大胡子的人搖搖頭說道,顯然不同意Tom輕描淡寫的說法,語氣中充滿著堅持。 來自AT&T長著大胡子的人的話讓TOM感到前所未有的難堪,因為他無法反駁! 什麼是電信級的產品? 在網絡通信行業,產品是有等級的,最高的等級就是電信級,電信級的產品在安全和可靠上有著極高的要求。 舉個例子:光通信係統的機箱把手必須是不銹鋼的,而一般情況下機箱的把手都是鋁製的,因為重量輕成本也低。 為什麼必須是不銹鋼的而不能是鋁製的? 因為鋁的燃點比較低,一旦發生大火,容易發生助燃。 也許大家會說,都發生火災了,都燒到機箱了,還在乎這些? 沒錯,還在乎這些! 這就是電信級的產品——必須做到極端的安全可靠! Tom自己也是從AT&T出來的,對此自然是知道的,而且,客戶就是皇帝,既然客戶都這麼說了,還有什麼可爭辯的? 你可以堅持說電信機房內有UPS,在下載更新軟件的短短一分鐘時間內,突然斷電了,而且UPS也出故障不工作了,這樣的概率實在太小了! 但是,電信運營商不會認同,他們也不會和你爭辯這概率到底是1%還是0.1%,但他們不會考慮選購你的產品! 因此Tom知道他遇到了一個困局,現在他已經無路可退,要贏得AT&T的合同,唯有打破這個困局。 於是Tom轉向了LunX的工程師們——他們的任務就是來為這次OFC保駕護航的:“Can we solve this problem?(我們能解決這個問題嗎)” 這次,Tom沒有再說“Issue(情況)”而是用了“Problem(問題)這個詞”。 因為客戶說是問題就是問題! 沒有人說話,因為沒有人知道為什麼會“死機”,就好比一個醫生給病人看病,還沒有查出病人究竟得的是什麼病,病人就問醫生:這病能治好嗎?這讓醫生如何回答? Tom見冷場了,這可不是他想看到的,因為這意味著給AT&T做的演示失敗了,更重要的是:在這樣的情況下,AT&T鐵定不會考慮LunX的CWDM光通信係統的! “How about you?(你的看法呢)”Tom看著大家都沉默著不說話,就把目光落在了我的身上,問道。 早在那位長著大胡子的AT&T人拔掉電源,導致正在下載更新軟件的光通信模塊死機那一刻起,我就已經知道這一定是來自斷電時產生的乾擾導致的結果。 因為我想起了十五年前,我在國內承包時,接了一個石門礦山的項目,每當計算機軟件控製打開一個大功率的繼電器時,當時的040微處理器主機板就會莫名其妙地死機,後來查明是因為大功率的繼電器在閉合時在電源中產生了一個強大的乾擾脈沖,導致了040微處理器主機板的死機。 而在座的LunX軟件和硬件工程師們,雖然他們都是各自領域內的精英,但由於都沒有這種強乾擾情況下的實時應用項目的研發經驗,因此自然會感到丈二和尚摸不著頭腦了! 不過我沒有吭聲,因為在這種情況下做“出頭鳥”是最愚蠢的,因為如果最終我無法解決問題,那麼同事們會認為我是想表現自己,而老板也會認為我是好大喜功。 而如果是老板主動先找我,我再應戰,那就不同了,即使我失敗,沒有解決問題,那在同事們的眼中,也是為公司分憂,因為本來誰都沒有把握一定能解決問題,而在老板眼裡,我是敢於承擔責任。 於是,我見Tom主動找我了,就我看了一眼Tom,然後轉向那兩位來自AT&T的人,用一種誠懇而又充滿信心的語氣說道:“明天給你們答案!” 這次輪到那兩位來自AT&T的人吃驚了,他們本以為事情已經接近尾聲,因為出現了一個意外的問題,而這個問題甚至不在我們原來的設計之內,那麼,根據他們這麼多年和通信設備供應商打交道的經驗,要解決這樣的問題就必須修改設計,這需要至少幾個周甚至幾個月的時間。 但現在居然有人站出來說明天給他們答案! 因為雖然我隻是說給他們答案,沒有說會解決問題,但對於一個未知的問題來說,如果答案找到了,那就離解決問題也就不遠了。 “Ok. Let's see.(好,讓我們拭目以待)”其中那位拔掉電源的長著大胡子的AT&T人看著我,半信半疑地說道。 “What's your name?(你叫什麼名字)”這時,另一位戴眼鏡的AT&T人問起了我的名字。 在美國,一般美國人在遇到一個不認識的人時,不會輕易去問對方名字,而是隻會介紹自己。如果是主動問你名字,那就隻有兩種情況:一種是對你非常不滿;還有一種就是對你起了敬意,想結識你。 現在這位AT&T人主動問我的名字,顯然是後者。 “X.”我簡短地答道,然後伸出手去,和對方,包括還有那位長著大胡子的AT&T人各握了一下手,打招呼道:“Nice to meet you(很高興認識你)” 在對方主動問你的名字後,你主動和對方握手並問候對方,這是一種禮貌,這,我早在十幾年前國內承包時就已經學會了。 ...... 第一天的OFC展會就在這樣一個令人沮喪的氣氛下結束了,回到賓館,第一件事就是復製今天展會上遇到的問題,因為對軟件產品的問題來說,隻有能夠復製的問題才能被解決,否則你既無從著手,也無從檢查問題是否已經被解決了。 經過反復下載更新軟件然後中途切斷電源,最終發現大約每幾十次的斷電操作中就會有一次會變成“死機”,換句話說,今天展會上遇到的問題確實存在,而且確實與切斷電源有關! 問題被復製出來了,但原因卻不知道。 整體係統軟件的結構是這樣的: 一共分成兩部分: 第一部分是啟動程序,隻負責光通信的啟動和下載更新軟件; 第二部分是光通信模塊的控製和管理程序。 其中啟動程序是固定不變的,出廠後是不允許更新的,更新的隻是控製和管理程序。 下載更新軟件時,下載下來的新程序被放在一個緩存中,等下載結束後,先校驗下載下來的內容是否正確,如果不正確,則請求重新下載;如果正確,則再覆蓋原來的程序進行更新,然後再次校驗覆蓋更新後的程序是否正確;如果正確,則重啟光通信模塊的軟件係統。 這樣的安排,從理論上講,無論在下載的過程中發生什麼問題,即使由於種種原因,導致下載更新失敗了,也不會造成“死機”,但實際的情況是卻出現了“死機”。 因此大家七嘴八舌地爭論了起來,各種觀點和推測都有,莫衷一是。 Tom見大家你一言他一語,都快晚上8點了,但還是沒有找到問題的癥結所在,於是就大聲建議道:“大家先去吃飯吧,順便冷卻一下,吃完飯回來再說。” 大家聽Tom這麼說,就嘟嘟囔囔地一邊說著自己的觀點一邊向外走去。 我沒有跟隨大家一起去吃飯,找書苑www.zhaoshuyuan.com因為我嫌他們在的時候人多嘴雜,吵吵嚷嚷地讓人聽了心煩,他們走了,正合我的心意,因為這樣我就可以冷靜下來仔細考慮問題了。 我寫了一個小程序,把“死機”後的光通信模塊中的程序以ASCII碼的形式讀出來,和正常的光通信模塊中的程序進行比較。 我發現,“死機”的光通信模塊中的程序都亂了,這可以理解,但令我驚奇的是居然啟動程序也亂了! 在整個光通信模塊的軟件係統中,是沒有任何指令會把下載的程序內容寫到存放啟動程序的內存空間去的,但現在卻意外地亂了,而且每次“死機”都會發現啟動程序亂了。 我恍如大悟! 我相信我找到問題的癥結了! 不管發生什麼事,都要冷靜、沉著——狄更斯。 【下章看點】 X找到了“死機”的原因,但怎麼解決呢? 如果不解決這個問題,雖然X可以交差了——他答應那兩個AT&T人第二天給他們答案,那麼LunX的CWDM係統在OFC的首秀無疑就失敗了! 因為去OFC參展也好,世界上第一款的CWDM係統的首秀也罷,都不是目的,目的是要把公司的產品向市場,而AT&T肯定不會看上這樣有問題的產品的。如果真是這樣的話,那LunX希望通過在OFC上推出世界上首款CWDM係統來推動公司的下一輪融資和未來的納斯達克上市的計劃也就告吹了...... 欲知詳情,請見下一章分解。