从硅谷软件企业学习到的细节

前言

Ryan 哥是我在 Lilee 实习时的同事,按时间来说他比我还晚进入 Lilee (笑)。虽然相处天数很短,但对他印象深刻:个子不高,酷酷的很有型,CMU 毕业,湾区大公司工作经历。在公司每季(?)的新人介绍茶话会上,发现他也是一个很好聊的人。最后我打包滚蛋时,他也是为数不多写邮件给我践行的人。

就在这个月中旬, Ryan 哥在自己的脸书上写了这里分享的这篇文章,颇具视野和深度,对于我这样的新人来说很受启发,因此也搬运到我的博客上来。本文的原出处,里面还有一些精彩评论,有兴趣也可以去看看。

從矽谷軟體企業學習到的細節

回來台灣一年多了,在矽谷工作時,我總是想說服大家一起回台灣做點小貢獻。但現在,我的確認為台灣需要有更多人出國看一看拓展新的視野,未來有機會再帶回更多新的思維回到家鄉,和台灣原本就保有的優點融合。 之前很高興有機會到交大還有 Sudo 的活動分享在矽谷工作時感受到的文化和經驗。最近還是有許多朋友有興趣想了解台灣軟體業除了以往在資源上的限制,還有什麼樣不同的文化和制度對目前軟體產業造成衝擊和差異性。所以趁這個機會分享一些目前在台灣軟體產業觀察和聽聞的現況,去探討我們可能可以自省的方面。在我們努力衝刺的過程中,希望可以提及幾項在台灣軟體產業看似還普遍缺乏的思維和觀點:

  1. 人是公司最大的資產:在台灣是企業選擇員工,在矽谷是員工選擇企業。矽谷企業普遍認為,人是公司最大的資產。除了公司選擇比較多以外,企業團隊也總是很感激員工的加入, 並且願意提出更好的 counter-offer 努力把好的人才吸引過來。同時,員工也可以用更健康的心態去 negotiate 自己的 offer 讓彼此都達到滿意的結果。 以人為本,公司對人的尊重,是大家最嚮往的文化。
  2. 人格特質 vs 學歷/技術:學歷的迷思應該慢慢被擺脫。在台灣工作,學經歷在一開始就會非常被注重和強調,導致公司對你有了預期,但這個預期指的是”技術”這方面而已。學經歷不錯的人很容易被公司預期在短期內要有所產出。 如果短期內沒有達成,公司會默默的打分數,一切完全以短期技術可行性,當成參考依據來預期未來你對公司可能的影響。矽谷的企業各式各樣的學經歷的人更多元,但比較不一樣的是,公司不會太明顯對每個人預設立場。這之中最大的不同點是,美國公司對你的預期不會純粹以技術為考量,而是整個人的人格特質和全面性。公司願意花更多資源投資每個員工,以幫助公司了解 team member 的人格和個性,積極度,潛力,爆發力,做事的 tempo 和 learning curve 的時間,儘管小公司也有類似的認知。回到以往很多 CMU 的學弟妹都會問我說,INI 會不會是 ECE & CS 底下合開的學院造成在美國找工作的影響。我告訴他們,工作以後就會了解到那並不是矽谷公司在找尋人才唯一強調的事。不論是 Google, Apple 還是各大公司 / startup,在面試聊天時,除了去了解一個人的個性之外,也需要考白板的 coding 測試你的技術能力。考題的例子包括:資料結構的 binary tree,queue,linked-list,演算法的 sorting,Dijkstra,八皇后題目,OS 和系統相關的 synchroization,networking, process / thread,memory management,brain teaser 相關題目像是給兩個雞蛋用數學來測出雞蛋在哪一層會破掉的問題 (我很喜歡的題目之一)。聽起來好像很制式化的流程,但其實對於矽谷的公司來說,那才是他們注重的基本能力和了解一個人是否能與團隊有良好的溝通能力。不論你是什麼學歷,只要你夠積極去充實這些知識,保有好奇心和培養良好的 teamwork,好的人格特質和個性加上技術才是公司想招募的人。
  3. Code review / QA / 開發流程時間:這是許多公司心裡記得很重要可是卻最不願意花時間和錢投資的項目,原因免不了是 time to market 跟追趕 project 進度。台灣許多公司想要開發高利潤產品走向國際,策略模式卻還是採取以往 hit and run 模式的代工思維。全世界企業都有時間壓力,除了技術以外,我們更應該開始強調軟體管理的學問。Code review 的重要性建立在一個軟體開發的長遠計畫之上,注重的是開發者的邏輯思維和 coding style 會不會影響目前和未來的產品,還有 code 提供給其他工程師的可讀性。開發時,要想著這個軟體未來可能會變幾千行,幾萬行,甚至是幾十萬行的產品。而每個人的 coding style 有所不同,公司需要訂立 coding guideline 來規劃基本規則以方便大家產出 code。這種觀念的缺乏導致很多 code 沒有被 review,或是變成 reviewer 灌輸 developer 他心裡想要的 coding style。而 QA 的方面,感覺各企業對此重視的程度很多年來還是嚴重不足,自然沒有扎實的測試方法論和流程來把關品質。對於開發者來說,應該普遍建立 QA 實際上是公司第一個客戶的觀念,所以測試流程像是 smoke test,regression test,white box testing 在交予 QA 前應該是已經需要被建立好的。Hit and run 的策略短期內也許可以拿到客戶,但長久下來如果價格和品質無法成正比,這樣的關係無法長久。再者,以往累積的 technical debt 在未來需要花的時間還是得花。如果企業想賣高規格的東西,一定要確保品質再出貨。在美國做一樣的工作,一樣執行 waterfall 或 agile 的流程,時間的安排卻是全然不同。因為 time to market 的原因所以在固定時間需要出貨這點是可以理解的,這個時候 PM 很重要。有經驗的 PM 要滿足客戶需求同時也要能替工程師在一定時間內斟酌合理的開發數量和可行性,將開發者方面的測試考慮進去是必要的技能。
  4. 缺乏純技術者的 career path 和職務的 misplace:以技術面來說,台灣軟體技術人才眾多,演算法人才也不在少數,但是普遍需要廣度的員工包山包海,所以欠缺了 Technical Leader 和系統架構師類型的人物的培養。專才需要長期在廣度和深度的訓練和培養,並有著對任何事物的好奇心來整合元件而建立有門檻的大架構,而培養對於任何事物的好奇心回到了教育的本質。普遍來說,台灣企業往往將年資久的員工或是技術領導者全都佈署在管理人的 career path 上。這樣造成的問題是,技術者只有鑽研技術的熱情,並沒有技能去處理跟人相關的事物,導致職缺的misplace。美國的公司普遍在升遷時會要你選擇未來你期許的 career path 是往管理的路或是技術領導者的職涯前進。適合經營管理的人會經歷 software engineer -> senior engineer -> manager -> senior manager -> director -> VP,而技術領導者會經歷 software engineer -> senior engineer -> tech lead -> senior tech lead -> architect / distinguished engineer. 這不僅清楚的替每個升遷的人規劃了更適合自己的路,也替公司員工找到能夠真正管理人的主管進而幫助公司整體的成長和營運。
  5. 本位主義和信賴問題:在人文方面,部門的本位主義過於強烈,所以職場上卡到了許多人跟人的問題或是各單位之間沒有太多向心力是比較多朋友都會提及的經驗。主管應該多培養底下的人有獨立思考的能力,有些時候花些時間跟員工單獨聊天,可以發現目前很多年青人對公司有很多不同的想法和未來的期許。以一個健康的角度來看,主管應該多鼓勵底下的人發言討論,或是鼓勵員工有一天能夠超越自己,但很重要的前提是要彼此尊重。然而,為什麼主管要鼓勵員工超越自己?其實員工有良好的表現不僅幫助了自己,更重要的是同時也幫助了主管和公司向上成長。現在的時代注重團體戰而非英雄主義,不論是員工或主管都應該要知道在不同位子看事物的角度一定有所不同。如果彼此一直無法了解對方的思考方式和表達方式,每個人就始終無法由內而外說服自己為了同個目標前進。矽谷企業的強盛給我的感覺是建立在共存共榮的 teamwork 文化,職權區分明確,良好的溝通管道,傾向對事不對人的模式而一同完成公司的目標。
  6. 缺乏文件整理和 mentor,造成資訊落差:一樣是卡在時間資源的問題,過去的人需要趕時間出貨所以沒有多餘的時間把以往的經驗,技術資訊,或是曾犯過的錯記錄下來,導致新進員工沒有文件可參考也沒有特定的 mentor 可仿效。新人往往會不好意思請求協助,所以元老級的人物每天理解事物越來越快,但新進員工卻越來越追趕不上前人而造成資訊和技術程度上的落差,會逐漸形成公司的一個隱性問題。所以鼓勵大家,可以多使用協作工具,如果在開發時遇到問題,或者是發現以往的技術開發沒有參考文件,都應該踴躍幫忙公司記錄和整理文件,如同開源軟體的無私貢獻。當越來越多同伴到達同樣的水平,才會有可能替企業創造更多的可能性。

整體而言,這幾年開始可以感受到台灣軟體業的興起和企業對軟體的重視程度提高許多,這是非常正向的鼓勵。同時也有更多學術單位,政府和企業都願意投入更多的金錢,人力,研發資源在軟體產業中。想要捨棄台灣長久以來的代工思維而轉型成高利潤高門檻的產業結構痛苦是必然的過程。很多對台灣企業看來好像要有多出的時間才能執行的項目,其實對於矽谷的企業來說其實都應該是需要注重的細節和基本功。台灣企業如果想要成功走向國際,也會需要很多領導者願意推翻自己過往的經驗和思維,並且有足夠的心胸去接受新世代的觀念而學習。回台灣後當然也總算可以開始體會為什麼台灣年青人都想往外出走,去到一個更健康的工作環境學習。但希望大家還是不要對台灣失望,繼續花點時間感受問題。除了技術的加強,如果更多人能開始注重以人為本的概念,強調更多軟體管理方面細節的改善,就算台灣短期無法被影響,但未來還是有許多值得被改變的事。大家共勉之。