當(dāng)前位置:首頁 > 公眾號(hào)精選 > 嵌入式微處理器
[導(dǎo)讀]對(duì)很多人來,嵌入式軟件開發(fā)過程中 模塊化 (Modularization)是一個(gè)海市蜃樓、是一個(gè)書面詞匯、是一個(gè)過氣的時(shí)尚——模塊化似乎從未真正的實(shí)現(xiàn)過。吹牛時(shí)人們常不屑的說: 沒吃過豬肉,但還沒看過豬跑么?事實(shí)上,如果討論的對(duì)象是嵌入式軟件,很多人可能真的沒有看過豬跑。

對(duì)很多人來,嵌入式軟件開發(fā)過程中? 模塊化 (Modularization)是一個(gè)海市蜃樓、是一個(gè)書面詞匯、是一個(gè)過氣的時(shí)尚——模塊化似乎從未真正的實(shí)現(xiàn)過。 吹牛時(shí)人們常不屑的說: 沒吃過豬肉,但還沒看過豬跑么? 事實(shí)上,如果討論的對(duì)象是嵌入式軟件,很多人可能真的沒有看過豬跑。 在話題變得更像都市傳說的之前,我想問一個(gè)問題:
為什么要模塊化?
有經(jīng)驗(yàn)的人會(huì)說:
為了代碼復(fù)用(Code Reuse)
進(jìn)一步——“為什么模塊化可以實(shí)現(xiàn)代碼復(fù)用呢?”很多人會(huì)說:
你這不是抬杠嗎?明擺著的,代碼做成了模塊,那么別的項(xiàng)目就可以直接使用了,模塊里的這部分代碼就得到了復(fù)用。
更進(jìn)一步——“代碼復(fù)用又是為了什么呢?”聽到這里項(xiàng)目經(jīng)理們深吸了最后一口煙屁股,順手丟到腳邊、踩滅、起身準(zhǔn)備離開:
代碼復(fù)用可以節(jié)省開發(fā)時(shí)間,加快項(xiàng)目研發(fā)速度。
為了把嘴邊的那句“你們慢慢聊,我還有事”噎回去,我們?cè)賳栆粋€(gè)問題:
實(shí)際項(xiàng)目開發(fā)中,用模塊的時(shí)候,項(xiàng)目的進(jìn)度真的加快了么?時(shí)間真的節(jié)省了么?
項(xiàng)目經(jīng)理們不動(dòng)了,抬起到半空中的屁股慢慢的坐了下來。這次,他們的語氣是認(rèn)真的:
不,使用模塊通常并不一定能加快項(xiàng)目進(jìn)度。老實(shí)說,用別人的模塊,程序員常常要認(rèn)真理解模塊的功能和代碼才能在調(diào)試的時(shí)候確認(rèn)問題的范圍。你知道,很多時(shí)候看懂他人代碼所用的時(shí)間比自己重新設(shè)計(jì)一個(gè)更長。
周圍不少程序員都投來贊同的眼光,有的甚至很認(rèn)真的點(diǎn)了點(diǎn)頭。實(shí)際上,這里我們已經(jīng)發(fā)現(xiàn),在實(shí)踐中,拋開用于模塊化的技術(shù)不談,使用模塊實(shí)現(xiàn)代碼復(fù)用本身往往并不能加快一個(gè)團(tuán)隊(duì)的開發(fā)速度——那么我們要模塊化做什么?



下結(jié)論還為時(shí)尚早。從項(xiàng)目經(jīng)理們的描述可以看出:

  • 代碼復(fù)用的目的或者說動(dòng)機(jī)是 節(jié)省開發(fā)時(shí)間
  • 實(shí)際執(zhí)行中,程序員因?yàn)榉N種原因,在使用模塊時(shí)總是要 花費(fèi)大量時(shí)間讀懂了代碼才能“放心地”去使用它。



程序(軟件)是“程序員嘗試去固化的自己的思維”;而模塊(硬件)則是“業(yè)已固化的邏輯”, 讀懂一段程序,實(shí)際上就是要通過死的代碼邏輯去 反推模塊構(gòu)作者的思維,這 是一個(gè)逆向過程,這 是一個(gè)人與人之間用代碼進(jìn)行間接交流的過程,當(dāng)邏輯本身較為復(fù)雜時(shí),顯然比將自己的思維直接翻譯成程序(重新開發(fā)一個(gè))更為困難。


通過上面的分析,很容易看出,模塊化就是為了通過復(fù)用代碼來加快開發(fā)速度,而正是 程序員閱讀要復(fù)用的代碼讓這一努力付之東流。由此,我們可以非常直接的得出結(jié)論:
使用模塊時(shí),必須阻止程序員閱讀要復(fù)用的代碼
或者換一種說法:
使用模塊時(shí),必須專注于模塊的使用,而必須有意忽視模塊的實(shí)現(xiàn)邏輯,必須要在心理上信任模塊。簡而言之,必須把模塊視作黑盒子!


很容易發(fā)現(xiàn),上面的結(jié)論是站在項(xiàng)目經(jīng)理的視角得出的,因?yàn)轫?xiàng)目經(jīng)理關(guān)注的是項(xiàng)目本身,是各類資源的合理利用,是項(xiàng)目的進(jìn)度—— 項(xiàng)目經(jīng)理唯一不需要也不應(yīng)該關(guān)注的是具體的技術(shù)實(shí)現(xiàn)細(xì)節(jié) 。那么從第一線程序員的視角來看這個(gè)問題:
為什么程序員要閱讀模塊的代碼實(shí)現(xiàn)呢
  筆者問過不同從業(yè)時(shí)間/經(jīng)驗(yàn)的程序員,從過來的的角度來看,無非是以下幾個(gè)原因:

  • 學(xué)習(xí)目的——想知道別人是怎么實(shí)現(xiàn)的。很多程序員認(rèn)為通過閱讀別人的代碼能夠快速的學(xué)習(xí)他人的經(jīng)驗(yàn)從而提升自己。

    然而,從項(xiàng)目管理的角度來看這個(gè)問題,程序員利用業(yè)余時(shí)間閱讀他人的代碼來提升自己無可厚非,或者說是值得提倡的,但犧牲寶貴的項(xiàng)目時(shí)間來閱讀模塊的實(shí)現(xiàn)代碼而不是專注于模塊的使用(使用模塊快速的實(shí)現(xiàn)項(xiàng)目所需的功能),這對(duì)項(xiàng)目本身是弊遠(yuǎn)大于利的——閱讀代碼帶來的是程序員的能力提升,這是對(duì)團(tuán)隊(duì)來說的遠(yuǎn)期利好,但這一利好對(duì)項(xiàng)目本身的時(shí)效性卻微乎其微——俗話說遠(yuǎn)水不解近渴就是這個(gè)意思。

    實(shí)際上,項(xiàng)目經(jīng)理通常要根據(jù)程序員的已有能力來分配任務(wù),而不會(huì)寄希望于程序員通過閱讀模塊代碼獲得提升以后再來回報(bào)眼前這個(gè)火燒眉毛的項(xiàng)目——如果真有項(xiàng)目經(jīng)理這么做了,那只能說,進(jìn)度慢了完全不是程序員閱讀模塊代碼的錯(cuò),而是他最直接的用人問題——我也只能相信,也許他真的無人可用了。

    所以結(jié)論就是:嚴(yán)禁工作時(shí)間以學(xué)習(xí)為目的閱讀模塊源代碼。

  • 調(diào)試目的——也許并非所有的程序員都對(duì)自己的代碼質(zhì)量天然的自信,但幾乎所有的程序員都對(duì)別人寫的代碼(模塊)天然的不放心——就像孔乙己一樣,必須親眼看了酒保從黃酒壇子里舀出酒來而沒有摻水才放心——所以程序出了問題,必然要懷疑模塊,而且甚至有很多不負(fù)責(zé)任的程序員天然的會(huì)首先懷疑模塊——不是自己寫的,怎么能放心——所以調(diào)試的時(shí)候必然:

  1. 要有源代碼,否則就不會(huì)調(diào)試了
  2. 必然要閱讀模塊的代碼,否則就不知道究竟這個(gè)源代碼是不是對(duì)的
  3. 必然要讀懂模塊的代碼,否則怎么能體“自己的程序出錯(cuò)完全是模塊的代碼寫的不好”。

對(duì)于這種情況,就我個(gè)人來說,只有一條準(zhǔn)則——不提供源代碼!只提供庫文件——相信我,通常面對(duì)匯編代碼熟手無策的程序員會(huì)在調(diào)試的時(shí)候自動(dòng)忽視模塊的實(shí)現(xiàn)細(xì)節(jié),專注于模塊接口的輸入輸出行為——給什么輸入,期望什么輸出,實(shí)際獲得什么輸出——一目了然,簡單直接。如果真的 期望輸出和觀察到的 實(shí)際輸出不同,問題也就找到了:要么是文檔沒有讀好,對(duì)輸入輸出的理解有誤;要么是輸入就有錯(cuò);要么就是模塊有問題。這絕對(duì)比讀懂源代碼以后再來調(diào)試要快得多!——除非這個(gè)別人寫的模塊需要你來維護(hù)…… 所以說,調(diào)試的時(shí)候

根!本!不!需!要!讀!模!塊!的!源!代!碼!
根!本!不!需!要!讀!模!塊!的!源!代!碼!
根!本!不!需!要!讀!模!塊!的!源!代!碼!
以調(diào)試作為閱讀模塊的源代碼的理由,根本就站不住腳

  • 仿制目的——這個(gè)目的沒啥好說,別人把源代碼給你就是個(gè)錯(cuò)誤。請(qǐng)大家自覺抵制無視他人知識(shí)產(chǎn)權(quán)的行為。從技術(shù)上來說,因?yàn)橐獙?shí)現(xiàn)自己的版本而需要閱讀他人的實(shí)現(xiàn),理解他人的思維,這是一種白盒子行為,因而并不屬于正常使用模塊的范疇,屬于普通的開發(fā)范疇。

  • 既然在模塊的使用過程中,無論是學(xué)習(xí)目的還是調(diào)試目的都不需要閱模塊的源代碼,那么可以明確的得出結(jié)論: 程序員在使用模塊的過程中完全不需要,也不應(yīng)該浪費(fèi)項(xiàng)目的時(shí)間來閱讀源代碼。一個(gè)團(tuán)隊(duì)只有做到了這一點(diǎn),才能借助代碼復(fù)用加快項(xiàng)目開發(fā)的速度。

    當(dāng)一個(gè)團(tuán)隊(duì)的項(xiàng)目經(jīng)理理解了“閱讀模塊代碼”對(duì)項(xiàng)目的巨大危害,并以制度的形式對(duì)程序員的這一行為予以了制止——移除了模塊化實(shí)踐的絆腳石;那么技術(shù)經(jīng)理應(yīng)該如何理解、設(shè)計(jì)和實(shí)踐適合于當(dāng)前團(tuán)隊(duì)和項(xiàng)目需求的模塊化架構(gòu)呢?

    -END-


    |?整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有?|

    |?如有侵權(quán),請(qǐng)聯(lián)系刪除?|


    【1】國內(nèi)MCU能替代國外產(chǎn)品嗎?MCU的未來又將如何?

    【2】35歲真的是程序員的坎兒嗎?

    【3】不同編程語言能耗不同?看這27種語言對(duì)比!

    【4】超長干貨為你解析:從串口驅(qū)動(dòng)到Linux驅(qū)動(dòng)模型,嵌入式必會(huì)!

    【5】本文把TCP/IP講絕了!


    免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請(qǐng)聯(lián)系我們,謝謝!

    嵌入式ARM

    掃描二維碼,關(guān)注更多精彩內(nèi)容

    本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
    換一批
    延伸閱讀

    9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

    關(guān)鍵字: 阿維塔 塞力斯 華為

    倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

    關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

    北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

    關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

    8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

    關(guān)鍵字: 騰訊 編碼器 CPU

    8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

    關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

    8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

    關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

    要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

    關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

    北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

    關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

    北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

    關(guān)鍵字: BSP 信息技術(shù)
    關(guān)閉
    關(guān)閉