專訪Josh Wills:從數學到編程,如何成爲更好的程式設計師?

鑑於在少年時代著迷於微積分,長大後的Josh Wills前往杜克大學選修了理論數學專業。在大學的最後一年,他認識了統計學這樣一個學科,雖然比起偏微分方程,Josh更喜歡後者,但他確實在那一刻起就喜歡上了這一個學科。

在那之後,Josh去過IBM一小段時間,然後去得州大學奧斯汀分校成為一名運籌學研究方向的博士,主要研究內容是解決NP-難的問題。在那之後,他便進入了初創公司領域,在Zilliant做一名統計學家,然後去了Indeed,最終來到了Google。


專訪Josh Wills:從數學到編程,如何成為更好的程序員?


Josh Wills

Cloudera數據科學主任

​在這篇訪談裡,Josh講述了文學與數據科學交融之處的魅力,懷著謙虛與渴望之心去學習,努力去挖掘開源項目資源,以及Google的工程開發部門對自己的深遠影響。Josh Wills現在是Cloudera的資深數據科學主任。他在那裡的工作用他自己的話說就是“讓數據變得精彩”。


專訪Josh Wills:從數學到編程,如何成為更好的程序員?


1.作為採訪的起始,我們想要聽聽您的本科經歷。在本科畢業之後,您直接選擇了學術路線,就讀了研究生,這些過往經歷是如何一路引導您走到今天的?

我本科學的是數學專業。但是其實很搞笑的一點是,雖然我從小到高中之前一直都很擅長數學,但是其實我從來都不喜歡它。我當時其實更鐘情於歷史學或者政治科學,直到我上高中以後學到了微積分。我深深地沉醉其中,覺得微積分堪稱我在學術領域遇到的第一個有意思的東西。

我在高中是一個學霸級別的人,班裡其他人都不能“望我項背”。我甚至在幾乎沒有聽課的情況下就自學去參加大學考試。在高中的前幾年,我在沒有試聽過一節課的情況下參加了政治科學和比較政府這兩門課的大學考試,並且考得很不錯。

所以在我高中時光的後幾年,我又如法炮製,通過了藝術史、經濟學以及物理學等學科。然後我又在一個假期裡看完了全部的微積分AB和BC課程,然後是多元微積分,並最終學到了線性代數,這一切過程都是我自己完成的。到那個時候,我就完全被數學的魅力征服了,正如站在一幅美麗的油畫面前一樣,欣賞著一門藝術。

最終我來到了杜克大學。杜克大學很棒的一點就是我可以隨意選擇所有我想上的數學課。我的第一門課程就是研究生級別的拓撲論。那是很有趣的一門課,並且當時與我一同上課的人很多都是很出色的數學家。

很明顯這門課對我來說太超前了一些,雖然我很出色,但是別人都是研究生,比我高了一個級別了,所以我在當時非常謙虛。我覺得所有人都早晚會遇到妄自菲薄的一天,我很幸運地覺得自己的這一天來得很早,在我大學的第一年就來到了,所以我在此之後有大量的時間去慢慢重建自信。

總而言之,我當時跟數學槓上了,並且我也一直覺得自己會成為一個數學教授。但與此同時我也對很多其他的東西感興趣——我選修過一段時間哲學、經濟學,然後在那之後著迷於認知神經學。

很幸運的是在大學的第二年暑假,我去了卡內基梅隆大學參加了“本科生研究項目”,旨在完成道路建模和空間導航方面的工作。那是我人生中第一次認識了Matlab這個編程工具,第一次建立模型來模擬人腦的工作。正是那段經歷讓我喜歡上了編程。

2.您是否開始馬上在杜克大學學習各種編程課程?

是的。我選修了杜克大學的計算機科學課程,並且學會了寫C++程序。但是我沒有學算法或者操作系統一類的計算機專業課程。在之後的職場生涯裡,尤其是面試過程中,我都發現了這些缺乏的課程給我帶來了很大的麻煩,它們也成了一些很尷尬的門檻。

在我上大學的第三年年初,我決定暫時不去讀研究生走學術路線,而是去找一份真正的工作。我去面試了一些初創公司並且拿到了一個Offer,但是這一切都被隨之而來的2000年和2001年年初的互聯網泡沫破解徹底擊碎。

這在當時是普遍現象,而杜克大學的求職部門很給力地幫我們這群倒黴的傢伙到處找工作。最終我獲得了一個在IBM奧斯汀辦公室的工作。我就職的第一天是2001年6月17日,然乎就在我入職後的一週,IBM宣佈停止招聘,所以我覺得我就是那種擦邊進去的人。

IBM的奧斯汀分佈有一個硬件團隊主攻芯片設計和系統組合,簡而言之,就是你需要鑽進那些非常原始的硬件組件中,去查出每一個錯誤,這樣你才能加載運行操作系統。

我在當時負責管理一個用於測試微處理器的MySQL數據庫。整個數據庫有15GB大小,這在當時看起來是一個龐然大物,但是現在看起來小得可憐——我的手機都比那整個數據庫有更大的容量!我在當時的任務是開發儀表盤,然後針對機器的性能和芯片的表現做一些統計分析,為的是基於一些晶片製造過程中的測量指標來判斷芯片可以跑多快。這就是很傳統的統計學,很傳統的數據分析,只不過需要做一些編程工作。

實際上,這是一項很無聊的工作,我很快就覺得無比厭倦。日後我經常回顧這一段時光,覺得自己在那種情況下還能做出點東西來真是奇蹟,這段經歷也算是證明了我這個人無論在喜不喜歡的情況下都能把工作做好。

鑑於已經厭倦了那份工作,我申請了得州大學奧斯汀分校的運籌學研究項目。得州大學並沒有統計學院,而其實統計才是我想要學習的東西,所以在當時運籌學研究所已經是我在奧斯汀找到的最好機會了,而在當時奧斯汀可是一個非常不錯的城市。

我在本科的最後一年才選修了統計課,但這已經是我離校的那一年了。那一年我選修了音樂鑑賞、邏輯學簡介(很奇怪吧,是一門哲學系的課程)以及統計學簡介。統計學簡介在當時其實是研究生課程,但是鑑於我早就有過線性代數和偏微分方程的底子,那門課對我來說其實蠻容易的。

而且很好笑的一點是,我一上就喜歡上了那門課。我曾經選修過的很多哲學和神經科學課程裡都有認知論和符號推理部分,那些課程的主旨是去試圖理解如何才能確定我們確實知道某些東西。

3.而統計學是關於量化不確定性以及我們不知道的東西的。

非常正確!這是一門量化可知與未知的學科。這是你的數據,你能從中得到什麼確定的結論?我對此很有興趣。就我個人而言,這些東西簡直讓我痴狂。我喜歡統計學。現在我們快進到我的得州大學時光,那段時間我在得州大學上著全套的運籌學課程。

在那兩年間,為了拿到碩士學位,我一個學期需要上三門課,與此同時我還在為IBM工作。那是一個很糟糕的點子,完全就是一場災難,我根本沒有生活可言。

4.聽起來您在IBM學會了如何做簡單的統計分析,並且覺得“我想要更多地學習一些這方面知識”。

沒錯,就是這樣!我在IBM的軟件工程需求其實很簡單,並且我寫了很多很瘋狂的Perl腳本,在一定程度上自動化了我的工作。但是那個地方教會了我基本的統計學知識,並且讓我認識到統計學其實在現實世界中更有用處。而我當時的想法就是,如果你想要學習更多的東西,學校是最好的地方,所以我又回到了學校。

在讀研的第一年,我又做了另一個轉變:我換到了IBM的另一個部門,為的是可以做一些“真正”的編程工作,而不是弄弄儀表盤、寫寫Perl腳本。我換到的部門需要做一些非常底層的C++固件編程。那項工作基本上就是為那些還不能正常工作的硬件系統寫固件程序。我作為小組的一員,開始學習類似於版本控制、測試等一些我從學校從未學到的東西。

而這其中最重要的技能,莫過於我學會了如何調試黑盒子系統。當時我想要讓一個固件在一個還不能正常工作的硬件系統上跑起來,而我的工作就是想辦法解決這一過程中遇到的所有問題,並且讓它順利地運轉起來,無論我遇到什麼bug,我都需要去解決它們。當時我對硬件的瞭解不多。其實直到現在我的瞭解也不多。我現在都不會對一盒磁帶編程。我覺得最後我之所以轉做軟件工程師,也是因為我不瞭解那些不是我自己設計的系統。

總而言之,那個黑盒子就是那個沒法運轉的硬件。當我給它一些輸入的時候,它卻不會給我一些輸出。我必須要黑進那個系統裡,用一些命令或者指令讓這塊硬件重新可以與系統的其他部門通信。而在這一過程中,那個對著黑盒子調試的經歷,可能是我在這個地方學會的最重要的能力。

5.您從調試這些黑盒子的經歷中學到了什麼?

我不覺得這個黑盒子有多神秘:我只是著迷其中。我是那種可以花費五六個小時時間去玩樂高積木的孩子。我到現在都依然很喜歡樂高積木。我生於1979年,大概也算趕上了千禧年。對於我來說,如果一個計算機系統不按照我給的指令去工作,這是不可接受的情況。

無論需要花費多少時間,我都有決心去搞定這個黑盒子,直到它能按照我的指令去工作。

這是一門量化可知與未知的學科。這是你的數據,你能從中得到什麼確定的結論?我對此很有興趣。

在我的過往,我曾經遇到過幾個這樣的好問題。一個好的問題就是無論你的水平有多高,但是問題依然比你的水平要更高一些。你在努力地去做那個比你的水平要求更高一些的工作,這是一種很好的感覺。我往往會沉醉其中。但是每當這種時候,我的人際關係都會瀕臨崩潰,因為我完全沒有辦法對工作以外的事情產生興趣。

曾經一段時間有種潮流是,數據科學家工作的面試就是讓應聘者在面試過程中去真槍實彈地分析數據。我對於這種行為非常贊成。我曾經有過一次面試,在面試中他們給我一個問題以及數據集,然後讓我在兩個小時內靜坐去完成數據分析工作。那可能是我一整年中最開心的兩個小時。我簡直可以為了這種感覺去多參加幾次面試。

6.但是您曾經提到過,在您的學術經歷裡,曾經有一段時間備感煎熬。學術的一大特點似乎就是一旦你到達了一個特定的點,你就可能需要花費大量的時間去攻關尖端問題。您的性格似乎很擅長這樣的工作,為什麼學術界後來對您不再有吸引力了呢?

作為一個“偽千禧一代”,其實我不僅是名頭上冠以“千禧”,實際上也和他們一樣的缺乏耐心。我慢慢覺得學術圈不再吸引我了。在我達到你說的那個點,那個可以容許我花費大量時間去攻堅一個簡短問題的點之前,我需要做太多的事情。

一旦你讀研了,你就需要為某位導師工作,並且完全按照導師的命令去做,做許多他讓你做的事情。然後你需要做博士後很多年才有機會成為一個助理教授。在你經歷了所有這些痛苦之後,再過十年,你就可以獲得終身教授職位。

這一段時間實在是太長了,而在那之後,你才有機會去花時間做你想做的事情。即便做到了教授,我還是覺得不值得,因為你依然需要花費大量的時間去申請經費以及管理學生和博士後們。

現在我35歲。從時間上看,我可能正處於事業的頂點。我有一份非常好的工作,在這個崗位上我可以做所有我想做的事情、所有我喜歡的事情。但同時這也是需要謹慎考慮的機會。這種隨你做任何你想做的事情的崗位是很有壓力的,因為如果你搞砸了一些項目,或者是錯過了具有重大影響力的機會,沒有任何人會替你背鍋。

Amr Awadallah曾經撰寫過一個關於一個CTO應該做什麼事兒的帖子。他將CTO的職責與CFO相比較。CFO是那一類不需要為每個季度的銷售數字負責的人,但是如果出現一個重大錯誤或者遺漏,CFO就可以被炒了。與此同時,CTO是不需要為產品交付上線負責的,那是工程師副總裁的職責。但是如果CTO錯過了一些重大的科技風潮,他就可以走人了。

7.您能不能簡單談談IBM和Cloudera有什麼區別?您是如何發現各種區別的?

我們的聊天跳過了研究生階段,在那時我上了一門關於價格最優化的課程。其中一名教授同時也在為奧斯汀本地一家名為Zilliant的初創公司工作。我在當時想要一個專注於運籌學研究的工作,所以我的教授就聘用我做了一名數據分析師。在那裡,我學會了SAS和R,並且開始針對類似於市場細分和價格彈性等問題做數據分析和建模。

當你從學術界走出來,一般來說你都會發現現實世界比它看起來還要有趣,並且你需要解決的問題其實比看起來要難得多。

當你從學術界走出來,一般來說你都會發現現實世界比它看起來還要有趣,並且你需要解決的問題其實比看起來要難得多。定價優化之所以不像軟件工程一樣大熱,主要是因為大部分世界五百強公司所面對的問題僅僅是確保售價比成本要高。

如果他們連成本是什麼都記不住,他們根本不可能知道應該定什麼樣的價格才能保本。這不是火箭研究那樣的高科技。你根本不需要數據科學家去做這樣的事情。你只需要一份好的報告就能解決所有問題。

8.為什麼這些公司會連這些很重要的信息都不知道?

這看起來是一個很重要的部分,但是事實就是他們很多都不知道。問題出在銷售動機上。賣東西的人,也就是銷售人員的目的是獲得合同,因為他們的收入是完全基於這些合同的。他們需要將要售賣的東西放在一起,打包進行銷售。這一過程中會需要一些材料和專業服務,主要是文件和各種合約。

這些文件會被不停地閱讀和完善,但是沒有人會去想,為了折騰來折騰去地簽署這些合同需要花費多少錢。這類費用差異太大了,而人們總是很樂觀地去估計這筆費用。他們不會估計他們的生意談判會有衝突和不順利。他們不會估計到他們的報告會有錯誤。他們不會估計到他們的行程中可能會出現颶風。

這些不是小到可以忽視的問題,但是它們依然不是那一類可以很好地套進你在研究生階段學過的各種技術中的問題。它們是完全不同的一類問題。

它們確實是小問題,雖然小但是不容易解決。正如減肥是一項簡單但是不容易的工作。大部分業界公司的問題都很簡單,但都很難解決。

9.所以在Zilliant之後,您是不是將解決業界問題定為您的目標?

我希望讓自己變得有用。我喜歡去解決別人的問題。我也希望自己可以幫助到別人。我本性上是很樂於助人的。我確實熱衷於去抽象概念,並且我喜歡藝術以及其他具有奇怪審美的東西,但是我更希望每天的工作能更多地專注於人們的問題,並且讓他們的生活變得更好。而美學和理論都不如前者更有吸引力,因為它們總是將我從現實的問題中扯離。

10.在加入Google之前,您曾經在一系列的初創公司工作過。您在這些初創公司裡是在解決不同的問題嗎?最終是什麼讓您選擇了Google?

Google的工作讓我永遠地離開了奧斯汀。我實在太害怕離開奧斯汀了,以至於被我推掉的機會都可以列出一個很長的列表了。2005年,我收到一個Google的工程分析崗位Offer,我拒絕了。2007年,我收到Facebook的數據科學家Offer,我也拒絕了。我至今都在努力地不去想如果我當時接受了那個Offer,現在會是怎樣的一片光景。

它們確實是小問題,雖然小但是不容易解決。正如減肥是一項簡單但是不容易的工作一樣,大部分業界公司的問題都很簡單,但都很難解決。

最終讓我動身前往舊金山的東西是拍賣理論。我曾經在得州大學的博士階段修過一些有關博弈論和機械設計的課程,其中包括了拍賣理論。我真的很喜歡它:這是很漂亮的數學模型,並且可以用來讓很多社會問題得到最優化。我一直都想知道,如果將拍賣理論應用於現實世界會是怎樣的,但是在奧斯汀實在是沒有任何機會讓我去實戰設計一個拍賣理論的問題。

很幸運的是,我一直都跟Diane Tang有聯繫,她曾經在2005年試圖招聘我進入Google,並且負責管理Google的廣告質量團隊,該團隊的職責就是廣告拍賣。

她是Google的第一位也是唯一一位女性Google學者,不過當時她只是將我招聘到Google工作並且全職負責廣告拍賣工作的一個朋友。她是我的一位良師益友,也是我職場生涯裡最重要的貴人。

11.Google的廣告質量團隊是怎樣的?是不是一個聚集了一群學過拍賣理論的人的地方,目的是為了將這個理論運用於現實世界中?

我想要說的關於Google的一點是,在它的核心繫統裡有太多的偏才軟件工程師。Eric Veach,他是一個計算機圖像學博士,但是沒有機器學習經驗,正是他設計了Google最原始的機器學習系統。Eric曾經遇到了這個問題,於是去翻書,最後拿出了整個解決方案。

我還記得當我第一次來到Google時,嘗試理解整個機器學習系統是如何工作的。那真的是一個非常聰明並且獨一無二的解決方案,被用來解決世界上第一個真正的大規模機器學習問題。

它最原始的算法非常聰明,並且我從來沒有見過這個算法被髮布在任何期刊上,並且我覺得我們永遠也不會將其發佈。當然,Google現在早就已經超越了那個階段,並且奔向更為智能的機器學習系統。

Eric是那個設計了Google最原始的拍賣算法的人。同時,他是一個搞圖像的傢伙,從來沒聽說過拍賣理論。所以他去讀了有關二次價格的拍賣理論,並且想出了一個非常簡單的叫作GSP的生成算法——生成二次價格拍賣。

我曾經涉足過許多與拍賣有關的問題,並最終來到了Google。我真的很喜歡Google,但是最終在Google我們做的關於拍賣的問題也只是和人們理解的拍賣行為一樣複雜。

現在廣告商們很有熱情,這是好事兒,但是實際上真正有趣的拍賣策略與拍賣模型都是非常複雜的,並且需要大規模的計算量,我們需要有很強的工程團隊加入進來才能完成我們的設想。但是Google並不想要擁有這樣複雜的拍賣模型,因為除了搞拍賣模型理論的人,恐怕沒有人會喜歡它。

12.這聽起來像是學術圈與業界的一個顯著差別。在學術界,你總是想盡辦法去獲得最好的結果。但是在現實世界中,你會發現開發落實優先級最高的指標不僅有指標,也有易用性和用戶體驗。這樣的轉變一開始對你來說困難嗎?

我不覺得這是什麼問題。我非常幸運。我的大部分有關運籌學的研究生工作都是關於一些不可能解決的問題的。運籌學研究包含有一些很基本並且很難的問題,那是一些你根本不可能找到答案的問題。那類研究的目的就是讓你儘量做到最好,其實我很喜歡這一類工作,因為它們的目標要求不會高。如果是一個不可能被解決的問題,而你得到了一個答案,哪怕那個答案距離最優解還有很遠,也是很有趣的。

13.有一個笑話:“如果你有一個NP-難問題,你稍微做出一些東西,那麼可能你的解決方案已經比起前人好了幾個指數級別了。”

我非常贊同這句話。這一個很耐得住鑽研的方向。運籌學研究是一項在科學和學術界相對偏應用的學科,所以對我來說轉向業界不算難。

14.您的故事說明,要想成為數據科學家,你多多少少必須要有一些自我壓迫能力。你必須要有意願去離開自己的舒適區,進入一個你基本不熟悉的領域裡,從新學員開始做起。您的編程開發水平怎麼樣?

我不覺得自己的這方面能力很強。曾經在學校的時候,我的算法和最優化模型程序寫得挺不錯的,但是我從來都不是一個很出色的團隊程序員。即使在IBM的時候,雖然我是一個4人開發小組中的一員,我們其實也不需要太過緊密的團隊合作。軟件的架構其實已經被規定好了,接口也是很明白的。

當我在Zilliant的時候,公司決定重寫他們的定價引擎。數據分析師們集中到了一起,寫了一個關於他們對於新的定價引擎的規格。其中需要一些編程專家的幫忙,而在那個時候,我已經為IBM寫過幾年代碼了。所以我主動請纓完成軟件開發工作,但是很快幾乎所有人都發現了我其實並沒有如何從零開始搭建一個真正的軟件產品的經驗。

在這裡我給Zilliant的經理點一個大讚,因為他在那個時候做的事情是:給我安排了一位資深開發工程師作為導師,John Adair,他是我的另一位良師益友。三個月之後,他寫出基於那個規格設計的新系統,然後我對其進行了單元測試。在那三個月裡,我每天負責撰寫單元測試模塊,並且用它們去測試John寫的程序。

那是我職業生涯裡最有效的一段學習經歷,因為John的代碼寫得非常漂亮。當我向別人描述這一段經歷的時候,他們總是不屑,因為那聽起來很無聊而且很糟糕,大概絕大多數開發工程師都不喜歡寫測試單元。但如果你測試的是自己的傑作,你花費一整天來對自己的工作進行評測,從這個角度來看這項工作就有趣多了。並且我也終於學會了如何從零開始開發一個軟件系統。

當我向別人描述這一段經歷的時候,他們總是不屑,因為那聽起來很無聊而且很糟糕,大概絕大多數開發工程師都不喜歡寫測試單元。但如果你測試的是自己的傑作,你花費一整天來對自己的工作進行評測,從這個角度來看這項工作就有趣多了。

當系統開發進入到後部,我也開始寫一些關於這項設計的工作,所以我既知道規格也知道軟件。親眼看著如何寫出那種能通過測試的代碼是很有趣的。John和我對系統進行了幾次重構,但是最終在測試部門測試整個系統的時候,他們只找到了兩個錯誤。這是我所有參與過的軟件項目中最出色的一個,代碼實在是太漂亮了。

在離開Zilliant之後,我在Indeed公司短暫停留過一段時間,崗位是在搜索引擎部門。在那裡,我是一名統計師。我寫一些代碼,但是主要是在那裡運用我的統計學知識。並且在之後我離開Indeed進入Google的時候,我依然是作為統計師受聘的。

Google裡到處都有漂亮的代碼,以至於你可以隨便去讀、去用、去學習。在Google待了9個月之後,公司將我的崗位從統計師調整為軟件工程師,並且給予了我擢升。我對此一直都很心虛,因為我的代碼質量從來都沒有通過Google內部系統檢測。

對於像我這樣的人,我只是擅長模仿而已,並且無論是什麼東西,學起來都很快。Google裡邊有太多的出色代碼,這對我來說是一段無比精彩的經歷。僅僅因為我曾經就職於Google,看過這裡的精英們如何寫代碼,就足以讓我比起一般的軟件工程師出色20倍。這絕對是無與倫比的經歷,非常精彩!

15.您能不能具體描述一下您在Google做什麼?您是不是去詢問那些寫代碼的人問題,從他們那裡獲得各種答案,模仿他們寫代碼並且讀他們的代碼?您在那裡是如何學習的?

我不知道其他地方是怎樣的,但是Google其實是將這一切灌輸給我的。它要求我像Google裡的其他人一樣寫代碼。可讀性要求是一個很大的問題。無論你寫什麼語言,你的代碼可讀性必須達到一定要求,才被允許加入Google的原程序庫裡,或者你的代碼可以被某些有資格檢測可讀性的大神批准。

為了讓自己的代碼擁有足夠的可讀性,你必須要按照Google的代碼風格寫許多的代碼,而且可讀性檢測被看作軟件工程師的噩夢。我永遠不會忘記Sawzall庫對我的代碼的可讀性評價。

當時我寫了一些用於分析廣告日誌的代碼,研究一些廣告標的之間的相關性以及不同的機器學習概率。我寫了一些很簡單的相關性代碼,並且將它們提交到了Sawzall庫,結果評價我代碼的人是Rob Pike。

你可能不知道Rob Pike,他曾是AT&T實驗室的一員。他寫了第九計劃,並且他是Go語言的創始人之一。同時也是他創造了Sawzall語言。他也是我在Google見到的最苛刻的代碼檢測人,並且我相信他會將我的這句話當作一種讚許。

在他審核我代碼的那一次,我前前後後找了26個代碼審核員幫我,才通過了他的審核,那種經歷簡直不堪回首。事情最後惡化到我甚至在考慮直接辭職。居然有那麼多、那麼多、那麼多刻薄的評語。我覺得這正是Google的偉大之處,他們通過讓我去注意這些所有小細節,迫使我成了一名更好的程序員。沒有痛苦就沒有進步。

16.這大概就是成為數據科學家的一個美妙之處。這是一個交融了很多學科的領域,所以如果你特別擅長於某一領域,你可以謙卑地覺得自己在其他領域還只是入門,並且問道:“我能從這個人身上學到什麼東西啊?”

我覺得這是作為數據科學的職責列表裡非常重要的一項。事實就是,學會這些所有東西是一個非常曲折漫長的過程。對於那些軟件工程師來說,前一個人可能會給我很嚴厲的代碼審核,但是後一個人可能會過來問我一些數據分析問題,因為他們知道我是一名統計師,一位聽得懂他們的專業術語並且可以將東西解釋給他們聽的人。

保持謙虛是很難的,但是要記住謙虛終將會帶來進步。有朝一日如果你能成為一個專家,一個可以將自己的東西流利地說出來的專家,那就再好不過了。

17.您是如何從Google這樣的超大型公司——一個類似於研究機構的地方,轉到Cloudera這樣的初創企業的呢?

我懷念Google的很多東西。我懷念那裡的人。我懷念那裡的食物。我懷念那些玩具。Google裡大神太多了。而我們在Cloudera的數據科學團隊其實就是Google的一個延伸,我們把所有我們喜歡Google的方面都帶了過來,並且做出了一個開源的版本。

這就是我們做的事情。這是世界上最簡單的產品管理方案,瞭解你喜歡的東西,然後進一步完善它。

雖然我不是世界上最好的程序員,但是這不意味著我不能做出一些貢獻,隨之而來的社區和Crunch的擁篤是我一直都引以為傲的東西。

當我到Cloudera的時候,那個地方大約有85個人。雖然那時它已經不算是一個初創公司了,但是規模還是很小。我進去的時候說:“嗨!大家好,我是新來的數據科學主管,我應該做什麼?”當時沒有人有任何點子,而且我也沒有任何點子。我當時並不清楚他們招我去是做什麼的。

有幾天我非常憂心這件事,感覺在裡邊我完全無所事事。在Google,差不多我每天可以收到150封郵件,全部都是找我要東西的人發的。但是在這裡,我簡直可以養老了。這就是我之前說的那種自在給你帶來的焦慮。

所以我在Cloudera的工作就是搞清楚我可以做什麼。我花費了大量的時間與客戶交流,直到今天我依然在這麼做。我給予他們建立數據科學團隊的建議,或者給他們一些解決特定問題的方案。

同時我也開始著手處理一些客戶們提過的問題,或者是一些客戶需求裡有趣並且有用的東西。我在當時是Hadoop的外行新手,所以我的很大一部分工作就是去學習Hadoop是什麼以及它是如何工作的。我記得有一次我寫了一個模型用來檢測藥物副作用,那個算法一開始是用非MapReduce方法寫的,但是那絕對是一個完美的MapReduce問題。

那是我做的第一個有用的東西,並且我知道做得很成功,因為Mike Olson——我們的一個聯合創始人,在一個大會上用了五分鐘時間展示我的結果,並且在那之後有關它的很多報道和Twitter評論。

在那之後,我致力於完成一些關於處理地震圖片數據的問題,這一類主要是油氣公司分析的時間序列數據可以幫助他們找到地下石油和天然氣的儲存地點。那個時候我真的很懷念FlumeJava。那是一個解決這類問題的絕好工具,所以我幾乎重寫了FlumeJava以解決我的問題。

那段時間讓我回想起了曾經在IBM調試黑盒子的歲月。初到Google的時候,我曾經用過FlumeJava去寫數據通道,所以我知道API大概是什麼樣子的,但是我真的不知道那個黑盒子下面是什麼,只知道如何讓它運轉起來。

FlumeJava曾經發布過一篇關於那個系統的論文,而那篇論文確實很有用處,但是你依然需要坐下來告訴自己:“好的,我知道這些API是這樣工作的,但我不知道為什麼它會這樣子,所以讓我們坐下來認真看看到底裡邊是怎麼回事兒,是什麼讓這一切跑起來的。”

可能我對於自己的開源作品實在有點妄自菲薄,但是感謝我在Google的那段時光,讓我對於自己的代碼質量的所有自大都隨風而去了,而且我也很願意將我的代碼發佈出來,讓所有人都可以去看去加工,讓它變得越來越好。

雖然我不是世界上最好的程序員,但是這不意味著我不能做出一些貢獻,隨之而來的社區和Crunch的擁躉是我一直都引以為傲的東西。


專訪Josh Wills:從數學到編程,如何成為更好的程序員?


《數據科學家訪談錄》

【美】Carl Shan(單研)著

本書選取世界知名的25位數據科學家進行了深度的訪談,從不同的視角和維度,將他們的智慧、經驗、指導和建議凝聚成冊。每一篇訪談都是一次深度的交流,涵蓋了這些數據科學家最初從菜鳥起步,運用各種知識武裝和充實自己,一直到最終成為一名卓有成效的數據科學家的全過程。通過閱讀本書中的訪談,讀者可以形成對數據科學的宏觀認識和了解,更深刻地認識和體驗數據科學家的角色,並且從這些前輩的過往經歷中學到寶貴的知識和經驗以應用於自身的成長和事業中。

本書適合有志於成為數據科學家的人、正在從事數據科學相關工作的人、數據科學團隊的領導者和企業家以及商業人士參考,也適合對數據感興趣的普通讀者閱讀。

點擊 https://mp.weixin.qq.com/s/yG08cV353JtM7-QEIRFgjA,購買《數據科學家訪談錄


分享到:


相關文章: