這些日子我一直在寫一個實時操作系統內核,已有小成了,等寫完我會全部公開,希望能 夠為國內IT的發展盡自己一份微薄的力量。最近看到很多學生朋友和我當年一樣沒有方向 ,所以把我的經歷寫出來與大家共勉,希望能給剛如行的朋友們一點點幫助。
一轉眼我在IT行業學習工作已經七年多了,這期間我做過網頁,寫過MIS、數據庫,應 用程序,做過通信軟件、硬件驅動、協議棧,到現在做操作系統內核和IC相關開發,這中 間走了很多彎路,也吃了不少苦。 我上的是一個三流的高校,就連同一個城市的人多數都不知道。因為學校不好也就沒 有指望能靠學校名氣找一個好工作。所有的希望都寄托在自己的努力上了,大一開學前的 假期我就開始了學習,記得我買的第一本書是《計算機基礎DOS3.0》,大家別嚇著了,其 實當時已經普及了DOS6.22了,只是我在書店里看到了DOS4.0,5.0,6.0的書,以為像英語 那樣是第四、五、六冊,記得當時到處找DOS1.0,現在想想也幸好我沒有找到:)開學前 我學完了PASCAL,那時既沒有計算機也沒有人可以請教,我連程序是什么的概念都沒有, 只好死記硬背代碼,然后拿紙寫,我一直到大三才有了一臺486,在這之前用紙寫了多少程 序我也記不清楚了,只知道最長的一個我拿A4大小的草稿紙寫了30多頁,我的C語言、C++ 、VC都是在這樣的條件下入門的。所以說條件是可以克服的,希望我的經歷多少給條件艱 苦的同學們一點信心。
第一次上機是在我姐夫的機房,我的心情激動的無與倫比,但是一 上機我立刻傻了眼,他們用的是英文版的Win3.1,我的那點DOS知識都見了鬼,上機提心吊 膽的一陣瞎摸,一不小心把Word弄成了全屏,怎么都還不了原,當時真是心急如焚,我以 為機器被我弄壞了。第一個C語言程序,就是那個經典的HelloWorld,我調了幾個星期,上 機機會非常少,也沒有書告訴我開發環境(TC2.0)需要設置,而且 開始我都不知道有編譯器,我甚至自作聰明把寫好的程序擴展名從.c改成.exe,結果可想 而知。大一學完了C、X86的匯編、數據結構、C++。由于精力都花在自學上了,大一下四門 課掛了彩,三類學校就是這點好,掛上一二十門也照樣畢業。
不過扯遠點說,我那么刻苦 都及不了格,可見我們國家的計算機教育有多死板。 大二準備學VC和BC,當時難以取舍,后來選了VC,不為別的,只為書店里兩本書,VC 那本便宜6塊錢。我的努力在班上無人能及,學的日夜不分,大三有了計算機后更是如此, 很多次父親半夜教訓我說我不要命了,我一直覺得自己基礎差,記憶又不行,條件也不好 ,所以覺得只有多花點時間才能趕上別人。居然后來有許多朋友說我有學計算機的天賦, 讓我哭笑不得。我用的是486,16M內存,1G硬盤,當時同學們的配置都是P166MMX,我安裝 一個Windows NT4.0需要一個通宵,編譯一個BC5.0向導生成的程序需要近兩個小時,我的 顯示器是個二手的,輻射非常大,開機屏幕冒火花,看起來很酷的:),有一次程序寫的 太久,覺得怎么白色的編輯器背景變成了紫色,以為顯示器壞了,后來才發現眼睛不行了 ,不過說來也奇怪,到今天我的視力還能保持1.5,真是個奇跡。但是就是那臺破機器陪伴 了我兩年,讓我學會了VC、Delphi、SQLServer等。后來那臺機器給我阿姨打字用,據她說 一天她正打的開心,一股青煙夾著火苗從顯示器鉆出來,之后它才壽終正寢。
大三假期找了個機會在一個計算機研究所實習,與其說實習不如說是做義工,工作了兩個 月一分錢沒有拿。但是這兩個月對我的發展幫助很大,讓我早一步了解了社會,剛去的時 候我當然是一竅不通,在那里我熟悉了網絡,學會了Delphi和Oracle。由于工作很認真, 得到了比較好的評價,在一位長者的引薦下,我開始和他們一起做項目,這使我在大三大 四就有了自己的收入,大四又找了兩家MIS公司兼職,雖然錢不多,但是在學生期間有100 0多的收入我已經非常滿足了,我終于用自己賺的錢把計算機換了。大四下開始找工作,這 時我的工作經驗已經比較多(當然現在想想非常幼稚),開始聽父母的想去那個研究所, 實習過那個部門也希望我能去,但是不知道為什么最后不了了之,這種單位就是比較官僚 ,我一氣之下就到了我兼職的一個公司做MIS的TeamLeader。在大三到畢業一年的時間,做 過了各種MIS,從煤氣、煙廠、公安、鐵路、飲食到高校,什么有錢做什么,工作也很辛苦 ,經常加班和熬通宵,從跟客戶談需求到設計、編碼、測試、交付都要上。那時覺得很有 成就感,覺得自己還不錯,現在想想真是很膚淺。
來到上海是傍晚6點半,我們都不知道該去哪里,我們找了一個20塊錢的旅館,這個房間連窗戶都沒有,7月份的天氣酷 熱難耐,房間里非常悶熱。第二天我們開始租房子,因為身上的錢不多,我們基本都是步 行,花了一個星期時間,不知道在浦東轉了多少圈后找到了一個400塊的房子,但是我們都 不了解上海是付三壓一,還要付半個月的中介費,買了一些鍋碗瓢盆后,我們身上只有80
0塊錢了,工作都還沒有著落,這800塊錢要支持到我們拿到第一個月工資,為了省錢我們自己做飯,每天買菜只花兩塊錢,她非常喜歡吃(也可能她在大學經常挨餓的愿意),看到她現在這樣省吃儉用我真的很不忍心。她以前的男朋友也沒有放過她,經常打電話來騷擾,并且來上??此€說了不少恐嚇她的話,她過于善良,說他以前畢竟幫助過她,叫我不要與他一般見識。以后的每天在家就是苦等面試通知,原本我想迅速找一家MIS公司解決眼前的困難,但是她堅持讓我不要放棄自己的理想,終于功夫不負有心人,我找到了一家通信公司,4000塊的工資雖然趕不上MIS公司給我開出的價位,但也夠在上海生存。她也找到了工作,第一天上班她哭了,這是她來上海第一次流淚,我心里很難受也很感動。
由于是全新的行業,我把自己降到了零點,我學的VC、Delphi、數據庫派不上用場,擺在我面前的是嵌入式、協議、信令一些我從未接觸過的知識。我知道我沒有退路,于是拼命的學習,我把自己當做一個應屆畢業生一樣,一分努力一分收獲,半年過去我終于熟悉了工作,并且得到了公司的表彰,薪水也加了一級。后面的日子里我們省吃儉用,把欠朋友的1萬多塊錢還了,日子終于上了正軌。這時女朋友告訴我她想考研究生,我也很支持,于是她辭職在家備考。
另外,在這里我要感謝我的ProjectManager,他原來是一個大通信公司的產品經理,對人非常和善,我從他那里學到了很多知識,而且他也給了我許許多多無私的幫助。在工作上他給我充分的空間和信任。記得公司安排我維護一個接入服務器軟件,由于代碼量不算太?。?萬行),資料和文檔都不齊全,我維護起來非常吃力,所以想重新把它做一遍,公司領導不太支持,可能覺得工作量太大,但是他極力支持我,私下里他讓我放手去做,我的維護工作他擠時間做。在他的支持下,我花了半年時間完成了接入服務器的軟件,并且實現了一個相對完整的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上進行一個乘法操作常常會花費大量的指令周期,有的朋友會說這個我知道,我會盡量避免采用。
編輯:hfy
-
模擬電路
+關注
關注
125文章
1588瀏覽量
103484 -
實時操作系統
+關注
關注
1文章
201瀏覽量
31135
發布評論請先 登錄
相關推薦
工程師經驗分享:社區之星 趙云 沉著穩定才能做好技術

長沙怎么這么難招硬件工程師呀

電子工程師的電源設計經驗分享
電子工程師的PCB設計經驗
電子工程師的電源設計經驗
電子工程師的電路設計經驗分享



嵌入式軟件工程師和硬件工程師的區別?



評論