看約耳談軟體, 節錄我喜歡的段落

1.

雖然我在微軟只待了幾個月,也知道沒有什麼「某人批淮我的規格」這種事。慘啊,沒有人有時間我的規格,更別提批淮了。程式師每天都在催我多寫出幾頁,讓他們能多寫點程式。我的主管(還有他的)已經講得很清楚,沒有其他人懂巨集或者有時間去做這件事情,所以不管我做出什麼東西,最好是正確無誤的。而在微軟這個怪研究小組工作的博士卻假設事情會更正式一點。
我很快就明白,應用架構組對巨集的瞭解比我還少。至少我還和幾個巨集開發人員和Excel老前輩談過,知道實際上大家是如何用Excel Basic的,不外就是每天重新計算某張試算表,或者依照某個模式重新安排資料等等。

我當然是非常的感動。在微軟這家公司裡,如果你是Excel巨集策略的專案經理,即使來公司還不到半年也不要緊,你就是Excel巨集策略之神,連員工代碼六號的老員工也不能擋你的路。事情就是這樣。

這件事傳遞了一個非常強烈的訊息。比如說它讓大家對自己的工作更有責任感。也不能再用「管理階層批淮了規格」這種想法來當藉口,因為管理階
層並不會仔細看他們的規格。管理階層只管雇用聰明人並安排工作給這些人做。另一個意義是表示這裡是個絕佳的工作場所。
有誰不想成為所屬領域的王者呢?軟體
本質上就很容易分割成小塊小塊的元件,所以總是可能分割出人員間的責任,讓每個人擁有一個領域。這可能正是軟體人喜歡在微軟做事的原因。

事實上連Juno的執行長都非常樂意干預公司最底層完成的工作。真是一脈相傳的標準作業程序啊。我並不是說這是我離開Juno的原因,不過它的確解釋了我離開Juno的理由:不管你多麼努力工作又有多聰明,也不管你是否在「負責」,你對再微小不過的
事都沒有權力。把你該死的點子訓練以及聰明睿智放一邊,把那些讓我們付錢請你的一切東西通通都丟到一邊吧。而且Juno的經理很多,大概佔總員工四分之一,所以他們有的是時間可以到處亂伸手指,確定他們能掌控。在微軟卻是副總自己從九號大樓出來找你,確定你有權力能把事做完。這對比還真是強烈啊。

2.

把你的科學家雇員當作幼稚園小朋友來對待,並不是很少見的特殊現象。幾乎每家公司都有同類型既侮辱又貶低人的獎勵方案。

這樣的系統從未考慮一個事實,就是人各有不同而獨特的天賦,需要各種天賦才能讓一個團隊好好運作。

有幾個原因使得績效評估令人緊張。我有許多朋友的才華都不是傳統尺度可以呈現的,他們通常都拿不到好考績。舉例來說,某位朋友是個歡樂觸媒和快活的總監,
可以在艱苦狀況下激勵大家,而且還是結合團隊的黏著劑。不過由於經理不了解他的貢獻,所以常會得到負面考績。另一個朋友非常的有洞見;別人會因為跟他討論
事情而把工作做得更好。他會花高於平均的時間去嘗試新技術;就這方面來說,他對團隊其他人的幫助是無法衡量的。不過他寫的程式行數也低於平均水準,而他的
經理也實在太蠢沒注意到其他貢獻,所以通常考績也不好。而負面的評價顯然對士氣有致命的作用。事實上即使給某人正面的評價,只要評價不本人預期的好,對士氣一樣有負面的作用。

績效評估對士氣的作用並不是對稱的:負面評價對士氣傷害很大,可是正面評價並不會改善士氣或生產力。

其中的困難在於大多數人都認為自己把事情做得很好(即使事實上不是)。

在團隊中誠實地實施績效評估通常會導致士氣低落或憂鬱,甚至會有部份人員離職

Alfie Kohn在哈佛商業評論中一篇已成為經典的文章中寫道:


過去三十年間至少有兩打以上的研究明確地指出,為了報酬而工作的人,表現不如完全不期望有報酬的人。

他的結論是「激勵(或者說賄賂)在職場上是行不通的」。DeMarco和Lister更進一步明白地表示,任何型式的職場競爭及獎懲方案,包括以前流行那種「在某人做對事時馬上獎勵」的把戲,所帶來的傷害都大過好處。給某些人正面激勵 (比如愚蠢的公開頒獎儀式)暗示他們其實只是為了拿那個壓克力獎牌才有表現;也暗示他們在工作上不夠獨立,要有甜頭才會努力;這實在是既侮辱又貶低人格。

大多數的軟體經理都沒有選擇餘地,只能依循現有的績效評估系統。如果你身在這個位置,要防止團隊自殺的唯一辦法,就是對每個人都只給些裝裝樣子的考績。不過如果你在這件事上有其他選擇,我會建議避開各種的績效評估和獎勵方案,或是愚蠢的本月最佳員工計劃。

3.

微軟很幸運,他們從未停止使用原有的程式碼庫,所以一直有東西可以推出。因此這個錯誤只成為財務上的問題,而不是策略上的災難。

程式師總想把舊程式丟掉重新開始,其中的原因很微妙。他們會認為舊的程式是一團亂,不過下面這有趣的觀察指出他們可能是錯的。他們會認為舊程式一團亂的直正原因是一個很基本的程式設計原理:

讀程式比寫程式困難。

回到那個兩頁長的函數吧。是的,我瞭解這只是個顯示某個視窗的簡單函數,不過卻多了很多怪東西而且沒有人知道為什麼。嗯,我會告訴你原因:它們是問題的修正

當你把程式碼丟掉從頭重寫時,其實是把這所有的知識都丟掉了。這所有已修正的問題,好幾年的寫程式的成果。

你會讓出市場領導地位。你會把兩三年的時間當禮物送給競爭者。相信我,軟體的一年可是很的。

三種錯誤理由的解法
1.架構問題:找一個programmer小心的整理好
2.效率不好:最佳化關鍵部份
3.程式碼很醜:用文書編輯軟體修正

4.

向後相容才能解決『雞生蛋,蛋生雞』的問題。

5.

想好你要成為”Ben & Jerry” type company or “amazon” type company.

6.

不過如果你做了承諾讓他們在不高興時可以容易離開,突然間就消除了另一個進入障礙。

7.

這裡有兩件事。微軟有些很偉大的思想家。當偉大的思想家考慮問題時會開始看出模式。他們看到人們要傳送文書處理檔案給別人,又看到人們要傳送試算表給別人,然後就會發現裡面有一個通用的模式:傳送檔案。這已經是一層的抽象。然後他們會再上一層:人們傳送檔案,不過網頁瀏覽器也會「傳送」網頁要求啊。這些全都是傳送的動作,所以我們聰明的思想家就發明了一種更新更廣義的新抽象概念:「訊息傳送(messaging)」,不過現在這件事變得愈來愈神秘,再也沒人真的懂他們在說些什麼。

而當你一直往上把事情弄得太抽象,就會像上太空一樣沒有氧氣。有時候這些聰明的思想家就是停不下來,然後就創造出這些荒唐又無所不包的高層次宇宙景像,這些東西什麼都好,就是完全沒有實際的意義。

我在微軟工作過三年,瞭解這家公司。我瞭解寫這份文件的那種人。幾乎可以確定比爾蓋茨在裡頭佔了很重要的角色;這也是他放棄CEO位置的原因,這樣才能參與這件事。我不認為微軟寫這份文件只是為了擁有一些泡沫軟體。他們可都是超級聰明。

我真的認為他們認真地以為自己正在創造未來,而且也自認知道怎麼做到。他們審視由Hotmail到SQL
Server每一個微軟的產品,嘗試把這些產品套入一個奔放的新願景中。不過問題是裡面並沒有人真的發明什麼驚天動地的東西。這並沒什麼好驚訝的,不是因
為微軟笨,他們並不笨,只是驚天地動的新發明太罕見了而微軟的聰明人數有限。全世界只有一個人發明Napster,而他並不在微軟做事。微軟自暴自棄地想
相信自己能量產革新
,不過即使在這個Internet的寒武紀大爆發期,每年還是只會出現幾個真正革命性的想法,而這些點子之一出現在比爾蓋茨小世界和
Redmond武士團的機會實在是太小了。何況一個相當聰明的程式師可能在微軟裡寫Windows
NT的顯示驅動程式,他即使有很偉大的點子可能也沒有人會聽倒。考慮到這種狀況後微軟想出絕世好點子的機會就更小了。

這份白皮書裡唯一看清的具體內容,就是軟體應該是一種經由Internet取得的訂閱服務,而不是由光碟安裝的某種東西。

(註:難道這就是 Network Computer?)

8.

當你要取用別台機器的資源時,很有可能該機器或是網路無法使用。其次網路的速度意味著需要一段時間去處理該要求,比如你可能是透過28.8kbps的數據機執行的。另外對方的機器可能會當掉,網路也可能會在通訊過程中斷線(比如貓突然跌倒壓到電話線)。

可靠的軟體在使用網路時絕對都得考慮這些問題。程式設計介面把這些都隱藏起來,對寫爛軟體來說真是助益匪淺。

如果網路一切正常,這種寫法就會正常運作。不過如果檔案大小有1 MB又是透過數據機連接網路,什麼問題都可能發生。在傳送這個1
MB的檔案時,整個應用程式都會停住沒有反應。也不可能顯示進度,因為CopyFile當初設計時就假設一定會是「快」的。如果電話斷線也不可能續傳。

9.
雖然Linux的確是微軟的心頭大患,不過至少要預言這個雷蒙公司滅亡還言之過早。微軟銀行裡的現金多得不得了,而且仍是非常的賺錢,還要很久很久才可能
倒。微軟可以胡搞個十年才會開始有點危險,而且你永遠不會知道…他們可能在最後一刻變身成刨冰公司。所以別這麼快就看衰他們。90年代初期大家都認為
IBM徹底完蛋了,因為大型主機(mainframe)已經成為歷史!

10.
不過問題並不會消失。PHP是個很普遍的web開發工具,不過它完全忽略字元編碼問題 (http://ca3.php.net/manual/en/language.types.string.php),PHP很愉快地用8位元來處理字元,因此幾乎不可能開發好的國際化web應用程式。當我發現這件事時,覺得真是夠了
有出一套網站管理軟體CityDesk (http://www.fogcreek.com/CityDesk),從上一版起我們決定內部全部使用UCS-2(2個位元組)的Unicode,它也是Visual Basic、COM、以及Windows NT/2000/XP的標準字串型別。寫C++程式時只要在字串宣告時用wchar_t(“wide char”)代替char,再用wcs函數代替str函數(比如用wcscatwcslen代替strcatstrlen)即可。要在C程式裡建立一個UCS-2字串常數,只要在字串前面加個L就好了,就是這樣:L”Hello”.
11.

策略四:讓笨蛋無害

即使最好的團隊都會有一兩個笨蛋。團隊裡有爛程式師讓人頭痛的地方,就是他們的爛程式會攪亂你的好程式,另外就是好程式師得花時間幫壞程式師擦屁股。

身為底層工作人員,你的目標是損害最小化,也就是所謂的牽制策略。有時候這些天才會花兩星期寫出一點點程式,而且寫出來的東西爛到不可思
議,完全不可能用。這時候你會很想花15分鐘把這段程式從頭再寫過。請忍住這種誘惑,因為這是個把這些白痴拖住幾個月的大好機會。只要一直報告那個程式的
問題,他們就只好一直在這段程式卡好幾個月,直到你找不到其他問題為止。而這幾個月他們就不會在其他地方造成傷害了。

12.
我讀大學時修了兩門經濟課程:總體經濟和個體經濟。總體經濟滿是「低失業率導致通貨膨脹」等現實中不太能成立的理論,不過個體經濟則是酷又有用。裡頭都是討論供需間關係而且真正可用的概念。舉例來說,如果你的對手降價而你不跟進,你的產品需求就會減少。

其他事都一樣,當商品的價格下降時互補物品的需求就會增加。

這時候大家常常會出來打岔,他們會說:「啊哈!可是Linux是免費的!」好吧。首先經濟學家談到價格時是指整體價格,裡面包括安裝時間、人員再教育、現有流程轉換等無形的事物。這所有的東西我們稱之為「整體持有成本」

再來這些支持者會因為免費啤酒的說法,試圖相信自己不受經濟定律限制,因為他們有個很棒的零,而任何數字乘以都沒有了。這裡有個例子。Slashdot (http://interviews.slashdot.org/interviews/02/06/07/1255227.shtml?tid=156)Linux
開發者Moshe
Bar未來的Linux核心是否能與現有裝置驅動程式相容,他回答不需要:「專屬軟體每行除錯好的程式碼收費50到200美元。這樣的價格不適用於開放源
碼軟體。」Moshe繼續聲稱,每次Linux核心改版讓現有驅動程式失效是正常的,因為重寫現有驅動程式的成本是零。這實在是錯得離譜。他等於是聲稱維
持核心向後相容所花的小工夫,等價於重寫所有驅動程式的大量程式作業,因為兩者都會乘以各自的「成本」,而他們相信這個成本都是零。這是一個似是而非的謬
論。修改現有裝置驅動程式需要開發人員投入數千甚至數百萬小時,一定會產生某些費用。而且在這些工作完成之前,Linux因為不能支援現有硬體,在市場上
等於又再變回殘廢。把這些「零成本」的工夫拿來改良Gnome或支援新硬體不是更好嗎?

不管是專屬軟體還是開放源碼軟體,除錯絕對不會是免費的。即使沒有實際付錢,還是有機會成本和時間成本。投入開放源碼計畫的志願性程式人力是有限的,所有
開放源碼計畫都在爭取同一群有限的程式設計資源,只有最具吸引力的計畫才能擁有超過需要的志願開發者。總而言之,我不認同這些試圖證明啤酒免費這種荒唐經
濟的人,因為我認為他們只會得到「除以零」的錯誤。

開放源碼並不能免於重力或經濟法則。由Eazel (http://www.eazel.com/),
ArsDigita的事就可以知道,這家公司以前以VA
Linux和很多其他企圖而聞名。不過有些在開放源碼世界中很少人真正瞭解的事還在繼續進行:很多有責任儘量提升股東價值的大型上市公司,投入很多資金支
持開放源碼軟體(通常是負擔大型程式團隊的開發費用)
。而這正可以用互補物的原理來解釋。

這所有的例子裡都有一件很重要的事,軟體是很容易讓硬體普及化的(只要寫個小小的硬體抽象層,比像Windows
NT的HAL就只有很小一段程式),不過硬體想讓軟體普及化卻是難上加難。就如StarOffice行銷團隊所學到的教訓,軟體是不能互換的。即使價格為
零,由微軟Office切換過來還是需要成本。除非切換成本變成零,否則桌面辦公室軟體不可能真的普及化。兩套軟體間即使差異極其微小,還是會造成切換時
的痛告。雖然Mozilla的確擁有我所有想要的功能,而且單單是擋廣告的功能就讓我會愛用它,可是我實在太習慣按Alt+D跳到網址列了。你能怎麼辦?
去告我嗎?只是一個小小的差異就失去普及化的狀態。可是我可以由IBM的電腦抽出硬碟,直接塞進Dell的電腦裡,打開電源整個系統還是完全正常的啟動並
運作,就像沒換電腦似的。

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: