2016年6月16日 星期四

張琮翔 (B90/R94, vgod, Dropbox 軟體工程師)

領域方面
1. 請問您目前在哪邊高就? 是做什麼領域的工作或研究呢? 從您以前的文章看來學長是做AI、HCI方面的研究,目前有沒有什麼改變呢?
我目前在舊金山的Dropbox擔任軟體工程師,在做Dropbox下一個給團隊協作的新產品「Dropbox Paper」。嚴格說起來,我現在已經遠離學術研究了,比較專心在做產品,而不是寫論文。 

2. 可以跟我們介紹一下您在Dropbox目前在做偏向什麼類型的事呢(寫系統、資料探勘、雲端運算、UI...)? 另外就學長看來未來業界比較有發展性的是哪一塊呢? 我在Dropbox的Paper Team做engineer,front-end (UI)、backend、infrastructure、analytics我都有做一些,但大部分的工作是在UI和analytics居多。Paper是Dropbox裡比較特殊的team,因為是新產品,所以我們比較像是一個在Dropbox內部的startup,整個tech stack都和Dropbox本身不一樣。這樣可以讓我們開發得很快,同時也不用擔心把Dropbox本身搞壞或被Dropbox比較嚴格的code review拖慢速度。隨著我們的產品越來越成熟,我們才開始慢慢和Dropbox已有的infrastructure結合,避免重複開發複雜的輪子。 以產品來說,Paper還在摸索下一個世代的團隊協作產品應該要長什麼樣。上一個世代每個人都是用Office,而Google Docs則是把Office幾乎原封不動的搬上web。但Office和Google Docs都是以單人使用打字機時代的概念為基礎所設計的,在現代的web和mobile時代,有很多功能其實都沒必要存在了。例如說,為什麼要以「頁」為單位把文件分開?如果我們不再把知識印在紙上了,「頁」這個概念其實也沒有意義了。我們覺得現在是一個好時機重新思考未來的團隊應該要怎麼溝通協作,怎麼分享和散佈知識,所以才有了Paper的誕生。這個領域的競爭者很多,像Quip、notion.so、Slack都不約而同地在做非常類似的產品,未來誰會勝出還很難說。 以技術來說,我的建議是不要嘗試預測或追逐某一些特定的技術、程式語言、framework。這些東西的生命週期都很短,真正可以存活下來的是背後的概念和原理,這也是在大學時應該要打好的基礎。以興趣和熱情為主去發展才能讓你們未來可以走得更長久。 

3. 學長是如何啟蒙研究領域的興趣的呢? 會建議學弟妹如何找尋自己的興趣呢? 我對AI的興趣從國中就開始了,當時很愛玩mud(就像現代的MMORPG一樣,只是是純文字的),愛玩到自己寫了一些bot來自動玩(就等於是現代的外掛程式)。當時寫bot並不難,因為輸入和輸出都是純文字,只要一些簡單的字串比對就可以運作了。後來高中做了一個國際科展,題目是「讓電腦自己寫程式」。 當時其實蠻不知天高地厚的,完全不知道這是一個多難的題目。只是單純覺得如果電腦能幫忙人類寫程式,寫程式就可以變得更簡單,或許人類只要用簡單的幾個指令就可以讓電腦自動產生出一個複雜的軟體。雖然當時不知道這題目有多難,但也因此我才開始對AI和資訊科學產生濃厚的興趣。現在想想如果一開始有人阻止我跟我說這太難了絕對不可行,我說不定就連嘗試一下都不會了。 我覺得找尋興趣最好的方法就是多多嘗試,不用害怕失敗或計較成果。總之什麼都試試看,在學生時期失敗的成本非常低,所以應該要趁這個時候多多經歷各種失敗的經驗,未來可以少走很多冤枉路。 

4. 大學有曾經失焦,或者不知道自己未來要往哪裡去的時候嗎? 大學時沒有,但念完博士班時其實我猶豫了一陣子不確定該往哪走好。當時我想做startup,也有想在業界的research lab繼續作研究,或是做工程師。最後決定要做startup的關鍵因素是年紀大了而且也結婚了,可以冒險的機會快沒了XD 花了三年時間做startup後,我也更清楚自己還是喜歡動手作實際的產品可以馬上給使用者用,而不是寫paper做未來可能會有用但更可能會沒用的idea,所以離開startup後就決定還是當個工程師才能更專注在產品和技術上。 

4.1 以您實際創業後的經驗,會認為具有甚麼特質的人適合創業呢? 敢冒險、不怕失敗、善於溝通合作、碰到各種困難也有毅力堅持到底的人。 

5. 如果有學弟妹想往AI領域深造,您有什麼建議? 該如何開始呢? 先聲明我不是AI領域的專家,離現在state of the art的AI研究也有點遠,所以我講的可能不是最好的建議。 這幾年AI在學術界和業界又開始變得熱門,很大一部分原因是deep learning的出現。這個技術我覺得是現在想進入AI領域必學的一門學問,因為它用一個統一的架構解決了各個不同領域的pattern recognition問題。我還記得我在大學時修過一個電腦視覺相關的課程,當時人們發明了各種「visual feature」,像是SIFT、SURF等方法去把影像拆解成方便辨識的小單位。同樣的,語音辨識或是自然語言處理也有類似的feature engineering的過程。 deep learning厲害的地方在於,他對於每個領域的feature要長什麼樣子是完全沒有assumption的,你可以直接用影像或語音的raw data餵進去一個deep network,它就自動找出在不同抽象化層級的feature,並且最後辨識的正確率還遠高於手工做出來的feature和演算法。 至於該如何開始?網路上有很多免費課程和電子書,我自己是在Udacity上學的。 

求學歷程 
1. 學長認為對我們資訊工程未來最有幫助課程是什麼? 為何呢? 
我覺得這要看你畢業後的目標是什麼而定。如果你有興趣的是學術研究,那把你有興趣領域的基礎課程全都學得紮實就很重要,因為作研究時薄弱的基礎知識一定會回來咬你的。但如果你有興趣的是作軟體工程師,那最有用的我覺得是資料結構和演算法。 如果學弟妹未來有興趣想在矽谷找工作,毫無疑問基礎的演算法和資料結構是幾乎每一家公司面試時都會花很多時間的地方。如果你們能把這門科目好好融會貫通,要在矽谷找工作可以說是無往不利的。(當然不同公司還是會有著重一些不同的東西,例如大型系統的設計,或是coding style等等。但不管你去哪家公司面試軟體工程師,幾乎都逃不過基本的演算法和資料結構題目。) 1.1 關於在美國就業,能請學長再多跟我們談談嗎? 相信有許多同學很有興趣。 除了資料結構演算法等基礎的課程,相信企業不會希望只有GPA好看的應徵者,在學校課程外企業會希望軟體工程師的應徵者有甚麼較有影響力的資歷(open source、比賽經驗、intern工作經驗、學校專題....)? 關於在美國就業,現在剛好是軟體工程師的黃金時代,在矽谷幾乎每一家公司都很缺軟體工程師。如果沒有身分問題,只要會寫程式,就很容易找得到工作。如果要挑特別的公司,像是四大巨頭FLAG(Facebook、LinkedIn、Amazon/Apple、Google)或熱門的獨角獸公司(Airbnb、Dropbox、Uber、Pinterest…),就需要比較突出的經歷和能力了。 以我個人來說,我高中時的IOI(資訊奧林匹亞)獎牌是對我影響最大的經歷。我本來覺得這經歷只有在出社會前有用,沒想到即使到現在,我也還是會收到獵人頭的信跟我明說他們就是專找有IOI、ACM ICPC經歷的人。我的確也發現在一些頂尖的公司中(像是Google、Dropbox、還有一些華爾街的hedge fund),奧林匹亞獎牌密度高得驚人。(像我現在的team,有段時間大約10個工程師,就有3個人有IOI獎牌。) 雖然IOI獎牌很好用,但這也不代表非得有國際比賽的得獎經歷才算有影響力。這只是一個簡單的佐證,來證明這個人有某方面的能力是世界級的水準。我覺得不管任何事,你只要能做得非常非常好,都可以變成很有效的資歷。例如說,如果你對big data有興趣,那就應該想辦法參與很多人在用的open source project(隨便舉例,像是Apache Hadoop、Hive、Spark等等),甚至在裡面有significant的貢獻。這樣子的經歷可以證明很多事,像是你可以跟project裡的其他人溝通合作,並且能說服其他人接受你的code;你夠了解一個project的內部運作原理,所以才改得動它的code;你提交的code能通過其他人的review,表示有一定水準又符合project的規範。這些事情是工作上真正需要的能力,所以有這種經驗的人在美國的公司非常搶手。同樣的道理,即使你是作學校的專題,如果你能做到投稿上頂級conference的程度,或是把它變成專利、甚至實際產品的程度,那也會是一個很有影響力的經歷。(值得一提的是,學術界的論文和經歷對於在業界找工程師的職位幫助不大。只有在一些大公司的research lab做research scientist,才會看學術論文。)
2. 相信資工系有許多同學有其他興趣的領域卻忙著應付課業,或是全心專注自己的研究而無心課業,從學長在PTT留學版的文章看來,您在大學時期似乎也分配了許多時間給自己有興趣的領域,升學卻仍可以申請到非常好的學校,您是如何在課業與興趣間取得平衡的呢? 
對於很早找到自己方向的學弟妹,在升學的部分您有何建議來增加自己GPA以外的經歷呢? 老實說我在大學時完全沒想過要取得平衡這件事。我是非常興趣導向而且只能專注一件事的人,有興趣的事情我會花200%的力氣去做,但沒興趣的事我會完全放棄。所以我大學的成績分布在兩個極端,不是六、七十分低空飛過,就是九十幾或是接近滿分的成績。 我幾乎不去上系上的課,大學四年我只有一門課全勤。(那門課是徐讚昇教授的Compiler。因為他實在教得太好了,我覺得比我自己念有效率得多。)其餘每一門課我都是寫作業和去考試而已。我花了很多時間在課外的領域,像是玩程式競賽,在217作地下助教管一些Linux的機器,同時也在外面的軟體公司打工寫程式賺外快,後來還參與了一些open source project。 這些實用的經驗對我來說是很寶貴的,也是讓我和別的「乖寶寶」學生最大的不同。但我現在回過頭看,我覺得這些經歷只是一些佐證,用來證明我對我有興趣的事情會有很大的內在動力去做,並且可以做得很好。這種對一件事物的高度執著與熱情我覺得才是MIT會看上我的原因。 所以說呢,我覺得對於很早就找到自己方向的人來說,其實只要專注地把你最有興趣的一件事情做到極致就好,其他事相對來說都沒那麼重要。 

3. 在求學過程有沒有什麼後悔的事? 
我是一個不會後悔自己作過的選擇的人,我一直覺得即使當下看起來是壞的事,後來也可能會在意想不到的時候變成好的事。英文把這個叫做「connecting the dots」,有興趣的人可以去看Steve Jobs在2005年於Stanford畢業典禮中的致詞,他非常好的解釋了我想講的事情。 

4. 有沒有期許資工系的學弟妹在大學必做的事或其他想勉勵學弟妹的話呢? 
我覺得大學時期應該多多嘗試各種不同的機會。創業、做研究、參加比賽、交男女朋友、做intern、接case、交換學生,什麼都好,就是別只坐在教室裡乖乖上課和唸書。如果找到了興趣,就要盡力做到極致,並以做到世界級的極致為目標。另外,如果有想創業的人,要盡早做,年輕時的機會成本很低,即使失敗了,得到的經驗也是很划算的。(創業跟參加創業比賽是兩回事,參加那種比賽大多沒什麼用,遠不如捲起袖子真正下去做真正的business。)