程序員向嵌入式系統(tǒng)工程師轉(zhuǎn)型需注意的問題
但很多長年從事技術(shù)工作的程序員,如果從事技術(shù)之外的工作,可能存在適應(yīng)問題,市場、管理、自行創(chuàng)業(yè)等轉(zhuǎn)型方式自己未必覺得適合。如果在30—35歲之后仍然決定從事技術(shù)工作,也可以選擇轉(zhuǎn)向嵌入式系統(tǒng)開發(fā),也就是純軟件程序員轉(zhuǎn)型成為嵌入式系統(tǒng)工程師。
業(yè)界公認:嵌入式系統(tǒng)工程師,包括硬件工程師和嵌入式軟件程序員,生命周期要比純軟件程序員長得多,待遇相對也高一些。主要原因是嵌入式系統(tǒng)多用于工業(yè)等領(lǐng)域,在這些領(lǐng)域中,嵌入式系統(tǒng)應(yīng)用面千變?nèi)f化,技術(shù)成熟程度、可靠性、成本等是決定系統(tǒng)選型的核心問題,華而不實的東西比較少,像Microsoft和Intel那樣壟斷PC市場軟硬件,聯(lián)合起來從用戶口袋里掏錢這種行為難以存在,新技術(shù)往往不是被追逐的對象,成熟技術(shù)是更容易被接受的,例如8051系列單片機已經(jīng)使用了20多年,現(xiàn)在仍然被大量使用。
筆者正處在這種轉(zhuǎn)型即將完成之時,總結(jié)經(jīng)驗教訓(xùn),筆者提出自己的幾點看法,談一下純軟件程序員向嵌入式系統(tǒng)工程師轉(zhuǎn)型時需注意的一些問題:
1、澄清一個誤區(qū)——WinCE和嵌入式Linux并不完全等于嵌入式系統(tǒng)開發(fā)
目前,一談到嵌入式系統(tǒng),就容易談到WinCE和嵌入式Linux,還有.NET Compact Framework和J2ME等,許多純軟件程序員,學(xué)會了WinCE開發(fā),學(xué)會了嵌入式Linux開發(fā),就認為自己已經(jīng)入門或者精通了嵌入式系統(tǒng)開發(fā)。其實WinCE和嵌入式Linux本身只是嵌入式操作系統(tǒng)(eOS),它們均來自相應(yīng)的PC操作系統(tǒng)——Windows和Linux,.NET Compact Framework和J2ME也來自相應(yīng)的PC虛擬機平臺——.NET Framework和J2SE,這類eOS和虛擬機平臺只能用于高檔嵌入式系統(tǒng)硬件,例如手機或者PDA,軟件開發(fā)使用的硬件本身是一個成熟的硬件平臺,例如一部成品手機/PDA,或者一塊帶有TFT LCD和觸摸屏的實驗板,這種嵌入式軟件開發(fā)和相應(yīng)的PC軟件開發(fā)極其相似,甚至是趨同的,很少直接和硬件打交道。這類嵌入式系統(tǒng)開發(fā)只是嵌入式系統(tǒng)開發(fā)中的很小一部分而已,主要用于消費類電子產(chǎn)品的開發(fā),很少用于工業(yè)領(lǐng)域。
2、硬件能力的提升十分關(guān)鍵
嵌入式系統(tǒng)開發(fā)涉及的知識面比純軟件開發(fā)更大,嵌入式系統(tǒng)工程師的付出可能數(shù)倍于純軟件程序員。這一方面是因為嵌入式系統(tǒng)是“嵌入”的,也就是用于大系統(tǒng)或者產(chǎn)品內(nèi)部的廣義計算機軟硬件系統(tǒng),非常容易涉及到交叉學(xué)科和領(lǐng)域,例如:一個智能電力儀表內(nèi)部使用的嵌入式系統(tǒng),開發(fā)時工程師就必須懂得電力方面的相關(guān)知識;一個智能化工儀表內(nèi)部使用的嵌入式系統(tǒng),開發(fā)時工程師就同樣必須懂得化工方面的相關(guān)知識,否則不僅不能很好地完成開發(fā),還可能出現(xiàn)產(chǎn)品無法適應(yīng)電力、化工等行業(yè)特殊環(huán)境的問題,甚至可能因為錯誤開發(fā)而引發(fā)電力、化工等方面的嚴(yán)重事故。另一方面就是因為嵌入式系統(tǒng)開發(fā)包括了硬件開發(fā),即使軟件開發(fā)也很容易直接涉及到硬件,因此提高自身的硬件能力也就成為純軟件程序員向嵌入式系統(tǒng)工程師轉(zhuǎn)型的關(guān)鍵問題了。
對于缺乏硬件和電路基礎(chǔ)的純軟件程序員,向嵌入式系統(tǒng)工程師轉(zhuǎn)型時,提高硬件和電路能力非常重要。在這方面沒什么捷徑可走,一方面是基礎(chǔ)知識的學(xué)習(xí),重點是大學(xué)里學(xué)過的《模擬電子技術(shù)》、《數(shù)字電子技術(shù)》、《計算機組成原理》等課程的內(nèi)容;另一方面就是動手,這是最重要的,沒聽說過哪個電子高手是看書背書練成的,都是電烙鐵和萬用表下練出來的,自己購買元器件、電烙鐵、萬用表、編程器等必須的材料和工具,自己查資料設(shè)計電路,自行動手焊接制作實驗板和電路,不要依靠成品實驗板,是提高嵌入式系統(tǒng)硬件能力的有效方法,在這方面不要怕“出血”——學(xué)成之后的收入會對得起你,但是,學(xué)習(xí)之時必須坐得住冷板凳——學(xué)技術(shù)都應(yīng)該是這個態(tài)度。
3、不可盲目懷舊
某些嵌入式軟件開發(fā)與DOS軟件開發(fā)有一定的相似之處,例如硬件完全透明,大量使用C語言甚至匯編語言等,很多DOS時代過來的純軟件程序員容易在嵌入式軟件開發(fā)上懷舊,認為DOS軟件開發(fā)又回來了。適當(dāng)懷舊也無不可,但如果認為嵌入式系統(tǒng)開發(fā)是DOS開發(fā)的翻版,那就大錯特錯了。前面說過,嵌入式系統(tǒng)是一個涉及面更大的領(lǐng)域,硬件從低檔的8051一直到高檔的ARM9、MIPS64等,軟件從匯編語言一直到.NET Compact Framework和J2ME,現(xiàn)代軟件開發(fā)思想——面向?qū)ο?、設(shè)計模式、體系結(jié)構(gòu)、軟件工程等仍然指導(dǎo)著嵌入式軟件開發(fā),而且有逐漸深入的趨勢。盲目懷舊會影響自己對新技術(shù)、新知識和新思想的學(xué)習(xí),須知就算是嵌入式系統(tǒng)開發(fā)新技術(shù)更新較慢,但新技術(shù)仍然是大量涌現(xiàn)的,10年前十幾塊芯片組成的電路可能現(xiàn)在只需要一塊SoC MCU就能實現(xiàn),10年前幾百行幾千行匯編語言程序的軟件開發(fā)規(guī)模,現(xiàn)在8051的軟件開發(fā)規(guī)模都可能達到幾千行甚至上萬行C語言程序,不引入現(xiàn)代軟件開發(fā)思想是行不通的。
柏楊先生在他的著作《丑陋的中國人》中曾經(jīng)辛辣地諷刺了我們這個民族的某些劣根性,其中有一個就是“向后看”、“向古看”以及“古時什么都好”。例如今天有人看到上學(xué)貴、看病貴和住房貴,就說“70年代最好,上大學(xué)不要錢,看病免費,福利分房,還不如回到70年代”,殊不知70年代上大學(xué)確實不要錢,還有補助(一直延續(xù)到80年代初),可是高考升學(xué)率不到10%;70年代看病免費,可是當(dāng)時一家生好幾個孩子有幾個養(yǎng)不活是常事;70年代福利分房,可是一家三代人擠十幾平方米的房子也是常事,筆者敢說一句話,把適應(yīng)了今天的生活,卻拼命說70年代多好的人,讓他們真正過一段時間70年代的生活,不消一個月,十個里面有九個又都會拼命說吃不消的?,F(xiàn)在某些報刊、雜志和網(wǎng)站經(jīng)常盯著所謂的“80后”和“90后”年輕人說事,拿個例當(dāng)常例,把一些缺點無限放大,說“80后”和“90后”是“垮掉的一代”,這些話聽著玩可以,但作為老程序員,我們應(yīng)該捫心自問:為什么我們會被20出頭甚至十七八歲的“80后”和“90后”程序員所淘汰?是什么逼得我們轉(zhuǎn)型的?
“長江后浪推前浪,前浪死在沙灘上”,“沉舟側(cè)畔千帆過,病樹前頭萬木春”,盲目懷舊,放棄學(xué)習(xí),只會讓自己更快地被淘汰,純軟件開發(fā)如此,嵌入式系統(tǒng)開發(fā)同樣如此。嵌入式系統(tǒng)雖然沒有太多華而不實的更新和升級,更加依靠工程師的經(jīng)驗,適合基礎(chǔ)牢固和經(jīng)驗豐富的老一代程序員轉(zhuǎn)型,但這只能說是更適合老一代程序員的實際情況一些,絕不是意味著轉(zhuǎn)型后可以放棄對新技術(shù)、新知識和新思想的學(xué)習(xí)。
純軟件程序員選擇向嵌入式系統(tǒng)工程師轉(zhuǎn)型,這是一條充滿艱難險阻的道路,但一旦選擇了這條道路,堅持走下去,可能會獲得意想不到的成功。愿中國嵌入式系統(tǒng)開發(fā)產(chǎn)業(yè)的熊熊烈火早日被點燃!