舉一反三,觸類旁通 - 電子工程師十年成長路感悟

2014年11月27日 14:42 來源:互聯(lián)網(wǎng) 作者:馬延安 我要評論(0)

標(biāo)簽:電子工程師(95607)

  舉一反三,觸類旁通

  我一直認(rèn)為,作為一個工程師,尤其是電子工程師,“照貓畫虎”的類推能力是非常重要的。如果我們用舉一反三的交叉方式去思考不同的技術(shù),就會發(fā)現(xiàn)很多技術(shù)是有內(nèi)在關(guān)聯(lián)的。技術(shù)領(lǐng)域上較廣泛的涉獵給我的感觸是,很多技術(shù)是作為一個體系出現(xiàn)的,靠架構(gòu)來組成的。而架構(gòu)的存在,也使中間件的開發(fā)更有效率。下面我想分享一下,學(xué)習(xí)過程中感觸到的架構(gòu)在不同技術(shù)領(lǐng)域中的表現(xiàn)。

  如果你做Windows WDM Driver,會發(fā)現(xiàn)WDM的架構(gòu)是非常棒的,只要精通某一點(diǎn)并開發(fā)設(shè)計成一個小小的sys文件,就可以把它掛到操作系統(tǒng)中去。Windows的OS會在適當(dāng)?shù)臅r候調(diào)用你的sys文件,跟寫應(yīng)用程序的消息機(jī)制似的。我們再深入到WDM的這個sys驅(qū)動的內(nèi)部看,有兩個非常顯著的特點(diǎn):第一,把一系列的函數(shù)指針指向自己實(shí)現(xiàn)的函數(shù),目的是把自身掛到驅(qū)動棧里去;第二,接受驅(qū)動棧上層驅(qū)動的請求,先處理,然后傳遞給驅(qū)動棧的下層驅(qū)動。正是架構(gòu)的精心設(shè)計,讓模塊開發(fā)的勞動強(qiáng)度大大降低,于是連對PC硬件不甚熟悉的我,都有過幾次做Driver的經(jīng)歷。

  做嵌入式系統(tǒng)WinCE的工程師會注意到,WinCE的驅(qū)動架構(gòu),幾乎完全是Windows WDM的簡化版。WDM驅(qū)動的那兩個特點(diǎn)在這里表現(xiàn)得淋漓盡致。當(dāng)然,因?yàn)槭?a target="_blank">嵌入式系統(tǒng),肯定要比Windows系統(tǒng)簡化很多,而且嵌入式的CPU提供的資源跟X86也是無法相比的。因?yàn)楣ぷ鞯木壒剩覍inCE沒有更深入的學(xué)習(xí)。

  我曾有機(jī)會做Windows Media的編程開發(fā),這是Windws XP平臺上一個視頻特別處理,當(dāng)然用到了DirectShow技術(shù)。我當(dāng)初就感覺DS的架構(gòu)怎么這么面熟,就是一時認(rèn)不出來。原來DS使用了COM技術(shù),變得神秘了。但透過COM這個接口技術(shù)看架構(gòu),原來又是跟WDM那么的相似,只是表現(xiàn)形式由Device變成了Filter而已。一個內(nèi)核層的架構(gòu)居然在應(yīng)用層也能找到它的影子。

  做Windows通信程序的時候,希望收到數(shù)據(jù)時才響應(yīng),例如向主窗口發(fā)個消息。這是APP級的,怎么做呢?對了,就用FILE_FLAG_OVERLAPPED這個屬性,我們只要以這個屬性打開設(shè)備,如串口或者USB等,以后讀取設(shè)備數(shù)據(jù)的時候,這個函數(shù)會立即Return,我們隨后就可以等待事件(Read完成了或者Timeout了或者是某故障發(fā)生了)。配合多線程編程,很容易做成消息驅(qū)動型的,而不必用死循環(huán)浪費(fèi)額外的CPU時間片。這里就借助了操作系統(tǒng)給我們提供的消息機(jī)制。

  在開發(fā)嵌入式設(shè)備的時候,我們會遇到類似的問題,想節(jié)約額外的CPU時間片以達(dá)到節(jié)電的目的,甚至更迫切,這就可以用到消息機(jī)制。用戶程序一直在等待事件,只有在有消息來到的時候,處理程序才會被啟動。而底層程序,則被設(shè)計用來維護(hù)消息機(jī)制,當(dāng)空閑(如按鍵、中斷等都沒有到來)時候,系統(tǒng)可以進(jìn)入空閑狀態(tài),甚至睡眠狀態(tài)。多數(shù)情況下,嵌入式系統(tǒng)的CPU 占用率是非常低的,所以消息機(jī)制的使用可以大副降低功耗。

  其實(shí),嵌入式設(shè)備即使不用Embedded OS也可以利用OS的某些特性來設(shè)計,這使得代碼的可維護(hù)性大大增強(qiáng)。所以做過Windows SDK開發(fā)的人,轉(zhuǎn)做消息驅(qū)動的嵌入式系統(tǒng),很多概念是非常容易接受的。其實(shí),很多嵌入式系統(tǒng)的設(shè)計者,也確實(shí)參考了Windows的消息機(jī)制的實(shí)現(xiàn)方式。所以,我面試嵌入式工程師的時候,一般都會順便問一下有沒有Windows PC編程的經(jīng)驗(yàn)。

  整合資源,提升自我

  很多人覺得整合資源,是管理上的術(shù)語。實(shí)際上,工程師也需要把已經(jīng)掌握的資源進(jìn)行整合,以得到最大程度的自我提升。就像我們總質(zhì)疑為何某同事的技術(shù)能力不如我,卻做上了部門經(jīng)理的位子。如果我們仔細(xì)觀察,就會發(fā)現(xiàn)是自身的某些因素導(dǎo)致了我們的很多能力無法得到最大機(jī)會的表現(xiàn),或者,要充分整合我們已經(jīng)掌握的資源,才能使得我們的能力最大程度的展示。這是更高層次的自我提升。

  當(dāng)工作數(shù)年之后,我發(fā)現(xiàn)自己認(rèn)識了很多朋友,有做技術(shù)的,也有做市場的;發(fā)現(xiàn)自己掌握了很多零零散散的技術(shù),能做TCPIP通信了,能獨(dú)立Layout出一塊完整的PCB了;發(fā)現(xiàn)自己具有一定的組織協(xié)調(diào)能力,能獨(dú)立組織一個團(tuán)隊的工作,能協(xié)調(diào)團(tuán)隊和外界的溝通了。如果你有跟我類似的感覺,說明你也注意到自己的潛力了。當(dāng)這些潛力沒有轉(zhuǎn)化成能力之前,這只是潛在資源而已。所以,我們要學(xué)會整合這些資源。

  把自己掌握的兩項(xiàng)獨(dú)立的技術(shù)應(yīng)用于某個產(chǎn)品,并協(xié)調(diào)其搭配工作,這是技術(shù)上的整合。自己擅長做軟件,和做硬件的同事合作,并主導(dǎo)合作中的很多煩瑣事物,這是人力上的整合。自己有技術(shù),和有市場能力的朋友,合伙創(chuàng)業(yè),那更是整合。通過整合,我們表現(xiàn)出了單打獨(dú)斗無法表現(xiàn)的能力,這就是整合的力量,撬動地球的杠桿的力量。

  我在工作7年之后辭職準(zhǔn)備創(chuàng)業(yè)。同很多工程師都有的艱苦創(chuàng)業(yè)經(jīng)歷一樣,單單一個角色轉(zhuǎn)化就非常令人痛苦。以前只需專注技術(shù)就足夠了,現(xiàn)在卻需要面對成本、工期、工廠等N多的因素,整天在工程師、業(yè)務(wù)員、售后服務(wù)之間角色轉(zhuǎn)換。另外,創(chuàng)業(yè)之初,各類文檔的撰寫就是個不小的門檻,包括合作意向書、NDA協(xié)議、產(chǎn)品規(guī)格書、報價書,都需要較好的文字表達(dá)能力。拜訪重點(diǎn)客戶之前,還要制作 PPT的演示投影。創(chuàng)業(yè)之初雖然辛苦,但可預(yù)見的勝利果實(shí)的誘惑力太大了,加班、熬夜,都是家常便飯。因?yàn)槠鸩缴晕⒂悬c(diǎn)基礎(chǔ),所以開始就抓到了客戶,直接進(jìn)入創(chuàng)業(yè)過程中“為他人做嫁妝”的階段??偨Y(jié)起來,我的創(chuàng)業(yè)經(jīng)歷就是整合自身資源,充分提升自己的一個過程。

  很多工程師都有創(chuàng)業(yè)的沖動。我的建議是:第一,創(chuàng)業(yè)前做盡可能多的準(zhǔn)備工作;第二,盡量選擇自己最熟悉的領(lǐng)域。當(dāng)然,工程師還有一個方面相對欠缺,就是文字表述能力。各種文檔的撰寫,都需要有好的文字功底。在以前那家公司工作的時候,因?yàn)楣芾硪粋€小Team,每周都要在視頻會議上給老板做匯報,還要給幾個下屬做計劃。趕鴨子上架,在現(xiàn)實(shí)的壓力下,我開始重視書面表達(dá)能力。我覺得,書面文字的運(yùn)用能力,對一個工程師而言,是一道門檻,應(yīng)該努力跨越過去。

  愿每個工程師,都有美好的人生,都能實(shí)現(xiàn)自己的理想,實(shí)現(xiàn)自己的價值。


想要了解更多有關(guān)電子工程師設(shè)計資料,請點(diǎn)擊電子發(fā)燒友《物聯(lián)網(wǎng)核心技術(shù)之ARM》專題

?

上一頁12全文

本文導(dǎo)航