原文地址: http://www.5xue.com/modules/bbs/viewthread.php?tid=43965&extra=page%3D28
這些日子我一直在寫一個即時作業系統核心,已有小成了,等寫完我會全部公開,希望能 夠為國內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,從瓦斯、煙廠、公安、鐵路、飲食到高校,什麼有錢做什麼,工作也很辛苦 ,經常加班和熬通宵,從跟客戶談需求到設計、編碼、測試、交付都要上。那時覺得很有 成就感,覺得自己還不錯,現在想想真是很膚淺。 剛走上工作崗位的學生很容易被誤導,各種開發工具讓人眼花繚亂,同時也覺得很受 公司器重,但這樣工作永遠是一個低層次的開發人員。不要跟我說什麼系統分析有多麼多麼 重要,多麼多麼難。你以為自己跟使用者談需求做設計就是系統分析和設計了嗎,國內又有 幾個公司能夠做的很到位很規範?我是ISO9000內審員,也在Rational公司受過多次培訓, 拿了4個認證,還有一個公司讓我去做CMM。這些我聽過很多,但是很多事情到國內就變了 性質,一個公司不是通過了ISO9000或者CMM就能規範了,我現在在一家有幾十年歷史的外 企工作,裡面的管理不是一般國內企業能及的。
作為一個畢業不久以前沒有步入過社會的 學生,幾乎不可能在很短的時間掌握系統分析和設計,物件導向、UML只是一個工具,關鍵 是人本身的思想,不是說你熟悉了C++、Rose就能夠做出好的設計,相反如果你具備了很高 的素質,你可以用C寫出比別人用C++更加模組化的程式。 話說遠一些,國內軟體開發行業有一個怪圈,很多人覺得VC > Delphi > VB,真是很 搞笑。這幾個軟體我都做過開發,說白了他們都是工具,應該根據應用的需要選擇用哪 個,而不是覺得哪個上層次。如果你因為用某個開發工具很有面子而選擇的話,只能說明 你很淺薄。如果說層次,那麼這些工具都不上層次,因為它們用來用去都是一些系統的AP I,微軟的朋友不會因為你記住他們多少個API或者多少個類就會覺得你很了不起,你永遠 只是他們的客戶,他們看重的是你口袋裡的銀子。我也做過系統核心,我也封裝過很多AP I,同樣我也不會看重那些使用這些API做二次開發的客戶,除非他能夠作出自己獨到的設 計。 至於有人認為C++ > C那更是讓人笑掉大牙,不妨你去打聽一下,現在有幾個作業系統 核心是用C++寫的,又有幾個即時系統用的是C++,當然我也不是說C++不好,但是目前的內 核和即時系統中C++還無法與C匹敵,至於說C++適合做應用系統的開發那是另外一回事。所 以我的觀點是不在於你用什麼工具和語言,而在於你幹什麼工作。你的設計體現了你的技 術層次。
這樣幹了一年我覺得非常苦悶,做的大多數都是熟練工種的活,個人技術上沒有太多 的提高也看不到方向。所以決定離開這個城市去上海,尋求更好的發展,並且打算放棄我 以前的MIS轉到通訊行業。
以後的每天在家就是苦等面試通知,終於功夫不負有心人,我找到一 家通訊公司,4000塊的工資雖然趕不上MIS公司給我開出的價位,但也夠在上海生存。
由於是全新的行業,我把自己降到了零點,我學的VC、Delphi、資料庫派不上用場, 擺在我面前的是嵌入式、協議、信令一些我從未接觸過的知識。我知道我沒有退路,於是 拚命的學習,我把自己當做一個應屆畢業生一樣,一分努力一分收穫,半年過去我終於熟 悉了工作,並且得到了公司的表彰,薪水也加了一級。
另外,在這裡我要感謝我的ProjectManager,他原來是一個大通訊公司的產品經理, 對人非常和善,我從他那裡學到了很多知識,而且他也給了我許許多多無私的協助。在工 作上他給我充分的空間和信任。記得公司安排我維護一個接入伺服器軟體,由於代碼量不 算太小(5萬行),資料和文檔都不齊全,我維護起來非常吃力,所以想重新把它做一遍, 公司領導不太支援,可能覺得工作量太大,但是他極力支援我,私下裡他讓我放手去做, 我的維護工作他擠時間做。在他的支援下,我花了半年時間完成了接入伺服器的軟體,並 且實現了一個相對完整的TCP/IP協議棧。在這裡我學會了嵌入式系統設計、驅動開發、TC P/IP和很多通訊的知識,我花了一年時間終於使自己從MIS開發轉到了通訊行業,並且站穩 了腳跟。我的開發大量是對硬體的直接操作,不再受微軟的作業系統,VC、Delhpi這些開 發工具的約束,我終於看到了另外一片天空。
學習當然不會是一帆風順的,有些實在不懂的問題就積累起來問硬體人員 ,他們的協助使我學習進度快了很多,因為在沒有人點撥的情況下自學,我的一半時間是 花在解決疑難問題上,但這種問題經常是別人的一句話就可以讓我豁然開朗,我非常慶幸 我有這樣的學習環境。在後面的一年裡,我學會了看硬體原理圖,學會了簡單的硬體設計 (類比電路方面還有不小的差距),事情就是這樣的,當你安安份份做軟體,別人永遠認 為你是軟體開發人員,在你開始學習硬體時別人未必會認同,有位中興通訊的朋友還對我說 過,一個人不可能把所有東西都學完。我也明白這一點,但我希望自 己做的更好。但當你熟悉硬體後大家又會覺得你好像原本就是軟硬體都懂的,同事們也都 習以為常了。這個時候我可以把硬體資料堂堂正正的拿到公司看,沒有人再大驚小怪了。
話說遠一點,我由衷的希望在軟體上做的比較深入的朋友們有機會學學硬體以及其它 相關知識,尤其是做底層開發和嵌入式設計的。這對軟體技術的提高有非常大的協助,否 則很多事情你只知道該這樣但不會明白為什麼該這樣。我這個觀點在我現在的IC公司Proj ect Manager那裡也得到了驗證。他告訴我們公司現在的802.11晶片產品的軟體經理原本是 做該晶片硬體設計的,某某某原本是做軟體的,現在在做IC,類似的例子還有很多,只是 在國內這樣的風氣不是非常流行。 我有一些心得體會與大家分享,只有當我幹好本職工作後,我才會學習與工作關係不 大的技術,這樣公司的上司才不至於反感,在入門階段的問題我通常不去問那些資深人士 ,而是問一些資曆比較淺的朋友,比如剛畢業不久的學生,因為他們往往會跟你詳細的講 解,而資深人士通常覺得你的問題太簡單,所以回答的也很簡單,我又不好意思多問。等 技術上了一定的層次後我才會問他們,他們也能給你比較深入的回答。
愛因斯坦在63歲時說過“一個人沒有在30歲以前達成科學上的最大成就,那他永遠都不會 有。”這句話給了我很大的壓力和震動,我馬上就26歲了,離30隻有四年時間,我必須抓 緊這幾年寶貴的時間,努力達到我技術上的最高峰。為了這個理想,為了能離自己的夢更 近一些,我選擇了這家IC公司,我明白自己的薪資和公司剛進來的碩士研究生相差無幾, 但為了今後的發展只能忍受,一切又得重新開始。換行業是一個非常痛苦的過程,尤其從 一個春風得意的位置換到一個陌生的崗位,感覺象從溫暖的被子裡鑽出來跳進冰水中,讓 人難以接受。在原來那家通訊公司,我是唯一兩年時間漲了五次工資的員工,公司和同事 都給了我極大的認可,工作上也常常被委以重任。但現在這一切都成了過去,在新的公司 我只是一個新人,沒有人知道也沒有人在意我過去的成績。我決定重新開始,我把自己看作 新畢業的學生,我要用自己的努力得到公司的認可。進入新的行業是非常痛苦的,我告訴 自己必須忍受這一切,雖然外面有很多誘惑,但是既然作出了選擇我就不允許自己輕易放 棄。 我現在已經在這家新公司上了一個多月的班,開始非常艱難,現在慢慢適應了。
第一 個月結束時,Team Leader找我談話,說我是新進員工中最優秀的一個,我心裡很欣慰,這 也算對我努力的一個肯定吧。 現在的公司有自己的作業系統,自己的CPU、DSP和其它晶片,在這裡我能學到世界上 最先進的技術,我們的設計開發不再完全依賴別人的硬體和系統,這讓我很開心。
後記: 就像有的朋友說的,我的經曆或許會給一些朋友產生誤導,在這裡我必須說明一下。 我來上海以前學習過於拚命,常常晚上只睡3個多小時,我身高1米71,那時只有108斤(我 現在130多),家人也說我這樣拚命活不過60歲,但是當時的我太固執,我對他們說只要能 實現理想活50歲我就夠了。那時的拚命使我的身體受到了影響,有一次早上突然腰肌劇痛 難忍,痛的我倒在床上站不起來。雖然我現在已經比較注意,但有時候還會隱隱作痛。後 來在女朋友說服了我,來上海以後我不再如此。我經常引用父親的一句話“身體是革命的 本錢”。 而且我也發現拚命不是辦法,我可以熬一兩個通宵,最多的一次我連續工作了三天三夜, 但是我半個月都沒有恢複過來,這樣是不是得不償失?學習工作應該是一個長期的過程, 像馬拉松而不是百米衝刺。
技術沒有貴賤只分,我以前換行業是因為自己的興趣所致,而不是對哪個行業有什麼 偏見。我希望我的經曆不要給朋友一個錯誤的導向,覺得我始終向更高的技術發展。其實 各行各業做到頂尖都是很困難的。話又說回來雖然技術沒有貴賤,但是門檻是有高低的, 無論如何,做IC的門檻要比做網頁的高,這一點無可否認。國家各種人才都是需要的,但 是作為個人奮發向上的想法還是應該有的,努力在自己喜歡的行業上做的更好,而不應該 停留在比較膚淺的層次上。 我是一個自己覺得比較有自知之明的人,或許我最大的優點就是知道自己有很多缺點 :)。
另外我的學習方法也是在不斷改善中的,過去 的學習過於講究數量和時間,那樣學習既苦而已效率不高,現在我非常注意學習的效率和 技巧,這樣才是學習的捷徑(當然不是指投機取巧),比如說學一相對陌生的技術,如果 有條件,不妨問一問有經驗的人,不需要問很多,往往他不經意的幾句話會給你非常大的 協助,甚至超過你看一個星期的書。這就像做設計一樣,好的設計 是從需求抽象到代碼有很多過程,而不能得到了需求就立刻開始開始編碼。 當然這麼些年的學習和工作多多少少有些收穫,下面我說說我的一些學習的心得,這 些方法未必正確,我也在不斷探索和改進中。
我的學習和工作有相對明確的目標,我不會 一時心動而去學習某一技術,在下決定之前我會考慮很多,包括長期的發展,個人路線的 規劃,需要付出的代價、可能遇到的困難及解決的辦法等等,在決定後還會制定更加明確 的計劃,包括短期、中期和長期的,身邊可以利用到的資源(包括好的書籍、資料、軟硬 件環境,也包括有經驗的朋友或者師長),以及每一個階段是怎麼過渡到高一階段的計劃 ,往往在一個學習階段一旦上路後會走的相對順利,但是跨階段通常比較麻煩,比如從學 習基礎知識轉到實踐。
另外我買書也有自己的方法,現在世面上高品質的書遠不如低品質 書多,對於一個陌生的技術,往往在第一次買書會選擇錯誤,即使買到一本好書但是它的 方向也未必適合你,所以我通常會先在網上尋找一些該技術的介紹,有了一點點概念後再 去買一本比較薄、相對便宜並且內容相對泛泛而談的書,這是國內作者最善於寫的書:) ,再把它瀏覽一遍後我就會基本明白這門技術的要點,後面買書和制定計劃就會明確的多 。否則一開始就想找本好書往往比較困難,而且買回來後努力學習,有時候學了一半才發現 是本低品質的書或者是相對過時技術,讓人非常懊惱。另外讓有經驗的人幫你介紹,通常也是一個不錯的選擇。