電子工程師的程序人生歷程
這些日子我一直在寫(xiě)一個(gè)實(shí)時(shí)操作系統內核,已有小成了,等寫(xiě)完我會(huì )全部公開(kāi),希望能 夠為國內IT的發(fā)展盡自己一份微薄的力量。最近看到很多學(xué)生朋友和我當年一樣沒(méi)有方向 ,所以把我的經(jīng)歷寫(xiě)出來(lái)與大家共勉,希望能給剛如行的朋友們一點(diǎn)點(diǎn)幫助。
一轉眼我在IT行業(yè)學(xué)習工作已經(jīng)七年多了,這期間我做過(guò)網(wǎng)頁(yè),寫(xiě)過(guò)MIS、數據庫,應 用程序,做過(guò)通信軟件、硬件驅動(dòng)、協(xié)議棧,到現在做操作系統內核和IC相關(guān)開(kāi)發(fā),這中 間走了很多彎路,也吃了不少苦。 我上的是一個(gè)三流的高校,就連同一個(gè)城市的人多數都不知道。因為學(xué)校不好也就沒(méi) 有指望能靠學(xué)校名氣找一個(gè)好工作。所有的希望都寄托在自己的努力上了,大一開(kāi)學(xué)前的 假期我就開(kāi)始了學(xué)習,記得我買(mǎi)的第一本書(shū)是《計算機基礎DOS3.0》,大家別嚇著(zhù)了,其 實(shí)當時(shí)已經(jīng)普及了DOS6.22了,只是我在書(shū)店里看到了DOS4.0,5.0,6.0的書(shū),以為像英語(yǔ) 那樣是第四、五、六冊,記得當時(shí)到處找DOS1.0,現在想想也幸好我沒(méi)有找到:)開(kāi)學(xué)前 我學(xué)完了PASCAL,那時(shí)既沒(méi)有計算機也沒(méi)有人可以請教,我連程序是什么的概念都沒(méi)有, 只好死記硬背代碼,然后拿紙寫(xiě),我一直到大三才有了一臺486,在這之前用紙寫(xiě)了多少程 序我也記不清楚了,只知道最長(cháng)的一個(gè)我拿A4大小的草稿紙寫(xiě)了30多頁(yè),我的C語(yǔ)言、C++ 、VC都是在這樣的條件下入門(mén)的。所以說(shuō)條件是可以克服的,希望我的經(jīng)歷多少給條件艱 苦的同學(xué)們一點(diǎn)信心。
第一次上機是在我姐夫的機房,我的心情激動(dòng)的無(wú)與倫比,但是一 上機我立刻傻了眼,他們用的是英文版的Win3.1,我的那點(diǎn)DOS知識都見(jiàn)了鬼,上機提心吊 膽的一陣瞎摸,一不小心把Word弄成了全屏,怎么都還不了原,當時(shí)真是心急如焚,我以 為機器被我弄壞了。第一個(gè)C語(yǔ)言程序,就是那個(gè)經(jīng)典的HelloWorld,我調了幾個(gè)星期,上 機機會(huì )非常少,也沒(méi)有書(shū)告訴我開(kāi)發(fā)環(huán)境(TC2.0)需要設置,而且 開(kāi)始我都不知道有編譯器,我甚至自作聰明把寫(xiě)好的程序擴展名從.c改成.exe,結果可想 而知。大一學(xué)完了C、X86的匯編、數據結構、C++。由于精力都花在自學(xué)上了,大一下四門(mén) 課掛了彩,三類(lèi)學(xué)校就是這點(diǎn)好,掛上一二十門(mén)也照樣畢業(yè)。
不過(guò)扯遠點(diǎn)說(shuō),我那么刻苦 都及不了格,可見(jiàn)我們國家的計算機教育有多死板。 大二準備學(xué)VC和BC,當時(shí)難以取舍,后來(lái)選了VC,不為別的,只為書(shū)店里兩本書(shū),VC 那本便宜6塊錢(qián)。我的努力在班上無(wú)人能及,學(xué)的日夜不分,大三有了計算機后更是如此, 很多次父親半夜教訓我說(shuō)我不要命了,我一直覺(jué)得自己基礎差,記憶又不行,條件也不好 ,所以覺(jué)得只有多花點(diǎn)時(shí)間才能趕上別人。居然后來(lái)有許多朋友說(shuō)我有學(xué)計算機的天賦, 讓我哭笑不得。我用的是486,16M內存,1G硬盤(pán),當時(shí)同學(xué)們的配置都是P166MMX,我安裝 一個(gè)Windows NT4.0需要一個(gè)通宵,編譯一個(gè)BC5.0向導生成的程序需要近兩個(gè)小時(shí),我的 顯示器是個(gè)二手的,輻射非常大,開(kāi)機屏幕冒火花,看起來(lái)很酷的:),有一次程序寫(xiě)的 太久,覺(jué)得怎么白色的編輯器背景變成了紫色,以為顯示器壞了,后來(lái)才發(fā)現眼睛不行了 ,不過(guò)說(shuō)來(lái)也奇怪,到今天我的視力還能保持1.5,真是個(gè)奇跡。但是就是那臺破機器陪伴 了我兩年,讓我學(xué)會(huì )了VC、Delphi、SQLServer等。后來(lái)那臺機器給我阿姨打字用,據她說(shuō) 一天她正打的開(kāi)心,一股青煙夾著(zhù)火苗從顯示器鉆出來(lái),之后它才壽終正寢。
大三假期找了個(gè)機會(huì )在一個(gè)計算機研究所實(shí)習,與其說(shuō)實(shí)習不如說(shuō)是做義工,工作了兩個(gè) 月一分錢(qián)沒(méi)有拿。但是這兩個(gè)月對我的發(fā)展幫助很大,讓我早一步了解了社會(huì ),剛去的時(shí) 候我當然是一竅不通,在那里我熟悉了網(wǎng)絡(luò ),學(xué)會(huì )了Delphi和Oracle。由于工作很認真, 得到了比較好的評價(jià),在一位長(cháng)者的引薦下,我開(kāi)始和他們一起做項目,這使我在大三大 四就有了自己的收入,大四又找了兩家MIS公司兼職,雖然錢(qián)不多,但是在學(xué)生期間有100 0多的收入我已經(jīng)非常滿(mǎn)足了,我終于用自己賺的錢(qián)把計算機換了。大四下開(kāi)始找工作,這 時(shí)我的工作經(jīng)驗已經(jīng)比較多(當然現在想想非常幼稚),開(kāi)始聽(tīng)父母的想去那個(gè)研究所, 實(shí)習過(guò)那個(gè)部門(mén)也希望我能去,但是不知道為什么最后不了了之,這種單位就是比較官僚 ,我一氣之下就到了我兼職的一個(gè)公司做MIS的TeamLeader。在大三到畢業(yè)一年的時(shí)間,做 過(guò)了各種MIS,從煤氣、煙廠(chǎng)、公安、鐵路、飲食到高校,什么有錢(qián)做什么,工作也很辛苦 ,經(jīng)常加班和熬通宵,從跟客戶(hù)談需求到設計、編碼、測試、交付都要上。那時(shí)覺(jué)得很有 成就感,覺(jué)得自己還不錯,現在想想真是很膚淺。
來(lái)到上海是傍晚6點(diǎn)半,我們都不知道該去哪里,我們找了一個(gè)20塊錢(qián)的旅館,這個(gè)房間連窗戶(hù)都沒(méi)有,7月份的天氣酷 熱難耐,房間里非常悶熱。第二天我們開(kāi)始租房子,因為身上的錢(qián)不多,我們基本都是步 行,花了一個(gè)星期時(shí)間,不知道在浦東轉了多少圈后找到了一個(gè)400塊的房子,但是我們都 不了解上海是付三壓一,還要付半個(gè)月的中介費,買(mǎi)了一些鍋碗瓢盆后,我們身上只有80
0塊錢(qián)了,工作都還沒(méi)有著(zhù)落,這800塊錢(qián)要支持到我們拿到第一個(gè)月工資,為了省錢(qián)我們
自己做飯,每天買(mǎi)菜只花兩塊錢(qián),她非常喜歡吃(也可能她在大學(xué)經(jīng)常挨餓的愿意),看
到她現在這樣省吃?xún)€用我真的很不忍心。她以前的男朋友也沒(méi)有放過(guò)她,經(jīng)常打電話(huà)來(lái)騷
擾,并且來(lái)上??此?,還說(shuō)了不少恐嚇她的話(huà),她過(guò)于善良,說(shuō)他以前畢竟幫助過(guò)她,叫
我不要與他一般見(jiàn)識。以后的每天在家就是苦等面試通知,原本我想迅速找一家MIS公司解
決眼前的困難,但是她堅持讓我不要放棄自己的理想,終于功夫不負有心人,我找到了一
家通信公司,4000塊的工資雖然趕不上MIS公司給我開(kāi)出的價(jià)位,但也夠在上海生存。她也
找到了工作,第一天上班她哭了,這是她來(lái)上海第一次流淚,我心里很難受也很感動(dòng)。
由于是全新的行業(yè),我把自己降到了零點(diǎn),我學(xué)的VC、Delphi、數據庫派不上用場(chǎng),
擺在我面前的是嵌入式、協(xié)議、信令一些我從未接觸過(guò)的知識。我知道我沒(méi)有退路,于是
拼命的學(xué)習,我把自己當做一個(gè)應屆畢業(yè)生一樣,一分努力一分收獲,半年過(guò)去我終于熟
悉了工作,并且得到了公司的表彰,薪水也加了一級。后面的日子里我們省吃?xún)€用,把欠
朋友的1萬(wàn)多塊錢(qián)還了,日子終于上了正軌。這時(shí)女朋友告訴我她想考研究生,我也很支持
,于是她辭職在家備考。
另外,在這里我要感謝我的ProjectManager,他原來(lái)是一個(gè)大通信公司的產(chǎn)品經(jīng)理,
對人非常和善,我從他那里學(xué)到了很多知識,而且他也給了我許許多多無(wú)私的幫助。在工
作上他給我充分的空間和信任。記得公司安排我維護一個(gè)接入服務(wù)器軟件,由于代碼量不
算太?。?萬(wàn)行),資料和文檔都不齊全,我維護起來(lái)非常吃力,所以想重新把它做一遍,
公司領(lǐng)導不太支持,可能覺(jué)得工作量太大,但是他極力支持我,私下里他讓我放手去做,
我的維護工作他擠時(shí)間做。在他的支持下,我花了半年時(shí)間完成了接入服務(wù)器的軟件,并
且實(shí)現了一個(gè)相對完整的TCP/IP協(xié)議棧。在這里我學(xué)會(huì )了嵌入式系統設計、驅動(dòng)開(kāi)發(fā)、TC
P/IP和很多通信的知識,我花了一年時(shí)間終于使自己從MIS開(kāi)發(fā)轉到了通信行業(yè),并且站穩
了腳跟。我的開(kāi)發(fā)大量是對硬件的直接操作,不再受微軟的操作系統,VC、Delhpi這些開(kāi)
發(fā)工具的約束,我終于看到了另外一片天空。
我做事情喜歡追根問(wèn)底,隨著(zhù)開(kāi)發(fā)的深入,軟件開(kāi)發(fā)與硬件聯(lián)系越來(lái)越緊密,硬件知
識的匱乏又對我的發(fā)展產(chǎn)生了障礙,而且芯片技術(shù)基本上掌握在國外公司的手里,這對做
系統級設計是一個(gè)非常大的制約,一個(gè)新產(chǎn)品出來(lái),第一道利潤(也往往是最豐厚的利潤
)常常都被IC公司如Intel、Motorola賺去了,國內的廠(chǎng)商只能喝點(diǎn)湯。所以我決心解決自
己的硬件技術(shù)障礙,并打算離開(kāi)通信行業(yè),進(jìn)入IC設計相關(guān)領(lǐng)域。
當然我明白如果我對硬件了解的非常少,沒(méi)有哪家IC公司會(huì )仁慈到招我這樣一個(gè)一竅不通
的人來(lái)培訓。所以我必須努力打好基礎,學(xué)一些相關(guān)知識為以后做準備。就像我開(kāi)始從MI
S轉到通信一樣,我看過(guò)大量通信方面的書(shū),并且給一個(gè)ISP做過(guò)RADIUS計費分揀臺,在這
樣的背景下這家通信公司才給了我這個(gè)機會(huì )。我在的通信公司是做系統設計的,有不少PC
B Layout硬件人員,平常我就注意向他們學(xué)習,由于我做的是軟件,在公司看硬件資料不
好意思,所以開(kāi)始只好在家看,剛來(lái)上海工作我連續一年都在加班,后來(lái)不加了,因為我
要擠出時(shí)間學(xué)習,通常我12點(diǎn)左右睡,第二天5點(diǎn)半起,我上班比較早,地鐵上如果人不多
我也用來(lái)看書(shū)。學(xué)習當然不會(huì )是一帆風(fēng)順的,有些實(shí)在不懂的問(wèn)題就積累起來(lái)問(wèn)硬件人員
,他們的幫助使我學(xué)習進(jìn)度快了很多,因為在沒(méi)有人點(diǎn)撥的情況下自學(xué),我的一半時(shí)間是
花在解決疑難問(wèn)題上,但這種問(wèn)題經(jīng)常是別人的一句話(huà)就可以讓我豁然開(kāi)朗,我非常慶幸
我有這樣的學(xué)習環(huán)境。在后面的一年里,我學(xué)會(huì )了看硬件原理圖,學(xué)會(huì )了簡(jiǎn)單的硬件設計
(模擬電路方面還有不小的差距),事情就是這樣的,當你安安份份做軟件,別人永遠認
為你是軟件開(kāi)發(fā)人員,在你開(kāi)始學(xué)習硬件時(shí)別人未必會(huì )認同,有位中興通訊的朋友還對我
說(shuō)
過(guò),一個(gè)人不可能把所有東西都學(xué)完。我也明白這一點(diǎn),但我希望自
己做的更好。但當你熟悉硬件后大家又會(huì )覺(jué)得你好像原本就是軟硬件都懂的,同事們也都
習以為常了。這個(gè)時(shí)候我可以把硬件資料堂堂正正的拿到公司看,沒(méi)有人再大驚小怪了。
讓我比較自豪的是我通過(guò)自己的努力做了一個(gè)IAD(軟交換的終端設備)系統方案,包含軟
硬件的選型、設計等內容,這個(gè)方案得到了公司和同事們的認同,讓我感到非常欣慰。
技術(shù)是相輔相成的,當我的硬件有了一定的進(jìn)步后,我的軟件設計也有了很大的提高
,我可以從更深層次理解問(wèn)題,我做的接入服務(wù)器CPU是Motorola PowerPC860,熟悉的朋
友都知道860 QMC與軟件的批量數據傳輸通常采用BD表的方式,硬件人員做驅動(dòng)的時(shí)候習慣
采用固定BD表,每接收或發(fā)送數據都將數據從BD表拷貝到用戶(hù)Buffer,或從用戶(hù)Buffer拷
貝到BD表,由于理解的比較深入,我自己重新實(shí)現了這個(gè)過(guò)程,采用動(dòng)態(tài)BD表的方式,驅
動(dòng)從一個(gè)網(wǎng)口接收數據,提交給我的軟件進(jìn)行三層交換,直至從另外的接口發(fā)送出去,沒(méi)
有進(jìn)行一次拷貝。這樣的設計大大提高了性能,使系統的指標接近理論值。軟硬件的結合
使我的設計水平上了一個(gè)臺階。我現在寫(xiě)的這個(gè)操作系統,編譯后我把程序反編譯成匯編
,找出其中不優(yōu)化的代碼,然后在C程序中進(jìn)行調整。舉個(gè)例子,很多CPU沒(méi)有專(zhuān)門(mén)的乘法
指令,這個(gè)大家應該都知道,在這種CPU上進(jìn)行一個(gè)乘法操作常常會(huì )花費大量的指令周期,
有的朋友會(huì )說(shuō)這個(gè)我知道,我會(huì )盡量避免采用
評論