Bruce Douglass是嵌入式與UML應用資深專家,這個擁有30余年的嵌入式從業經歷,看看他的嵌入式領域經驗與嵌入式學習感悟分享內容有哪些?
是什么吸引你加入嵌入式學習過程,從此開始編程的職業生涯?
表面上看,編程就是想要實現什么就寫什么代碼;但事實是,敲代碼只是軟件開發過程中很小的一部分,程序員的工作還包括安全分析、責任分析、產品驗證、產品分析等。
在嵌入式從業開發過程中,應該如何來提高自己的技能?
重要的是實踐,就像要練好標槍就必須勤加練習,編程也是一樣。在我的書中,我一直都嘗試加入更多的實例設計;從我參與過許多系統的開發——計算機斷層掃描、醫療(如心臟起搏器、呼吸機)、無人機、自動化、航空航天、運載火箭系統等——我發現不同行業有著不同的應用環境,但同時也有共通性,我們需要在不斷的實踐中總結知識。經歷會帶給人財富,有一次我兒子問我,怎樣才能成為作家,我告訴他,首先你要開始寫作。
在不同領域嵌入式開發的過程當中,得到了哪些經驗總結?
一是要發散思維克服目光短淺。我做顧問時,經常看到一些根本不可能實現的案例,當事人卻置身其中毫無察覺。面對問題時,我們需要走出定勢思維,從不同的角度尋找解決辦法,并通過思考尋找問題的底層機理所在。比如,大學時我基本沒上過化學課,但能通過推測解答試題的辦法通過了考試。我們要學會看到事情之外,退一步想想事情發生的根本原因,總結所做過的嘗試、預測以及終成功的方法,然后在確保成功的前提下嘗試更多的解決辦法.。我們需要制定相應的度量標準,用來記錄并展示過程中的成與敗及總目標。
二是要建立數學思維,提高準確性。一些人常常固執己見,忽略事實,即使現實已經證明他們的理論和想法不實際,他們卻依然堅持——這是沒有意義的行為。理論需要實踐來驗證對與錯。在做開發工作時,我們需要一套度量標準用于評測,要以取得進步為目的,而不只是實現某個計劃,相較于“如何實現計劃”,“如何實現目的”則是更好的度量標準。
三是要學會合理地做計劃。通常軟件行業制作的計劃都有兩種目的,一種是用于申請計劃所需時間及經費;另一種則是用于激勵員工努力工作,這種計劃本身就存在著矛盾。合理的計劃一定要基于現實,并有相應的度量標準來記錄工作進度及工時。我在做項目管理時就有很多這樣的度量規則,我一般只會預估完成一半任務所需的時間,這樣前后兩部分任務可在時間上做靈活調整;對于具體某個人的進度,我不會做預估,因為基本都會延時。統計學中有一個“中心極限定理”——通常我們只有50%的幾率能夠達成預估時間表。
在嵌入式學習或是嵌入式軟件系統領域中,開發者會遇到哪些常見的誤區?
首先,人們常在沒有實踐的情況下做出判斷。比如有些人經常想當然的認為不過是軟件/硬件,沒有什么難的。沒有實踐,任何事情看起來都很簡單。只有當你深入某個領域時,才能慢慢意識該領域的復雜性。如今的系統已經比幾年前復雜數百倍,相應的安全性及可靠性也隨之提高,相關的工作變得更復雜。
其次,人們通常認為緊湊的工期能夠激勵員工更努力的工作。事實上,這種激勵方式多只能生效一次。第一次,員工可能會乖乖一天拼命工作20個小時以完成任務,第二次他們就開始有些遲疑,到了第三第四次,他們也就不以為然了。我曾經有個老板說“現實是友好的”,我卻始終認為現實就是現實,不友好但也不壞,現實不容忽視,我們要時刻保持理性。我發現很多組織內部都存在著各種架構或者工期制定的問題,他們從不根據事實制定計劃,不認真思考總結,只通過憑空想象,然后期望能夠如期完成。
在嵌入式學習中,與早些年相比,嵌入式軟件開發領域大的變化是什么?
我覺得變化主要有三點。第一是范圍,我開發的第一個軟件,心臟起搏器,是一個基于6502處理器的、很小的、實時多任務操作系統的匯編程序,系統只有8KB。如今系統的空間和功能實現跟以前比起來,早已不在一個量級,過去的系統很小而且功能簡單,現今的系統要比以前復雜千倍。
第二是規則變化,包括一些安全可靠性服務。如今的安全監管功能增加了很多對開發的質量要求規則。以前如果機器壞了我們可以直接關掉,如今卻不行,例如輸氧設備或者正在駕駛的飛機,我們并不能直接關掉它,也就是說如今的質量需求要比以前多得多。
第三是集成。當今世界是一個億萬臺設備相互連接的互聯空間,這同時意味著我們正面臨著史無前例的安全隱患。在這些普通移動設備、主板、娛樂系統、自動系統、傳感器系統設備中,他們不僅可以開關機、開啟或鎖定防火墻,還可以盜取信息、重寫引擎軟件。在過去如果有人想偷車,就必須先把車門撬開;而如今,只需要黑入汽車系統改寫軟件就能把車偷走。這是安全級別的一個巨大改變,50年前還沒有電力系統,20年前有了電力系統,但是還沒有軟件,如今一個病毒就可以攻擊幾萬臺設備并導致一座城市的癱瘓。
對于的嵌入式開發者來講,在嵌入式學習過程中,有哪些更好地建議要分享?
在我看來,開發者即革新者,而革新一定不能畏懼失敗,不能因為他人的不認可而輕易放棄。另外,作為一名開發者,不能只關注系統的功能實現,還要關注質量保障,系統功能的實現要圍繞著安全、可靠和高效進行實施。要擁有獨立并機智地使用不同技能的能力,勇于面對錯誤并及時修正。根據我的經驗,在新事物的應用過程中,通常會有25%的錯誤概率,如果沒有,那你一定沒有努力地應用新技術。大部分人都喜歡恪守陳規,而我寧愿是個例外,這同時意味著會做出一些令人難以置信的錯誤決定,不過沒有什么大不了,下次改正就好了。