新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 學(xué)習(xí)方法與實(shí)踐 > 電子工程師的程序人生歷程

電子工程師的程序人生歷程

——
作者: 時(shí)間:2007-03-14 來源: 收藏

    這些日子我一直在寫一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,已有小成了,等寫完我會(huì)全部公開,希望能 夠?yàn)閲鴥?nèi)IT的發(fā)展盡自己一份微薄的力量。最近看到很多學(xué)生朋友和我當(dāng)年一樣沒有方向 ,所以把我的經(jīng)歷寫出來與大家共勉,希望能給剛?cè)缧械呐笥褌円稽c(diǎn)點(diǎn)幫助。

   一轉(zhuǎn)眼我在IT行業(yè)學(xué)習(xí)工作已經(jīng)七年多了,這期間我做過網(wǎng)頁,寫過MIS、數(shù)據(jù)庫,應(yīng) 用程序,做過通信軟件、硬件驅(qū)動(dòng)、協(xié)議棧,到現(xiàn)在做操作系統(tǒng)內(nèi)核和IC相關(guān)開發(fā),這中 間走了很多彎路,也吃了不少苦。 我上的是一個(gè)三流的高校,就連同一個(gè)城市的人多數(shù)都不知道。因?yàn)閷W(xué)校不好也就沒 有指望能靠學(xué)校名氣找一個(gè)好工作。所有的希望都寄托在自己的努力上了,大一開學(xué)前的 假期我就開始了學(xué)習(xí),記得我買的第一本書是《計(jì)算機(jī)基礎(chǔ)DOS3.0》,大家別嚇著了,其 實(shí)當(dāng)時(shí)已經(jīng)普及了DOS6.22了,只是我在書店里看到了DOS4.0,5.0,6.0的書,以為像英語 那樣是第四、五、六冊,記得當(dāng)時(shí)到處找DOS1.0,現(xiàn)在想想也幸好我沒有找到:)開學(xué)前 我學(xué)完了PASCAL,那時(shí)既沒有計(jì)算機(jī)也沒有人可以請教,我連程序是什么的概念都沒有, 只好死記硬背代碼,然后拿紙寫,我一直到大三才有了一臺486,在這之前用紙寫了多少程 序我也記不清楚了,只知道最長的一個(gè)我拿A4大小的草稿紙寫了30多頁,我的C語言、C++ 、VC都是在這樣的條件下入門的。所以說條件是可以克服的,希望我的經(jīng)歷多少給條件艱 苦的同學(xué)們一點(diǎn)信心。

   第一次上機(jī)是在我姐夫的機(jī)房,我的心情激動(dòng)的無與倫比,但是一 上機(jī)我立刻傻了眼,他們用的是英文版的Win3.1,我的那點(diǎn)DOS知識都見了鬼,上機(jī)提心吊 膽的一陣瞎摸,一不小心把Word弄成了全屏,怎么都還不了原,當(dāng)時(shí)真是心急如焚,我以 為機(jī)器被我弄壞了。第一個(gè)C語言程序,就是那個(gè)經(jīng)典的HelloWorld,我調(diào)了幾個(gè)星期,上 機(jī)機(jī)會(huì)非常少,也沒有書告訴我開發(fā)環(huán)境(TC2.0)需要設(shè)置,而且 開始我都不知道有編譯器,我甚至自作聰明把寫好的程序擴(kuò)展名從.c改成.exe,結(jié)果可想 而知。大一學(xué)完了C、X86的匯編、數(shù)據(jù)結(jié)構(gòu)、C++。由于精力都花在自學(xué)上了,大一下四門 課掛了彩,三類學(xué)校就是這點(diǎn)好,掛上一二十門也照樣畢業(yè)。

  不過扯遠(yuǎn)點(diǎn)說,我那么刻苦 都及不了格,可見我們國家的計(jì)算機(jī)教育有多死板。 大二準(zhǔn)備學(xué)VC和BC,當(dāng)時(shí)難以取舍,后來選了VC,不為別的,只為書店里兩本書,VC 那本便宜6塊錢。我的努力在班上無人能及,學(xué)的日夜不分,大三有了計(jì)算機(jī)后更是如此, 很多次父親半夜教訓(xùn)我說我不要命了,我一直覺得自己基礎(chǔ)差,記憶又不行,條件也不好 ,所以覺得只有多花點(diǎn)時(shí)間才能趕上別人。居然后來有許多朋友說我有學(xué)計(jì)算機(jī)的天賦, 讓我哭笑不得。我用的是486,16M內(nèi)存,1G硬盤,當(dāng)時(shí)同學(xué)們的配置都是P166MMX,我安裝 一個(gè)Windows NT4.0需要一個(gè)通宵,編譯一個(gè)BC5.0向?qū)傻某绦蛐枰鼉蓚€(gè)小時(shí),我的 顯示器是個(gè)二手的,輻射非常大,開機(jī)屏幕冒火花,看起來很酷的:),有一次程序?qū)懙?太久,覺得怎么白色的編輯器背景變成了紫色,以為顯示器壞了,后來才發(fā)現(xiàn)眼睛不行了 ,不過說來也奇怪,到今天我的視力還能保持1.5,真是個(gè)奇跡。但是就是那臺破機(jī)器陪伴 了我兩年,讓我學(xué)會(huì)了VC、Delphi、SQLServer等。后來那臺機(jī)器給我阿姨打字用,據(jù)她說 一天她正打的開心,一股青煙夾著火苗從顯示器鉆出來,之后它才壽終正寢。

  大三假期找了個(gè)機(jī)會(huì)在一個(gè)計(jì)算機(jī)研究所實(shí)習(xí),與其說實(shí)習(xí)不如說是做義工,工作了兩個(gè) 月一分錢沒有拿。但是這兩個(gè)月對我的發(fā)展幫助很大,讓我早一步了解了社會(huì),剛?cè)サ臅r(shí) 候我當(dāng)然是一竅不通,在那里我熟悉了網(wǎng)絡(luò),學(xué)會(huì)了Delphi和Oracle。由于工作很認(rèn)真, 得到了比較好的評價(jià),在一位長者的引薦下,我開始和他們一起做項(xiàng)目,這使我在大三大 四就有了自己的收入,大四又找了兩家MIS公司兼職,雖然錢不多,但是在學(xué)生期間有100 0多的收入我已經(jīng)非常滿足了,我終于用自己賺的錢把計(jì)算機(jī)換了。大四下開始找工作,這 時(shí)我的工作經(jīng)驗(yàn)已經(jīng)比較多(當(dāng)然現(xiàn)在想想非常幼稚),開始聽父母的想去那個(gè)研究所, 實(shí)習(xí)過那個(gè)部門也希望我能去,但是不知道為什么最后不了了之,這種單位就是比較官僚 ,我一氣之下就到了我兼職的一個(gè)公司做MIS的TeamLeader。在大三到畢業(yè)一年的時(shí)間,做 過了各種MIS,從煤氣、煙廠、公安、鐵路、飲食到高校,什么有錢做什么,工作也很辛苦 ,經(jīng)常加班和熬通宵,從跟客戶談需求到設(shè)計(jì)、編碼、測試、交付都要上。那時(shí)覺得很有 成就感,覺得自己還不錯(cuò),現(xiàn)在想想真是很膚淺。

   來到上海是傍晚6點(diǎn)半,我們都不知道該去哪里,我們找了一個(gè)20塊錢的旅館,這個(gè)房間連窗戶都沒有,7月份的天氣酷 熱難耐,房間里非常悶熱。第二天我們開始租房子,因?yàn)樯砩系腻X不多,我們基本都是步 行,花了一個(gè)星期時(shí)間,不知道在浦東轉(zhuǎn)了多少圈后找到了一個(gè)400塊的房子,但是我們都 不了解上海是付三壓一,還要付半個(gè)月的中介費(fèi),買了一些鍋碗瓢盆后,我們身上只有80
0塊錢了,工作都還沒有著落,這800塊錢要支持到我們拿到第一個(gè)月工資,為了省錢我們
自己做飯,每天買菜只花兩塊錢,她非常喜歡吃(也可能她在大學(xué)經(jīng)常挨餓的愿意),看
到她現(xiàn)在這樣省吃儉用我真的很不忍心。她以前的男朋友也沒有放過她,經(jīng)常打電話來騷
擾,并且來上海看她,還說了不少恐嚇?biāo)脑挘^于善良,說他以前畢竟幫助過她,叫
我不要與他一般見識。以后的每天在家就是苦等面試通知,原本我想迅速找一家MIS公司解
決眼前的困難,但是她堅(jiān)持讓我不要放棄自己的理想,終于功夫不負(fù)有心人,我找到了一
家通信公司,4000塊的工資雖然趕不上MIS公司給我開出的價(jià)位,但也夠在上海生存。她也
找到了工作,第一天上班她哭了,這是她來上海第一次流淚,我心里很難受也很感動(dòng)。
由于是全新的行業(yè),我把自己降到了零點(diǎn),我學(xué)的VC、Delphi、數(shù)據(jù)庫派不上用場,
擺在我面前的是嵌入式、協(xié)議、信令一些我從未接觸過的知識。我知道我沒有退路,于是
拼命的學(xué)習(xí),我把自己當(dāng)做一個(gè)應(yīng)屆畢業(yè)生一樣,一分努力一分收獲,半年過去我終于熟
悉了工作,并且得到了公司的表彰,薪水也加了一級。后面的日子里我們省吃儉用,把欠
朋友的1萬多塊錢還了,日子終于上了正軌。這時(shí)女朋友告訴我她想考研究生,我也很支持
,于是她辭職在家備考。


另外,在這里我要感謝我的ProjectManager,他原來是一個(gè)大通信公司的產(chǎn)品經(jīng)理,
對人非常和善,我從他那里學(xué)到了很多知識,而且他也給了我許許多多無私的幫助。在工
作上他給我充分的空間和信任。記得公司安排我維護(hù)一個(gè)接入服務(wù)器軟件,由于代碼量不
算太?。?萬行),資料和文檔都不齊全,我維護(hù)起來非常吃力,所以想重新把它做一遍,
公司領(lǐng)導(dǎo)不太支持,可能覺得工作量太大,但是他極力支持我,私下里他讓我放手去做,
我的維護(hù)工作他擠時(shí)間做。在他的支持下,我花了半年時(shí)間完成了接入服務(wù)器的軟件,并
且實(shí)現(xiàn)了一個(gè)相對完整的TCP/IP協(xié)議棧。在這里我學(xué)會(huì)了嵌入式系統(tǒng)設(shè)計(jì)、驅(qū)動(dòng)開發(fā)、TC
P/IP和很多通信的知識,我花了一年時(shí)間終于使自己從MIS開發(fā)轉(zhuǎn)到了通信行業(yè),并且站穩(wěn)
了腳跟。我的開發(fā)大量是對硬件的直接操作,不再受微軟的操作系統(tǒng),VC、Delhpi這些開
發(fā)工具的約束,我終于看到了另外一片天空。

我做事情喜歡追根問底,隨著開發(fā)的深入,軟件開發(fā)與硬件聯(lián)系越來越緊密,硬件知
識的匱乏又對我的發(fā)展產(chǎn)生了障礙,而且芯片技術(shù)基本上掌握在國外公司的手里,這對做
系統(tǒng)級設(shè)計(jì)是一個(gè)非常大的制約,一個(gè)新產(chǎn)品出來,第一道利潤(也往往是最豐厚的利潤
)常常都被IC公司如Intel、Motorola賺去了,國內(nèi)的廠商只能喝點(diǎn)湯。所以我決心解決自
己的硬件技術(shù)障礙,并打算離開通信行業(yè),進(jìn)入IC設(shè)計(jì)相關(guān)領(lǐng)域。

當(dāng)然我明白如果我對硬件了解的非常少,沒有哪家IC公司會(huì)仁慈到招我這樣一個(gè)一竅不通
的人來培訓(xùn)。所以我必須努力打好基礎(chǔ),學(xué)一些相關(guān)知識為以后做準(zhǔn)備。就像我開始從MI
S轉(zhuǎn)到通信一樣,我看過大量通信方面的書,并且給一個(gè)ISP做過RADIUS計(jì)費(fèi)分揀臺,在這
樣的背景下這家通信公司才給了我這個(gè)機(jī)會(huì)。我在的通信公司是做系統(tǒng)設(shè)計(jì)的,有不少PC
B Layout硬件人員,平常我就注意向他們學(xué)習(xí),由于我做的是軟件,在公司看硬件資料不
好意思,所以開始只好在家看,剛來上海工作我連續(xù)一年都在加班,后來不加了,因?yàn)槲?
要擠出時(shí)間學(xué)習(xí),通常我12點(diǎn)左右睡,第二天5點(diǎn)半起,我上班比較早,地鐵上如果人不多
我也用來看書。學(xué)習(xí)當(dāng)然不會(huì)是一帆風(fēng)順的,有些實(shí)在不懂的問題就積累起來問硬件人員
,他們的幫助使我學(xué)習(xí)進(jìn)度快了很多,因?yàn)樵跊]有人點(diǎn)撥的情況下自學(xué),我的一半時(shí)間是
花在解決疑難問題上,但這種問題經(jīng)常是別人的一句話就可以讓我豁然開朗,我非常慶幸
我有這樣的學(xué)習(xí)環(huán)境。在后面的一年里,我學(xué)會(huì)了看硬件原理圖,學(xué)會(huì)了簡單的硬件設(shè)計(jì)
(模擬電路方面還有不小的差距),事情就是這樣的,當(dāng)你安安份份做軟件,別人永遠(yuǎn)認(rèn)
為你是軟件開發(fā)人員,在你開始學(xué)習(xí)硬件時(shí)別人未必會(huì)認(rèn)同,有位中興通訊的朋友還對我

過,一個(gè)人不可能把所有東西都學(xué)完。我也明白這一點(diǎn),但我希望自
己做的更好。但當(dāng)你熟悉硬件后大家又會(huì)覺得你好像原本就是軟硬件都懂的,同事們也都
習(xí)以為常了。這個(gè)時(shí)候我可以把硬件資料堂堂正正的拿到公司看,沒有人再大驚小怪了。
讓我比較自豪的是我通過自己的努力做了一個(gè)IAD(軟交換的終端設(shè)備)系統(tǒng)方案,包含軟
硬件的選型、設(shè)計(jì)等內(nèi)容,這個(gè)方案得到了公司和同事們的認(rèn)同,讓我感到非常欣慰。

技術(shù)是相輔相成的,當(dāng)我的硬件有了一定的進(jìn)步后,我的軟件設(shè)計(jì)也有了很大的提高
,我可以從更深層次理解問題,我做的接入服務(wù)器CPU是Motorola PowerPC860,熟悉的朋
友都知道860 QMC與軟件的批量數(shù)據(jù)傳輸通常采用BD表的方式,硬件人員做驅(qū)動(dòng)的時(shí)候習(xí)慣
采用固定BD表,每接收或發(fā)送數(shù)據(jù)都將數(shù)據(jù)從BD表拷貝到用戶Buffer,或從用戶Buffer拷
貝到BD表,由于理解的比較深入,我自己重新實(shí)現(xiàn)了這個(gè)過程,采用動(dòng)態(tài)BD表的方式,驅(qū)
動(dòng)從一個(gè)網(wǎng)口接收數(shù)據(jù),提交給我的軟件進(jìn)行三層交換,直至從另外的接口發(fā)送出去,沒
有進(jìn)行一次拷貝。這樣的設(shè)計(jì)大大提高了性能,使系統(tǒng)的指標(biāo)接近理論值。軟硬件的結(jié)合
使我的設(shè)計(jì)水平上了一個(gè)臺階。我現(xiàn)在寫的這個(gè)操作系統(tǒng),編譯后我把程序反編譯成匯編
,找出其中不優(yōu)化的代碼,然后在C程序中進(jìn)行調(diào)整。舉個(gè)例子,很多CPU沒有專門的乘法
指令,這個(gè)大家應(yīng)該都知道,在這種CPU上進(jìn)行一個(gè)乘法操作常常會(huì)花費(fèi)大量的指令周期,
有的朋友會(huì)說這個(gè)我知道,我會(huì)盡量避免采用



關(guān)鍵詞: 工程師

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉