軟體工程師與硬體工程師的「對決」

有那麼一點標題黨的意思,軟件硬件工程師其實有非常多的相同的特質,尤其作為有著工程師這個標籤的人,共同點還是相當多的。這裡就從這些共同點裡面挑挑刺兒,看看這兩種類型的工程師裡面有著什麼樣的思維不同點,儘量不帶褒貶色彩。

軟件工程師與硬件工程師的“對決”

軟件工程師:我今天要完成xx行代碼的重構

硬件工程師:這幾個器件能不改就不改,實在不行用獨家供貨

軟件的靈活性很高,可以根據需要進行修改,即使是微不足道的修改,只要能讓代碼看起來比較“爽”,都可以隨時進行調整。況且現在代碼的版本控制工具比較成熟,實在不行可以用時光機返回所有的修改。

硬件不一樣,有時候動一根線,或者layout的時候動了一點位置都可能導致信號產生比較大的噪聲或者異常。每一個器件的修改也是慎之又慎,需要一系列替代測試和可靠性測試,即使是在風險可控的條件下,也要考慮投入產出比。

軟件工程師:有一個新的需求,我們要考慮一下實現方案

硬件工程師:有一個新的需求,我們看能不能在原來的方案上改一改

軟件行業日新月異,有各種各樣的語言、框架和實現方式,程序員的經驗可以讓他們更快的學習,但因為時常要面對新的東西,隨著年齡的增長會顯得力不從心,於是就有了程序員是青春飯的說法。同時,由於軟件的靈活性,需求往往是變化多端的,即使是在同樣的框架下,面對各種各樣的需求也有可能遇到很多坑。

相對軟件行業,硬件的變化算是比較小的,雖然性能可能在不斷提高,但更新的速度和更新的範圍往往是較小的。經常是用著100年前的原理,加上20年前的技術,改一改實現新的需求。因此有了硬件人員的經驗論,當他對需要的一些器件瞭如指掌的時候,制定方案或者定位問題都是完全可控的,而這些器件在他有生之年可能都不會有突飛猛進的變革了,依靠之前積累的經驗就可以讓他遊刃有餘。

軟件工程師與硬件工程師的“對決”

軟件工程師:It works!! 好吧,就這樣搞定吧。

硬件工程師:換了一個電容就可以了,不科學阿,我得找下是什麼原因

遇到問題的時候,硬件工程師比較傾向於“根因分析”,所有現象必須要有個解釋,這樣的話可以減小問題重犯的概率。如果問題不徹底解決,往往代價是很高的。軟件工程師往往覺得問題解決了就是OK的,後面還有一堆的需求和變化需要處理,有時間再去分析一下。這裡不一定是責任心的問題,一個原因是因為再次遇到問題的代價不一樣,另外有時候是因為需要管理的複雜度。

硬件面對的複雜度從某種程度上說是有限的,也就這麼幾個器件,遇到問題順藤摸瓜就行了,大不了還有定位的必殺技——“替代法”,每個器件換一遍,大概就能找到問題所在了。軟件面對的複雜度相對較大,如果涉及到操作系統甚至還需要hack操作系統,如果幾個模塊是由多個工程師開發的,模塊之間的耦合度又較高,定位問題顯得心有餘而力不足。

軟件工程師:我的代碼是一顆樹,我要每天去耕耘

硬件工程師:我的方案是一個平臺,以後的需求就在這個平臺上面改一下就好了

“平臺化”對雙方來說看起來都是非常不錯的,面對新的需求只要在上面修改一下就好了,領導尤其喜歡這種理想狀態,可以作為管理績效的體現。根據上面說明的複雜度和需求變化的程度而言,軟件的平臺化往往只是個開始,就像是栽下了一顆樹苗,後面的路還很長。這其中發揮比較重要作用的往往是軟件工程師本身,而不是硬盤裡面的那些可能不成熟的代碼。

軟件工程師與硬件工程師的“對決”

軟件工程師:項目節點要到了,實在不行我先發佈一個beta版本

硬件工程師:項目節點要到了,實在不行只能延期了,爭取後面不再修改

iPhone 每一個機型的升級需要一兩年的時間,而IOS卻似乎每個月都在更新。對於互聯網行業的軟件尤其如此,似乎每時每刻都在升級,像google的很多產品一直處在beta的版本,有的甚至生命週期都結束了,都還掛著beta的標籤。升級成本和開發週期的不一樣,使得雙方面對項目時間點的態度會有所不同。

軟件工程師:在我那邊還好好的,怎麼到你這邊就不行了

硬件工程師:這個現象也是可以解釋的,可能是米勒電容/寄生電感/xxx

的影響

程序運行起來之後一般都是很老實的(不老實會被狗咬死),CPU 忠實的運行著每一條指令,雖然在它的世界裡面只有0和1,但絕不會出現1+1不等於2的情況。雖然很有可能是程序員自己沒有考慮到的場景,但他常常會找運行環境或者操作方面的“藉口”。

硬件系統不一樣,一樣的佈局佈線,也有可能因為器件之間的微小差異導致運行的問題,而器件本身不是完全理想的,經常會出現1+1=2.1的情況。因此硬件工程師需要保持對這些微小差異的敏感度,去解釋這個混沌的世界。

軟件工程師:再安排一次檢視,想想看還有沒有什麼場景可能導致問題

硬件工程師:再多做幾個模塊,確保方案的可靠性

測試不管對軟件和硬件來說都是有效的可靠性保障,但測試的理念還是有不一樣的地方。硬件測試對重複要求較高,很多器件可能跑著跑著自己就悲劇了,比如電解電容在高溫環境下一段時間後電解液減小的較多。因此對同一個模塊的反覆測試,或者同一種場景的反覆測試是很常見的,極端情況就是所謂“高溫高溼”實驗,加速器件的老化。

而軟件系統由於其運行的一致性,更多是考慮測試覆蓋度,儘量去覆蓋每一種場景,甚至每一行代碼。測試覆蓋不到的,就使用人海戰術,通過人每一行代碼的檢視,去發現可能的問題。

結語:不管SWE和HWE有多少差異,他們都在通過自己努力在一點一點改變著這個世界。也希望自己能在若干年之後,還能自豪的稱自己為程序員,一個略懂硬件的碼農。


分享到:


相關文章: