轉眼間在明尼的生活也過去一多半了,也是時候做個總結了。
現在翻盤來看這一年還算是有點收獲:去了很喜歡的公司實習、第一次在開源項目上留下了自己的名字、發現了自己更喜歡的研究方向、認識了很多令我欽佩的小伙伴。唯一的遺憾大概就是沒能住上心心念念的有落地窗的Hub apartment…
19春季學期上了兩門洗刷靈魂的好課:分布式系統和Machine Learning in Computer System。
國內開設分布式課程的學校其實屈指可數,但這門課在國外還是挺普遍的。個人感覺學會這個之后再看后端開發中的很多問題會明顯高一個段位。最著名的分布式系統公開課大概就是大名鼎鼎的6.824,但明尼的教學計划其實縮水了一些:用Java、lab不用考慮Fault Tolerance、也不講Raft。總體上算是入了個門吧。本來打算暑假再刷一遍6.824然而放鴿子了…咕咕咕
ML in Computer System是一門討論課,就是大家一起讀paper、做presentation和討論。Paper大多是用ML解決很多system領域中的問題,比如數據庫調優、編譯器優化、虛擬內存索引、data placement等等。這門課某種程度上說真的是改變了我的成長軌跡… 我后來實習的project,還有對自己發展方向的調整,很大程度上都來自這門課。Jon真可以說是我system路上的啟蒙老師…畢業的時候要找他合個影哈哈哈
在MLsys課上讀到過SIGMOD17的一篇paper:OtterTune,是用ML的方法調節MySQL數據庫的參數。當時這篇paper分到我做presentation。其實我這次presentation做的很不好,磕磕巴巴,后來還被Jon留下單獨談話了…結果后來沒想到這篇paper就成了我實習項目的來源。當時我看到PingCAP參加了今年的Google Summer of Code項目,其中一個topic就是希望做一個Auto-tune RocksDB出來。這個scenario和OtterTune簡直一模一樣呀!於是我申請了這個項目,然后就開工了,后來沒想到居然還真有點效果……期間mentor吳毅哥給了我非常多的幫助,也幫我打開了一個新世界的大門。這個項目的總結最后被整理成了公眾號文章,后來又搞了個英文版發到了CNCF Blog。也算是在開源社區留下了自己的一點足跡。
暑假的Summer of Code之后,我也開始思考下一步的方向。其實來明尼之前我是一個典型的爛大街Deep Neural Network選手(import過幾次TensorFlow就號稱要搞機器學習的那種),但經過這幾個月之后,我發現system其實才是我的真愛啊……學ML時繁雜的數學公式看得我直打瞌睡,但肝OS和分布式時學習底層結構、debug的過程卻讓我樂在其中。其實想想本科我更感興趣的也是計組、OS、數據庫這種課呀,只不過那時候自己也沒覺察出來罷了,再加上肥工的教學水平也有點不敢恭維。其實這時候才開竅是有點晚了,因為明尼的AI搞的其實還行,但system卻是個弱勢學科,而且也沒有啥擴張的意向…不過這年頭搞system的人少,競爭也沒那么激烈。
然后就是就業還是讀PhD的問題了。其實很多人都覺得system是個不需要讀博士的方向,很多成果都是senior大佬而不是學校實驗室做出來的。我一開始也深以為然。但在Summer of Code結束之后我開始感覺,雖然AutoTiKV做的還算有點效果,但核心思想畢竟還是別人的。還有我司的拳頭級產品Titan,核心思想也是FAST16的一篇文章,而我們是把它拿過來實現的。當然implementation的過程中也有很多艱難的工作要做,但什么時候我也可以提出一個自己的idea,能有所創新呢?想到這里其實目標就比較明確了,因為大多數情況下這種工作只有PhD能做出來。當然也不是絕對,但一定要有等同於PhD的那種能力……就以數據庫為例,比如阿里的OceanDB、華為的GaussDB,很多feature都是靠招了大把PhD帶出來的。一方面能出很多好的paper,一方面也能提高自己產品的競爭力。這種比純粹工程上的優化還是高一個段位的。還有一個考慮就是博士生依然可以利用暑假實習、參與開源社區等機會提高工程能力,但上了班之后能潛心做研究的機會就很少很少了,也沒有在學校的那種自由度了。我一開始對PhD的期望是精通某個領域,但其實這方面工業界的senior大佬比憋在學校的小朋友強多了…所以作為一個博士一定要爭取有所創新,要達到做研究崗的水平。多想想業界的需求而不是為了畢業灌水。當然這個靠個人努力是不夠的,好的環境和導師非常非常重要……
然后就是未來發展方向的選擇了。一方面我感覺system要做好必須要搞全家桶,就是下至architecture、上至application都要比較懂。因為現在需要軟硬件結合的工作越來越多了。比如數據庫+NVM、向量化引擎+SIMD、還有MICRO上鋪天蓋地的深度學習加速器之類,如果有瘸腿就很難follow別人的工作。但另一方面還是要選好一個打算深入做下去的小方向。19秋季學期我就開始考慮這個事情,於是這個學期成了比較慘烈的一個學期……硬課(computer architecture)+實習(繼續做AI+DB)+科研(分布式ML system)全壓上了…好在最終還算有收獲,全家桶初具成效,科研算是初步走上正軌,實習項目效果也還可以。我其實對很理論的東西不是很感興趣(比如數據庫+data mining、programming language這種),再結合學校里具體的一些情況,因此先跟着高年級PhD做一些decentralized distribute machine learning的工作,AI的飯還是有點香的……另一方面下學期有個storage system的討論課,感覺也有很多好玩的東西可做,比起冗雜的RDBMS理論我還是更喜歡底層的一些東西。
接下來的一年希望能繼續高速發展下去,多學些硬核公開課,做出一些更有價值的成果,不斷發掘自己能力的上限。
2019.12.27 於IAH機場