各路大神對于嵌入式的核心競爭力的看法
一.行業(yè)
找工作時,并不光光是找職位,更重要的是找行業(yè)。不同行業(yè)中同樣的職位需要掌握的知識技能是不一樣的,比如同樣是嵌入式驅動開發(fā)工程師,消費電子可能主要是做BOOT,通信設備就更看重協(xié)議和接口的實現(xiàn)。這樣過個三五年轉行的成本就很高了,因為你在這樣行業(yè)中大量用到的知識另外一個行業(yè)可能基本用不到。
因此,在嵌入式的大家庭中選擇一個好的行業(yè)尤為重要,就應用領域來說主要有消費電子、通信設備、安檢安防、醫(yī)療電子、工業(yè)控制、汽車電子。總的來說,這幾個行業(yè)都處于上升期,行業(yè)產值快速攀升,除非下一次技術革命到來,否則嵌入式還將繼續(xù)長大。但如果一個個分開來,區(qū)別還是有的。
消費電子伴隨著中產階級的擴大和消費理念的強化在近幾年成為成長最快的領域,從硬件到軟件,從手機到平板,再到各種智能電視,嵌入式得到迅速普及,大有把你所能碰到的東西都變成電腦的架勢,據統(tǒng)計,消費電子五年的復合增長率高達73%,在經濟低迷的2012年,國內的消費電子依然有高速的增長。但消費電子升級快、壓力大,分子風光,下面分母死傷無數,極高速的增長會不會帶來泡沫還需要謹慎觀察。
通信設備領域主要是電信基礎設施、骨干網設施等組成,其增長的原動力還是網絡更好更快更廣和國家相關的電信基建計劃,3G、4G,LTD都是燒錢的游戲。雖然你從2011下半年開始,華為中興兩個領頭羊都出現(xiàn)了利潤大幅下滑的現(xiàn)象,這主要是受全球經濟不景氣的影響,各國紛紛縮減了投資,但在未來2-3年內,收到新一代IPV6網絡和3G普及的刺激,通信設備將迎來艷陽天。
工業(yè)控制是個很穩(wěn)重的領域,不像消費電子這么浮躁,也趕不上通信設備升級的速度,工業(yè)控制講究的是實用和穩(wěn)定,比方說當今大部分工業(yè)控制方法都是古老的PID,工控機還裝著古老的WIN2000。工控嵌入式的增長完全和工業(yè)增長指數聯(lián)系在一起,越是技術密集型的工業(yè)就越需要嵌入式軟件來幫助管理,所以最近經濟不景氣和虛擬經濟的畸形發(fā)展已經壓迫到了實體工業(yè)的發(fā)展,工控的增長會是一個慢而平穩(wěn)的長期過程。
安檢安防也是一個近幾年快速爆發(fā)的領域,源動力來源于安全和維穩(wěn)。一方面是單位需要,比如小區(qū),飯店,學校,銀行,另一方面就是城市安全需要,比如交管,街道。前幾年在大城市掀起的攝像頭風如今廣大縣城也正在上演,2011是安防行業(yè)值得慶賀的一年,這一年,安防從模擬到數字、從單機到網絡、從普清到高清,再加之結合“安全城市”、“智慧城市”、“物聯(lián)網”等概念,雖然現(xiàn)在行業(yè)整體產值并不高,但未來10-20年都將是安防設備大普及年。
醫(yī)療電子的增長已進入平穩(wěn)期,蓋因大小醫(yī)院早已完成了設備更新改造,在未來的20年內他們將很少會采購新的設備,最近五年復合增長率為15%,不過醫(yī)療電子的增長希望已經轉向了便攜式醫(yī)療設備,就是我們??吹降碾娮友獕河?、紅外體溫計,便攜式血糖儀之類的設備,復合增長率為24%,產值達到近40億美元。但說實話根據生活經驗,這些便攜設備家里都不怎么用,更多的還是傳統(tǒng)設備。當然了,中國有13億人,隨著老齡化加劇和國人健康意識提高,便攜式醫(yī)療電子會有一個慢慢起飛的過程。
汽車電子適合汽車緊密相連的產業(yè),下面的導航設備,車載娛樂設備,車輛控制系統(tǒng)都是準標配設備,可以說是一榮俱榮,一損俱損。汽車的增長率今年是14-15%,相信汽車電子也會保持一個類似的速度增長。
應該說,每個主要領域都是有不俗的表現(xiàn)的,相比其他落日產業(yè),這幾個領域都有個人發(fā)揮的足夠空間。
二.核心競爭力之行業(yè)經驗
什么東西是不能簡單復制的,只要不是書本的就是不能簡單復制的。
什么是行業(yè)經驗呢?我是這樣認為的:每個行業(yè)都有一條長長的產業(yè)鏈,比如手機,從芯片銷售集團或者說解決方案提供商(ARM/INTEL等+TI/高通/MTK等+代理商)到手機設計集團(軟件方面:蘋果/安卓/WP等,硬件方面:蘋果/三星/微軟/諾基亞等)再到手機生產集團(很多就不舉例了)最后到消費者,這是一條主鏈條。
你所在的公司一般位于中間某一級別上,這樣就出現(xiàn)了你的上游和你的下游,行業(yè)經驗就是你在你的上游,同級,下游中的形象,更簡單地說,你的上游愿意與你長期有誠意的合作,你的同級欽佩你的能力和人品,你的下游認為與你合作有利有信,總之在全行業(yè)樹立起你的可靠形象是最關鍵的行業(yè)經驗,其次就是技巧性的行業(yè)經驗,比如說合作流程這些可以馬上學到的東西。前者將是你的行業(yè)名片,后者將為你錦上添花。
但是行業(yè)經驗并不容易積累,原因在于研發(fā)人員一般是鐵屁股,沒有機會走出去接觸行業(yè)內部,上游有采購經理,下游有銷售經理,你又有項目經理管,你只是執(zhí)行項目經理和架構師的指令罷了。但如果不深入了解行業(yè),你始終只是IT民工,沒有發(fā)展的機會。
我覺得,當你投身研發(fā)工作3年后,你下面應該有3名小兵,對他們來將,你就是他們的架構師,你要充分把握這一機會減少技術時間,加強學習管理。對下,你需要為你的組員合理分配工作,管理他們的情緒,激發(fā)他們的工作熱情,完成既定工作。對上,你要為你們組爭取利益,并能在所有組面前清楚地表達你的意見和建議,目的只有一個:露臉,使上司認為你是一個綜合性的人才。
在往上走,你成為高級技術人員后,你會有很多機會和同行打交道了,比如各種學習會、交流會、展覽會,和他們建立融洽的關系很重要。也多和市場銷售人員打交道,他們是你在這一時期唯一能獲得上下游信息的人。
再往上走,就基本定型了。你可以考慮急流勇退自己創(chuàng)業(yè)、也可以走行業(yè)內技術專家、也可以走技術與管理結合的路線??傊瑩碛心姆矫娴暮诵母偁幜?,你就適合往哪個方向走。
最后我想說一句:別把自己當做機器使,讓自己沉浸在技術的世界里,一天到晚干著體力勞動,合理分配技術與社交的時間非常重要,不然最后你很有可能被釘死在一個中層崗位上,更重要的是你可能孑然一身,真愛無覓,孤伴終老。
三.核心競爭力之技術經驗
一個研發(fā)人員得以安身立命的根本就是技術經驗。不過可惜的是,技術是很容易復制的。我曾經很自得于自己做過51/430的實際項目,但是說實話,這都不是什么核心競爭力,因為我做的項目也大量參考了網上前輩的代碼,有的甚至是直接拿過來用的,我做的工作有大部分是代碼的剪裁而已。而這個,我相信一個之前沒有經驗的電類本科生,一個月的時間也能學會。也就是說,我和他相比,只是多了一個月的優(yōu)勢罷了。這種容易學習,容易復制的經驗,不能算是核心競爭力。你在網上找到的一切代碼都只能算學習資料。
技術人員除了復制粘貼外,更應該掌握核心的原理性技術。什么是核心技術呢?就是本來沒有只能由你創(chuàng)造或只能由你更低成本創(chuàng)造的技術,比如我的公司是一家從事多媒體處理的公司,我們要開發(fā)一個自動識別瞳孔的設備,核心就是瞳孔識別算法。這個算法可以從網上拿,從國外買,或者自己研發(fā),網上的算法也許你看得懂,但如果不會優(yōu)化,只會裁剪那還是白搭的,這就是原理性技術和技巧性技術的區(qū)別。從國外買成本高而且得不到源碼,這樣自主研發(fā)就是唯一一條路了,如果整個公司只有你有這樣的能力根據客戶需求從原理出發(fā)設計源碼核心,那么恭喜你,你可以理所當讓的拿著高薪了。
技巧性技術更多是指一種經驗,一種積累。比如我積累了兩年的單片機函數庫、我在調試放大器時遇到書本中沒說的問題等,這些都不是在書上就能學到的內容,而擁有這些經驗會讓你開發(fā)的速度變快。但技巧性技術絕對不是核心競爭力,因為它可以在短期內掌握。但有人會問“IT/電子行業(yè)中有些老人隨便一句指點就足夠讓新人琢磨個半年,這種現(xiàn)象是客觀存在的,這個不是核心競爭力嗎?”,要注意的是,老人和新人是沒有競爭關系的,因為他們本來就沒在一個等級上,所以這種倚老賣老的行為構不成核心競爭力,核心競爭力只能在同級之間比較。
技巧性技術可以轉化為核心技術,比方說我調試放大器時遇到一個詭異的問題,我用結果反推原因,再用理論驗證,再而用理論上的調整規(guī)避問題,從現(xiàn)象升華到本質,從知道升華到掌握,就是這么一個轉化的過程。但是不是所有的技巧性技術都能成功轉化,技巧性技術本質上講就是幫助開發(fā)的經驗罷了,扎實的掌握原理并能舉一反三才是核心技術的源泉。
說了這么多,總結一下。核心競爭力大致分成兩個方面:深入的行業(yè)經驗和扎實的原理技術。前者通過時間慢慢的積累,后者可以通過密集的學習掌握,但兩者也都需要長期的實踐鞏固加強。
四.嵌入式核心競爭力六大特點
1、嵌入式系統(tǒng)為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片或單片機本身中,而不是存貯于磁盤等載體中。
2、嵌入式系統(tǒng)的硬件和軟件都必須地設計,量體裁衣、去除冗余,力爭在同樣的硅片面積上實現(xiàn)更高的性能,這樣才能在具體應用中對處理器的選擇更具有競爭力。
3、嵌入式系統(tǒng)是將先進的計算機技術、半導體技術和電子技術與各個行業(yè)的具體應用相結合后的產物。這一點就決定了它必然是一個技術密集、資金密集、高度分散、不斷創(chuàng)新的知識集成系統(tǒng)。
4、嵌入式系統(tǒng)本身不具備自舉開發(fā)能力,即使設計完成以后用戶通常也是不能對其中的程序功能進行修改的,必須有一套開發(fā)工具和環(huán)境才能進行開發(fā)。
5、嵌入式系統(tǒng)通常是面向特定應用的嵌入式CPU,與通用型的不同就是嵌入式CPU大多工作在為特定用戶群設計的系統(tǒng)中,它通常都具有低功耗、體積小、集成度高等特點,能夠把通用CPU中許多由板卡完成的任務集成在芯片內部,從而有利于嵌入式系統(tǒng)設計趨于小型化,移動能力大大增強,跟網絡的耦合也越來越緊密。
6、嵌入式系統(tǒng)和具體應用有機地結合在一起,它的升級換代也是和具體產品同步進行,因此嵌入式系統(tǒng)產品一旦進入市場,具有較長的生命周期。
五.職位分析
嵌入式開發(fā)涵蓋硬件軟件,開發(fā)鏈條很長,要根據自己的實際情況選擇適應的職位。
嵌入式的職位大概有:
1、硬件工程師:
負責底層的硬件設計,主要要用到:
1.處理器:ARM9,DSP;Niosoll;FPGA(用于高速特殊場合)
2.PCB:EMC設計與仿真;
3.通訊:IIC,IIS,SPI,UART,CAN總線;RS232、PSTN Modem、網絡、GPRS通信;
2、驅動開發(fā)工程師:
負責底層和上層的通訊,主要要用:
1.系統(tǒng):Linux非實時系統(tǒng)/VXworks實時系統(tǒng)+架構/文件系統(tǒng);
2.內核與BOOT:內核裁剪與移植、boot loader和驅動編寫,驅動程序開發(fā)
3.上層接口:USB,網口,
4.底層接口:SPI、UART、IIC、I2S,CAN、IDE
3、軟件工程師:
負責上層應用軟件,主要要用:
1.CPU:51/MSP430/ARM7/ARM9;
2.外設:AD/DA、UART、USB、LCD;
3.總線和通訊接口:I2C,SPI,RS232,RS484,CAN,USB,以太網||||||BACnet、 MODBUS(或有實時性要求)
4.環(huán)境:Linux/QNX+ARM匯編;
5.GUI:VC++/VC#/LABVIEW;
4、系統(tǒng)開發(fā)工程師:
負責系統(tǒng)架構設計
5、DSP軟件工程師:
負責數字信號處理部分,主要要用:
1.CPU:固定為一個小系列(如TI DM642/648/6467、TI C6000、TMS320C5000、Freescale StarCore);
2.算法:熟悉圖像、音頻、視頻相關處理算法很重要,要會修改和優(yōu)化;
3.接口與驅動:網絡協(xié)議(MAC、IP、UDP、TCP)等;
4.操作系統(tǒng):架構設計和操作系統(tǒng)配置;
6、FPGA設計工程師:
負責高速信號處理和部分數字信號處理,主要要用:
1.語言:VHDL/Verilog ;
2.環(huán)境:modlesim、Synplify、Quartus、ISE、ispleverEDA;
3.調試:設計、仿真、調試能力;
4.算法:數字信號處理、濾波設計等算法;
5.接口:E1 Framer/Deframer、HDLC控制器、以太網MAC控制器、SDH Framer/Deframer、SDH Mapper/Demapper、SPI4.2、HiGig、DDR、PCI、PCI-E、DDR-II、HD-SDI
在一個完整的項目中,每個工程師分工合作,完成架構師分配的模塊。每個職位深入研究下去的水都很深,一旦決定很難再順利轉行了,所以畢業(yè)選擇職位時一定要慎重??偟膩碚f軟件方面的需求在國內更大,當然競爭也更加激烈。硬件很多是直接買國外解決方案的,所以硬件職位需求較少,但高級人才非常吃香。
另外某嵌入式er對于核心競爭力這樣看:
在天龍八部中有這樣的一個情節(jié),蕭遠山和慕容博在少林寺強練武術套路而未潛心修習內功心法,最終導致練武不成反傷及自身的情況發(fā)生。而少林掃地僧則達到了可以摘花傷人的地步。這就可以看出,同是練武之人,抓住核心競爭力很重要。而在這里,內功就是核心競爭力。蕭遠山和慕容博恰恰是因為沒有抓住核心競爭力,而只抓住了練武的套路,最終不僅練武不成,還導致自身出現(xiàn)內傷。所以,無論對于一個人還是一個企業(yè),一定要認清到底什么才是自己的核心競爭力!而在對核心競爭力的認識上,鄙人也犯下了蕭遠山和慕容博兩位前輩都犯了的錯誤。
今日在此述說一下自己的想法,但因個人閱歷有限,說辭之中片面之處在所難免,望各位看官保持紀律,不要隨便扔鞋和臭襪子,鄙人先行謝過啦!
嵌入式系統(tǒng)核心競爭力:
1、裁剪性——嵌入式系統(tǒng)支持可伸縮性和開放性的體系結構。
2、接口——可為設備提供 統(tǒng)一的驅動接口。
3、實時性——EOS實時性一般較強,可用于各種設備控制中。
4、操作性——操作簡單方便,視圖易學易用。提供強大的網絡功能,支持TCP/IP協(xié)議及其他協(xié)議,提供TCP/UDP/IP/PPP協(xié)議支持及統(tǒng)一的MAC訪問層接口,為各種移動計算設備預留接口。
5、穩(wěn)定性——唯一指令讓用戶不需過多介入操作,通過系統(tǒng)的調用命令向用戶程序提供服務。
6、移植性——更好的硬件適應性,也就是良好的移植性。
等等,以上舉出嵌入式系統(tǒng)比較常見的自身核心競爭力。如此可以看出,2016年嵌入式開發(fā)前景一片利好。未來隨著物聯(lián)網科技發(fā)展,嵌入式系統(tǒng)將會面臨著巨大的機遇和挑戰(zhàn),嵌入式開發(fā)工程師也將成為企業(yè)核心競爭力的重要指標之一。
下面切入正題。
先直截了當的說一個基本論點:對于嵌入式行業(yè)的研發(fā)人員和企業(yè)來說,各種性能強勁的芯片和各種各樣花樣百出的軟件,都不是嵌入式行業(yè)的核心競爭力。好芯片和好軟件,只是“工欲善其事,必先利其器”中的器,而要“善”的事,才是一個研發(fā)人員和一個企業(yè)的核心競爭力。
下面來舉例說明一下。鄙人從事的是工控領域的嵌入式開發(fā),比較典型的一個應用技術是根據一個設備運行時產生的振動的情況來分析這個設備的運行狀況。這里涉及到兩個部分的技術,一個是設備的振動的信號的采集,另外一個是振動信號的分析。先從一個企業(yè)來說吧,一個企業(yè)想做出這樣的產品,然后在這個行業(yè)立足,那么使用什么芯片和什么傳感器進行信號的采集,這絕對不是核心競爭力了。如果企業(yè)里有個會使用COTEX-M3單片機的人才,那么可以使用COTEX-M3單片機進行信號的采集,如果有個會使用ARM9的人才,那么可以使用ARM9進行信號的采集,這是可以改變的。
由此看來,振動信號的分析才是核心競爭力。但是如果僅僅做到把振動的信號使用傅里葉變換分析出幾個具體的信號波形,也不能構成核心競爭力,因為傅里葉變換技術是隨便一本振動信號分析的書里都有的東西,拿來就用,這也只是一個工具。而且,做這種信號的變換的軟件也有很多,可以用MATLAB,可以用組態(tài)軟件,也可以用LABVIEW,企業(yè)想做不同的界面,只要招聘不同的人才便可,這構不成核心競爭力。而倘若能夠通過采集到的振動信號分析出這臺設備的每一個重要的零部件的具體數據信息,然后判斷出這臺設備中各個零部件分別工作的狀態(tài)如何,這才能構成核心競爭力。當然,這是書上沒有的東西,是需要企業(yè)自己進行研發(fā)的技術,這也是其他企業(yè)無法抄襲的東西。
從以上對企業(yè)的分析中可以看出,對于一個嵌入式研發(fā)人員來說,核心競爭力不是你會使用什么高級的芯片,或者你會使用什么先進的程序設計語言或者軟件。從以上的分析可以看出,對于一個研發(fā)人員來說,核心競爭力也是信號的分析技術。至于原因,不再贅述。
另外再舉一個例子。
現(xiàn)在炒的比較火的一個無線應用是“物聯(lián)網”,在這個物聯(lián)網中,其核心的東西是無線技術,而適合于“物聯(lián)網”的無線技術首推ZIGBEE無線網絡。對于ZIGBEE技術來說,其核心競爭力是什么呢?由上面的分析可以輕易得出結論,ZIGBEE網絡構成的算法就是其核心競爭力。因為ZIGBEE的協(xié)議是公布出來的,大家都看得懂;而各種無線通信的芯片和電路也都是琳瑯滿目,可以盡情選擇;而怎樣通過這些無線芯片實現(xiàn)ZIGBEE網絡,才是其核心。擁有ZIGBEE網絡協(xié)議算法技術的企業(yè),已經在無線領域邁出一大步,比如目前在國內做的比較火的DIGI公司推出的XBEE無線模塊。對于個人來講,道理是一樣的。你會用無線芯片,別人也會用,這都是可以通過書學會的東西。但是,如果你自己研發(fā)出來了ZIGBEE網絡的協(xié)議堆棧,那么這個就是別人無法從書上去學的東西了,這就構成了個人的核心競爭力。
當然,這里并不是說工具不重要。對于個人來講,會使用一款芯片或一款軟件,乃是安身立命的基礎,也是實現(xiàn)核心競爭力的基礎。而對于企業(yè)來說,道理是一樣的。所以在嵌入式行業(yè),必須做到內外兼修,方能成大業(yè)。
最后
無論對于企業(yè)還是個人,做到在外修武術套路,方能安身立命;做到在內修內功心法,方能稱霸一方。所以一定要兼修內功心法和武術套路,如此方能稱霸于武林,有資本參與華山論劍!
另外,著名嵌入式工程師火哥對于嵌入式行業(yè)核心競爭力的看法:
相信很多剛入行1-2年,甚至5年10年的嵌入式工程師都會有這些疑惑。我做的事情好像沒有多少技術含量,我做的事情好像沒有多少創(chuàng)新,做嵌入式的技術競爭力到底在哪?嵌入式到底是做驅動好還是做應用好?很多人說,嵌入式要學習很多很多的技能才能找到工作,既要懂硬件,還要懂編程,精通C/C++,懂操作系統(tǒng)Linux內核,懂通信(4G 5G),懂自動控制,懂數字信號處理,懂網絡協(xié)議棧,懂FPGA,懂電磁兼容,懂Android,是這樣嗎?
一、嵌入式的技術競爭力必須因地制宜,根據你所在的具體環(huán)境具體分析,case by case, 沒有萬能藥方
說到做嵌入式的技術競爭力,其實是和每個嵌入式工程師所身處的環(huán)境有關。所謂的環(huán)境包括:你的學歷,你的家庭因素(是否已婚,家里老人妻兒是否需要時間精力照顧),你所在的城市以及該城市的嵌入式相關產業(yè)結構,你目前從事的行業(yè)和業(yè)務,你現(xiàn)在的工作年限和當前已經有的基礎技能與業(yè)務技能積累深度,你所認識的或互相信任的同行業(yè)的人脈等等。
火哥所擁有的技術競爭力,放在你所處的環(huán)境往往不一定有競爭力,這就好比你在一個二三線城市,整個城市沒有一家做AI深度學習相關的公司,火哥如果給你分享嵌入式+AI深度學習的技能,在你的環(huán)境里就毫無參考意義,如果你只是公司的一個小兵,工作權限只能修改一個模塊,火哥給你分享的復雜業(yè)務場景下大規(guī)模軟件架構技術也意義不大。很多時候個人是難以改變現(xiàn)有環(huán)境的,要么重新選擇環(huán)境,要么適應環(huán)境,再參考別人分享的經驗,根據自己當前的環(huán)境狀況,做出對自己最有利的選擇。
另外還有一個老生常談的撕逼問題,嵌入式到底是做驅動好還是做應用好,其實也是要根據所在城市和公司的組織架構情況而定的,沒有絕對優(yōu)劣。
火哥第一家公司是屬于傳統(tǒng)行業(yè)大廠的嵌入式Linux產品開發(fā)(火哥在應用部門),內核驅動和應用軟件部門是嚴格劃分的,驅動部門大部分都是5年經驗以上核心老員工(相對薪資也高一些),一般不直接校招,應用部門工作3-5年經驗的也可以轉到驅動部門,沒有絕對限制和門檻。應用軟件部門員工相對年輕,經驗淺,應用軟件部門沒有權限提交驅動代碼的修改,只能定位到驅動問題,讓驅動部門的工程師修改。當時這家公司很多核心的業(yè)務邏輯和通信協(xié)議的代碼在驅動層,公司設計的這套組織架構也是為了保證核心部門員工的穩(wěn)定性,并不是說做應用就沒有技術含量,就很難再轉驅動了。
火哥第二家公司是新興行業(yè)小廠AI相關嵌入式Linux產品開發(fā),嵌入式開發(fā)就一個部門8個人(小廠人少,分工就不細),7個人做應用層開發(fā)(火哥還是做應用),1個人做底層驅動。但是底層驅動的人,只是負責新的硬件和驅動功能集成到系統(tǒng)里面,做應用開發(fā)的同事,如果遇到底層的驅動的bug,也要自己有能力解決,底層驅動的同事并不會幫你處理舊的模塊的bug。
火哥第三家公司是新興行業(yè)大廠的Android系統(tǒng)平臺開發(fā)(火哥終于有做底層驅動的機會了)。公司組織架構上根本就不是按驅動開發(fā)部門和應用開發(fā)部門這樣劃分的,而是按模塊劃分部門,比如攝像頭組,存儲組,視頻編解碼組,音頻編解碼組,藍牙、wifi組,功耗電源組,bsp組等等。每個組,只要你負責的模塊有問題,不管是在內核驅動層還是在應用層,都屬于你要處理的。比如攝像頭組,你要有獨立解決攝像頭驅動和應用軟件的能力,而不是說我只做攝像頭驅動,應用不管。
另外火哥還了解到,在二三線城市甚至深圳這種一線城市,一些小廠(尤其是做單片機mcu項目的小廠,可能就二三十人甚至更少),由于人手不夠,或者硬件部門,軟件部門暫時沒有招到合適的人,所以有些嵌入式軟件工程師不得不暫時甚至長期兼顧PCB硬件原理圖設計的工作。當然火哥認為軟硬設計都做的工作實在是不合理,分散精力容易出很多問題,但是不得不承認這種分工的工作在嵌入式(尤其是單片機mcu開發(fā))工程師中是客觀存在的,老板安排的硬件相關工作也不得不去承擔。
雖說每個人具體的技術競爭力問題要根據實際情況,case by case分析,但是火哥還是希望通過本文,拋磚引玉,給出一些case,來引導小伙伴們進行深度思考。
二、能保證飯碗的基礎技術競爭力
一般嵌入式工程師都是指在嵌入式平臺做軟件開發(fā)的工程師,沒有專門的嵌入式硬件工程師說法(硬件工程師自有專門的硬件工程師,這里以軟件為主)。雖然沒有萬能的技術競爭力,找工作也不是什么都要懂(公司招人的基本要求是能夠馬上干活幫老板解決問題,而不是啥都懂吹技術牛逼),但是嵌入式還是有些通用的技術技能需要掌握才能成為一個合格的嵌入式工程師,隨時保證有一個嵌入式的飯碗,能在一線城市找到月薪10K以上的工作(二三線城市根據實際情況遞減),火哥還是建議你要掌握以下幾點通用嵌入式基礎技術。
1. 編程能力
編程能力不用多解釋,嵌入式開發(fā)主要還是軟件編程嘛,C語言盡量精益求精,各種指針、結構體,聯(lián)合體的高級用法滾瓜爛熟不需要問人(可以上豆瓣搜3-5本高分的C語言編程書籍細看),C語言編程能力就是嵌入式開發(fā)的命根子。另外,數據結構對于現(xiàn)代的大規(guī)模嵌入式軟件開發(fā)(不管是單片機mcu還是Linux)也是必學科目,我知道很多電子通信,自動化專業(yè)出身的嵌入式工程師沒有學過數據結構的課程,所以在這里啰嗦一下,去學吧,不然很難看懂別人寫的復雜的程序結構(盡管學了也不保證看得懂)。另外,基本的計算機算法(堆和棧搜索,鏈表反轉,哈希表,二叉樹,紅黑樹,深度優(yōu)先廣度優(yōu)先,時間復雜度……),有時間盡量學一學,補齊短板,雖然并不是說工作中要自己從頭實現(xiàn)或者工作中絕對能用到(知道你們大部分人都是寫業(yè)務邏輯代碼),但是很多公司筆試面試要考,不學可能過不了面試,學了可以開拓思路。C++語言應該也是要懂的,但是C++范式太多,學習時間會比較長,而且每過幾年還會更新,可以先工作,然后工作有時間慢慢學。不要求精通C++(根本就不可能精通所有C++特性和范式),但是至少能夠看得懂基本的語法代碼,能改動別人的C++程序,能調用別人實現(xiàn)好的class實現(xiàn)你的功能。另外最好懂一門腳本語言,比如Python,?Python在做測試用例代碼和自動化工具的時候還是用得挺多的,也不難學,比C/C++簡單(我覺得可以先學Python,再學C++,這樣C++反而不會那么難)。
2. 操作系統(tǒng)與計算機體系結構知識(包括一些編譯,鏈接的知識)
嵌入式程序員和非嵌入式程序員(純APP或者web開發(fā))最大的能力差別就在解決操作系統(tǒng)底層,計算機體系結構相關問題的能力。操作系統(tǒng)知識對于做Linux/Android 或者 RTOS開發(fā)的嵌入式程序員,不用我啰嗦,學吧,最好還要能看看Linux內核源代碼,理解其中的各種子系統(tǒng)的設計機制和設備模型。對于單片機MCU裸機開發(fā)的程序員,雖然可能暫時用不上,但建議你們有時間還是應該學一下,這樣對以后換環(huán)境跳槽選擇的路子會更寬(相比于完全不懂操作系統(tǒng)的老單片機工程師有優(yōu)勢),而且Linux FreeRTOS等操作系統(tǒng)內核都是開源的,里面有豐富的代碼可能可以給你單片機編程提供參考(抄),擴展思路。
計算機體系結構的知識,可以說是做嵌入式程序員(不管是做Linux、Android、RTOS還是單片機MCU裸機)的內功心法。一個CPU是按照什么樣的流程執(zhí)行程序,cache是什么有什么用,TLB是啥,MMU有什么用,中斷流程是怎么執(zhí)行,中斷服務函數和一般函數有啥不同,一個程序運行的地址空間和各種段是怎么樣的分布,系統(tǒng)是怎么啟動最后運行你的應用程序,系統(tǒng)是怎么管理內存,防止碎片化,動態(tài)庫靜態(tài)庫原理上有啥區(qū)別,你所使用的編譯器工具鏈,硬浮點軟浮點的基本原理和使用條件。。。(不懂的可以從《深入理解計算機系統(tǒng)》這本書入手)。這一系列體系結構有關的知識,火哥認為,不管是做操作系統(tǒng)還是做裸機嵌入式,都必須掌握,才能在面試中,得到面試官對你技術底子的認可(很多候選人,可能公司相關業(yè)務知識不熟,但是技術底子不錯,面試官也會考慮給機會)。
3. 硬件的基本知識
關于嵌入式要學多少硬件的問題,眾說紛紜,有些文章渲染地神乎其神,軟硬通吃。但是火哥在嵌入式軟件工程師的面試中,其實被問的真正的硬件問題(CPU中斷這些體系結構知識不算真正硬件知識,體系結構知識是嵌入式必備的)并不多(50次面試就2-3次問過硬件),而且火哥是自動化專業(yè)出身,讀書的時候模電,數電都有認真學,課程設計都有認真做,讀書的時候也有過電力電子的項目經歷,因而面試的硬件問題對火哥來說基本不是問題。
火哥的觀點就是,對于電子通信、自動化專業(yè)出身的嵌入式工程師,以前學校讀書學的模電,數電課本知識基本能夠滿足平時嵌入式軟件開發(fā)中,看懂原理圖,看示波器,和硬件工程師合作溝通,定位軟硬件問題的需求,并不需要再加強多少硬件知識,也不需要真正去設計電路圖,PCB,EMC電磁兼容之類的東西,當然懂一些更好,但是也對找工作加不了太多分。
但是如果是計算機類專業(yè)出身,對硬件完全沒有概念也不行,還是需要花1-2個月時間,看看模電、數電的課本,學習示波器的使用,3個月足以學習基本的概念知識,示波器的使用也就像使用一個辦公軟件一樣,不需要多精通,會用就行,沒有網上吹的那么神(動不動示波器分析射頻電路,fft頻譜特性,動態(tài)響應特性)。
當然如果是在做單片機MCU開發(fā)的小公司,由于公司缺乏人手,需要兼顧硬件開發(fā)的話,那只好硬著頭皮上了,但是這樣花費的時間精力可能比較多,對你跳槽正規(guī)大廠的嵌入式也沒有多少好處。
4. 計算機網絡知識
計算機網絡,TCP/IP,套接字編程,如果是電子通信專業(yè)出身的,學吧!現(xiàn)代嵌入式設備連接網絡的功能越來越多,越來越常見,不一定要把TCP/IP協(xié)議啃得很深(Linux內核有現(xiàn)成的開源實現(xiàn)代碼,不需要你從0開始做),但是基本的概念和網絡應用編程還是要懂,才能增加你的就業(yè)機會。
5. 各種寄存器,軟硬件調試方法和經驗
調試配置寄存器,軟硬件聯(lián)調就是傳統(tǒng)嵌入式代代相傳的手藝活了。這也很能體現(xiàn)大部分人所謂的實際項目中解決問題的能力(定位問題到寄存器配置上,解決問題真有成就感哈!),這項能力還是要靠實際的項目來鍛煉,也就是嵌入式中所謂的吃經驗的東西。
但火哥認為,現(xiàn)代嵌入式開發(fā)不要太迷信這種調試寄存器帶來的成就感,還是應該把大部分精力放在計算機軟件、操作系統(tǒng),體系結構等基礎知識的學習上。調試寄存器的能力就像NBA比賽的灌籃技能一樣,很有成就感,帶來全場歡呼,但是畢竟不是常規(guī)得分手段,也不是常規(guī)技能(大部分得分還是要靠戰(zhàn)術配合,投籃,上籃,三分遠射),嵌入式開發(fā)大部分精力還是要放在編程,實現(xiàn)業(yè)務邏輯上。
三、升職加薪的業(yè)務技術競爭力
要想在公司升值加薪,除了基礎技術競爭力之外(這項只能幫你好跳槽,找工作,不保證升職加薪),還需要和公司業(yè)務相關的技術競爭力(這項競爭力只在同行業(yè)跳槽有效,不保證跨行業(yè)跳槽)。
所謂業(yè)務技術競爭力,就是在特定行業(yè)和公司才有價值的技術競爭力,是無法輕易從書本獲取的技術。盡管火哥承認Linux內核,操作系統(tǒng)原理,計算機基礎算法,計算機體系結構這些知識有一定難度,不是那么容易學的,但是畢竟一個沒有工作經驗的學生都能從書本這種最廉價的途徑獲取,所以無法構成業(yè)務競爭力的壁壘,業(yè)務技術競爭力也是學生和有工作經驗的工程師最主要的差距。
一般來說,業(yè)務技術需要入行之后,在工作中學習,而且不同行業(yè)不同公司能學習到的業(yè)務技術是不一樣的。比如說,通信行業(yè)的公司,4G LTE協(xié)議,標準相關的技術就是業(yè)務技術競爭力;網絡產品行業(yè)的公司,那些網卡路由標準協(xié)議相關的技術就是業(yè)務競爭力;機頂盒產品的公司,音視頻流媒體編解碼播放的相關技術標準就是業(yè)務競爭力;網絡攝像頭產品的公司,攝像頭數據采集與網絡通信協(xié)議相關的技術和標準就是業(yè)務競爭力……
一般進入某個行業(yè)某個公司之后,只有多學習積累公司業(yè)務相關的知識,才能自己獨立完成業(yè)務相關的項目,然后指導新人、同事,帶領團隊做業(yè)務相關的更大的項目,進而在公司掌握更大的業(yè)務話語權,和高管討論公司業(yè)務規(guī)劃,乃至戰(zhàn)略規(guī)劃。
一般站在公司高管的角度,思考的問題都是業(yè)務發(fā)展方向和戰(zhàn)略上的問題,一個工程師Linux內核底層驅動理論和技術能力再好,如果不是在Red Hat SUSE 或者華為的Linux內核部門這種把內核開發(fā)作為業(yè)務方向的公司和部門,那么你牛逼的底層技術能力,也只是一項基礎技術,平時工作解決的再復雜再難的底層內核問題,寫的再風騷的代碼,在高管眼里都只是解決一個普通問題,實現(xiàn)一個普通功能而已。這些都是為公司的業(yè)務服務的鋪路石而已,而高管就像在路上開車,眼里只有終點,盡管鋪路石的好壞可能導致路上的顛簸,但是只要順利到達終點鋪路石看起來并沒有那么重要。
可以說,在公司,你所掌握的和公司戰(zhàn)略方向相關的業(yè)務技能,就像一個放大器,把你實際的技術能力和價值放大多倍,進而帶來更高的收益。但這也帶來了一些問題,如果公司近年的業(yè)績不夠好,你牛逼的業(yè)務能力可能不會給你帶來等價的回報,那就得考慮你在公司業(yè)務方向上花費的時間和精力到底值不值?;鸶绲谝患夜揪陀胁簧贅I(yè)務專家,但是公司業(yè)績一年不如一年,導致業(yè)務專家也和普通小兵一樣拿死工資,沒有得到相應的年終獎,最后,火哥跳槽出來的時候,差不多算跨行跳槽,相關的業(yè)務知識也在面試中沒有太大的幫助。同時,火哥也在和很多面試官聊天中,發(fā)現(xiàn)很多業(yè)務牛人,出來面試,雖然業(yè)務技術牛逼,但是基礎技術花費的精力不夠,所以沒有得到面試官的認可。當然,在同行跳槽的情況下,業(yè)務技術能力的加分還是很大的,比如手機行業(yè),高通跳槽去OPPO、小米的對口部門,待遇上的提升就很多,但是這種真正業(yè)務對口的跳槽機會,火哥認為占少數,所以在業(yè)務技術競爭力上,行業(yè)的選擇一定要有眼光,高薪跳槽機會多的行業(yè),業(yè)務技術才是有競爭力的技術(盡管可能不是最難的技術)。
四、無法輕易獲取的門檻技術競爭力
所謂無法輕易獲取的門檻技術競爭力其實也是業(yè)務競爭力的一種,只是相對于常規(guī)的業(yè)務競爭力來說具有更高的獲取門檻。上一節(jié)所說的業(yè)務競爭力是指一般的業(yè)務競爭力,可以在公司內部,通過參與公司實際項目,業(yè)務知識培訓或者老員工指導,口口相傳中獲取。而這種門檻技術,在公司中一般也是保密的,非偶然機遇,無法獲取,靠自己找資料自學琢磨基本行不通。嵌入式開發(fā)相關領域無法輕易獲取的門檻技術競爭力一般有這些(如果火哥說的有遺漏,可以后臺私信補充):
4G/5G 通信基帶算法與核心業(yè)務邏輯
WiFi、藍牙驅動加載的固件或IP中核心的算法與業(yè)務邏輯
Camera驅動加載的固件或IP中,MIPI-CSI高速數據采集接口相關的核心業(yè)務邏輯,ISP(數字圖像處理)相關的核心算法與業(yè)務邏輯
GPU驅動加載的固件或IP,以及OpenGL、CUDA、OpenCL等API標準的庫實現(xiàn)中核心的算法與業(yè)務邏輯
音視頻編解碼Codec驅動加載的固件或IP,以及OpenMax等API標準的庫實現(xiàn)中的核心算法與業(yè)務邏輯
高清LCD/OLED屏幕,或者HDMI屏幕驅動加載的固件或IP中核心的業(yè)務邏輯和實現(xiàn)
嵌入式設備電源低功耗相關技術
嵌入式設備信息安全與密碼保護相關技術
這些門檻業(yè)務技能,除非你有偶然的機會,去了某個IC原廠專門的部門,否則基本不可能接觸到這種高門檻的業(yè)務技能。如果你在OEM產商從事相關的崗位驅動(比如在小米做手機的camera或者WIFI開發(fā)),你也只能從高通或MTK拿到二進制的固件,幾乎不可能看到核心業(yè)務邏輯的源代碼。這些模塊雖然Linux內核驅動部分可能為了遵守GPL協(xié)議開源,但是一般這種開源的驅動都是hardware enable的驅動,也就是說驅動里面只有使能或者停止設備的基本功能,核心業(yè)務邏輯相關的代碼都抽出來做在固件(可以是內核加載的固件,也可以是應用層的閉源庫)。
有機會接觸這類高門檻核心業(yè)務崗位,也算一種幸運,如果能跳槽到對口的公司,可能拿到非常高的待遇(當然也可能跳槽要簽競業(yè)協(xié)議,每月從老東家拿錢)。
這種崗位的員工,在就業(yè)市場上是非常難招的,公司也會出于防止核心門檻業(yè)務技術機密泄露的目的,花大價錢留住這些核心員工,也不會培養(yǎng)太多懂得這些核心門檻業(yè)務技術的員工。有機會從事相關門檻業(yè)務技術的開發(fā),如果跳槽到對口的賺錢的公司,就有突破年薪50W甚至100W的機會,也算是一種幸運吧。這種嵌入式領域的門檻業(yè)務技術本身的難度相對于Linux內核,Android系統(tǒng)框架等復雜系統(tǒng)而言,也不是絕對的難(畢竟大規(guī)模應用的技術,本身不可能比理論性的東西難,智商良好的大學生應該都能學會),但是輕易無法獲取,會有一種神秘感。
五、跳槽漲薪的新興技術競爭力
目前嵌入式相關的行業(yè)和領域,出現(xiàn)了很多不同于傳統(tǒng)嵌入式領域的產品與解決方案,比如嵌入式+物聯(lián)網+云端,嵌入式+大數據,嵌入式+人工智能,嵌入式+無人駕駛……
關于這些新興技術,也有一些爭議,有些老的工程師對這些東西表示不屑,認為也不是很有技術難度和深度,就是調用一下別人做的云端或者AI的API,有很多泡沫,無法落地等等……他們覺得做嵌入式還是不能浮躁,應該踏踏實實去鉆研Linux內核,網絡協(xié)議棧等非常深非常難的已有技術。
但是,火哥對年輕的嵌入式工程師往新興技術領域發(fā)展,持支持的態(tài)度,我也相信我們公司總監(jiān)說的“right time to do right things”。而且從大的趨勢上看,NVIDIA公司推出的Jetson平臺,AI邊緣計算解決方案以及Xavier平臺無人駕駛解決方案;Intel公司收購以色列無人駕駛芯片公司MobilEye;ARM公司在CPU里面做的神經網絡并行矢量計算加速庫,最近也大規(guī)模招聘物聯(lián)網與云端項目相關的工程師;華為的海思麒麟970芯片集成AI加速單元NPU;瑞星微RK3399Pro也有NPU支持各種AI應用的部署……
行業(yè)領軍公司的布局,種種跡象表明,AI、物聯(lián)網、云端+嵌入式解決方案的新興技術,已經是大勢所趨,并不像某些有經驗的老工程師所說的都是泡沫,無法落地。
所以,火哥還是建議剛入行做嵌入式的年輕人,盡量地往嵌入式+人工智能+物聯(lián)網+云端的應用解決方案領域靠攏,要敢于嘗試新生事物。新興技術能夠落地應用,就證明這里面并不是特別難學,也不是一定要鉆研內核驅動,積累很深的東西才能學新興技術。而且不難學的技術,不代表沒有技術含量,技術上的東西,很多時間是在信息不對稱的情況下,打一個時間差,搶到一個合適的崗位,雖然以那些老工程師的智商,應該也能學會這些新興技術,但是他們不一定有這個時間和精力(時間成本可能是最大的成本),換行成本也比較高,所以這塊更適合年輕人爭取時間差,在懂得這項技術的人還不多的時候,趕快搶到一個好的位置,能夠有業(yè)務上的話語權。
從另一方面說,由于之前2節(jié)所描述的嵌入式領域業(yè)務技術上的競爭力,在傳統(tǒng)領域,由于已經發(fā)展了一段時間,有很多行業(yè)大佬已經掌握這些傳統(tǒng)業(yè)務的技術話語權,而且部分業(yè)務還有很大的獲得門檻,必須要努力+機遇才有機會進入對應崗位做下去,靠自學很難積累。一旦一個領域,在你前面積攢了8年,10年甚至15年以上經驗的大佬太多,并且制定了太多的行業(yè)標準和專利,你就只能被別人的業(yè)務標準和專利牽著鼻子走,很難做到很高的位置。這就像很多工程師說,在單片機上實現(xiàn)藍牙,WIFI,TCP/IP協(xié)議棧也是很難很有挑戰(zhàn)的,然而,做技術的目的是為了什么,花這么多精力重新實現(xiàn)復雜的協(xié)議棧,只是為了炫耀技術牛逼嗎?在這些成熟技術的領域,已經有很多前人鋪好路,有很多現(xiàn)成的模塊和開源代碼,也有很多的別人制定的認證標準和專利(所謂認證標準就是在某些市場,某些產品哪怕實現(xiàn)了所有功能,但是如果功能不符合一些公司制定的標準,那就拿不到認證,產品不允許在這個市場出售,比如音頻相關的產品如何沒有通過杜比認證,在很多市場就不被接受,你不得不花時間學習很多別人制定的標準,而有制定標準話語權的大佬,可以隨心所欲修改標準)。所以年輕人靠新興的技術,在嵌入式+人工智能,嵌入式+物聯(lián)網+云端等領域,通過同起點,同樣的學習時間,可能可以做到彎道超車,3年之內,在收入上超過那些工作8年,10年的大佬。
當然,火哥所說的這些新興技術領域和行業(yè),也要根據你自身的情況因地制宜,制定學習的計劃。
首先,不是所有城市都有這些新興技術領域的相關企業(yè),如果你想入行新領域,可能就得做出跳槽去北上深等一線城市的決策,如果已經在二三線城市安家,要照顧家人,可能就得做一些取舍,不得不放棄這些發(fā)展計劃,繼續(xù)在舊的領域深耕。
其次,第二節(jié)所說的基礎技術競爭力應該放在首位。在夯實基礎(不一定要達到精通,但是還是要扎實)的情況下,保證能得到面試官的對你技術底子的認可,能找到合適的工作的前提下,跳過二、三節(jié)所說的傳統(tǒng)業(yè)務技術的學習,直接進入新興技術領域,彎道超車。
最后,要保持一雙火眼金睛,要能夠識別出你所做的新興業(yè)務到底是真新興,還是傳統(tǒng)業(yè)務包了一層皮。比如有些童鞋在所謂做嵌入式+物聯(lián)網業(yè)務的公司,實際上每天的工作就是用stm32單片機和NB-IOT模塊,每天做一些調用單片機UART,I2C接口和NB-IOT模組通信的重復性工作,這就不算是真正的新興業(yè)務,也不具備真正的新興技術競爭力。真正的嵌入式+物聯(lián)網領域的技術競爭力應該熟悉整套IOT終端到云端的解決方案架構,熟悉如何搭建部署這套系統(tǒng),熟悉IOT設備與終端和云端的通信協(xié)議的核心業(yè)務邏輯。同理,在嵌入式+AI相關的公司,雖然嵌入式工程師不一定要懂得自己實現(xiàn)AI核心算法,但是核心技術競爭力也不是指調用別人的人臉識別閉源庫函數,做簡單人臉識別應用?;鸶缯J為嵌入式+AI相關領域的核心業(yè)務競爭力,也是在熟悉整套邊緣端到云的AI計算系統(tǒng)架構和解決方案,懂得一些AI算法的基本原理(不一定要自己獨立能實現(xiàn)),各種神經網絡的優(yōu)劣,能對嵌入式平臺的AI軟件做系統(tǒng)級別的計算性能的加速優(yōu)化,部署落地,解決客戶實際應用場景中的問題,提供反饋給做AI算法的工程師,幫助他們修正訓練出來的模型。
天龍八部想必各位一定不會陌生,或許你看完了僅僅過了眼癮,不過這位同學在看電視的同時結合自己的行業(yè)悟到了一些嵌入式er核心競爭力的問題。一起來看看。
另外,著名嵌入式工程師老石也對FPGA工程師的核心競爭力進行了講解:
老石認為,這個問題其實可以引申為以下兩點:
1、什么是只有FPGA工程師能做的
2、作為FPGA工程師,我們應該如何培養(yǎng)這些能力
接下來就是老石的解答。
什么是只有FPGA工程師能做到的
對于上面提到的一些回答,的確是FPGA工程師不可或缺的能力,但老石總覺得沒有說清楚這個問題的本質。
?
首先給出老石的回答:FPGA工程師最核心的就是全棧能力。
?
這里的全棧,指的是系統(tǒng)級的軟硬件全棧能力。它既包括了在系統(tǒng)層面的架構設計、芯片開發(fā)的前后端流程,也包括了軟件設計的全棧流程,甚至還有后期的項目維護、技術支持、與客戶的溝通等等軟技能。它可以看成是綜合多種技能的技能樹。
?
老石隨手寫了一下FPGA工程師的全棧技能樹,見下圖,盡管很不完整,但仍可供大家參考。之前很多人提到的,諸如調試與分析的能力,其實是這個全棧技能樹里的一片樹葉,或一個分支。
只有FPGA工程師能做到一人成團,在短時間內將想法落實到高質量的軟硬件系統(tǒng)實現(xiàn)。這是其他系統(tǒng)架構師、ASIC工程師、單片機工程師、軟件工程師等等都無法單獨完成的。與這些工程師相比,F(xiàn)PGA工程師有著很強的單兵作戰(zhàn)能力。當然,技能樹過于龐大也是為什么很多人認為FPGA難學的本質原因。
?
有人會問,為什么其他類型的工程師沒有這種全棧能力,或者換句話說,為什么只有FPGA工程師才能做到全棧?這和FPGA本身的特點有關。
?
在下圖中,老石對比了FPGA與ASIC、CPU(或單片機)的特點與主要開發(fā)方式和風格。
對于傳統(tǒng)的IC工程師而言,他們的具體職責可以大致分成前端和后端兩部分。前端主要負責邏輯實現(xiàn),后端負責芯片物理實現(xiàn)。兩路人馬通常有各自的技能樹,需要互相配合才能完成產品級的芯片,這個過程往往很久,而且伴隨著巨大的前期投入和風險。
?
對于單片機或CPU工程師而言,更多的是基于給定的單片機架構和API,使用諸如C或C++的高層語言編寫應用程序。如果要寫出高質量的應用,固然需要了解目標芯片的硬件結構,但并不需要對硬件的邏輯實現(xiàn)有過多了解。雖然基于CPU或MCU可以靈活實現(xiàn)各種應用,但由于架構限制,在很多諸如人工智能的應用領域里并不能達到很好的性能。
?
FPGA很大程度上結合了兩者的優(yōu)點。在硬件方面,F(xiàn)PGA底層架構固定,因此不需要做太多芯片后端的工作,但仍需要FPGA工程師掌握時序優(yōu)化、面積優(yōu)化、功耗優(yōu)化等后端技能。因此一個優(yōu)秀的FPGA工程師憑借自身的前后端與軟硬件技能,就可以完成一個完整的而且質量比較高的FPGA項目。
?
軟件方面,F(xiàn)PGA可以靈活定義API與軟件架構,并可以通過內置的處理器內核完成軟硬件協(xié)同開發(fā),這樣也能兼顧應用的靈活性。因此,一個優(yōu)秀的FPGA工程師通常也具有優(yōu)秀的軟件編程能力。
?
在系統(tǒng)層面,F(xiàn)PGA工程師可以自定義軟硬件整體架構,不會像CPU或單片機一樣存在明顯的架構瓶頸,也不會像ASIC一樣需要考慮過多底層電路單元以及工藝的具體實現(xiàn)。
綜上,只有FPGA工程師能擁有軟硬件系統(tǒng)的全棧能力,這也是FPGA工程師的核心競爭力。并且,這種能力可以在工程實踐中不斷自我豐富和提升。這使得優(yōu)秀的FPGA工程師不需要太過依賴其他人,能夠自己或少量人很快完成完整的系統(tǒng)級方案。
現(xiàn)在很多AI初創(chuàng)公司選擇使用FPGA作為硬件平臺的主要原因之一,就是看中FPGA工程師的全棧能力,使得公司能在較少投入的情況下,取得性能、靈活性、可擴展性等多個方面的良好平衡。
?
全棧能力是FPGA工程師需要的完整技能樹。至于很多答友提到的調試和debug能力,更多的是在回答這個技能樹的技能點分配問題。這就是老石要講的第二個方面:
作為FPGA工程師,我們應該如何培養(yǎng)這些能力
相信很多人會問,老石你說的這種全棧能力,究竟是不是在畫大餅吹牛逼?在實際生活中,到底是不是真的有人能全部精通技能樹中的所有分支?老石的答案是,雖然很少,但確實有這樣的大牛,而且老石有幸和他在一個團隊里工作。
?
一般來說,如果一個FPGA工程師能在這個FPGA技能棧里精通某一項,就可以成為這個領域的大牛和權威。比如,像很多人提到的,如果你特別會調板子,硬件調試能力很強,那你就可以很好的負責項目中的硬件測試環(huán)節(jié)。再比如,你RTL寫的很好,或者驗證很強,或者對系統(tǒng)架構有很深的理解,你都能在項目里成為不可或缺的人。
?
但是,在老石所在團隊里就有一位帶頭大哥,可以從系統(tǒng)架構、模塊設計、驗證、系統(tǒng)整合、FPGA后端優(yōu)化、硬件測試、軟件開發(fā)和調試等等全部環(huán)節(jié)一個人搞定,可以說是點滿了技能樹上所有的技能點。
這樣的人就像阿里的多隆,一個人可以頂一支團隊,公司缺他不可。因此如果一個FPGA工程師能夠獲取軟硬件的全棧能力,將是團隊乃至全公司的最主要競爭能力。
作為一個新人,應該如何培養(yǎng)自己的FPGA全棧能力呢?其實,帶頭大哥的技術功底也并非通過一天練成的,最重要的是時間的積累,不斷的鉆研以及真正的興趣。這些道理在任何行業(yè)都是一樣的。一開始可以先重點突破技能樹的某個分支,但最終的目標還是要讓整個技能樹枝繁葉茂。
?
此外,工程師需要的軟技能也是不可或缺的,例如獨立思考的能力、溝通、寫作以及良好的英語等等。