2014年3月19日

十年職涯

算起來是 2003 開始做事的,到了去年 2013,十年了。這陣子碰到一些事情,結合起來有感而發,想寫寫東西,對這段歲月做個小結。

以前系上學的,偏重資訊系統(MIS),算是應用領域,接觸的多半是系統分析、Java 之類的技術,在 Windows 上面用 Visual Studio、Eclipse 之類的 IDE 寫程式。但第一次面試,就碰到蠻喜歡的主管,風馬牛不相及的跑去了嵌入式 Linux 領域。初接觸整個 Linux 世界,立刻就喜歡上那種「一切都有程式碼可以看」的感覺,從學著同事用 VMware 裝 Linux 然後用 Samba 開放出檔案,然後還是在 Windows 下用 UltraEdit 作業,到自己覺得要學就學整套,把筆電改灌 RedHat 7.2(那時候還沒有 Ubuntu,周遭則是沒人用 Debian)。記得有天問同事,在 Linux 底下哪套 editor 寫程式最好?記得他想了想,說看過評價是 Emacs 好,但他自己沒用過,所以不確定。就這麼一句話,開始我十年的 Emacs 坑。

部門後來從母公司切出,獨立出來一間新公司 QNAP(是的,就是後來上市發大財那間),環境較小,很快就覺得有些東西學不到。這時從其他公司挖角來的新同事建議,去他原先任職的公司 TrendMicro 長些見識,並幫忙找了介紹人。雖然 QNAP 已將我升遷為經理,但思來想去,仍然覺得成長比較重要。過去一看,的確制度好很多,也有很多高手。說來慚愧,當時對嵌入式系統的理解,竟然覺得重點就只是 cross compile,而且這錯誤觀念到了 Trend,依然沒有修正。因為當時部門所作的 network appliance 是 x86 base,程式則是 C/C++ 在 userspace 當一般 Linux program 來寫,差異只是跟 QNAP 一樣用 Makefile 硬做了一套充滿 hardcode 的 build system,所以比較麻煩點而已。真正重要的東西都沒學到,但至少對 unix system programming 有了比較好的基礎。

初生之犢,傻頭傻腦,建議我去 TrendMicro 的 QNAP 同事,以及當時還在 Trend 任職的介紹人,在知道我分配到的上司是某某人後,都有一些耐人尋味的反應。那些反應當下我不懂,不過現在算是懂了。他不是好老闆,我也太嫩不懂應付,一年多後就在考績被打 D 的情況下負氣離開,打算自己接案過活。離開前我問某高手同事,為何願意執行某些不合理要求,他說「我就做啊,反正到時候他自己會發現不行」。這句話可說比我在那裡全部其他經驗總和都還要震撼,也終於理解為何儘管高手如雲,部門開發的軟體中,卻仍存有一些愚笨的設計。

現在回憶起來,職涯中做錯的事實在不可勝數,但離開 TrendMicro 自行接案,卻是我最好的決定之一。Trend 給我很好的基礎知識與訓練,讓我在接案那段時光中能夠自行學習與成長,在那期間學了 Python,至今都還非常喜歡,並開始對 open source 有更多接觸,進而加入了帶給我決定性轉變的 Openmoko

在 Openmoko 真正開了眼界。Sean Moss-pultz 以他超凡的個人魅力集結了國內國外都堪稱頂尖的團隊,國外人馬如 Harald Welte, Michael Lauer,  Werner Almesberger 到後來的 Andy Green,國內如 Jserv, Olv, Tick 等人,搭配上開放的組織文化,我有種回到家的歸屬感,也真心相信可以在台灣做出一些什麼。這是一個站上世界舞台的機會,而且不是硬體品牌、代工,而是從裡到外,由 OS 到硬體,完全開放且自製的手機。

然而,夢想歸夢想,築夢仍需踏實。OM 自從換用一位錯誤的 CTO 之後,就漸走下坡,原本成員包括 Harald, Jserv 一個個離開,原技術團隊與 CTO 以及他帶來的人馬之間磨擦不斷,經營情況與氣氛都每下愈況。但這是一間真正讓我有認同感的公司,而且有非常喜歡的同事,我仍然相信一開始創立公司的那個 Sean,所以持續盡力去溝通。我認為這樣一個團隊,如果能夠不要有那些無謂的政治干預,絕對是有機會成功的。

可能是由於這樣的努力,在後期瀕臨破裂的時刻,Sean 做出一個大膽決定,指派我作為台灣工程團隊的負責人,給了三個月時間來做出一些成果。當時實在很高興,因為以那時的團隊實力,跟互相合作順利愉快的程度,三個月是綽綽有餘了。然而真正開始執行以後,由一些小地方,慢慢發現事情不是想像的那麼簡單。明明工程上一個暫時的決定,卻被解釋成長期的離譜判斷。在技術上決定性的差異,被解釋為不重要的細節等等。但這些都是經由旁敲側擊發現,實際上不確定未參與的會議發生什麼事,以及 Sean 究竟如何理解。此時心中竟然警鐘未響,僅僅想著三個月之後拿出成果就是了。我犯下關於人的,不可彌補的巨大錯誤。

於是,三個月變為不到一個月,在 CTO 強力鼓動下,Sean 打破承諾,解散團隊,開除大部分成員。我雖仍保有工作,但心下雪亮,對我動手,不過是時間問題。失去大部分同伴,OM 對我而言,也已經永遠失去了。等到離開那天終於到來,CTO 甚至懶得跟我解釋,我也沒問,彼此心照不宣。想起前陣子,一位之前公司的高層問我願不願回鍋,席間談及若回去,希望能穩定不要跳槽。我回答,從 Openmoko 以後,每一個工作,都是打定主意想長久做下去。離開,從來都不是我願意的選擇。

之後耳聞了一些 CTO 在 OM 的後續發展,原來他一直計畫在上海成立自己的公司,並且挪用 OM 資源去培養。Sean 後來告訴我僱用那位 CTO,是他在 OM 犯下最大的錯誤。相對地,即便已經察覺問題本質,而且有直接跟 Sean 溝通的管道,仍沒有足夠警覺性與手段去處理,則是我犯的最大錯誤,也對不起相信我並託付我溝通責任的台灣團隊。OM 的這群同事們,在戰火下培養出革命情感,雖已離開 OM,仍希望能一起工作。大家商討,都覺得當時剛開放出來不久的 Android,會是之後的趨勢,便決定集中研究。而之前離開 OM 的 Jserv 也回來加入,還多了 TrendMicro 時認識的 Thinker 為生力軍,大家仍推我帶頭,打算共創一番事業。這也就是之後圈內人所知的 0xlab。

在帶領 0xlab 這樣一個技術頂尖的團隊期間,我做了許多決策。其中有些後來證明是正確的,有些則是愚不可及;而有些,則是致命的錯誤。例如在成立之初,便決定以上游為目標,努力尋找進入 upstream 的機會,同時經營自有專案,直接以英文社群為主要舞台,配合贊助公司(也就是雇主)海華科技的業界關係齊頭並進,最終成功建立起直接對應到 TI, Broadcom, Qualcomm, Marvell 等大廠,甚至 Google Android 的工程管道。我們的主要專案 0xdroid 獲得廣泛應用與關注、Olv 成功進入 mesa 上游開發、Walkingice 以及 Bizkit 做的 0xbench 被大廠相繼採用、Erin 負責的 bluetooth 相關應用得到 Atheros 注意、Tick 成了 Broadcom 藍芽與 p2p 專家、Matt 與 Kanru 做了快速開機、Jserv 等人的 patch 進了 Android upstream,0xlab 並在 2.2 ~ 2.3.x 版間排名 Android 第十大貢獻者等等。期間並有幸接觸許多尊敬的前輩,包括台大資工教授也是 Android 核心開發者的廖世偉教授,以及中正的羅習五教授,還有國外的 David Rusling、Paul McKenney 等人。

對於資源有限下如何開發以 Android 為基礎的移動裝置,我們決定以社群為基礎,自行設計 UI 差異化,完全開放原始碼,發行一台初期以社群為主的裝置。這樣的作法與小米手機類似,但當然執行面條件完全不同,雖有正確看法,但對這需要怎樣規模的資源,以及如何執行是完全無知。再比如針對 Android 與各 IC 大廠整合問題,也希望以開放方式整合,使各廠所需投入資源減低,並有一共通基礎;這正是日後 Linaro 基於 ARM 在 Android 所想要達成的目標,也促成了彼此後來的合作。當時在 WMC 2011 展出的視訊 WiFi 無縫切換到大螢幕技術,現在也已經普及。

就我個人角色而言,面對如此出色的團隊,以及過去工作經驗,對領導的想像是,應該要提供一適合工程師工作的環境,並處理所有工程以外的問題,包括商業面所有事務,讓團隊能夠專心開發,不受打擾。為了達成此目標,我認為應該退出研發,將此責任交給技術名人 Jserv,把自己定位在柴米油鹽的商業面上。另外經由開放源碼的方式,讓團隊成員建立自己的 credit,累積成 0xlab 的 credit,自己只需隱身幕後,0xlab 的成功,便是我的成功。事實證明,方向雖有道理,但這決定是超乎想像的愚蠢,也對我自身造成深遠傷害,至今仍受影響。

不論能力是否最好,要領導,就要親力親為。就 0xlab 的例子,自己不做,會漸漸喪失對研發的直覺,也會與真實情況脫節,更別提在只看技術的開發者眼裡,會從一個還可以的工程師,變成一個忘記怎麼寫程式的笨蛋。另一個關鍵則是,當工程師建立起自己的 credit,就會有相應的工作機會出現。面對來自歐美公司的高薪挖角、優渥條件,或是大公司的工作機會,0xlab 其實是沒有競爭力的,這導致幾位夥伴相繼出走。日後才理解到,這完全是我自身的問題,搞錯了友誼與工作之間的關係。要防止這種事情的發生,並不是靠交情而已,還要加上商業與法律上的種種方式,將眾人利益確實捆綁在一起,確保目標一致才行。如果光講交情,朋友找到好的工作,還應該要恭喜他呢。然而對於新創事業,接二連三失去珍貴人才,是不能允許的。

至於 0xlab 是如何失敗的,我了解的範圍應該很接近全盤事實,有人比我知道更多,但也無須深究。這件事應該永遠都不會公開,因為在有人感興趣時,這件事不該說,說了對誰都沒好處。等到沒人感興趣,就更不用說了。總之,當時情形一片大好,無論在資金、已有生意、未來發展等方面,都看似毫無問題。然而因為沒有站在各人立場去通盤考慮利害關係,對人性缺乏理解,誤信人言,最終遭到背叛,是我再度在關於人的判斷上,犯下大錯。一夕之間,大好轉為大壞,那陣子不論經濟上、精神上,都經歷巨大創傷,更別提還有認識的人落井下石

在事件發生之後,整整一年都無所事事,一方面官司陰影籠罩,另一方面也尚未從打擊中恢復過來。往好處看,這段期間讓我重新排列生命中人事物的重要性,懂得該珍惜什麼;也經由這次打擊,真正把自己從以往著迷 RPG 與武俠故事,滿腦子都是義氣熱血與友情的傻瓜中稍微拯救出來,對世界的真相多一些了解。

或許是學不到乖吧,時間走到近兩年,仍是在新創公司打滾,對台灣環境、產業、商業操作,更重要的是社會真正運行的方式,有更多的體會。雖然仍然不時有愚蠢的失誤,畢竟還是活了下來,也做出了點成果,比起以往是好多了。一切還言之過早,就繼續努力,且看機運是否配合吧。

就在這幾天,陪伴17年的寵物貓咪走了,非常傷心,也再度理解到,不論職涯如何,對我而言,最重要的是身旁珍惜的一切。有人說做自己喜歡的事情最重要,我說,喜歡一開始只要有一些就可以了,能夠讓自己有能力照顧珍惜的東西,才是最重要的。做到這點,就會自然而然更喜歡在做的事情了。成功也好,失敗也罷,都不該忘記這才是最終目標、動力來源、以及真正快樂的方法。

2014年1月1日

新年新希望

許多人唸書時大概都讀過這段禱詞:
「請賜給我平靜,能接納我無法改變的事;請賜給我勇氣,能改變我可以改變的事;請賜給我智慧,讓我分辨這兩者的不同。」
當時這對我來說很不好懂。能改變的、不能改變的,不是很清楚嗎?我確定無法改變父母,但確定可以改變下次段考成績。事情總是黑白分明。

然而,許多年以後,近來卻越來越常想到這段話。既佩服其中可琢磨出的無窮意味,也嘆息這境界之困難。我不缺乏勇氣,但總沒有智慧,也無法平靜接受那不能改變的。因為那些不能改變的,是那麼疼痛。

我太老,也太累了。就這樣吧。