十月 29, 2011
» 影響力

這個月資訊界有很多了不起的人去世,很多人爭相討論到底誰才真正改變了世界,誰的影響力才大。Steve Jobs的死訊讓千萬人悼念,但發明C語言和UNIX的Dennis Ritchie和AI之父John McCarthy的消息就沒有受到如此廣大的注目。剛好最近很常和人聊到相關的話題,所以想寫篇文章讓自己反芻一些想法,也順便交換一些意見。

四年前,當我在申請博士班時,我還不確定我想做什麼以及我能做什麼。我知道自己個熱愛技術、喜歡親手打造工具來解決問題的工程師。我喜歡憑一己之力解決問題的成就感,喜歡挑戰新鮮的事物,討厭做重複無趣的事情。當時我有兩條路可以選,出國念博士班,或是留在臺灣做軟體工程師。我幾乎沒什麼猶豫就選了出國,畢竟可以做自己真正想做的事,雖然收入會比去工作少,但只要夠生活其實也不是那麼重要。

到了美國後,做了幾年研究,朝了夢想靠近了一點,但對於很多事的想法都有些轉變。

先來說說一些關於影響力(impact)的想法。在學術界做研究,最直接的產物是論文(paper)。研究人員都希望自己的論文可以在自己的領域裡掀起一些漣漪,把自己的想法擴散出去,甚至流芳百世。但有個問題是,一個研究的影響力不是短時間內看得出來的,一個好的想法可能會埋在數十年前的論文中,直到某個人不小心看到了才衍生出諾貝爾獎等級的產物。所以做研究的人通常不太會計較論文寫出來後到底有沒有用,因為根本就沒辦法知道。一兩年內沒被人引用不代表十年後就不會有,同樣的,即使一時引起了廣泛的討論,可能過兩年就又沉寂下來被人遺忘。

這就是在學術界的難處,很多發明和想法的價值不是馬上看得到的,甚至最後演變成產品後大家也不會知道最原始想法的來源是誰。簡單的說,學術界缺乏一個有效率的機制來快速強化有價值的想法和研究,而只能讓這些論文自然的發展和淘汰。如果剛好有人發現某個論文的價值,就會把它實作成產品再推到市面上給一般消費者使用。但如果沒有的話,這些論文就等於是白寫了,也不會對學術界以外的人造成什麼影響。

我喜歡做自己喜歡的研究,但我也想要自己做的東西是有實用價值的,而不是紙上談兵的理論。所以在研究工作之餘,我也花了很多時間把我的研究成果(像是sikuli)打造成真正能用的軟體並公布出來,讓大家馬上就能享受到成果,而不是等若干年後有個很閒的人碰巧發現這想法才把它實作出來。之前有個朋友問我要怎麼在做研究和instant impact(立即的影響力)中做選擇,我的答案很簡單:「這兩件事並不是互相衝突的,是可以同時完成的」。

話雖如此,如果談到影響力的大小,那我的答案可能又會有點不一樣。讓我從另一個體悟說起。

這幾年來還有個很大的體悟是:「個人的力量是很渺小的,社會中每一種角色都很重要」。雖然看起來是小學生都知道的廢話,但工程師個性的人就是喜歡凡事自己動手做。馬桶壞了自己修,燈泡不亮自己換,就連公寓附的微波爐壞了我都想先幫他們debug一下確定問題根源後再找人來換。凡事自己做是很有成就感,但如果真的想擴大影響力時,就會有點力不從心。

舉例來說,Steve Jobs和Steve Wozniak當初打造蘋果一號和蘋果二號時,如果缺少了任何一個人,這件事都不會成功。很多技術本位的人覺得工程師才是真正做事情的人,如果不是工程師(Woz)打造產品,那商人(Jobs)要賣什麼?但反過來想,如果不是Jobs幫Woz把他的蘋果一號推銷出去,Woz也不能拿這個收入來繼續研發蘋果二號,而蘋果一號也就只會是他閒暇時候的個人玩具而已。這兩個人的角色不同,但卻是完全的互補對方的短處,而蘋果這家公司也就是建立在這樣的基礎上才能持續不斷把產品轉化成價值(也就是金錢),再拿回來繼續研發更好的產品。這個稱為「商業行為」的正向循環是人類社會中非常強而有力的發明,可以不斷自我成長,同時又讓更多人受惠。

看完Apple的例子後,讓我們來看不採用這個稱為(邪惡)商業行為的正向循環時會發生什麼事。以我自己的sikuli為例,我在去年初釋出第一個版本後,這一年多來有九個版本更新,其中三次是重大的更新,總共被下載了二十多萬次(在官方網站上,至於其他各地的mirror我就不知道有多少了)。看起來是不錯的數字吧?我當初釋出並open source的目的就是希望讓更多人使用,也希望有些開發者能進來幫助我開發、翻譯、寫文件之類的,好讓這個東西獲得一定的動能自我發展下去。

但過了一年多後,我發現事情沒有想像中的那麼簡單。一個不營利的open source專案是非常難自我成長的,因為缺乏直接的誘因($$$),我沒辦法雇別人來加入開發,只能祈求剛好有人對這東西「有興趣」,並且有足夠的「能力」、「時間」、「毅力」看懂我原本的code,並加入「符合專案方向」的修改。以上的條件要全部都能滿足,才會有人發個email給我說「嘿 我想送一個patch….」。此外,因為這專案開始只有兩個開發者,沒有其他專長的人,所以我們有很多事都沒辦法做。例如說,我們沒辦法一一回答用戶的問題,因為實在太多五花八門的問題了(客戶關係管理失敗);沒有人去推銷或廣告sikuli的存在(一切都靠口耳相傳);沒有足夠人力填寫和維護文件;沒有人幫我們在各種環境做測試(只好直接拿用戶當白老鼠);沒有專業設計師設計使用介面、網站、logo(一切都是我自己東拼西湊的);沒有人做市場調查,研究什麼功能才是最重要的(所有先做的功能都是我自以為重要的)….有太多事都是我們想做但無能為力的。雖然後來有個熱心的粉絲常駐在我們的論壇上回答絕大多數的問題,甚至還幫我們寫了大多數的文件,但開發力量還是一直很薄弱,有很多我們想做的東西一直都沒時間沒人力去做。看看這個commit log就可以了解了(前兩個是核心開發者,後面都是用戶):

1065 Tsung-Hsiang Chang (其中有19個是用戶送來的patch)
94 Tom Yeh
61 RaiMan
34 Karl-Michael Schneider
9 anatoly techtonik
1 Arnaud Gelas

殘酷的事實:雖然用戶不少,但所有的commit裡面只有11%是由核心開發者以外的人貢獻的(包括了code和documentation)。(更殘酷的是我一個人就佔了超過八成的commit,要是我停下來的話整個專案就等於是死了)

一個人的力量真的很渺小,我知道有很多事能做來讓這個軟體變得簡單、更完美、讓更多人能使用,但一個像這樣的open source專案缺乏誘因吸引更多不同專長的人加入,靠一兩個人閒暇的時間和力量是沒辦法長久經營下去的。這時候我就覺得非常需要一個像Steve Jobs一樣的人來幫忙,因為商業化可以很有效率的讓這個軟體持續成長,並直接讓更多人受惠。工程師雖然是做出產品的人,但如果沒有商人來把產品賣出去,換成資金進來繼續研發,現代社會就不會有這麼多種精緻、可靠、高品質的產品可以用,很多高科技原型就永遠都只會是工程師的玩具而已。

體會到這點後,突然也可以了解世界上很多職業存在的理由和價值。例如佔領華爾街的人說,華爾街只是把錢從一手拿進來,再從另一隻手轉出去,憑什麼可以從中獲得巨大的利益?回答這種問題的時候,其實只要想想:如果沒有這些人存在,世界會變什麼樣?一個簡短的答案可能是:沒有華爾街,大家的錢就會放在家裡,放再久也不會有利息(甚至還有可能發霉或被蟲吃掉),因為沒人把大家的錢拿去再投資;需要錢的人(例如想創業的人),也不容易借到錢或找到人投資,因為大家只能跟認識的親朋好友湊錢;假設有一兩個人願意借錢,運氣好可能不用利息,但同樣的運氣不好可能會被收高額利息而不自知(因為沒有流通的市場,所以也不會有一個大家公認的合理利率)。從這個角度一想,促進經濟有效率的流通(也就是把錢從一手拿進來,再從另一手轉出去)的確是非常重要,即使他們沒有實際生產出什麼東西,但也對社會帶來很大的價值貢獻。同樣的道理,工程師老瞧不起銷售人員憑一張嘴就可以拿高額獎金,但仔細想想,要是沒有人銷售產品,公司就沒有收入讓工程師製造更好的產品了。如果用經濟學來解釋,每個角色的價值都是市場決定的,如果銷售很簡單又好賺,那工程師就會自產自銷而不是交給別人來做了。

以前我總覺得商人是邪惡的化身,但當自己想開始把影響力擴大時,就會發現每一種角色都是不可或缺的。經營公司也不見得是要以賺錢為目的,而可以是為了研發更好的產品而建立的一個生態系統。而社會中每一種角色都有其重要性,每一種人的貢獻和影響力也很難比較,與其爭論這些事,倒不如做好自己認為最重要的事來改變這個世界。


五月 31, 2011
» 駭客們,起來創業吧

前一陣子「雲端」服務正紅的時候,很多熟悉技術的朋友(包括我在內)都有同一種反應:「這有什麼了不起?我十年前就有自己的Linux主機,在任何地方都可以連上去收信、抓檔、聽音樂…。」對於熟悉各種電腦網路技術的駭客來說,有自己的UNIX伺服器是很普通的事。我在十年前就已經習慣用ssh連到我的伺服器上收email,或是用NFS把伺服器上的硬碟掛載到我的laptop上使用,所以在gmail和dropbox剛出現時,我並沒有感到很興奮,也不是最早開始使用的嘗鮮者。

對於熟悉技術的駭客來說,如果發現自己有什麼需求,就會動手利用手邊的資源拼湊出屬於自己的解決方案。這種「私有服務」會讓人很有成就感,因為除了是自己做出來的外,還可以不受服務提供者的無理限制。(我在自己的伺服器上收信,信箱容量上限就是我的硬碟上限;在自己的伺服器上架網站,不會限制只能用多少CPU time或多少RAM,更不會被強迫放廣告。)但相對來說,駭客也因此容易自滿,看不起這些「了無新意」的服務,甚至因此忽略了利用這些技術創業來改變世界的機會。

善於寫程式的駭客也有類似的盲點。每當一個新網站或新軟體出現時,一定會有一些人跑出來說:「我以前也做過類似的東西,用X語言和Y框架一天就能做出來了,沒什麼了不起。」或是「這不是跟3年前的X軟體一樣嗎?」,殊不知這個新東西可能就是Facebook或Angry Birds.

當一個人對科技了解太多時,也同時容易低估讓新科技普及的難度和所產生的影響力。對於這種人來說,沒什麼東西是「新的」,因為他們可能在20年前就做過今日Facebook或是Google的雛型了。我在做研究寫論文時,最大的感受也是這個:資訊界最重要的發明和想法早在30年前就已經存在了,現在很多「新科技」也只是把舊的方法套上新的環境而已。可是,很容易忽略的一點是,駭客和研究人員做的雛型是用來滿足自己一個人的需求而以,即使你能在一個晚上做出這個雛型,接下來你能讓它成長為滿足一百人、一萬人,甚至一百萬人需求的產品嗎?

解決一個人的問題後,不代表複製一百萬次就能解決一百萬人的問題。

滿足一個人和滿足一百個人是完全不同難度的事,同樣的,滿足一萬人和一百萬人又是不同難度的問題。這種規模化的過程,難的不是平行化或分散式的後端技術,更重要的是創造出讓每個人都願意嘗試並且感到滿意的使用經驗(user experience)。

Dropbox和古老的NFS本質上都是遠端的檔案系統,但Dropbox之所以能有上百萬的使用者就是因為它夠簡單,安裝完就能忘記它的存在。使用者不需要知道伺服器在哪,不用設定分享哪個資料夾,不用寫可怕的文字設定檔或是面對有一百個選項的設定介面。反觀駭客間流行的各種技術,如果經過「妥善的設定」也是很好用,但問題是有多少人願意去學怎麼安裝、設定、排除各種疑難雜症,甚至還得被迫先學個TCP/IP基礎概論?

我觀察到有很多駭客自己做了很多小工具來解決自己的問題,但在滿足自己後也很少進一步分享這些工具或是想法。我覺得這實在很可惜,也錯失了很多機會,因為很多問題往往都不只是一個人的問題而已。最近身旁有越來越多朋友投入網路/軟體創業這條路,加上許多的創投、創業討論blog的出現,可以感覺到台灣的軟體產業慢慢開始出現微妙的變化。眾多的技術狂熱者們,如果在hack完能進一步考慮更多人的需求,提供更好的使用體驗,說不定下一個Facebook或Google就是從你手中創造出來的。

(更新)
附註:我指的創業是廣義的「創立屬於自己的事業」,不見得是設立公司或營利企業才是創業。把自己的工具轉變成一個open source專案號招他人一起參與也是一種創業(而且還是慈善事業),把自己的技術心得開設成專業的blog分享給廣大讀者為目標也是一種創業(會有adsense收入喔,但可能非常微薄就是)。本文目的在於鼓勵有能自己動手做解決自身問題的人們,應該要讓這些小東西或小點子發揚光大,而不是埋沒在自家的硬碟或倉庫裡。創業不見得要犧牲原本的工作或脫離舒適圈,即使只在週末或閒暇時間和三五好友一同朝同個目標邁進也是創業,重點是考慮到其他使用者,把目標從自身拓展到其他人身上,影響力自然就會增大。


A Feedjack powered Planet
A Django site.