為軟件王國立法:從硬件產業的內幕說起
原創51CTO編者注:本文作者Paul Kimmel是codeguru網站上VB Today欄目的專欄作家,有著二十多年的項目經驗,涉及到硬件和軟件的方方面面。Paul這么多年的項目經驗令他了解到,硬件產業中有著很多生產中的小秘密,而這些秘密如果跟軟件工程師們分享的話,是會帶來很多好處的。以下是譯文:
20多年來,我參與過很多的項目。現在,我是一名作者、專欄作家和顧問,從而能夠了解到更多我以前不可能參與的項目。最普遍、顯而易見的一個現象是,有大量從頭開始開發的軟件甚至沒來得及面世,就胎死腹中了。就算是那些現在已經被用戶使用的軟件,也很少能夠在規定時間內、嚴格按照預算或是預期的功能,滿足用戶的要求。
傳統觀念一直認為軟件工程是很難開展的,每一個應用軟件都是宇宙中全新的一個創造。所以,它就一直都是這種狀況,并將一直持續下去。
可悲的是,這種傳統觀念其實是一個謬論。
有一個叫做IEEE的硬件工程師秘密組織,他們有一個沒有跟軟件工程師分享過的小秘密。這個秘密就是用戶的權力、自由和選擇這幾個因素,必須被去掉。為什么他們沒有把這個秘密共享出來?因為大多數的軟件工程師,都沒有通過一個標準化的測試,沒有學到他們的秘密握手(secret handshake),也沒有通過大幅的減薪來表明他們的決心。
不同于其它一些更加開放的組織,IEEE獨自把持著一些能夠讓軟件產品廉價、可靠、快速的要訣,而這一切是大多數軟件項目經理做夢都想不到的。
二十年行業經驗
在過去的20年之中,我一直在為企業、為程序員們做咨詢和寫作工作。在那一段時間里,我參與到了一些不需要與電腦直接打交道的項目中。這使我不得不具體地去了解這些不同設備的硬件規格,也正因為如此使,我能夠了解到硬件生產中的許多小秘密:設備制造商很少從零開始制造產品。他們生產的硬件基本都是使用現成的部件進行組裝,然后放到個花哨的盒子里。沒有幾個用戶會去研究它的原理,也沒幾個用戶會去看這些東西的設計藍圖。最終用戶所知道的是僅僅是這東西很炫,它能做很多工作,可以洗衣服,可以播放音樂,可以錄制電視等等諸如之類。其實說白了,硬件產品就是一些用了一遍又一遍的零件,只是換了幾個不同的漂亮盒子而已。
當一個電子工程師(或者其它不是程序員的工程師)從大學畢業獲得了工程師學位之后,他們就加入IEEE(你可以上維基百科查一下IEEE這個縮寫,不過這并不重要。)(其實每個人都可以當程序員,心理學專業的都可以給編寫代碼。)當他們加入到IEEE以后,他們就相當于拿到了一個保證書,確保他們可以拿到不錯的薪水;用不著自己去另外創造,因為有現成的部件;也用不著白手起家去自己創業。
一旦這些畢業生加入IEEE以后,他們就可以領取到一本27頁的小冊子。這本小冊子包含了所有被IEEE定義為“可用”的芯片、零件、電阻、電容和電路。將來要用到的部件則必須從這本小冊子里選取,偶爾也會有新的東西需要被補充進這本小冊子,但這必須通過高級委員私下投票決定,隨后每個從業者都會有領到一份新的小冊子。必須指出的是,只有高級的IEEE委員才能往這個“可用”的部件名單里添加內容,而且這種機會也少之又少。
然而在軟件領域,情況就完全不是這樣了。只要有鍵盤,你就可以發明新的東西,并通過互聯網、電子郵件、版本控制系統等,很快讓你的發明出現在用戶的桌面上。但軟件開發人員所具備的創造力卻導致了混亂。如果要寫一本軟件開發的小冊子的話,那可能27,000,000頁都寫不完。軟件工程的困難之處也正是沒有誰能一錘定音,在開發過程中人人都有發言權,而且每個人都可以各持已見。
硬件產品是如何制造的
51CTO編輯推薦:IT硬件名人堂:40年經典產品和背后的故事(組圖)
在設計制造硬件時,硬件工程師首先得像做晚餐時從雞肉、豬肉、牛肉或魚以及一堆蔬菜里選食材一樣,對相關的材料進行選擇,然后才能組建好硬件。這樣,只要有需要,硬件工程師就能隨時組裝好成品。
不好意思,或許這個比喻可能會讓人犯迷糊,接下來我們再細說吧。
硬件工程師有幾點是必須牢記的。首先,他們必須把器件組裝到體積有限的一個殼子里;其次,他們只有很有限的器件可用;第三,這些器件都要被安裝到花哨的塑料包裝盒里,在電視上或是餐廳里為產品打廣告,人們往往會被漂亮的外包裝吸引而去購買它。這些漂亮的產品以極快的速度生產和制造出來,以至于IEEE協會和制造硬件的工程師們都不再關心這些硬件系統本身的功能是否完全切中消費者的需求。
大規模生產漂亮硬件產品的關鍵,其實就是不要去創造新的部件,即使你用的這個部件只有百分之一的功能是真正需要的,只要你能按不同的方案重組這些部件,再換個酷點的包裝(如果可以的話,再把硬件的大小比之前做得小一點)就可以做成全新的產品了。(1978年我有一個可以播放78 RPM的唱片的Zenith 收錄機,可以用來播放音樂。2009年,我又有了一個很薄的iPod(對不起了,使用Zune的朋友們),它也只不過是播放音樂。人們只是想出了如何少使用幾種零件,但是其實這些零件大部分1978年的時候就已經有了。
軟件是如何開發出來的
繼續我那個做飯的比喻。相比硬件開發,在軟件開發時,可能每個工程師都會有種饑餓感,那種感覺就像是埃塞俄比亞大饑荒,找不到現成可用的部件。沒有魚、豬肉、牛肉、雞肉和蔬菜這些食材,也沒有廚房、沒有器具,甚至可能連吃飯的時間都沒有定下來。而在吃飯的時間內,工程師們還在討論分子是如何構成蛋白質。(說了這么多,我不餓都不行了。)
其實,目前的這種狀況,真的不是程序員的過錯。程序員是聰明而富有創造性的,只不過他們缺乏一個可以控制他們的人,或者所謂“大祭司”。程序員有點像是在一個沒有法律、誰吼得大聲誰就贏的國度里干活,每個人有太多的自主權,結果聰明反被聰明誤。比如51CTO之前發表過的從菜鳥到大師,細看程序員的五種層次一文中也說道,90%的代碼是由10%的程序員寫出來的。這一方面說明大師級程序員的重要性,但對于軟件產業而言,卻未必是一件好事。
真理就是……
軟件開發最終也還是會變成現成組件的拼裝。不同派別的程序員不用再問自己:我應該使用ADO.NET、SQL、LINQ、XPO,還是其他方法來對數據庫進行插入和讀出操作。到那時,會有一個統一的數據庫操作層供所有這些人調用。這樣,我們的選擇范圍就可以縮小一些,也能夠接受比原來較少的薪酬。向我們軟件工程里的大祭司們起誓保守秘密吧,從此軟件項目就變成了組裝活,不會再出現失敗的情況。難道不能這樣嗎?
與此同時,盡量用現成的代碼去編寫程序,盡量用已知的、夠用的技術來實現所需的功能,不用管它是否會帶進很多不需要的功能從而把整個程序弄得一團糟。還可以再換上幾個漂亮點的界面,這樣就能很容易做出了一堆很酷的新軟件。
原文:Hardware’s Dirty Little Secret, or Why Software Can be Mass Produced
作者:Paul Kimmel
【編輯推薦】