分享過來人的經驗之談,希望能給剛入行嵌入式開發的朋友一點兒幫助。
混跡互聯網行業七年有余,期間走了很多彎路,吃了不少苦。
大學階段
我讀的大學并不是什么好大學,所以在大學開學之前我就打定主意要好好學習,憑技術吃飯。開學前學完了PASCAL,那時連程序的概念都沒有,只好死記硬背代碼,拿紙做筆記。記不清楚用紙寫了多少程序,最長的一次在A4草稿紙寫了30多頁。就在這樣的條件下入門了C/C++。
第一個C語言HelloWorld程序,調試了幾個星期,當時沒有人告訴我TC2.0需要設置下才能用。
大一學完了C、X86的匯編、數據結構、C++ 。
大二準備學VC和BC,當時難以取舍,后來選了VC,不為別的,只為書店里兩本書,VC那本便宜6塊錢。
我的努力在班上無人能及,學的日夜不分,大三有了自己的計算機后更是如此。很多次父親在半夜教訓我,責怪我是不是不要命了。我一直覺得自己基礎差,記憶力又不行,條件也不好,所以覺得只有多花點時間才能趕上別人。后來有許多朋友說我有計算機的天賦,我只能干笑。
我當時用的是486,16M內存、1G硬盤。顯示器是個二手的,輻射非常大,開機屏幕冒火花。安裝一個Windows NT4.0需要一個通宵,編譯一個BC5.0向導生成的程序需要兩個小時。但是就是這臺破機器陪伴我兩年,讓我學會了VC、Delphi、SQL Server等。
大三假期在一個計算機研究所找了個實習機會,工作了兩個月一分錢也沒有拿到,但是這兩個月對我的發展幫助很大。由于工作認真,在一位長者的引薦下開始和他們一起做項目,這使我在讀書期間有了自己的收入,在學生期間有1000多的收入我已經非常滿足了,后來終于用自己賺的錢換了個新計算機。
涉足社會
大四下學期開始找工作,當時非常幼稚地認為工作經驗已經很多。聽父母的想法,想去那個研究所。之前在那邊實習過的部門領導也希望我能去,大概是這種單位比較官僚的原因,最后沒去成。最后去了我兼職過的一家公司做管理信息系統MIS(Management Information System)的公司。畢業之前一年的時間里,做過各種MIS,從煤礦、煙廠、鐵路、到高校,什么有錢就做什么,工作也辛苦,經常加班、通宵。從跟客戶談需求到設計,再到編碼、測試、交付都要干。那時有滿滿的成就感,干勁十足,對自己很滿意,現在回想起來覺得真是膚淺。
剛走上工作崗位的學生容易被誤導,覺得很受公司器重,實際上這樣的工作做下去可能永遠是一個低層次的開發者。
你以為去跟用戶談需求、做設計就是系統分析和設計了嗎,國內又有幾個公司能夠做的很到位很規范?一個公司不是通過了ISO9000或者CMM就能規范了,我現在在一家有幾十年歷史的外企工作,里面的管理不是一般國內企業所能企及的。
作為一個畢業不久、剛步入過社會的學生,幾乎不可能在很短的時間掌握系統分析和設計,面向對象、UML只是一個工具,關鍵是人本身的思想,不是說你熟悉了C++ 、Rose就能夠做出好的設計。
注:統一建模語言(Unified Modeling Language,UML)是一種為面向對象系統的產品進行說明、可視化和編制文檔的一種標準語言,是非專利的第三代建模和規約語言。UML是面向對象設計的建模工具,獨立于任何具體程序設計語言。
我的觀點是不在于你用什么工具和語言,而在于你干什么工作。你的設計體現了你的技術層次。
轉行嵌入式
干了一年MIS,我覺得非常苦悶,做的大多數都是熟練工種的活,個人技術上沒有太多的提高也看不到方向。所以決定離開這個城市去上海,尋求更好的發展,并且打算放棄我以前的MIS。
由于是全新的行業,我學的VC、Delphi、數據庫派不上用場,擺在我面前的是嵌入式、協議、信令一些我從未接觸過的知識。于是拼命的學習,把自己當做一個應屆畢業生,半年過去我終于熟悉了工作,薪水也漲了。
記得公司安排我維護一個接入服務器軟件,由于代碼量不算太小(5萬行),資料和文檔都不齊全,我維護起來非常吃力,所以想重新把它做一遍,花了半年時間完成了接入服務器的軟件,并且實現了一個相對完整的TCP/IP協議棧。在這里我學會了嵌入式系統設計、驅動開發、TCP/IP和很多通信的知識。花了一年時間終于使自己從MIS開發轉到了通信行業,并且站穩了腳跟。
此時,我的開發大多是對硬件的直接操作,不再受操作系統,VC、Delhpi這些開發工具的約束,看到了另外一片天空。
學習IC設計
隨著開發的深入,軟件開發與硬件聯系越來越緊密,硬件知識的匱乏又對我的發展產生了障礙。芯片技術基本上掌握在國外公司的手里,這對做系統級設計是一個非常大的制約,一個新產品出來,第一道利潤也往往是最豐厚的利潤常常都被IC公司賺去了,國內的廠商只能喝點湯。所以我決心解決自己的硬件技術障礙,并打算離開通信行業,進入IC設計相關領域。
當然我明白如果我對硬件了解的非常少,沒有哪家IC公司會仁慈到招我這樣一個一竅不通的人來培訓。所以我必須努力打好基礎,學一些相關知識為以后做準備。
就像我開始從MIS轉到通信一樣,我看過大量通信方面的書,并且給一個ISP(因特網服務提供商)做過RADIUS計費分揀臺,在這樣的背景下這家通信公司才給了我這個機會。
我在的通信公司是做系統設計的,有不少PCB Layout硬件人員,平常我就注意向他們學習,由于我做的是軟件,在公司看硬件資料不好意思,所以開始只好在家看,剛來上海工作我連續一年都在加班,后來不加了,因為我要擠出時間學習,通常我12點左右睡,第二天5點半起,我上班比較早,地鐵上如果人不多,我也用來看書。
學習當然不會是一帆風順的,有些實在不懂的問題就積累起來問硬件人員,他們的幫助使我學習進度快了很多。因為在沒有人點撥的情況下自學,我的一半時間是花在解決疑難問題上,但這種問題經常是別人的一句話就可以讓我豁然開朗,我非常慶幸我有這樣的學習環境。
在后面的一年里,我學會了看硬件原理圖,學會了簡單的硬件設計。當你熟悉硬件后大家又會覺得你好像原本就是軟硬件都懂的,同事們也都習以為常了。這個時候我可以把硬件資料堂堂正正的拿到公司看,沒有人再大驚小怪了。
讓我比較自豪的是我通過自己的努力做了一個IAD(軟交換的終端設備)系統方案,包含軟硬件的選型、設計等內容,這個方案得到了公司和同事們的認同,讓我感到非常欣慰。技術是相輔相成的,當我的硬件有了一定的進步后,我的軟件設計也有了很大的提高 ,我可以從更深層次理解問題。
軟硬件的結合使我的設計水平上了一個臺階。我現在寫的這個操作系統,編譯后我把程序反編譯成匯編,找出其中不優化的代碼,然后在C程序中進行調整。
舉個例子,很多CPU沒有專門的乘法指令,這個大家應該都知道,在這種CPU上進行一個乘法操作常常會花費大量的指令周期,有的朋友會說這個我知道。我會盡量避免采用×號,但是事情往往不是那么簡單,你知道C語言中數組的下標操作是怎么實現的嗎?仔細看看反匯編的代碼你就會明白,同樣是通過下標的定位操作,C編譯器會有時候會產生位移指令,但有時候會用乘法實現,兩者效率往往是天壤之別,所以明白這些問題你才能將系統性能提升到極致。
希望在軟件上做的比較深入的朋友們有機會學學硬件以及其它相關知識,尤其是做底層開發和嵌入式設計的。這對軟件技術的提高有非常大的幫助,否則很多事情你只知道該這樣但不會明白為什么該這樣。
只有干好本職工作后,我才會學習與工作關系不大的技術,這樣公司的上司才不至于反感。
在入門階段的問題我通常不去問那些資深人士 ,而是問一些資歷比較淺的朋友,比如剛畢業不久的學生,因為他們往往會跟你詳細的講解,而資深人士通常覺得你的問題太簡單,所以回答的也很簡單,我又不好意思多問。等技術上了一定的層次后我才會問他們,他們也能給你比較深入的回答。
我最終目的是IC而不是PCB,所以我下一步的準備開始學習IC設計的知識。公司的同事沒有懂IC設計的,后面的路又要靠自己了。買了不少相關的書,在網上也查了很多的資料。花了大量的時間去學習VHDL,并且用軟件進行了一些簡單的設計和仿真。沒有設計ASIC,只是針對FPGA。我漸漸明白了IC設計的基本流程,同時也明白了這條路的艱辛。
跨行發展
換行業是一個非常痛苦的過程,尤其從一個春風得意的位置換到一個陌生的崗位。在原來那家通信公司,我是唯一一個兩年時間漲了五次工資的員工,公司和同事都給了我極大的認可,工作上也常常被委以重任。
最終還是做好了跳槽的準備,我向一家業界有一定知名度的IC設計公司投了簡歷,經過4個多小時漫長的面試。其他的一切我都比較滿意,唯獨薪資差強人意,我也明白原因,因為我是這個行業的新人,我沒有經驗。
公司老板問我6000多一個月能不能接受,我知道他也是照章辦事。想想我通信行業的朋友們,基本上都是年薪10萬以上,月薪過萬的也比比皆是,朋友們也幫我介紹了不 少待遇不錯的公司。
當時我很猶豫,我熱愛我的事業,但我也是一個普通的人,也需要養家糊口,也想早一點買房買車。生活給我出了一道難題。
為了能離自己的夢更近一些,我選擇了這家IC公司,自己的薪資和公司剛進來的碩士研究生相差無幾,但為了今后的發展只能忍受,一切得重新開始。
在已經在這家新公司上了一個多月的班,開始非常艱難,現在慢慢適應了。第一個月結束時,Team Leader找我談話,說我是新進員工中最優秀的一個,我心里很欣慰,這也算對我努力的一個肯定吧。
總結
引用父親常說的一句話,身體是革命的本錢。
我來上海以前學習過于拼命,常常晚上只睡3個多小時,家人也說像我這樣拼命活不過60歲。那時的拼命使我的身體受到了影響,有一次早上突然腰肌劇痛難忍,痛的我倒在床上站不起來。
學習工作是一個長期的過程, 像馬拉松而非百米沖刺。要注意調整學習和工作的強度,保證每天盡量有相對充沛的精力。
以前換行業是因為自己的興趣所致,希望我的經歷不要給朋友一個錯誤的導向,其實各行各業做到頂尖都是大有可為的。
現在我非常注意學習的效率和技巧,比如說學一相對陌生的技術,不妨問一問有經驗的人,不需要問很多,往往他不經意的幾句話會給你非常大的幫助。
原文標題:嵌入式開發經驗分享,把學習當作一種興趣
文章出處:【微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
嵌入式
+關注
關注
5068文章
19017瀏覽量
303245 -
IC
+關注
關注
36文章
5898瀏覽量
175233
原文標題:嵌入式開發經驗分享,把學習當作一種興趣
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論