前言

因為在 ALPHA Camp 擔任實習助教的緣故,有機會來聽 CakeResume 舉辦的職涯探索講座,這次講座的主題我一看到就覺得熱血又帥氣:

One Way Ticket. My Journey to Instagram.

同時也讓我想起一句廣告台詞:

不放手,直到夢想到手。

以下內容除了演講中的內容,也包含演講後的討論。

講者的背景

講者 Jacky 大學主攻電機工程 ,靠著 3 個月的自學和積極態度,在毫無相關工作經驗的情況下取得了第一份軟體工程師的 offer ,成功進入 KKBOX;之後一路過關斬將進入國際級軟體企業 9GAG、Facebook、Instagram。

這次演講共分為五個部分

  • 如何自學成為一位 iOS 工程師
  • 從一張飛往矽谷的單程機票開始的冒險
  • Facebook 與 Instagram 的工作樣貌
  • 在四座城市間流轉的職場觀察與心得
  • 自律與自由並存的生活哲學

如何自學成為一位 iOS 工程師

Jacky 首先介紹了自己的背景,他在台灣出生,高中時移民到美國加州,去了一陣子就發現,很多華人已經去了五年甚至十年以上,但英文程度還是很差。因此他警惕自己,要跳出舒適圈,融入當地的環境,英文才會進步。

大學念的是電機工程,學生時期多在主持社團活動,畢業後準備求職時發現硬體相關工作要求碩士學歷,但軟體相關工作僅需學士學歷,薪水就是硬體的兩倍。

後來 Jacky 因家人健康問題舉家搬回台灣,回來後馬上就遇到了兵役問題,等待期間 Jacky 在 iTunes 學習 iOS 開發課程,該課程其實就是 Stanford 的課程。

Jacky 當完兵就開始面試,作品集很普通,只做出了一些小遊戲像是摋骰子,剛開始在 104 投履歷都沒回應,之後改變策略,投完履歷就打電話給 HR,接到電話的 HR 都滿訝異的,不過還是有協助安排面試,就這樣最後面到 KKBOX,儘管 Jacky 是個初學者,主管還是願意給他機會,他認爲是積極的態度幫助了自己。Jacky 在 KKBOX 待了快兩年後,決定離開舒適圈,第二間公司是香港社群媒體公司 9GAG,但因為不習慣當地生活環境,短短三個月便選擇離開。

從一張飛往矽谷的單程機票開始的冒險

Jacky 深知自己心中依然掛念著加州的生活環境與工作氛圍,一心想回到矽谷,因此抱著破釜沈舟的決心,沒找到工作絕不回家,買了張單程機票,便飛往矽谷展開世界級軟體公司的面試之旅。

Jacky 剛開始在矽谷面試,面了幾間就發現面試與實際開發所需要的技能其實差很多,甚至無關。因此開始加強面試技巧,Leetcode 刷了約 70 ~ 80 題。面試久了就越來越順,Jacky 最後在 Facebook 和另一間 startup 之間抉擇,startup 的 offer 比較好,因此 Jacky 拿來當作跟 Facebook HR 談判的籌碼,HR 的態度當然就是表達 Facebook 公司本身比 startup 好,因此 offer ㄧ就是這樣。到了 Facebook 的 deadline 時,Jacky 再次表達自己的期待,HR 聽了之後還是堅持 offer 就是這樣沒得談,Jacky 便直說:「那我就真的不要了,謝謝你的時間...」,此時 HR 才妥協。

Jacky 成功得到自己期望中的 offer 了。

Jacky 給求職者的建議:

  1. 非常推薦 Leetcode 的付費功能,會有不同公司的面試考題,Jacky 直言對他幫助非常大,面試前一天也會把這些題目都再快速看過一遍。
  2. Leetcode 刷題刷再多,沒去實際面試都沒有用,自己一開始遇到白板題也是腦袋一片空白,所以都面試不上。因此多面試多練習,累積經驗非常重要。
  3. 非本科剛開始刷題遇到 Linked List、Tree 等題目也是會覺得很頭痛,但為了面試就是不論如何都要學起來。同時也非常推薦 Cracking the Coding Interview 這本書。
  4. 面試需要規劃,先找練功公司,隨著面試經驗越來越豐富,再開始投真正想去的公司。
  5. 某間公司若給出較好的 offer,會是和其它公司談判時最好的籌碼,也讓自己更有底氣。

Facebook 與 Instagram 的工作樣貌

Facebook

Facebook 會讓剛加入的同仁參加內部的 Bootcamp,在 Bootcamp 期間可以自由參與公司的任何一個 team 例如 iOS, Android, server, web 等等,最後加入了 Messenger。

Jacky 坦言自己在當時曾有冒牌者症候群(Imposter Syndrome),為此在過程中請教了不同 team 的同事,同事不約而同地告訴他這很正常,所以自己也開始慢慢克服。

剛加入 Messenger 是負責做新的 Messenger feature,後來因為一些外在原因這個專案跟team一同被砍,因此 Jacky 需要在公司內部為自己重新找到一個位置。

當時矽谷 Facebook 都沒有缺,但紐約 Instagram 有,Jacky 考量矽谷上下班塞車的狀況,紐約交通問題相對沒那麼嚴重;紐約產業類別豐富,矽谷則是科技業為主,連晚上到酒吧都會聽到有人在討論 coding;紐約的生活費較高,感覺留在那裡的人都有特別的能量與態度,渴望跟那邊的人切磋。因此 Jacky 在進入 Facebook 幾個月之後,決定前往紐約 Instagram。

Instagram

之後在紐約 Instagram 就一直待到現在了,在將近四年的時間裡,Instagram 的 feature 幾乎大部分都已經做過了(如上圖),所以也接觸過很多不同的 team。

Instagram vs Facebook

Instagram 功能上比較獨立,也比較簡單,沒有太多複雜的功能。因此開發上也比較嚴格、不自由,每個新的 feature 都要考慮很久,考慮的點像是使用者體驗,或是擔心會影響到既有生態系。

Facebook 功能就很多且複雜,甚至有點凌亂。好處是開發上比較自由,新的 feature 想做就做,比較不會被限制。

兩間公司相同的是工程師的職責,兩間公司的工程師需要負責的 code base 都很大,但寫程式只是工作中的一部分,在 feature 開發上也是由工程師主導,過程中會要與 PM 及資料工程師合作,因此整體工作強度非常高。

在四座城市間流轉的職場觀察與心得

大公司的好處與壞處

大公司的好處很多,像是薪資福利,公司 scale 夠大,user 夠多,有足夠的data 等等。壞處則是:

  1. 技術陳舊,Jacky 以自己為例,Instagram 在 iOS 開發上還是使用 Objective-C,直到今年才開始「準備」使用 Swift。
  2. 職務切分很細,沒辦法接觸不同的平台。
  3. 工作量(code base)很大。

東西方文化差異

在美國工作,整個 team 會一起討論要做什麼,主管與 PM 給的是大方向,實際上 feature 是由工程師想出來的。也就是說除了寫 code 還要想 feature ,這樣的工作模式雖然比較累,但也比較有參與感,在實作時會比較有動力。東方文化多半是老闆說了算,工程師只要乖乖執行就好。

Jacky 順著帶入學生時期在課堂上的狀況,東方個性就是比較安靜,問問題時沒有人要回答,或是遇到問題沒想好不敢回答;但西方會是大家搶著回答,也常會邊講邊想,基本上就是有 idea 就講。

同樣的在職場,主管打考績時,會希望工程師除了寫程式之外,也要會溝通,有想法,話少的人會被懷疑是不是能力不足。因此這樣的個性在職場上會是劣勢, Jacky 也會逼自己要多講,多表達自己的想法,以避免自己想了老半天,才發現都被別人講完了。

Jacky 分享在 Instagram 時曾與團隊成功完成了提高 hash tag 體驗的專案,但會讓廣告收益下降 0.0x %,因此這個專案還是被砍掉了。Jacky 直言當時要把自己花半年寫的 code 全部砍掉,心裡難免會有負面情緒。之後變得比較成熟了,會客觀的看待這件事,過程中也經歷過一些前輩開導,例如

Fall in love with problem, not your solution.

這句話代表了 senior 的特質,對待自己寫的 code 就是「不好就砍」,沒有一絲猶豫。

Occam’s Razor 簡約之法則

越簡單的 solution 越好,因為假設越多越可能是錯的。Jacky 自己在遇到一些很複雜的 feature 時,會思考到底為什麼要做這麼複雜,有沒有更簡單的 solution?你想要解決的問題,是真正的問題,還是因為你的想法使它變得複雜而造成的問題?例如程式的架構沒有切割好,如果架構設計得好,應該是每一塊都很精簡、簡單,把複雜的問題切割成小問題,一個個解決,最後組合成大問題的解答。應用在產品上,沒在用的 feature 就砍掉 這樣產品才能盡量保持簡單。

Soft Skills

最強的工程師都不只是會寫程式而已,還很會溝通。因為做一個 feature 需要在內部要資源、測試、解釋結果、說服 team 或其他可能被你的 feature 所影響到的 team 等等。這種工程師都有很快做出 prototype 的能力,然後直接帶著 prototype 問你的意見怎麼樣。除了口語溝通之外,寫文件也很重要,好的文件要在你出來解釋之前就讓別人看得懂。

很多事情發生不是你的錯,但完完全全是你的責任,例如別人不小心把你的feature 弄壞了,你可以生氣的怪別人,也可以思考怎麼讓你寫的 code 更安全,怎麼把測試寫得更好,讓別人不能那麼容易破壞自己的 code。
又或是隊友動作比較慢,自己是不是可以 support 他,或調動其它資源,而不是只是去怪罪他。
又或是想要升遷,沒有成功當然可以怪主管,但也可以想想是不是沒有向上管理,也沒有問過主管,想要升遷需要做到哪些事情。
這樣思考的好處是自己會更有責任感,也讓其他人更樂意與你合作。

談到升遷,Jacky 也分享了自己的例子:公司的規定是 L3 兩年內沒上 L4 就 fire,L4 兩年內沒到 senior 就 fire,所以自己剛開始為了升遷就狂寫 code,有 feature 都留給自己寫,從公司的數據看出自己真的寫了最多 code ,當時認為升遷一定沒問題,結果沒有成功升遷。因為能不能升遷跟整個 team 有關係,當時自己悶著頭寫 code,但團隊本身的表現並不好。所以學習到有 feature 也可以留給別人做,不能只顧到自己,整個 team 好,自己才有價值。

自律與自由並存的生活哲學

Jacky 強調工作只是生活的一部分,invest habit 也是很重要的。

很多時候你不會,就沒有機會,所以需要假裝自己會,然後邊做邊學。

賈伯斯演講的名言,Jacky 分享到大學剛畢業時,當時在美國生活很順遂,突然回到台灣,環境變了,朋友都沒了,當下其實很難過。但現在回想起來,沒回台灣也不會自學 iOS,也就沒有現在的自己。當時的挫折就是一個 dot,最後成就了現在的自己。所以現在的想法就是每天都把該做的事做好,自然就會走向對的地方。

「反脆弱」,是該書作者創造的「脆弱」的相反詞,意即遇到碰撞會越來越強。Jacky 表示當初自己覺得很挑戰的事情,例如轉職、到矽谷找工作,現在回頭看,就會想要怎麼用反脆弱的態度去面對。

Jacky 的習慣是每天五點起床,為的是訓練自己的意志力和毅力,同時他也認為清晨是最珍貴的時間,因為大家都還在睡覺,社群媒體不會有人敲你,自己也就比較不會分心。Jacky 的流程通常是健身、洗澡、吃早餐,接著八點進辦公室,直到十點同事開始陸續進公司時,Jacky 已經把自己該寫的 code 寫完了,可以做其他需要與別人溝通的工作。

Jacky 也舉了兩個簡單的例子:做簡單的決定,會讓之後的人生更難,像是吃不健康的食物、都在看電視不運動,那身體就會變差;相反的,做很難的決定,就有很簡單的人生,例如吃健康的食物、出門運動,就會有健康的身體,可以應付人生的各種挑戰。

這邊 Jacky 分享了 0.01 法則,每天進步一點點,一年累積下來就不同了。
他認為訂目標其實沒有效率,因為做完這個目標,遇到下個目標時你的習慣可能變了。因此養成好的做事習慣比較好,不管是遇到什麼樣的目標,你都會用同樣的標準去達成。

效法偶像 Kobe Bryant,自己唯一需要比較的是昨天的自己,永遠都要做一個最好的自己。

這段 Jacky 分享了自己克服恐懼的方法,他選擇去做一件非常可怕的事情:在輕型飛機飛行時,從駕駛座爬出來,站上機翼!這段影片讓大家看得目瞪口呆,我也看到忘了記錄下來 XD

Q&A

  1. Q:有沒有遇過新的 feature 在 planning 或執行過程中,覺得不該被執行,可能是自己覺得可以別人覺得不行(或相反)的經驗嗎?你是怎麼去面對的?
    A:這其實常常發生,首先要知道,這些想法其實都是主觀的,所以可能討論半天無法說服彼此,最好的方法是看數據,資源足夠的話,就把兩個人的想法都做出來測試,數字會說話。如果資源不夠,那就需要往上層找 PM 或是再往上找 VP 一起溝通。我曾經偷做 public save list 的功能,但 VP 並不覺得好,所以沒有成案,這證明了溝通很重要,除了 feature 本身好,還要能說服 VP。對我來說,至少自己 try 過了,那種經驗還是很棒的。基本上一個成熟的工程師就會知道自己的想法不一定都是正確的。
  2. Q:剛進 Facebook 有 bootcamp 可以玩不同領域,請問 Jacky 跨領域時該如何做選擇?
    A:如果我能回到過去,會想多學 server,因為這跟我目前做的相比是完全不同的世界,像現在因為不會 server ,所以遇到 server 相關的問題就要等 server engineer,那自己的工作會被 block 掉,這時候就希望自己會 server。
  3. Q:做 feature 產生的過程是什麼?
    A:以搜尋功能為例,先定義出目標:怎麼樣是好的搜尋?然後有了目標要怎麼測量?再來可能會思考 UI 可以怎麼設計,讓 user 更容易去點擊,例如加入 story 的搜尋結果...。當然也會有多個方案需要抉擇的時候,這時會找 Data scientist 去計算和預估每個方案做下去的代價,通常是選擇最大成效且資源最少的方案,再找 PM 一起討論。
  4. Q:會跑 scrum 嗎?
    A:Scrum 以前很流行,但是現在我待過的 team 都沒有在用,我認為是因為如果有兩個 project,那不就要在兩邊的 scrum 跑,這樣其實很累也沒效率。所以我會讓 team member 自己規劃哪時候需要討論或報告。
  5. Q:Jacky 是非本科系出身,在工作經驗兩三年的狀況下,你覺得自己讓 Facebook 錄取的原因或特質是?
    A:運氣好 (笑
    我分享一下自己面試的經驗,我每次面試完都會反省,自己哪邊沒講好、哪題沒寫出來、哪邊緊張...。面試時不只要會寫題,還要會溝通,如果白板題都在思考題目,一句話也不講,那對方會以為你只會寫程式但不會溝通。所以在面試時,寫題目之前要解釋自己打算怎麼寫,以及為什麼要這麼寫。再來是刷題刷得很熟是基本,更重要的是要實際面試,訓練自己溝通的能力。
    自己剛開始面試也是很沒自信,後來面試久了就開始有自信,臉皮開始厚 (笑
    最後問問題時也會問面試官是負責做什麼產品,面試官通常都會很喜歡聊自己做的產品。
  6. Q:Jacky 每天五點起床,前一天是幾點睡?怎麼控制自己的工作和生活時間?
    A:我都盡量十一點左右睡,其實是因為發現自己在那段時間通常沒什麼生產力,都是滑手機,覺得很可惜,有點浪費時間,所以不如早點睡,讓明天的行程可以早點開始。剛開始起不來不要氣餒,至少你已經開始嘗試了。可以考慮跟別人約清晨運動,這樣就比較不會賴床;也可以每次起床都 po 上網,讓別人知道,這樣別人就會問你早起做了些什麼事情,之後你會不想讓別人失望,也因此讓自己更有動力持續下去。再來是剛起床意志力弱,東找西找很容易就想放棄倒頭繼續睡,所以我會先把運動裝備準備好,一起床就直接穿上不需要思考,讓自己沒有懶惰的機會 。(編:感覺就跟當兵一樣)
  7. 想問 Jacky 是什麼時候開始刷 Leetcode,刷的方式是?
    其實我是到了矽谷才開始刷題,因為實際面試了之後才知道會考這些題目,需要刷題準備,推薦買 Leetcode premium 專門刷你要面試的那間公司的題目,還有要看 Glassdoor interview question。我的方法是面試前一天把所有題目複習一遍,因為題目刷多了就會發現其實大同小異,因此面試的實戰經驗比較重要。

如果想知道更多關於 Jacky 的消息或欣賞他鏡頭下的美景,可以追蹤他的 MediumInstagramJacky Wang Photography 📷

心得

近年在網上瘋傳的 FAANG 天價薪水跟面試流程,總讓人感覺裡面的員工肯定都是天才。但是我從 Jacky 的分享中了解到成就背後的自律、努力與不願安逸的態度。就算這些大公司的員工真的都是天才,也絕對是相當努力的天才。

Jacky 精采的演說及分享,讓我得以重新檢視自己學習的方向及態度,問問自己,你真的夠努力了嗎?這樣就是極限了嗎?真的沒有別的方法了嗎?其實還差得遠呢。

寫到最後我想起一句話,很適合形容 Jacky 五點起床的習慣,與他現在的成就

It’s what you do in the dark that puts you in the light.

期許自己也能效法 Jacky 的人生哲學,活出最好的自己!

--

--