我的第二份工作算是搞軟件的,招聘的時候說是 軟件工程師,但上班后發(fā)現(xiàn),在公司里大家叫我 FW ,漢語發(fā)音為 fen wei(分位),這是相對于HW 的叫法。剛開始的時候,我一直沒弄明白什么是FW?就像很多外行的人聽到這個名字一樣。那么 FW 到底是什么樣子的職位?一個優(yōu)秀的 FW工程師 應(yīng)該具有什么樣的品質(zhì)?
FW 實際上是 FirmWare 的縮寫,就像 HW 是 HardWare 的縮寫一樣,但是很多人都明白 HW 是硬件工程師,是每天和電路原理圖、PCB板子以及電烙鐵、示波器打交道的工作。在現(xiàn)代詞典里,HardWare的解釋是:硬件;FirmWare的解釋是:(計算機的)固件(指存儲在存儲器而非軟件中的指令)。由此可以理解成:在電子系統(tǒng)中,存儲在如Flash里面的,開機后自動啟動,控制電子系統(tǒng)以響應(yīng)用戶操作,也就是嵌入式軟件工程師職位的一個分支。但是,這樣的理解卻并不是對 FW工程師 的準(zhǔn)確表述,他們有著自己特殊處境,有著自己獨特于嵌入式軟件工程師的特殊點。
做一個縱向的對比以幫助我們更好理解 FW工程師。實際上,F(xiàn)W工程師 是夾在軟件工程師(SW)和硬件工程師(HW)中間的那個職位。
軟件工程師(SW)的工作是寫程序產(chǎn)品,他們的工作就是根據(jù)系統(tǒng)架構(gòu)完成特定模塊中的特定部分的編程工作,是一種純粹的寫代碼的工作。即便是底層程序開發(fā)人員,他們的編碼工作也僅僅需要理解目標(biāo)硬件接口的特性,只需要弄明白在什么情況下需要用控制位將硬件設(shè)定在正確的狀態(tài),就可以安心的去寫他們的代碼了。
硬件工程師(HW)的工作主要是把一個電路原理圖,做成一個正確的硬件電路板。這中間又有更進(jìn)一步的分工,電路原理圖有專門的設(shè)計人員,PCB實現(xiàn)有專門的Layout人員,以及EMC等等,他們各司其職。普通意義上的 HW工程師 實際上就是根據(jù)電路原理圖,協(xié)調(diào)Layout、EMC以及工廠方面人員,完成產(chǎn)品設(shè)計,主導(dǎo)期間出現(xiàn)的問題,并與FW工程師配合,完成產(chǎn)品設(shè)計,并編制BOM,將產(chǎn)品導(dǎo)入工廠進(jìn)行批量生產(chǎn)。
FW工程師 就是SW和HW中間的那個角色。他們不需要編寫大量的代碼,因為他們的Source Code是芯片商的軟件開發(fā)團隊開發(fā)好的,基本上已經(jīng)實現(xiàn)的所有的功能,他們不需要自己動手編寫。所以稱他們嵌入式軟件工程師是十分勉強的。但他們的工作是在一個已經(jīng)能夠正常工作的Source Code的基礎(chǔ)上,根據(jù)特定的需要完成一些改變(就整個Source Code來講,這些改變實在是小的可憐)。在某種意義上,他們的工作和軟件維護人員的工作差不多。他們和軟件開發(fā)人員有著明顯的界限,在遇到困難的時候都可以尋求軟件開發(fā)人員的幫助(對于FW工程師,就是找芯片商的技術(shù)支持部門,如果其技術(shù)支持人員搞不定,他們會進(jìn)一步尋求其軟件開發(fā)團隊的幫助);他們都需要對整個Source Code有個大概上的認(rèn)識,要知道代碼在運行期間的主流程,要清楚Source Code有多少模塊和這些模塊的作用。他們在日常工作中,常常會根據(jù)產(chǎn)品差異化的需求而改變OSD(On Screen Display),有時候需要對UI控制方面做比較大的手術(shù);常常會為一個不同供應(yīng)商的硬件做一些正確的初始化設(shè)定,因而要細(xì)心閱讀其datasheet,確保正確控制其按預(yù)期的方式工作;常常會細(xì)心的調(diào)節(jié)個別Register的值,反復(fù)驗證以得到期望的最佳效果;常常要根據(jù)HW的改動,而修給必要的GPIO通道的設(shè)定;常常為了一個Bug而苦思冥想數(shù)日,不斷的反復(fù)的嘗試以定位對應(yīng)的代碼段……
他們不需要有十分扎實的程序基礎(chǔ),不需要有出色的程序設(shè)計能力,不需要知道數(shù)據(jù)庫,不需要知道復(fù)雜的數(shù)據(jù)結(jié)構(gòu)……他們需要熟悉的就是這個Source Code使用的語言(一般是C),需要能夠看懂代碼,可能需要了解操作系統(tǒng)原理(某些Source Code的底層是多任務(wù)的嵌入式操作系統(tǒng)),需要能看懂常見的電路(要能夠基本理解整個硬件系統(tǒng)的工作原理,實際就是了解HW上的信號流),需要熟練使用示波器(某些Bug的分析常常需要使用示波器分析波形)。
最為重要的是他們需要一定的理解能力,需要有比較好的想象力。他們只有比較透徹地理解整個Source Code才能迅速的定位Bug,需要通過想象來猜測被打包封裝的部分代碼的功能。
他們不是真正意義上的程序員,也算不上真正意義上的嵌入式軟件開發(fā)人員,他們是程序員和硬件工程師中間的那個人,那個配合硬件工程師和專業(yè)的軟件工程師之間的過渡體,一邊是從專業(yè)程序員那里取得軟件成品,再根據(jù)項目需要配合HW改造出自己需要的Firmware,燒錄到Flash里面的“固件”。
如何成為一個優(yōu)秀的FW工程師?優(yōu)秀的FW工程師應(yīng)該具有哪些品質(zhì)?請關(guān)注后續(xù)文章。
FW工程師 是一個基本上可以說是個低級的職業(yè),在薪水鏈條里面處于底層。那么他們的出路在哪里?在職業(yè)規(guī)劃上,他們應(yīng)該怎樣向薪水鏈條的上游過度?
-
工程師
+關(guān)注
關(guān)注
59文章
1566瀏覽量
68441
發(fā)布評論請先 登錄
相關(guān)推薦
評論