CSDN:你曾學習生理學和醫學,這些經歷對你在計算機領域的發展有怎樣的影響?
Bruce:我的經歷頗有些特別,14歲從中學直接進入大學,開始的專業是數學,后來轉到運動生理學專業,直到碩士畢業,我的博士學位是South Dakota大學的Neurocybernetics(神經控制論)。這些經歷給予我基本的科學素養,而計算機工程正是一種科學應用。對不同領域的涉獵,讓我有著更強的推理分析能力及更寬闊的視野。
舉例來說,我為幾家公司做顧問時,經常發現其內部的明顯錯誤,而處在內部的他們卻未曾察覺。好比交往中的男女,你所有的朋友都說與你交往的人太差勁了,但你卻因為愛他/她而全然不覺,直到某天分手后再回頭看,可能才會后悔。機構往往如此,恰似經營一段錯誤的婚姻般當局者迷。只有脫離組織本身,完全獨立地看待問題,才能做出最客觀的分析――開發、工程管理等皆是如此。
還有一個例子,一家德國汽車制造廠有一個為期18個月的汽車檢修流程,前6個月稱為“特征構建”,后12個月稱為“特征穩固”。也就是說,這個流程要先花6個月制造缺陷,再花12個月修復缺陷。這是一個很明顯的問題,為什么不能在第一階段通過檢測設備、高效仿真等手段避免缺陷的產生?分析問題的關鍵就在于如何定義問題,以及如何從宏觀角度尋找不同的解決辦法。
CSDN:是什么吸引你開始編程的,并進入現在的領域?
Bruce:表面上看,編程就是想要實現什么就寫什么代碼;但事實是,敲代碼只是軟件開發過程中很小的一部分,程序員的工作還包括安全分析、責任分析、產品驗證、產品分析等。
我第一次寫程序是在做碩士究生論文時,論文的主題是“甲狀腺素和去甲腎上腺素在冷壓力下的相互反應”,那是在1978年,為了實現大規模統計分析,我買了一臺擁有4KB內存的電腦,編寫了我的第一個程序――1000多行的VB統計分析軟件。之后讀博期間,為了完成一套生物神經系統學信息處理的數據分析(即生物神經計算),我寫了很多軟件,其中包括一些系統驅動程序。
CSDN:在從業過程中,你如何提高自己的技能?
Bruce: 最重要的是實踐,就像要練好標槍就必須勤加練習,編程也是一樣。在我的書中,我一直都嘗試加入更多的實例設計;在《Real Time UML Workshop for Embedded Systems》中,我寫了一個無人機的設計案例;另外一本書中,設計了一個星際旅行傳輸機的有趣案例。我正在寫這本關于“敏捷系統工程”的書中,我設計了一種可穿戴的機器人盔甲,類似于電影《異形》里機器人穿的那種,不過比電影中的大8倍,重達1500kg,可每小時跑80km。
從我參與過許多系統的開發――計算機斷層掃描、醫療(如心臟起搏器、呼吸機)、無人機、自動化、航空航天、運載火箭系統等――我發現不同行業有著不同的應用環境,但同時也有共通性,我們需要在不斷的實踐中總結知識。經歷會帶給人財富,有一次我兒子問我,怎樣才能成為作家(他想寫小說),我告訴他,首先你要開始寫作。
CSDN:在這些不同領域系統的開發過程中?你有哪些經驗總結?
Bruce:有很多。
一是要發散思維克服目光短淺。我做顧問時,經常看到一些根本不可能實現的案例,當事人卻置身其中毫無察覺。面對問題時,我們需要走出定勢思維,從不同的角度尋找解決辦法,并通過思考尋找問題的底層機理所在。比如,大學時我基本沒上過化學課,但能通過推測解答試題的辦法通過了考試(我可不推薦大家使用這種方法應付考試)。我們要學會看到事情之外,退一步想想事情發生的根本原因,總結所做過的嘗試、預測以及最終成功的方法,然后在確保成功的前提下嘗試更多的解決辦法.。我們需要制定相應的度量標準,用來記錄并展示過程中的成與敗及最總目標。
二是要建立數學思維,提高準確性。一些人常常固執己見,忽略事實,即使現實已經證明他們的理論和想法不實際,他們卻依然堅持――這是沒有意義的行為。理論需要實踐來驗證對與錯。在做開發工作時,我們需要一套度量標準用于評測,要以取得進步為目的,而不只是實現某個計劃(計劃只是某種意義上的理論,不一定是正確的),相較于“如何實現計劃”,“如何實現目的”則是更好的度量標準。
三是要學會合理地做計劃。通常軟件行業制作的計劃都有兩種目的,一種是用于申請計劃所需時間及經費;另一種則是用于激勵員工努力工作,這種計劃本身就存在著矛盾。合理的計劃一定要基于現實,并有相應的度量標準來記錄工作進度及工時。我在做項目管理時就有很多這樣的度量規則,我一般只會預估完成一半任務所需的時間,這樣前后兩部分任務可在時間上做靈活調整;對于具體某個人的進度,我不會做預估,因為基本都會延時。統計學中有一個“中心極限定理”――通常我們只有50%的幾率能夠達成預估時間表。
CSDN:你開始寫書的原因是什么,想要解決怎樣的問題?
Bruce:我寫的第一本書是在畢業后,當時我經營著一家軟件公司,因為發表了不少計算機雜志專欄和文章,于是有出版社找到我,我因此寫作了自己的第一本,關于數據分析的書。我在寫作的過程中,總會追尋兩個目標――為個人和讀者的都帶來收獲。對于一個問題的理解,我覺得有三個層面:第一層是自己聽說某項技術,但并不真正理解;第二層是開始應用,這屬于比較深層的理解;第三層是能將知識傳授給其他人,表明不僅自己可以應用,還能教授給不同技術背景和學習方式的人們。對讀者來說,在很多行業,如飛行器、高速公路系統,金融領域等,都不乏聰慧的人,但在這些領域中卻存在著糟糕的實踐,特別是那些對安全性要求較高的行業中(包括醫療、航空電子設備、機動車設備、重工業、造船業、軍事,以及金融業),我覺得可以做出更多改進。
CSDN:寫書通常需要花很長時間,你是如何堅持的?對你寫作影響最大的人是誰?
Bruce:我寫一本書大概要用2000小時,這樣對工作量聽起來令人畏懼。寫書是持久戰,且萬事開頭難,開始時需要先組織語言列出提綱等。這好比參加鐵人三項,乍一看似乎不可能完成,但是當你一項一項去做,終點就會在前方。
不少人對我的寫作都有影響,我很喜歡Grady Booch(UML創建者之一,IBM院士)的寫作風格,他是位條理十分清晰的作者。我不喜歡那種典型的枯燥無味的技術書,所以我會盡可能在書里添加一些詼諧因素,讓它讀起來更有趣(不過也不是所有人都懂我書里的幽默,我妻子就不懂)。Grady也經常在書里添加娛樂元素,用有趣又有意義的故事替無聊的文字,更容易被讀者接受。
CSDN:開發者在嵌入式軟件系統領域有哪些常見誤區?
Bruce:首先,人們常在沒有實踐的情況下做出判斷。比如有些人經常想當然的認為不過是軟件/硬件,沒有什么難的。沒有實踐,任何事情看起來都很簡單。只有當你深入某個領域時,才能慢慢意識該領域的復雜性。如今的系統已經比幾年前復雜數百倍,相應的安全性及可靠性也隨之提高,相關的工作變得更復雜。
其次,人們通常認為緊湊的工期能夠激勵員工更努力的工作。事實上,這種激勵方式最多只能生效一次。第一次,員工可能會乖乖一天拼命工作20個小時以完成任務,第二次他們就開始有些遲疑,到了第三第四次,他們也就不以為然了。我曾經有個老板說“現實是友好的”,我卻始終認為現實就是現實,不友好但也不壞,現實不容忽視,我們要時刻保持理性。我發現很多組織內部都存在著各種架構或者工期制定的問題,他們從不根據事實制定計劃,不認真思考總結,只通過憑空想象,然后期望能夠如期完成。
CSDN:在醫療、航空、自動化及軍事這些時刻關系到生命的領域,可靠性和安全性至關重要。對開發者來說,在這些領域,有哪些特殊的規則和標準需要遵循?
Bruce:最重要對在于,需要根據這些系統推理出所需的可靠性和安全性。
我曾創建一個關于安全推理的UML Profile,可以通過結合預設條件與故障組合展示故障風險。比如設置一個想要避免的場景,然后通過對這個場景的分析,判斷出其所需的安全控制措施。任何一個做安全軟件或系統的人都會說他們需要保障安全性,但通常只停留在對安全性的需求層面,并沒有去深入理解為什么需要安全性。我的Profile核心部分稱為Assert,它有多種存在形式,有時類似信用卡密碼,我們要確保它不被盜取;有時類似于心臟起搏器,我們要確保它不被干擾;還有時是一種具體物品,我們需要確保它不被隨意移動。當我們想要找出這些Asset的時候,需要預設一些條件來制造相應的缺陷,然后才能找到相應的可提高安全性的對策。通過不同的手段找到安全缺陷、分析安全漏洞,進而得知通過增強安全性所要保護的內容。現在大部分人根本不清楚做安全的目的是什么,所以深入的了解增強安全性的目的至關重要。
CSDN:與早些年相比,嵌入式軟件開發領域最大的變化是什么?
Bruce:我覺得變化主要有三點。第一是范圍,我開發的第一個軟件,心臟起搏器,是一個基于6502處理器的、很小的、實時多任務操作系統的匯編程序,系統只有8KB。如今系統的空間和功能實現跟以前比起來,早已不在一個量級,過去的系統很小而且功能簡單,現今的系統要比以前復雜千倍。
第二是規則變化,包括一些安全可靠性服務。如今的安全監管功能增加了很多對開發的質量要求規則。以前如果機器壞了我們可以直接關掉,如今卻不行,例如輸氧設備或者正在駕駛的飛機,我們并不能直接關掉它,也就是說如今的質量需求要比以前多得多。
第三是集成。當今世界是一個億萬臺設備相互連接的互聯空間,這同時意味著我們正面臨著史無前例的安全隱患。有一篇發表在“Planet Black Hack”上的研究報告稱,他們已經找到了可以黑入普通移動設備、主板、娛樂系統、自動系統、傳感器系統的不同途徑。在這些設備中,他們不僅可以開關機、開啟或鎖定防火墻,還可以盜取信息、重寫引擎軟件。在過去如果有人想偷車,就必須先把車門撬開;而如今,只需要黑入汽車系統改寫軟件就能把車偷走。這是安全級別的一個巨大改變,50年前還沒有電力系統,20年前有了電力系統,但是還沒有軟件,如今一個病毒就可以攻擊幾萬臺設備并導致一座城市的癱瘓。
CSDN:對中國的開發者,你還有哪些建議想與他們分享?
Bruce:在我看來,開發者即革新者,而革新一定不能畏懼失敗,不能因為他人的不認可而輕易放棄。另外,作為一名開發者,不能只關注系統的功能實現,還要關注質量保障,系統功能的實現要圍繞著安全、可靠和高效進行實施。要擁有獨立并機智地使用不同技能的能力,勇于面對錯誤并及時修正。根據我的經驗,在新事物的應用過程中,通常會有25%的錯誤概率,如果沒有,那你一定沒有努力地應用新技術。大部分人都喜歡恪守陳規,而我寧愿是個例外,這同時意味著會做出一些令人難以置信的錯誤決定,不過沒有什么大不了,下次改正就好了。
免費訂閱“CSDN大數據”微信公眾號,實時了解最新的大數據進展!
CSDN大數據,專注大數據資訊、技術和經驗的分享和討論,提供Hadoop、Spark、Imapala、Storm、HBase、MongoDB、Solr、機器學習、智能算法等相關大數據觀點,大數據技術,大數據平臺,大數據實踐,大數據產業資訊等服務。
下一篇 深度學習:未來機器人的進化途徑