關於值班這件事

上個禮拜有兩件事讓我頗有感觸,一是美國職場上的升遷,二是關於值班,且讓我再牢騷一番。

前文提到我的饅頭如何發揮影響力,成為組裡的技術領導。他其中一項對自己的要求是,值班的事情就在值班時間內做完。這邊所謂軟體工程師的值班,並不是待在公司裡面24 小時過夜等換班,而是長達一週168 小時的待命狀態。這一週內,值班工程師放下手邊產品開發的工作,負責產品相關的各種技術支援、修補、更新、聯繫。不少組不讓新進工程師負責值班的,除非人力吃緊。我有幸能夠為組裡服務。

PagerDuty 是值班工程師的好夥伴,一旦系統出現狀況,PagerDuty 接受到系統警訊後,會用寄信、傳簡訊、打電話等方式騷擾值班工程師。如果值班工程師在十分鐘內沒有回覆,PagerDuty 就會向上通知主管。
上禮拜它就打了一次小報告。

星期四早上六點起床後,看到小老闆在Slack 上關心昨晚十一點的PagerDuty 警訊。哎,我不留意把手機關靜音了,沒收到警訊。早上去辦公室馬上跟小老闆報告情況:

「FedEx 無法處理一個錯誤地址,導致有一些產品被退貨,但不用擔心,我已經處理好了!」

小老闆聽了臉色一沉,說了一句「這不應該發生的」(This should not happen)

聽到他的回答,我心涼了一半。我知道自己雖然菜,但這種小問題第一時間是可以解決的,不需要在深夜11 點讓小老闆來關切,深覺自己有愧饅頭對我的尊尊教誨…

「工程師的睡眠不應該被這種問題打斷,FedEx 11點也沒在收件的,我們應該處理一下PagerDuty 發佈警訊的優先順序」他接著說。

事後小老闆開了一張ticket, 討論如何分類PagerDuty 收到的警訊,僅有嚴重的問題必須做夜間通報。

Definitely a 🙂 in our retro next week.

美國職場升遷原則

美國職場的升遷的原則是,先做該職缺的事,名份稍後自然掛上,工作近半年的我有些許體悟。

今早收信,剛入職帶我的「饅頭」(mentor) 升遷為Tech Lead。在Square, 這個職位要做負責項目的重大技術決定,並協調團隊上的工程師支援開發,是比資深工程師更進階的職位。他才加入公司兩年,時間不長,但絕對是實至名歸。

我有幾個觀察:

  • 他做事特別快。剛入職的時候,小老闆交代我的第一個項目,請饅頭估計要花多久時間,饅頭說他大概要花一天,所以他預期我三天能做完。小老闆說新人慢慢來吧,給我一個禮拜的時間,然後我到了第二個禮拜終於把事情搞定。
  • 自我要求嚴格。我第一次值班(on-call) 的時候,收到很多各式各樣的任務(tickets),對於不熟悉系統的我來說,值星帶拿下後還得繼續做值班時被分配的任務,拖延原本手邊的工作。我問他該怎麼克服這個問題,饅頭答曰:「把值班任務全部按時解決就好了,至少我是這麼做的。」
  • 引導新人學習。我向他請教項目問題的時候,他不曾直接給我答案。他寧願花很多時間跟我談系統架構,談當初設計的理念,闡述他接下來的想法,談Why 等囉哩囉唆的,饅頭知道,但饅頭就是不告訴我How。

而這些正是Tech Lead 會做的事。每次和他對談完,我的敬佩之心就油然而生,不知道何時才能到他的境界。但我不氣餒,畢竟我和他也是有幾分像似之處,我們加入Square 前都不會Ruby on Rails, 然後前一份工作都是大學程式設計課程助教。

只是他才剛滿22 歲而已

那些年,我們一起追的程式語言

在Square 的某個下午,隔壁組的同事圍成一圈,歡迎一位新進畢業生。大家一邊喝威士忌,一邊自我介紹,酒酣耳熱之際,灣區碼農們聊起了各自的「第一次」。

「我的第一次發生在11 歲,在聖路易安娜的老家,那時我正在寫個人網站,用Visual Basic 隨便弄的。」C 小哥略帶靦腆地說。

「那是一款遊戲,用Java 寫的。嚴格來說,我不清楚事情是在哪裡發生,因為我正在飛機上。」M 小哥帥氣地說。

「Tony,輪到你了,說說你的第一支程式吧?」

還沈醉在同事們的經歷中,語塞的我,將杯中物一飲而盡,凝視遠方。

•••

交大工程三館地下室,擠滿了資訊科學系的新生,我很興奮地坐在第一排,迎接第一堂程式設計課程。講師小黃簡短地歡迎新生後,開始在講台前眉飛色舞地講課。但奇怪的是,我總是聽不見他說什麼,第一堂課結束,只記得他再三叮嚀:下載Visual Studio。透過C++,我學到程式裡面的變數、函數、條件、迴圈、遞迴等概念,但我對C++ 這個語言的本質還是很陌生。

大三暑假,和前室友罩哥聊天,他正在籌劃程式設計校隊的暑假集訓。當時交大學生不熱衷程式設計比賽,罩哥找不到人參加的情況下,把我給拉了進去。教練是奧賽銀牌的資工學長卡車司機,帶我們練習UVa Online Judge 的程式設計題目。

我和Y 同學在第一次練習的時候,打開了Visual Studio,IDE 還沒開完,她已經用Vim 寫完snippet,然後我就她被鄙視了。大四開學,我們前往東京參加ACM 區域賽,飛機上K 學弟不看解題相關書籍,津津有味地讀「程式語言」,我一臉疑惑問這是為什麼呢?K 學弟笑曰:「因為這本書很有趣。」再一次,我又被鄙視了。

此時熟悉許多實作於C++ 的基礎資料結構和演算法,半年過去,我和Y 同學和D 學長組了一隊參加教育部的大專盃程式設計比賽。國手培訓營出身的學長大發神威,帶我們拿下第三名。我拿這紙獎狀去推甄,最後吊車尾正取台大資訊研究所。順帶一提,K 學弟後來也進台大,畢業後去MIT 攻讀博士,他當年那燦爛的微笑依然深植我心。

大四下我去UIUC 交換,在一門圖學課用C++ 寫了一個ray tracer。和一般程式競賽百行內的小品相比,ray tracer 對記憶體需求大,程式邏輯也相對複雜。我中體會C++ 的繼承、多型等物件導向特性。香檳的春天,算是我和C++ 的蜜月期,從無到有完成有一定複雜度的系統,讓我更了解她,也更信任她。但終究,我無法忍受她時常segmentation fault,上研究所後,我就很少聯絡她。

最後一次見到C++ 是在Google,當時我的工作是整合Google Brain 和OpenCV,實作一個根據使用者可能感興趣的內容,自動生成動態圖像廣告的MapReduce 類別。隨著C++11 發布,她已經有不小轉變。時髦的語法,減少型別判斷的冗句。內建的std::unique_ptr 降低許多memory leak 的機會。加上Google 內部超強的infrastructure 和豐富的codebase,用C++ 工作真是寫意輕鬆。

我曾以為,這次能和她走到最後。

直到用C++ 面試找工作的時候,才認清這麼多年了,自己始終沒有好好去了解她。白板,是我最後寫下const T& 的地方。

•••

“Tony?”
「那只是個課堂作業,在交大,用C++。」我微笑以答。

初階軟體工程師面試心得

從新創公司到軟體巨擘,不同公司對初階軟體工程師的面試略分三類:

1. Conversation
經驗交流面試,主要考察求職者過往經驗與公司目標是否契合。

這類公司通常專注於一個產品,需要大量的背景知識才能上手,比方說做光場相機的Lytro, 增強實境的Magic Leap, 虛擬實境的Oculus。面試官並不在乎求職者會不會反轉二元樹,他在乎的是對電腦視覺的基礎、對C++ 的理解程度、以及對電腦視覺函式庫的熟悉程度。

這種面試幾乎沒有速成模式,基本上通過履歷篩選拿到面試的,應該都具備相關的專案經驗,就是看經驗的深度廣度有沒有達到公司徵人的門檻而已。

2. Whiteboard Interview
白板面試,主要考察求職者解題與分析能力。

這類面試在我求職過程中佔了大宗,Google, Facebook, Uber 等幾乎你能想得到的公司都是進行白板面試。一個白板面試的基本流程就是考官給一道題目,受試者在白板上寫下自己的答案。面試官考察受試者在沒有語法高亮或是編譯、直譯器等補助工具的環境下,從思維上怎麼解決題目,並分析解法。

題目包括 a) 演算法 b) 物件導向程式設計 c) 系統設計,每間公司的出題偏好不同。Google 只考演算法,Facebook 考演算法和物件導向程式設計,Uber 三個都考之外還加behavior questions。其中,Uber 會讓你在電腦用熟悉的環境編程,但與面試官的交流不出白板面試的框架。

此類面試是可以速成的,大家常說的「刷題」,就是增進白板面試的能力。

3. Pair Programming
結隊編程面試,主要考察求職者內化的編程習慣與反應能力。

同樣是給一個程式問題,面試官與受試者,一人一副鍵盤,坐在同一台電腦前一起解決問題。與白板面試不同的地方在於,面試官就不好意思出一張嘴說 “I don’t know. You tell me.”,雙方必須在程式碼上面做交流。

三種面試中,我最喜歡這種,受試者也可以在一起編程的過程中更了解面試官。不過也許是成本過高,此次面試只有Square 是採用這種模式。

此類面試速成難度較高,但是可以準備的。我認為遵循物件導向的原則,多實作簡易的類別,能提升現場寫程式碼的品質。

菁英中學教育

下一屆新生參訪本系,我和一位剛錄取的台大學弟以及美女教授三人在酒吧聊天。我們聊到學弟建中資優班的同學,約一半都在美國名校唸博班的情況。本來以為這是台灣中學教育的極端光譜,美女教授的回應讓我驚訝。

「真有趣,我老公也是如此,他們高中同班同學三人都在M 教授門下。」

說明一下,美女教授的老公,也是本系的帥哥教授,在UC Berkeley 的指導M 教授德高望重,旗下弟子現在成群結伴在全美最好的大學當教授。三個高中同班同學都拜師門下,實屬不易。在此之前,我以為美國不常見這種升學集中的現象。

對照今天逛臉書看到的這一間John Hopkins Center for Talented Youth,談到Lady Gaga, Mark Zuckerberg, Sergey Brin 都曾出自他們的教育課程。看來美國的菁英課程不僅著重升學,也啟發學生更多元的發展!

「對了,另外他還有三個同班同學拿過麥克阿瑟天才獎。」

但重點是都要很聰明就是了。

North Carolina vs. Duke

nc-duke

03/07/2015 我的第一場北卡杜克籃球賽,北卡主場不敵藍魔鬼,以77 比84 輸球。

nc-duke-ticket
大約一個星期前,信箱寄來一封信 “Here are your Student Tickets!!”,我抽中了今年北卡杜克籃球賽的Phase 5 學生門票。每年的北卡杜克籃球賽總是一票難求,僅保留一小區給學生免費入場,其他座位出售。我不太清楚一般票價,在論壇看到有中國學生要用$100 出售他的Phase 5 學生票。比賽晚上9:00 開始,Phase 5 的學生票,預計要8:30 才能入場,是那學生漫天喊價,還是這票奇貨可居呢?

https://instagram.com/p/z8kVwfJwZI/
我和朋友換一換,最後弄到了一張Phase 2 和一張Phase 3 (7:30 入場)。我和瑩大概7:00 左右到了Dean Smith Center 門口,現場已經有ESPN 連線車,和一大群的北卡學生,氣氛很嗨!我們和大家一起排隊,一起叫囂,和梅竹賽交通清華兩校劍拔駑張的感覺有點類似。不同的是,這邊沒有所謂火力班,每個學生身上都像帶著火藥一樣嗆。排隊過程中,有兩位戴著Duke 球帽的老兄經過,一整路排隊的人都在對他們碎碎念:「嘿,你怎麼戴了一頂Duke 的帽子?」「那東西很臭,快點脫掉!」

https://instagram.com/p/z9Da7yJwf2/
進入球館的時候,全場還有一半以上的空位,我們傻傻的跑到球場第一排搖滾區坐下,直到半小時以有Duke 球迷拿票指著我們的位子,才知道那是商業票區。那學生區域在哪兒呢?只好去看哪裡學生最多,就往哪兒走,最後坐到了球場頂邊的位置。不過和美式足球場相比,即使坐到了邊角,場上的球員還是蠻清楚的。球場的聲光娛樂效果非常棒,音樂主持以及熱情的Tar Heels 讓我們對比賽充滿期待,即使坐在哪兒等待開賽也不會很無聊。

九點開賽,身為一日球迷的我,對比賽無法完全記清,即使看了ESPN Recap,也還不清楚究竟球是怎麼輸的。這讓我想起2006 的丙戌梅竹男籃,交大在主場也輸了球。當然,數據和那場比賽發生的細節,早已記不清楚,唯終場目睹交大#23 張景堯灌籃的那一刻,至今仍然感動。

不知道多年後,我會想起今天的哪一幕,是比賽開始20 秒後JP Tokoto 抄球傳給前場Brice Johnson 的灌籃?是Marcus Paige 在關鍵時刻的三分救援?或是,和我一起熬夜加油,最終不敵睡魔而在場邊睡著的瑩呢?

《Google 模式》書摘

Google 模式作者包括兩位Google 高層(董事會主席Eric Schmidt 和產品資深副總Jonathan Rosenberg),介紹公司的經營理念,以十六字總結如下:志向遠大,人才為上,與時俱進,無懼後浪。

Google 的創辦人深具遠見,切進一塊相當具有發展潛力的領域,並招募非常傑出的人才獲得成功。公司不斷成長,迎接市場以及來自其他網路公司的挑戰。過程中,Google 推出相當多成功產品,當然也有失敗的案例,如Google Wave, Buzz 等。Google 不只從成功經驗學習,更向失敗請益,直至今日,公司依然強勢。總結為作者的感慨,就算某天,在明星四起的智慧創作者圈,某新秀神來一筆,讓Google 成為一家無足輕重的公司,他也不意外,因為這就是我們所在的新世代。

由於Google 的形象太強烈,幾乎所有在書中所提及的觀念,早已被媒體報導過。這本書有意思的地方在一些對「Google 員工」的刻畫。比方說,書中描寫去年中上任的Android 部門負責人Sundar Pichai,在Google Earth 產品會議中展現他機智,以及對例行行政會議報告的重視,讚譽有加,令人聯想到Pichai 在Google 快速發展。比較八卦的還有Yahoo CEO Marissa Mayer 當年和Sergey Brin 做Google Street View 的互動,書中也有帶過。

對我來說,這些Google 人物的小故事特別精彩,難以一一細數。再次閱讀,可以從書後的致謝下手,所有的登場角色幾乎都寫在那邊了。

購入 12/30/2014
初讀 03/02/2015

初探哈佛案例教材

當研究生,不免讀「論文」。還記得在台大多媒體實驗室第一次試著做論文簡報的時候,居然花了一個星期讀一篇八頁的電腦視覺會議論文。當時初探電腦視覺,對專業領域不熟悉,需要額外看許多論文補充背景知識。讀懂一篇,等於要讀多篇,因此花這麼長時間。

這學期修了一門商業課程,部分在討論哈佛商學院出版的一些「案例」。一篇案例約20 頁,對我來說又是一個新挑戰,不知道這初探哈佛案例,又要花多少時間。今早戰戰兢兢地翻開了第一頁,計時,直至看完文章,大約花一個半小時。由於自己平日並無閱讀英文雜誌書刊的習慣,能花這樣的時間讀完文章,比自己預期快很多啊!

「初探案例」與「初探論文」經驗的截然不同,居然讓我油然而生「論文給書寫者方便,而案例給閱讀者方便」這種偏差觀念。我試著描述兩者內容差異:

標題

論文標題之後,下必以明顯字體標記作者大名,且必須交代作者身處機構,甚至聯絡方式,堪稱負責。雖說不因以人廢言,但由於學術論文出版眾多,作者與其所在機構以及承襲理念,往往成為一篇論文不可分割的一部分,看論文前,先了解其作者團隊也頗費時間。

案例斗大標題之後,僅以最小字體標記作者,關於作者的更多資訊,就放在腳註,一副不想讓人家知道是他寫的樣子。好處就是免去Google 作者的意圖,直接進導讀。

導讀

論文導讀為其摘要,去蕪存菁,把整篇文章的問題解法實驗結果乃至後續展望都壓在了短短的摘要內,以斜體註明。大概像這樣:

本篇論文主要探討處理X 於Y 特殊情況所產生之Z 問題。我們借用A 方法中的B 特性,開發一種嶄新的C 技術。我們在I, J, K 等實驗中,證明我們的方法更優於直接套用A 方法以及其派生的a 技術。未來我們將試著處理比Z 更廣義的問題,最終期許能夠真正解決X,帶來更便利的生活。

案例導讀和文章的關係就非常微妙了,可能是故事,可能是其他人的評論,不讀完全部文章不知道其中的關連。大概像這樣:

當Rune Gjeldnes 和Torry Larsen 聽到這個不幸消息的時候,已經是他們動身前往北極的第26 天了。他們於三月的某個星期一接到一通來自挪威的電話,告訴他們Iridium 國際電話(也就是他們現在正在溝通的媒介),即將永久地終止服務。

這是在講Iridium 國際電話的興衰,想當然而,欲知後事必得繼續讀下去。論文導讀也有同樣效果,欲知後事必得繼續讀下去,不過有很大的機會不會想知道後面發生什麼事就是了…。

本文

論文言簡意賅,每一句話都要切中要領。在這裡曾和一位的老師聊過,他說每一個句子都應該要有其存在的意義,並要有所支持。我問:「每一句都要有意義,太嚴格了,那真擠不出東西湊出足夠篇幅的文章怎麼辦?」老師笑答:「重要的東西可以多重複幾次,重要的東西可以多重複幾次,重要的東西可以多重複幾次。如此,每一個句子還是有其存在的意義。」

案例絮絮叨叨,講商業卻無所不包。就拿今早看的那一篇分析Barnes & Noble vs. Amazon.com 的文章來說好了。主旨是講兩家公司對在數位零售書商的龍頭之爭。除了比較公司資本規模、市場客源、行銷策略等商業訊息外,還多加了許多背後的故事。比方說Amazon.com 的創辦人Jeff Bezos 在Princeton 大學優異的學業成績,畢業後理所當然進華爾街做量化分析,隨後因為觀察到網頁以2,000% 的速度增長而產生做網路零售的念頭。這種個人背景的描述看似和公司整體營運無關,但後面讀到為什麼Jeff Bezos 專做書本這塊,並以此分析Amazon.com 當初以華盛頓州為據點的成本時就非常過癮。

其他還有許多方面的比較,在此不一一贅述。這篇主旨並不是要傷論文捧案例,兩者目的取向不同。論文著重深入的技術開發,而案例主要是要讓大家討論分析,自然好讀。期初上課,聽老師說教材要全部自費的時候,一度覺得一篇約$5 美金的案例挺貴的,現在倒覺得很值得呢。

Smartest people in the world

昨天看到一篇回文「翟本喬為何不在大市場的美國創業」,作者以建資老同學的角度,評價當年台灣資優生的發展。

的確,今朝各領域的人物,年輕時無不崢嶸頭角。以商業為例,大家可能知道世界首富Bill Gates 高中就開始賣自己寫的程式,但大家可能不知道他高中畢業時還有1590/1600 的SAT,分別向哈佛、耶魯、普林斯頓三所大學提出未來將成為數學家、政治家、工程師的入學申請,全部錄取。以數學為例,當代最知名的數學家陶哲軒,13 歲拿下奧林匹亞數學金牌,是史上最年輕的得主。以電腦科學為例,MIT 最年輕的正教授 Erik Demaine,今年33 歲已經和363 位作者合作344 論文,當年20 歲就開始在MIT 任助理教授。

反過來說,當年在台灣的神童們,也不缺名牌大學入學許可、奧賽金牌等成就(Erik Demaine 那個還是太扯),但長大不見得有「如此顯赫」的功業。我無意討論不同教育體制、社會資源對資優生未來發展產生的影響。在我看來,他們都非常傑出。

也許他們人生的某一刻,真有那麼一瞬間想著,自己的天賦,也許能符合社會對他們過高的期待。然而,在某個時間點開悟,將那一絲絢爛神采歸於平淡。

早年智商的定義是心智年齡和實際年齡的比例,或許也可以用來想像,高智商的人對於名利的追求,比一般人更早獲得,又比一般人更早放棄,像是一種加速進行的人生。最後所剩下的,不管是不是真的這樣,但我期待那是超越名利、與時俱進、平凡卻又不凡的寧靜致遠。

即使像我智商一般的人,都能感受這段文字的溫度。其實在看到這篇文章之前,就在Twitter 撈叨了一句,現在拿來看,還真是心有戚戚:

Someday, you will eventually know your role models should not be those smartest people in the world.

Google PhD Summit at Chapel Hill

第一屆Google PhD Summit 在教堂山舉辦,公司請到Research Scientist 和Software Engineer 和大家聊聊這些不同職稱的PhD 們在公司做什麼事。聽完一整個下午的演講,我個人對這兩個職稱粗淺的見解:他們基本上就是做一樣的事。不如這樣想,公司最有名的Research Scientist 和Software Engineer 不就是同一個人嗎?[1]

Jeff Dean
Jeff Dean, Google Senior Fellow

晚上Google 又請大家去酒吧吃好料,在那兒和Google Chapel Hill 的負責人Mike 聊天,終於明白為什麼公司要在咱們這小地方插旗,那又是矽谷的一段風風雨雨。噫,也許是酒喝多了,這些故事真是讓人熱血沸騰啊!


[1] 我確定Google 有很多優秀的工程師和科學家,只列其一有失公允,不如聽聽Google 內部員工怎麼說他的「事蹟」(http://www.quora.com/What-are-all-the-Jeff-Dean-facts)