硬體工程師崗位應聘為什麼都要求精通CC++呢,這其中有什麼說法嗎

2022-04-24     大方老師單片機

原標題:硬體工程師崗位應聘為什麼都要求精通CC++呢,這其中有什麼說法嗎

硬體工程師崗位應聘為什麼都要求精C/C++這其中有什麼說法嗎

在這裡分享幾個回答,有一定的參考價值,歡迎留言討論!

///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比///

1

所謂的大局部單片機項目不C++是由於整個嵌入式開發行業從業者的平均軟體素養已經差到了一個令人髮指的地步。

大局部嵌入式工程師出身於電子、通信、自動化等專業,由於專業教育的缺少失和自己進修才能的問題,根本不具有面向對象設計、設計模式、軟體工程等根本常識,所以在他們看CC++差不多,沒必要C++

一個基層工程師,整天滿嘴都是穩定、可靠、市場、老本、性價比這些屁話,卻根本沒聽說過設計模式、代碼復用、可擴展性、單元測試、持續集成這些現代軟體技術的精髓。

知道的知道你是一個強行挽尊的嵌入式工程師,不知道的還以為你是什麼統領千軍的大老闆。

(我預判了他們的預判,這段真的戳到了一些傳統的嵌入式工程師。竟然有人跟我槓說設計模式、單元測試、持續集成這些不重要?我通篇就是打的這樣人的臉,你被打完了還跟我說:你打臉罷了,沒打到要害,你根本就不會打人!我笑得滿地打滾!)

所有沒用C++的單片機應用項目(底層驅動庫不在此列),都是由於其規模過小,應用過於簡略,一兩個人,最多不超5人就能夠完成全部開發,這種項目不光用不C++,甚至用不C,甚至用彙編完成,更用不到任何現代軟體工程技術。

作為一個嵌入式開發的候選人,假如你想加入大廠,參與任何有規模的嵌入式項目,你C++水平就是你的天花板。

這裡的大廠不止是華為、大疆這種,甚至很多愛好者熟悉的周立功單片機老闆周立功就屢次在公開場合表示,他們已經全面轉C++,只C的工程師不會得到工作時機。

Arduino興許是世界上最著名AVR8位單片機)項目,沒有之一。

Arduino的封裝全面使用C++和面向對象的設計。廣泛使用基於虛函數實現的運行時多態,很多設計遵從了開閉原則、接口隔離、依賴倒置等重要設計原則。

ARM項目中C++的更多ARM官方推動mbed項目大略ARM單片機領域最知名的項目之一。

假如你要抬槓Arduino是玩具,不具有工業強度的話,mbed項目絕對是為工業級應用設計的,從底RTOS到上層的硬體抽象HAL都有實現。

mbedC++實現的,廣泛使用開閉原則和依賴倒置,要求用戶通過繼承虛基類來完成平台相關的實現,從而實現擴展。

假如你是一個一線嵌入式工程師,卻根本不了解我提到的一些專業術語是什麼意思,我覺得應該反思一下為什麼自己的工資上不去。由於這些都是最根底的面向對象和設計模式常識。

最後答覆問題,為什麼單片機工程師要求C++?那還不簡略?由於企業不傻啊!

其實我也C的鐵粉C在嵌入式領域毫沒疑問占有舉足輕重的地位。

我堅決認為在現代嵌入式系統中CC++共存的現象會廣泛存在,且具有回升的趨勢。在硬體抽象層使C,在應用層和接口層使C++是非常典型的實踐。

這也是正面答覆這個問題,為什麼嵌入式要C++?由於嵌入式應用CC++都有用。

說了這麼多,假如你的觀點還是C++沒用C++滾出嵌入式的話,祝你好運!

回答2

大局部招聘說明里可能都是複製同類嵌入式公司的需求,在刪刪補補,所以這句話一直遺留下來,不算亂寫,但其實和招聘的真正要求差別很大。

從我曾經不20~30次大廠小廠的嵌入式面試經歷來說,大局部公司在招聘時不會波C++(自身公司負責QT應用產品的除外,但不屬於單片機方),C語言要求也遠遠不會到精通的地步,根本上C語言語法熟練掌握。

>過一遍,後面標註提到的重點細節詳細掌握下,筆試根本都C根底語(關鍵字,宏,構造體枚舉,指針和引用,數組,強制轉換,位移,大小端,存儲區,函數的健壯),在聯合數據構(排序,查找,二叉),在波及一些硬體知識類的(中斷AD的精度RTC時鐘轉)這一類,這裡面考察C語言知識在我看來也遠遠沒有到達精通的地步。

作為嵌入式從業者,以我這些年的經歷來說,除非從事嵌入Linux開發,而且QT介面應用方向的C++知識儲備是必需的。

對我認識的大局部單片機工程師來說,即便實力比我強很多的,對C++根本停留C with Class的程度,掌握模板的都不多,更不要說後面強大STL,以及波及函數式編程lambda和模板元編,也就是我這種閒著喜愛看書碼代碼的沒聊人士,才會花時長去專門進C++11,甚至去追逐了解前端框架,由於這些知識對於單片機開發事實上真的沒啥用。

對於單片機來說,一方面要追求穩定可控,另一方面老本嚴苛,資(RAM/FLASH)有限。

所以你能夠看NodeMcuMicroPython的開發調試玩具賣的火熱,卻很難看到相應的技術用到產品領域。

這對C++也一樣,使STL會帶來編譯結(代碼容)不可避免的膨脹,假如閹割掉這局部,還不如使C語言來的簡略方便,這也限制C++發揮的市場。

在單片機領域和嵌入式驅動開發,根本C語言占有絕對地位,即便Linux上層應用這塊Android/Java的開發優勢也明顯高QT/C++,所以要求精C++能夠說是沒稽之談。事實上精C++的要求有多高,你能夠去相應問題下看看,這種人怎麼會使用閹割C++來從事單片機開發。

最後來說,精C語言的問題,特別是精通單片機領域C語言,是一個很艱難的事,至少對於此時的我來說,離精C語言也差的有些遠。

由於精C語言不僅僅是掌握關鍵字和語法特性,和下面這些複雜但實用的操作,如位域實現對寄存器的位操作,利用構造體強制轉換用於各種協議解析,函數指針實現異步回調,宏定義##實現的函數格式化;

這些雖然複雜,但至少是有一套規範規則,只有去看書實踐就能夠了解掌握,但當你C語言完成複雜穩定的項目代碼,攻克各種異bug時,就會知C語言的精通不只上面這些固定的語法知識。

在調試中可能遇到指針越界,棧溢出,共享資源未珍愛,非對齊訪問異常,編譯器優化錯誤等,這些問題單獨拿出來興許很容易找出來,但在複雜的十幾萬行的代碼中,往往可能執行錯誤的地方工作表現是正常的,但干擾到其它局部,導致未出錯的地方執行異常,這就須要的不僅僅C語言的,還包含系統內核,總線架構和彙編的知識,精C語言的艱難正是在此。

你要了解掌握計算機技術中成體系的東西,對內存分配,總線架構,內核,彙編這些都有清晰的認識。

例如了解函數內的空間是在棧中,那麼我們在函數中須要使用大數組時,就要考慮是否定義為靜態變(避免棧溢),假如多個函數使用數組,就要考慮是否添加內存管理。

假如數組會2/4位元組的指針訪問,在聲明時是否考慮要強制對(我就曾經遇到#pragma pack(1)後面忘了閉合,導致後續全局變量未對齊4位元組指針訪問時觸發異常,由於中間波及屢次轉換,所以花費了很多時長才查找定位攻)

另外假如用到CacheMPU,那麼整個系統又愈加複雜,何時須要寫回,何時須要沒CacheLinevolatile的意義,以及配Cache使用的注意點。

這些知識的掌握,其實都屬於精通嵌入C語言的一局部,因此能夠說精C語言並不簡略。

文章來源: https://twgreatdaily.com/zh-tw/6ff3a23995e5310a0e9152116f17734e.html