1. 程式人生 > >Google Summer of Code 2017 經驗談

Google Summer of Code 2017 經驗談

要求 什麽 完整 成了 selected 希望 可能 最終 數據

Google Summer of Code (GSoC) 2018 又要開始了. 如果想實現你心中的開源夢想, 用代碼讓世界變得更美好. 參加GSoC可能是你進入開源的世界最好途徑.

GSoC是什麽


Google Summer of Code是Google每年舉辦的一個活動. 從2005年開始到現在已經舉辦了十三屆.

Google在GSoC中的角色是一個平臺和資金的提供者. 通過這個平臺, 學生能夠找到自己心儀的開源組織, 為了能獲得實現project idea的資格而展開競爭. 申請期截止之後, 開源組織會把自己選中的人選提供給Google, 由Google決定最終的入選人員. 如果成功入選, 入選者要在6-8月全職

為開源組織coding來實現自己申請的project idea.

在整個歷程中, 學生和組織會經歷Google的三次審核. 工作量不達標的, 會被取消資格. 因為學生需要全職工作, Google會提供給學生一定數目的津貼. 2017年提供給中國大陸的學生的標準是3600刀每人.

這是一次競爭

參加GSoC並不是報名註冊那麽簡單的事情. 根據GSoC 2017的數據, 在註冊的20651個學生裏面有4764個提交了propsoal, 最後被接受的學生有1318個. 從參加學生的國家來看, 印度569, 美國126, 德國55, 斯裏蘭卡54, 俄羅斯54, 中國大陸49 人員的分布基本這幾年這樣是穩定的.

參與申請GSoC的過程中, 可以說每一個你感興趣的組織裏面都會遇到很多的印度同學, 可能到最後你甚至會記下幾個熟悉的印度姓氏. 來自美國的同學比想象中少的原因可能是因為Google給的津貼比起他們在當地的IT企業裏面能找到的實習工資還是少很多的. 而來自中國大陸的同學的49人, 完全和我們CS學科的同學的數目不成比例. 盡管有一定的語言因素, 我還是認為這裏最大的問題是信息鴻溝. 以中國同學的競爭力, 這裏參加人數最多的應該是我們.

什麽樣的人適合申請GSoC?

做一個大概的輪廓描述的話, 我認為計算機專業現在大二的學生最適合申請GSoC. 因為從知識基礎上來說, CS大二的同學已經學過了計算機的基礎課 - 編程思想, 計算機組成原理, 數據結構. 同時不像大三的同學迫近準備升學, 工作, 他們的暑假時間最可能滿足GSoC對全職的要求. 實際上, 在申請過程中, 我所看到的最大數目的申請者也是大二的同學.

但是, 我去年(2017)參加的時候, 我在讀研究生一年級. 也有認識的同學, 是大三或者大四, 在網上也看到了博士期間參加的文章. 這裏最重要的應該是你想要為開源做貢獻, 並且有足夠的責任感在相當大程度上獨自完成你所申請的project.

GSoC的開源組織能夠為從大一到博士的同學提供簡單到寫demo code和搭網站主頁, 復雜到研究算法的各種難度的project. 如果是你用得特別順手的開源軟件, 你也可以自己提自己的project idea和他們討論! 各種專業領域的同學都可以找到對應的可以做出貢獻的開源組織.

不過這裏要特別提醒的是, 對於在國內面臨求職的同學, GSoC可能對你找工作並沒有直接的幫助(除了去Google). 到IT企業實習拿到return offer來得更正確.

我的GSoC經歷


緣起和準備

Google Summer of Code是16年冬天, 和同學一起打Google Kickstart的時候同學跟我聊起的. 後來和參加GSoC的同學聊, 他們也是從同學和學長那裏聽到相關的信息的. 一直到現在GSoC都應該還停留在口耳相傳的狀態. 後來上網了解了相關信息以後, 我作為谷粉自然是非常感興趣的. 研一的寒假也給自己安排了小任務 - 關註GSoC的動態.

GSoC的開始都是開源組織先向Google提出申請, 通過之後GSoC才會列出他們的名單. 2017年的這個階段, 一直持續到二月二十七日. 因為每年的組織基本都差不多, 尤其是大組織基本不會變. 在名單發布之前, 點進大組織的Forum發現裏面已經討論得熱火朝天了, 看到了各種漂亮的簡歷. 各個組織已經基本列出了他們想要讓學生實現的idea list, 有的討論已經進行得很深入.

我的想法也從一開始的廣撒網轉移到關註適合自己項目上. 雖然我在自學機器學習相關的知識, 但是相比於能其他同學, 短時間內入手並達到不錯的水平是比較難的. 我轉向關註一些有工程難度, 語言合適的項目. 最後決定了幫Frescobaldi實現他們的Git支持功能. 作為一個樂譜IDE, Frescobaldi自帶一種優雅, 用Pyhon也非常合我的心意. 我一開始就決定孤註一擲, 因為在從名單發布到開始申請的二十天時間裏我最多只能夠深入了解一個軟件. 如果我能夠更早地了解開源組織, 我可能會和幾個組織接觸.

套磁

名單發布的那天, Frescobaldi的Google Forum就擠進去很多的同學. 一共有十幾個同學出現過, 除了我和一位上交的同學一個歐洲的同學一個美國同學剩下的都是印度的同學.

開始的幾天討論如何配置運行軟件, 很快大家很快就進入了"套路"- 提PR(Pull Request). 方法很簡單, 從Github的issue裏面找已經有的wish, 如果看起來還簡單, 就嘗試自己實現然後提PR讓組織的人員檢查. 相比於提PR, 我的方法更直接, 通過讀源碼, 我嘗試用了一周實現了一個基本能運行的Git支持Demo.

因為組織只是給出一個idea, 對於具體的細節則需要深入的討論和思考. 在申請開始之前, 我把自己對於IDE裏面的版本支持功能應該實現到什麽程度和可能的mentor進行細致的交流. 我們也嘗試一起調研了別的IDE裏面的版本支持的情況. 我嘗試給出了設計圖. 因為之前對Python的使用僅限於一年前寫過爬蟲, 二十多天裏面寫Demo, 英文郵件交流, 寫proposal著實讓我忙了一陣. 從Forum的帖子數來看, 在所有的參加者裏面我和mentor的交流是最多的.

可惜的是因為時間的因素, 上交的同學中途退出了. 他承諾了他會負責對Frescobaldi功能的翻譯工作, 盡管他沒有繼續參與GSoC, 過了幾個月之後他還是做完並提交了作品, 令人欽佩.

提交了proposal還有一個月才公布結果, 我為了維持mentor的好感度(hhh)還有為了熟悉我要工作的那部分代碼和工作流程又提了兩個PR. 當然, 最終如願入選.

GSoC的工作

雖然做Demo只用了一周. 但是, 真正要實現一個大家會使用的功能要花多得多的時間. 有很多瑣碎的問題:

  • 和mentor不能面對面, 我們花了很多時間統一用語和交流想法.

  • mentor對於一個軟件的未來功能的思考和我不同, 盡管現在這部分能實現的功能看起來簡單, 但是要為以後的能想到的拓展都做好準備, 在類的抽象結構上是他的主要關註點.

  • 對Git的支持會受到Git版本的影響, 命令會有變化. 常常需要自己反復讀文檔和實驗過之後才能寫完一個簡單的函數.

  • 對於如何異步執行命令, 我提出的是一個命令隊列. mentor希望使用定時卡表執行的方式, 並認為我的方法不Pythonic. 我堅持了我的觀點.

  • ...

mentor的耐心和嚴格對於提升代碼質量很有幫助. 我寫代碼的過程中也嘗試像mentor更多地從模塊的角度思考而不是沈迷於一兩點細節.

GSoC的規定中, mentor並沒有拿到谷歌的錢. 所以, mentor對於學生的幫助是他們出於mentor身份的道德責任, 而GSoC是學生一個人的責任和項目. 一開始我會討論很多細節問題, 後來就逐漸嘗試自己來處理. mentor會code review來判斷我是否寫了有問題的代碼. 後來在和mentor的交流中, 他也聊到了這個問題. 因為我一開始的問題比較多, 他是擔心的. 因為帶一個比較差的coder, 對於雙方都是一種折磨. 對於mentor來說, 他自己寫要比給我解答問題更快. 對於我, 凡事都問不能培養我的信心. 對於這種質量監控的場景, 要想好什麽程度的問題是完全屬於自己的責任範圍, 什麽問題是需要和mentor討論決定的.

三個月是比較長的時間, 在其中難免會遇到問題, 而且由於是遠程工作. 是否做出貢獻, 是否全職工作全靠個人的自覺. 我的mentor因為要完成他的博士論文, 會有有半個月的失聯期. 沒人監督的情況下, 堅持工作和輸出是一個考驗. 最後GSoC結束時, 我完成了Git支持的基礎設施搭建. Git diff和revert功能. 還有部分未經測試的git stage代碼. 跟我最初proposal裏面提出要完成的工作, 還算差強人意.

不過從整個功能的完整實現來說, 還需要後續許多精力的投入. 可惜的是, 結束後一直到今天只修了兩次bug, 慚愧.

GSoC能帶給你什麽


  • 最基礎的-可能是第一次開源經歷
    這個開源和自己建一個repo不和人交流是完全不同的體驗. 你會熟悉讀一個軟件的源碼, 在issue列表裏面和別人討論架構和feature, 提交自己的PR做出貢獻. 這是你進入開源世界第一步. 你可能在開源的門外已經徘徊了很久, 而以後面對其他的開源軟件你就駕輕就熟了.
  • 認識一群厲害的人
    從一開始你就在和來自全世界的申請者競爭, 看他們的簡歷, 代碼, proposal. 我常常驚嘆大一大二的同學的proposal和簡歷可以寫得那麽優秀, 簡歷可以那麽豐富有分量. 而開源這件事情往往就是1%的人做的事情, 因為它需要熱情, 能力和時間投入. 所以你在開源組織裏面遇到的contributor和你的mentor有很多值得學習的地方.
  • 寫高質量的代碼 - 可能是第一次被code review
    學校的toy code, 導師的垃圾項目和開源世界的大部分代碼相比, 我相信你可以輕易得出結論. mentor的codre review也許是你第一次被code review. 知乎上有回答說, GSoC是你要自己完成一個要被很多人使用的feature, 會經過討論, 測試和審查. 而一份互聯網公司的實習很可能讓你跟著業務需求做一些修改. 我認同這種說法.
  • 帶著 "google summer of code" 的簡歷

  • 薪金
    盡管2017年降到3600刀, 折合24000人民幣三個月. 這比互聯網大廠的實習工資要高多了hhh

個人建議


  • 勇敢嘗試
    GSoC被有些人渲染得非常難入選, 也有人說參加了什麽都沒學到什麽.但是這本質上是一個小馬過河的問題,你需要自己嘗試以後才知道故事到底是怎樣的.既然你看到了這個機會,為什麽不試一試?

  • Talk is cheap, show me the code
    從組織的選人角度思考, 這是基本準則. 開源本質是公益性的活動, 而且對於參與者的水平要求也不低. 所以, 開源組織普遍面臨的一個問題就是, 缺人. 缺能穩定貢獻有質量代碼的貢獻者.
    GSoC每年給他們提供的名額是有限的, 所以開源組織總是希望找到的學生很靠譜, 可以說到做到而不是中途逃跑, 浪費他們有限的名額. 而如何證明你是個靠譜的人呢? 穩定出現頻率,你需要經常出現在組織裏,而不是隔一陣出現一下,突然聯系不上,這會讓他們很沒有安全感.靠譜的代碼能力, 你要讓他們相信,把這個feature交給你,你能獨立應付.所以這也是為什麽PR成為"套路"的原因,沒什麽比你寫代碼證明你的編程能力更有說服力的了. 
    有意思的是,你的學校,學歷, 專業都不是問題,因為對於一個外國的mentor來說,你來自中國的哪個學校對於他完全沒有任何區別.這裏只有簡單的一條準則,Talk is cheap, show me the code 證明自己就好.
  • 做一個負責的學生
    如果能入選, 這將是一次remote working經歷.沒有人在旁邊監督,保持全職的工作時間和工作質量並不是一件容易的事情. 

一些鏈接,可能對你有用


Google Summer of Code 2017 statistics part 1
How to write a kick-ass proposal for Google Summer of Code
Want to be selected for Google Summer of Code 2016?
samarkanov/proposal-GSOC13
MoritzLucaSchmid/GSoC-proposal

Google Summer of Code 2017 經驗談