「真正認真寫軟體的人應該自己做硬體」這句話在今天過時了嗎?
這是 Alan Kay 1970 代的名言(People whore serious about software should make their own hardware.),被喬布斯在 2007 年第一代 iPhone 的發布會上發揚光大了。
從技術角度看,這話是什麼意思?在 2011 年的今天,這句話還成立嗎?
當然成立。一個主題:能耗。兩大趨勢:
- 移動平台的崛起決定了我們不能像桌面系統那樣過度抽象底層硬體,而是要想法在有限的計算資源上最大限度的壓榨性能。電池蓄電能力的硬約束決定了只有能控制底層硬體和上層軟體的縱向整合才能提供最佳的用戶體驗。這方面蘋果是個典範。
- 雲計算的流行使得大規模集中部署伺服器群成為業界的常態,而日漸走高的能源價格決定了巨型數據中心不得不盡全力考慮省電。在電力成本佔到數據中心運行總成本將近五分之一的今天,業界有實力的玩家都在自己設計伺服器主板、供電方式、機架、乃至整個建築的通風冷卻。這方面 Google, Facebook 是代表。
不是過時的問題,而是什麼時候才有效的問題。對於嵌入式系統來說,天生就是軟體硬體結合開發的。對於通用系統來說你可以獨立的開發軟體跟硬體。
移動互聯網時代的發展趨勢是把所有的更多的設備變成嵌入式設備,自然你更多的需要用硬體軟體結合的方式去開發軟體。——因此,實際上首貼的那句話,在現在而言,不但是沒有過時,反而是具有越來越大的意義,那是一句具有超前意識的話。
但是從另外一個角度來說,軟體並不是只有一種。例如,你認為 Linus 沒有認真的在開發 Linux 么?然而 Linus 大抵不會去自己開發硬體的。
真正好的廚師都應該自己種菜。
不過時 就算沒有條件親手製作,至少應該深入了解硬體的原理
People who are really serious about software should make their own hardware.
從科學或技術的角度來看待這句話,意思是:計算機科學(Computer Science)相關工作的從事者,應當嘗試、並常常站到「體系(System / System Architecture)」的視點來看待並鑽研自己領域內的工作。
具體來說也就是:大到一套完整軟體系統的工作流程、小到一條細部演算法的優劣評判,都需要結合底層「電子/電氣」的基礎而進行;脫離開「物理的」基礎,而架空去思考或嘗試創造,並不是最科學的,對於實際的工作情形來說也不是最合理的。 說得白一點:現下的每一句代碼,最後也都要轉變成數字電路的「導通」或「關斷」這樣兩種工作狀態——而更進一步地,即使是「數字電路」,也只是模擬電路在連續工作狀態中的一些極端情況,最終的電路工作方式,還是一串串連續的電學信號在半導體材料中「流動」。
早期的計算機科學家,對於底層硬體的物理(電學)工作特性和工作原理,都是非常了解的;由於編程語言向高級化發展,後來的程序設計人員才變得漸漸遠離了底層硬體——這事實上會受到「工具(編程語言/開發環境)」的限制——如果希望徹底擺脫這類限制去做更深入的創造,就需要從對底層硬體的了解、甚至改造去出發。
事實上,這句話背後的含義和知識,是每個計算機科學相關工作的從事者,都需要去了解、掌握並實踐的——這也是一門基本功,只要在計算機科學還是建立在電子/電氣的物理基礎之上的年代裡,這句話就不存在「過時」。(不完全貼切的類比:只要還是在歐式幾何的領域內研究問題,就不得不先認定平行線不相交;想用 Photoshop 繪製出一張漂亮的實體海報,還得去了解基礎的印刷知識。)
正像前面說的,由於編程語言的發展,今天很多程序設計者反而有忽視底層硬體的傾向——重提這種經典而紮實的學習觀念,應該是好事。// 與之相對應的,我記得大學相關課程教學中,老師們都會對此進行更多的強調。
// 雖然敦促效果並不一定明顯…作為一個商科人,也很想從商業的角度來談談對這句話的看法。
「雷軍:我覺得我們做手機,就是在做移動互聯網,我們不是在做手機本身,我們做的是裡面的東西」工欲善其事必先利其器
推薦閱讀:
※《三國志》中有哪些名言?
※有哪些能夠讓人印象深刻的短句,十字以下?
※「當你真心想要一樣東西的時候,你身上散發出來的就是那種能量的振動頻率,然後全宇宙就會聯合起來幫助你達到你想要的東西。」這句話對嗎?