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