計算機高手是怎麼煉成的

2016-08-17 23:27:07

由於是全新的行業,我把自己降到瞭零點,我學的VC、Delphi、數據庫派不上用場,擺在我面前的是嵌入式、協議、信令一些我從未接觸過的知識。我 知道我沒有退路,於是拼命的學習,我把自己當做一個應屆畢業生一樣,一分努力一分收獲,半年過去我終於熟悉瞭工作,並且得到瞭公司的表彰,薪水也加瞭一 級。後面的日子裡我們省吃儉用,把欠朋友的1萬多塊錢還瞭,日子終於上瞭正軌。這時女朋友告訴我她想考研究生,我也很支持,於是她辭職在傢備考。

另外,在這裡我要感謝我的ProjectManager,他原來是一個大通信公司的產品經理,對人非常和善,我從他那裡學到瞭很多知識,而且他也給瞭 我許許多多無私的幫助。在工作上他給我充分的空間和信任。記得公司安排我維護一個接入服務器軟件,由於代碼量不算太小(5萬行),資料和文檔都不齊全,我 維護起來非常吃力,所以想重新把它做一遍,公司領導不太支持,可能覺得工作量太大,但是他極力支持我,私下裡他讓我放手去做,我的維護工作他擠時間做。在 他的支持下,我花瞭半年時間完成瞭接入服務器的軟件,並且實現瞭一個相對完整的TCP/IP協議棧。在這裡我學會瞭嵌入式系統設計、驅動開發、TCP /IP和很多通信的知識,我花瞭一年時間終於使自己從MIS開發轉到瞭通信行業,並且站穩瞭腳跟。我的開發大量是對硬件的直接操作,不再受微軟的操作系 統,VC、Delhpi這些開發工具的約束,我終於看到瞭另外一片天空。

我做事情喜歡追根問底,隨著開發的深入,軟件開發與硬件聯系越來越緊密,硬件知識的匱乏又對我的發展產生瞭障礙,而且芯片技術基本上掌握在國外公司的 手裡,這對做系統級設計是一個非常大的制約,一個新產品出來,第一道利潤(也往往是最豐厚的利潤)常常都被IC公司如Intel、Motorola賺去 瞭,國內的廠商隻能喝點湯。所以我決心解決自己的硬件技術障礙,並打算離開通信行業,進入IC設計相關領域。

當然我明白如果我對硬件瞭解的非常少,沒有哪傢IC公司會仁慈到招我這樣一個一竅不通的人來培訓。所以我必須努力打好基礎,學一些相關知識為以後做準 備。就像我開始從MIS轉到通信一樣,我看過大量通信方面的書,並且給一個ISP做過RADIUS計費分揀臺,在這樣的背景下這傢通信公司才給瞭我這個機 會。我在的通信公司是做系統設計的,有不少PCB Layout硬件人員,平常我就註意向他們學習,由於我做的是軟件,在公司看硬件資料不好意思,所以開始隻好在傢看,剛來上海工作我連續一年都在加班,後 來不加瞭,因為我要擠出時間學習,通常我12點左右睡,第二天5點半起,我上班比較早,地鐵上如果人不多我也用來看書。學習當然不會是一帆風順的,有些實 在不懂的問題就積累起來問硬件人員,他們的幫助使我學習進度快瞭很多,因為在沒有人點撥的情況下自學,我的一半時間是花在解決疑難問題上,但這種問題經常 是別人的一句話就可以讓我豁然開朗,我非常慶幸我有這樣的學習環境。在後面的一年裡,我學會瞭看硬件原理圖,學會瞭簡單的硬件設計(模擬電路方面還有不小 的差距),事情就是這樣的,當你安安份份做軟件,別人永遠認為你是軟件開發人員,在你開始學習硬件時別人未必會認同,有位中興通訊的朋友還對我說過,一個 人不可能把所有東西都學完。我也明白這一點,但我希望自己做的更好。但當你熟悉硬件後大傢又會覺得你好像原本就是軟硬件都懂的,同事們也都習以為常瞭。這 個時候我可以把硬件資料堂堂正正的拿到公司看,沒有人再大驚小怪瞭。讓我比較自豪的是我通過自己的努力做瞭一個IAD(軟交換的終端設備)系統方案,包含 軟硬件的選型、設計等內容,這個方案得到瞭公司和同事們的認同,讓我感到非常欣慰。

技術是相輔相成的,當我的硬件有瞭一定的進步後,我的軟件設計也有瞭很大的提高,我可以從更深層次理解問題,我做的接入服務器CPU是 Motorola PowerPC860,熟悉的朋友都知道860 QMC與軟件的批量數據傳輸通常采用BD表的方式,硬件人員做驅動的時候習慣采用固定BD表,每接收或發送數據都將數據從BD表拷貝到用戶Buffer, 或從用戶Buffer拷貝到BD表,由於理解的比較深入,我自己重新實現瞭這個過程,采用動態BD表的方式,驅動從一個網口接收數據,提交給我的軟件進行 三層交換,直至從另外的接口發送出去,沒有進行一次拷貝。這樣的設計大大提高瞭性能,使系統的指標接近理論值。軟硬件的結合使我的設計水平上瞭一個臺階。 我現在寫的這個操作系統,編譯後我把程序反編譯成匯編,找出其中不優化的代碼,然後在C程序中進行調整。舉個例子,很多CPU沒有專門的乘法指令,這個大 傢應該都知道,在這種CPU上進行一個乘法操作常常會花費大量的指令周期,有的朋友會說這個我知道,我會盡量避免采用×號,但是事情往往不是那麼簡單,你 知道 C語言中數組的下標操作是怎麼實現的嗎?仔細看看反匯編的代碼你就會明白,同樣是通過下標的定位操作,C編譯器會有時候會產生位移指令,但有時候會用乘法 實現,兩者效率往往是天壤之別,所以明白這些問題你才能將系統性能提升到極致。這些問題就不多說瞭,有興趣的話以後可以共同探討。