2008年11月15日

程式設計師的經濟學

有個問題困擾我很久了。長久以來,我一向對軟體工程師的待遇感到很困惑:是的,通常他們在所處的社會中應該可拿到中位數以上的薪資,但工作本身的難度與所需持續付出的努力,與薪資水平似乎不成正比。

以我較熟悉的職業來說,商業管理路線,除了工作時間外,需要的充實自我大概是商業評論刊物,中英文報紙等等,有些需要精讀,但不是做學問,你不需對著一篇論文苦參。又或是新聞媒體:是的,工作時間外仍需要注意時事,但你不需要在假日研究最近有甚麼新的新聞理論。

工程師就完全不同。一旦停止學習,你就掉入後段班,等待被淘汰。這裡說的學習是真正紮實的:你必須閱讀通訊協定、理解各種技術文件、了解演算法,偶爾溫習一些數學、電子物理等等。這些是需要用做學問的努力去面對的東西。這種職業一般稱為專業人士,具有某種經過訓練得來的特殊技能,進入門坎較高。然而在我有限的知識中,沒有類似的專業人士需要付出這麼高的維護費用。律師、會計師、醫師,都會有一段辛苦的養成過程,但養成之後,維護費用相對較低,沒有這麼辛苦。

軟體工程師經常有華爾街的工作時間、律師的職業挑戰、醫師的工作壓力。但是,他們的收入通常比起這些職業,都還有段差距。這讓我百思不解。

晚餐時與同事聊起,讓我決定再挑戰一次。這是個經濟學問題,供給與需求,而價格基本上是由這兩者決定。接下來我想到世界上跳踢最高的人,然後,我好像突然懂了一點。

跳踢最高的人?甚麼跟甚麼啊?

這是之前看到的金氏世界紀錄節目。那集有紀錄保持人跟挑戰者,紀錄保持人看來毫不特殊,自稱沒有特別鍛鍊;挑戰者則是穿著緊身衣繃著一身的肌肉,顯然狠狠的練過,勢在必得。結果卻出乎意料:紀錄保持人輕鬆的打破自己的紀錄,而挑戰者怎麼也跟不上他那看似簡單的動作。

很明顯,衛冕者具有某種罕見的才能:跳踢。在具有這種才能的人們中,他是世界第一。問題來了:如果比較世界前一百名擅長跳踢者的薪水,與前一百名擅長財務操作者的薪水,讀者覺得哪個平均會比較高呢?

這個例子讓我理解到,才能、難度是一回事,但這種技能可以為你獲得的利益則是另外一回事。有了很棒的供給,還要注意有沒有夠大的需求。明顯的,我們需要不少會賺錢的金融人才,但卻不需要很多跳踢很高的人,儘管他很厲害,而且這才能很罕見。

那讓我們觀察軟體市場的「需求」吧。軟體的特色是甚麼?複製的阻力幾乎沒有。這意味著,我們並不需要很多從非常好到普通好到不怎麼樣的軟體,我們只需要一套最好的就行了。我們不需要二十種搜尋引擎、二十種網路瀏覽器、二十種作業系統。大部分人用的軟體都差不多。

於是我理解到一個冷硬的事實:世界並不需要很多軟體。如果你是能夠設計出常用軟體的工程師,那麼你會得到非常棒的報酬。但,如果你不是,那麼請準備好接炸彈:

並沒有人想要用你做出來的廢物。儘管你以及你公司花了那麼多錢財與心血,但如果它不是前五名,它就是廢物。廢物賣不了錢,所以你當然沒賺頭。如果不是最好的,市場就從華爾街變成跳踢了。

這點一想通,我有恍然大悟的感覺。好的室內設計師並沒有辦法把他的巧思大量的複製。我們可以用相同的搜尋引擎,但不想住在裝潢都一樣的房子裡。而如果需要對每棟房子做風格相同但細節不同的客製化,就無法大量生產。所以,一名超級厲害的設計師並沒有辦法統治世界,讓其他的同業都沒飯吃,但是一個很強的搜尋引擎卻可以。同理可證:Armani 很貴,Net 很便宜,但軟體可以很輕鬆的用 Armani 的品質賣 Net 的價錢,然後把 Net 擊潰。

意思是,軟體設計師是贏者全拿的。你要嘛就是最好的(此處的最好,是指最受歡迎,不是指技術最難),要嘛你就乖乖領那點薪水吧。

因應策略則是:

如果你是最好的那類工程師,恭喜你。

如果目標是薪水最大化,那你不該選擇你最擅長的事情作為職業。你應該選擇薪水最高的。

如果薪水不是最重要的,那將薪水以外的事情列入考慮。如果你喜歡工程的單純與愉悅,那麼這也是你的所得,金錢跟快樂都是報償。反之,如果你並不能從工程中獲得快樂,那麼請思考是否轉行吧。

最後,下次覺得不公平時,請記得告訴自己:「跳踢也很難啊」。