嵌入式軟件工程師有必要精通算法,參加各種編程大賽嗎?
來源:嵌入式資訊精選知乎上有人問
經(jīng)常在網(wǎng)上看到很多牛人有ICPC等各大編程大賽的經(jīng)歷。
我是學(xué)習(xí)嵌入式開發(fā)的,感覺我天天都是在看芯片資料,代碼難度也不高,甚至很多都有現(xiàn)成的,只要改改就可以自己用。
好像什么高級(jí)算法、超強(qiáng)的數(shù)學(xué)能力在我的學(xué)習(xí)中都沒有什么體現(xiàn)?。?完全用不到啊~~
那做算法研究,ICPC為了什么???都是做研究的牛人嗎??
ICPC這些東西對(duì)一般程序員有什么意義??
下面是各位過來人的回答:
陳俊直 你參加ICPC沒有必要,行業(yè)不同,那是計(jì)算機(jī)軟件工程師參與的。個(gè)人感覺嵌入式工程師所涉及的算法和計(jì)算機(jī)軟件工程師所設(shè)計(jì)的算法有一小小差別。計(jì)算機(jī)軟件工程師要實(shí)現(xiàn)的是運(yùn)行在通用計(jì)算機(jī)平臺(tái)上的軟件,算法研究偏向于盡量降低系統(tǒng)的開銷,完全不需要考慮硬件設(shè)備。
而嵌入式軟件工程師所設(shè)計(jì)的工作是面向機(jī)器編程或者是面向過程編程,算法多考慮的是如何結(jié)合硬件來處理事件。因?yàn)榍度胧较到y(tǒng)不像計(jì)算機(jī)那樣有大量的內(nèi)存資源(RAM基本以KB計(jì)算,所以很少敢用鏈表,甚至部分電子、測(cè)控、自動(dòng)化專業(yè)學(xué)生都不學(xué)數(shù)據(jù)結(jié)構(gòu),雖然他們以后可能也從事嵌入式軟件研發(fā)),但當(dāng)你用DSP處理圖形圖像、音頻、電機(jī)控制的時(shí)候,就會(huì)用到算法了。最簡(jiǎn)單的是《自動(dòng)控制》課本里提到的PID。還有我聽到過而沒做過的神經(jīng)網(wǎng)絡(luò)算法(在實(shí)驗(yàn)室跟做項(xiàng)目時(shí)候聽研究生們說的,但我只是個(gè)本科生。自控課本里那堆數(shù)學(xué)理論都沒看懂呢),打個(gè)比方,要設(shè)計(jì)一個(gè)嵌入式系統(tǒng)控制自加熱水壺的水溫精確并快速達(dá)到60℃,是直接燒到60℃就停止加熱(但停止后有余熱會(huì)繼續(xù)升高溫度,這樣浪費(fèi)電能);還是加熱到五十多度后停止加熱讓余熱慢慢使水溫到達(dá)60攝氏度后再斷續(xù)控制水溫(如何做到既省電又省時(shí)間)。
而對(duì)電機(jī)的控制,記得看過MIT的學(xué)生做的四軸飛行器,那個(gè)東西在狂風(fēng)中飛行都可以做到平穩(wěn)自如,拿桿子捅它也只是晃動(dòng)一下,很快就回復(fù)平穩(wěn)狀態(tài)。這也是自控的算法實(shí)現(xiàn)的。還有更接近人們生活的嵌入式系統(tǒng)算法就是實(shí)現(xiàn)汽車ESP車身穩(wěn)定系統(tǒng)的那些算法。
所以,嵌入式軟件研發(fā)工程師其實(shí)跟普通計(jì)算機(jī)軟件工程師(程序猿)在設(shè)計(jì)思維上還是有一些區(qū)別的。但共同點(diǎn)是:苦逼加班必不可少……
PS:本人對(duì)這些過程控制、自動(dòng)控制理論實(shí)踐較少,如有錯(cuò)誤敬請(qǐng)指出。
沈沉 因?yàn)槟銓?duì)自己的定位是"一般的程序員",所以確實(shí)沒什么意義。
李劍波-游友移動(dòng) 嵌入式與算法沒有直接聯(lián)系。你提到的嵌入式開發(fā)是屬于嵌入式系統(tǒng)的驅(qū)動(dòng)單元,嵌入式系統(tǒng)中涉及算法的部分應(yīng)該在“主控單元”。如果你想覺得做算法高級(jí),可以考慮到通信領(lǐng)域試試看。通信領(lǐng)域的無線信道計(jì)算里會(huì)涉及很多算法,但是也基本成熟。
還有機(jī)器人領(lǐng)域,在機(jī)械手臂控制上會(huì)有識(shí)別算法,還有就是涉及圖像處理的嵌入式領(lǐng)域。另外,樓主應(yīng)該知道每個(gè)人都有自己的成長(zhǎng)軌跡,這個(gè)軌跡與周圍環(huán)境關(guān)系巨大,你想想還有人30不到當(dāng)國(guó)家一把手,雖然大家軌跡不同,但是軌跡的終點(diǎn)應(yīng)該是我們心里所尋找的地方,而不是從眾的結(jié)果。如此,每個(gè)人的人生都是獨(dú)特的。
邱震鈺 有這閑情干嘛不留著去享受造車輪的樂趣,寫點(diǎn)編譯器、3D圖形引擎、regex引擎、通用Adt庫(kù)、網(wǎng)絡(luò)庫(kù)、3D超級(jí)瑪麗之類的或者在嵌入式實(shí)現(xiàn)一些你想有別于一般嵌入式從業(yè)者的東西,ICPC這種,不適合你(價(jià)值觀上)。
條條大路通羅馬。
tom pareto 建議回頭把嵌入式系統(tǒng)的定義再回顧一下。什么叫嵌入式系統(tǒng)?國(guó)內(nèi)一個(gè)普遍被接受的定義是:嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。這里的定義很值得琢磨,由于嵌入式系統(tǒng)與常規(guī)計(jì)算機(jī)系統(tǒng)相差較大, 所以對(duì)代碼質(zhì)量的要求很高。
從計(jì)算機(jī)的角度來看,程序的性能要高,所以時(shí)間復(fù)雜度要低。由于內(nèi)存小,所以空間復(fù)雜度要低,要設(shè)計(jì)很好的數(shù)據(jù)結(jié)構(gòu)。功耗要低,所以將一些硬件功能用軟件完成。從應(yīng)用的角度來看,嵌入式系統(tǒng)以應(yīng)用為中心,所以有一大票應(yīng)用的算法需要開發(fā):語(yǔ)音識(shí)別、人臉識(shí)別、數(shù)據(jù)融合、路徑檢測(cè)、機(jī)器視覺、壓縮編碼、信號(hào)檢測(cè)、...…。
在你的工作中,算法和數(shù)學(xué)能不能用上,取決于你自己。類似于機(jī)械加工,一般技術(shù)工人并不需要太高的理論水平,只需要讀懂工程師給的圖就可以了。但是,對(duì)于工程師來說,那就不一樣了,必須合理地選擇材料、結(jié)構(gòu)、工藝,這個(gè)時(shí)候就需要理論了,所以一切取決于你自己了。
李俊杰 根據(jù)你工作內(nèi)容而定,根據(jù)你個(gè)人偏好而定,如果你愛造輪子,這些有用。嵌入式也分硬件和軟件。如果你選擇偏硬件,在電子上多下功夫,軟件競(jìng)賽對(duì)你沒有用。如果選擇偏軟件的,現(xiàn)在比較多的是linux驅(qū)動(dòng)開發(fā),也沒有涉及多少算法。但是不想做底層的搬運(yùn)工,想可以往上層轉(zhuǎn)型的時(shí)候,像圖像處理,語(yǔ)音識(shí)別這些涉及數(shù)學(xué)的就比較多了,然后感興趣可以走機(jī)器學(xué)習(xí)之類高薪低競(jìng)爭(zhēng)的方向??催@些的時(shí)候,算法和數(shù)學(xué)功底就顯得尤其重要了。簡(jiǎn)單的使用單片機(jī)、DSP,控制個(gè)電機(jī)、連個(gè)攝像頭,都沒有多少技術(shù)含量。像樓上提到的四軸、自平衡的優(yōu)化、機(jī)器人、路徑的規(guī)劃、攝像頭、圖像的壓縮等等,同樣的東西看你自己要挖掘多深了。
王鑫 電子專業(yè),大一打了一年ACM,區(qū)域賽打醬油蹭個(gè)銅牌,至少寫起程序來虐虐同學(xué)還是很容易的(學(xué)校很一般般)。參加這類比賽還是會(huì)讓你的思路開闊一些,代碼實(shí)現(xiàn)能力強(qiáng)一些。
仲睿光 作為一名有多年OI經(jīng)歷,目前研究軟件無線電方向的嵌入式算法工程師來回答一下吧。我現(xiàn)在做的主要是各種通信算法在FPGA、DSP及多核arm上實(shí)現(xiàn),如寬帶抽取濾波器,主要難點(diǎn)是算法在并行下的展開,強(qiáng)實(shí)時(shí)要求下的調(diào)優(yōu),所涉及到的知識(shí)結(jié)構(gòu)主要是計(jì)算機(jī)體系結(jié)構(gòu)的基本知識(shí)(如CPU工作原理)、數(shù)字電路,但是在實(shí)現(xiàn)時(shí)候要對(duì)算法本身了解透徹(據(jù)說近幾年acm和oi出過fft相關(guān)試題?本人沒有親自考證)。以fft為例,該運(yùn)算在FPGA上的實(shí)現(xiàn)思路與PC及GPU思路完全不同。此外還有各種為了接近硬件io瓶頸的zero copy的代碼研究。從嵌入式工控方向看,也對(duì)數(shù)學(xué)基礎(chǔ)有一定要求,如無人機(jī)飛控涉及到的算法。當(dāng)然應(yīng)用面較廣的通用嵌入式,主要側(cè)重于業(yè)務(wù)組合,對(duì)算法要求不高。
匿名用戶 對(duì)于“一般”程序員,有很高的概率沒有意義。嵌入式行業(yè)依托于硬件,測(cè)試成本更高。實(shí)際的開發(fā)中,大多數(shù)時(shí)候會(huì)更傾向于穩(wěn)定為主,出于成本效益角度考慮,沒有機(jī)會(huì)讓你去按照你的想法去做你想做的。一個(gè)“一般”的開發(fā)人員,在這個(gè)方面基本沒有什么話語(yǔ)權(quán)。不管初創(chuàng)公司也好,行業(yè)生存十幾、幾十年的公司也好,代碼往往都是撿著現(xiàn)成的來。說PID算法的,哪家公司會(huì)讓你自己從零實(shí)現(xiàn)?還不都是以調(diào)參為主,這對(duì)開發(fā)人員有很高的要求么?而且還有一種悲哀的情況是,嵌入式行業(yè)公司的競(jìng)爭(zhēng)力,技術(shù)以外的東西更多,技術(shù)人員的重要性相對(duì)低。你做開發(fā)的費(fèi)盡心機(jī)做的優(yōu)化,很可能比不上銷售的一杯酒,比不上評(píng)審時(shí)的一個(gè)悄悄送上的信封…
歷蘇 一般來說,嵌入式軟件開發(fā)的復(fù)雜度不可與計(jì)算機(jī)的開發(fā)相比,所以對(duì)算法的要求不會(huì)那么高,但是往往為了壓低成本,大部分嵌入式設(shè)備的內(nèi)存和存儲(chǔ)空間會(huì)比pc小很多,因此也是需要進(jìn)行算法優(yōu)化的,所以高級(jí)的嵌入式設(shè)備對(duì)基本的數(shù)據(jù)結(jié)構(gòu)和算法還是要學(xué)的。但往往嵌入式更重要的是要求硬件設(shè)計(jì)的品質(zhì),還有軟硬件結(jié)合、系統(tǒng)移植、驅(qū)動(dòng)程序開發(fā)(可能需要連接傳感器)的知識(shí)。
|?整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有?|
|?如有侵權(quán),請(qǐng)聯(lián)系刪除????????????????? ?END ?????????????????