算起來軟體工程師大概是全世界最特別的一種職業,因為一個最好的 programmer 和一個最爛的 programmer,生產力相差至少 10 倍,有時候甚至可以高達 100 倍。這在其他的職業幾乎是沒聽過的 — 像 Jordan (麥可‧喬丹) 這樣強的籃球員,平均一場比賽的生產力,頂多也只是菜鳥板凳的 10 倍。即使是其他腦力、創意密集的行業,例如:IC 設計、建築、商品設計等等,生產力的差別也都是在 10 倍的這個級距,很少達到 100 倍的。
但又為什麼,當 Jordan 的薪水是 NBA 菜鳥的 100 倍,一流建築師的費用是菜鳥的 1,000 倍時,最好的軟體工程師,他們所賺得的卻往往連新人的 5 倍都不到?這個問題我一直想不透。它也不是壞事,因為很久以前當我第一次發現了這個現象後,我就學會要花 3 倍的價錢去顧一個 10 倍強的工程師 — 多麼划算的一個買賣啊!只是這件事情發生的原因,讓我非常的困擾。第一,它一點都不符合經濟學上「邊際效應遞減」的原則,你看其他職業,例如上面提到的 NBA,當你要雇用一個生產力 10 倍的球員,你必須付出 100 倍的成本。更重要的是,它一點都不公平,生產力 10 倍的人,就算沒有拿 100 倍的薪水,少說也應該要拿 10 倍的薪水。
直到昨天,讀了 John D. Cook (強‧庫克) 的這篇文章:「Why programmers are not paid in proportion to their productivity」,才給我了一個天大的啟發。
原來,這件發生的原因主要有兩個 — John 其實也是引述 Joel Spolsky (喬‧史波斯基,有名的 Joel on Software 作者) 的說法:
第一,雖然全世界的工程師優劣差很多,但是一間公司的工程師優劣卻是差不多的,因為一流的工程師不可能長期忍受跟一群蠢蛋一起工作,所以遲早會離去,於是久而久之這間公司的工程師品質就會趨向一致 — 這也就是為什麼你必須要花很多力氣在團隊上面。
而另一個更重要的原因,是一個好工程師的生產力,其實很難被察覺。如果你要判斷一個業務好不好,那很簡單,看看他的業績就行了。你要看一個建築工人的生產力,那也很簡單,看看他多快把房子蓋好就行了。以此類推,如果你要知道到一個軟體工程師的生產力,就看看他寫了幾行程式…
大錯特錯!!
一個軟體工程師生產力最高的時候,是當他可以少寫幾行程式的時候。當他可以用一些現成的東西,在很短的時間內拼湊出你需要的產品、解決方案的時候;當他可以跟你明確的溝通,不會浪費時間在開發錯誤的東西上的時候;當他可以正確的解讀數據,然後快速的修正產品的時候。這些…
通通不是用幾行程式碼去衡量的!!
問題是當一個優秀的工程師,快速的把產品湊出來,或者是很有效率的溝通時,老闆的反應是什麼?99.9% 都沒有辦法聯想到這就是極致生產力的表現,然後說:「嘿!我應該幫他加薪 10 倍!」所以,難怪好的工程師往往沒辦法獲得合理的報酬。
因此,如果你是創業團隊,該怎麼做?當然是用力的利用這個市場不平衡,把優秀的、在大公司鬱鬱不得志的工程師,通通都吸收到你的團隊來。而這也就剛好解釋了為什麼 EZTABLE 會說:我們在找的是「人」,而不是技術。
PS. 意猶未盡的人,這裡有一篇 Hackers vs. Coders 的故事。
PPS. 我超喜歡下面的討論,比文章本身還精采,大家千萬不要錯過。
(Image via scobleizer, CC license)