Google Summer of Code 學生申請指南

(投稿一篇 17 年寫的文章劃劃水)

本文的受衆主要是想在暑假找點事情做,掙點外快的同學,亦或是想積累一下參與真實軟件開發經驗的同學。

背景介紹

Google Summer of Code[1](下稱 GSoC)是谷歌組織並提供經費,面對全球(絕大多數國家)在讀學生的在線編程項目。它的官方介紹[2]是:

Google Summer of Code (GSoC) is a global program that matches students up with open source, free software and technology-related organizations to write code and get paid to do it! The organizations provide mentors who act as guides through the entire process, from learning about the community to contributing code. The idea is to get students involved in and familiar with the open source community and help them to put their summer break to good use.

即是:

Google 編程之夏是一個全球性項目,旨在爲學生們和開源、自由軟件、技術相關的組織建立聯繫,讓學生們貢獻代碼並獲得報酬!組織會提供導師,在學生從熟悉社區到貢獻代碼的整個過程中提供指導。這個想法的目的是讓學生們參與和熟悉開源社區,並幫助他們充分利用暑假時間去得到鍛鍊。

整個活動的流程是這樣的:在每年的二月末,GSoC 會公佈一個 Mentoring organizations 的列表,比如 2017 Organizations[3],這個列表是受到谷歌認可的開源社區或者組織。隨後學生可以從列表中挑選出適合自己的 organization,並且在 organization 的 ideas list 中找出自己感興趣,覺得可以勝任的 idea,提出申請。一個學生最多可以申請 5 個 idea,申請在 3 月末開始,4 月初結束。在 5 月份,Google 會公佈所有入選的學生,社區會給每個學生分配一個或多個 mentor,mentor 負責指導學生的工作,並評估學生的工作是否滿足了社區的要求。

公佈之後,會有持續一個月的 Community Bonding Period,在這個階段學生需要儘快融入社區,跟自己的 mentor 建立聯繫,熟悉社區工具鏈,交流工具等等。6 月份開始正式的開發工作。開發工作一共有三個階段,同時也會有三個 evaluation。每個階段大約一個月,會有一個小目標,如果 mentor 認爲你完成了階段性的目標,Google 會在每次 evaluation 結束後發放獎金。三次一共的獎金在 1200 - 6600 美刀之間。具體的數額跟所在地的 Purchasing Power Parity[4] 有關,中國是 3600 美刀。

整個項目大概在 9 月份結束,但是社區的期望肯定是學生能夠繼續進行貢獻,這也是他們獲得新的 contributors 的一個重要途徑。並且在持續貢獻後,學生可以在來年的 GSoC 時申請成爲 mentor,雖然 mentor 沒有獎金,但是有一個 Google 組織的 Mentor Summit,據說就是公費旅遊。

名詞解釋

因爲在申請的時候不同的社區對於同一個對象的叫法都有所不同,所以這裏列一些常見的名詞的解釋。

名詞解釋
Organization,組織,社區Google 公佈的 Mentoring organizations 中的組織,可以接收學生參與 GSoC
學生,申請者申請參加 Google Summer of Code 的學生
Slots社區可以接收的學生數量,由 Google 決定
Mentor,導師學生申請成功後社區指定的導師,指導學生的具體工作,以及負責評估完成度
Stipend,獎金,獎勵在學生完成階段性目標後由 Google 發放的獎金,具體的數額跟所在地的 Purchasing Power Parity[5] 有關
Evaluation階段性檢查,mentor 會檢查學生有沒有達成階段性成果,影響獎金髮放

申請之前的準備

申請是一個比較漫長的過程,如果想更加穩妥一點,建議不要在谷歌公佈 Mentoring organizations 列表後再進行準備,而是要提前選定一個或幾個社區,進行持續的貢獻和交流,儘可能混一個臉熟。這樣與後期纔開始準備申請的同學而言就有了很大的優勢。除此之外,要日常性地多給開源項目做貢獻。在申請的時候很多社區會要求學生提供其開源貢獻的經歷,無論是不是對自己社區的。這時如果你已經是其他社區的積極貢獻者了,那無疑是會加分的。

對於社區的選擇,如果你偏向保守,可以多回顧往年的列表,有一些組織是雷打不動的,比如 Python Software Foundation, Apache 這些老牌開源社區,這些相對於其他組織,有更大的可能被谷歌選中。如果你喜歡高風險,可以事先問問社區是否有申請 GSoC organization 的打算,如果有,而且你也看好,可以選擇這樣的社區進行貢獻。

至於貢獻的時間,竊以爲比較理想的時間是前一年的 12 月份或者同年的 1 月份開始,就要嘗試着去給社區做一些微小的工作。這些工作包括但不限於:

  • 貢獻代碼,無論什麼社區,都喜歡高質量的 PR

  • Review PR,給別人的 Review 點贊

  • 提交 Bug

  • 添補更新文檔

  • 在 IRC 裏解決別人的問題

在貢獻的過程中,要注意交流,不要只是提交了就走人了,最好是可以時刻跟進,及時回覆別人的信息也是一種表明你的熱情的方式。

申請

Organization 介紹

申請真正開始於谷歌公佈的 Mentoring organizations 列表,這裏大致介紹下其內容。

The Processing Foundatin

以 2017 年 GSoC 其中的一個開源組織 The Processing Foundation[6] 爲例,介紹一下 GSoC 主頁上 organization 的頁面佈局。每個 organization 都會有一段介紹性的文字,這個不是很關鍵。右邊的一欄是比較重要的,其中 Technologies 是方便大家在搜索 organization 的。上面的 VIEW IDEAS LIST 比較重要,一般來說每個社區會事先提出一些他們期望的 idea,學生可以就這些 idea 進行申請。當然社區也鼓勵學生提出自己的 idea。其下的 Chat 和 Email 一般來說會寫明該社區常用的交流工具,在申請的過程中往往需要頻繁地與社區相關人員交流。

正式申請

Proposal,是一個申請時很關鍵的材料。它是學生在申請時需要提交的一個設計文件,在其中,學生往往需要寫明自己的背景(學術背景,開源貢獻經歷等),對 idea 的瞭解與認識,以及大致的實現思路和方法。Proposal 的書寫是沒有定式的,只要可以突出你的長處就好,這是社區對你瞭解的唯一途徑,所以需要你把自己所有的優勢都要寫在其中。

Proposal for Processing.R[7] 是我在申請時的一份 Proposal,可以列爲參考,介紹下常規的寫法。

首先是 Project Description,這個部分就是讓社區知道你對 idea 沒有理解錯,你深刻地瞭解這個 idea 想做的是什麼。三言兩語就好了。

然後是 Implementation,我個人覺得是比較重要的部分。要向社區證明你已經有了完整的實現思路,現在差的就是寫代碼實現而已了。

其次,是 Development Process,社區肯定更喜歡那些風險低,feature 吸引人的申請。一個好的 schedule 可以讓社區相信你是真的已經做好了準備。精確到天自然最好,但是基本來說比較難,周和月都是不錯的選擇。不過有一點需要注意,不要把所有時間都安排的滿滿的,還是需要有一些 buffer 的。不然看起來太假了 =。=

最後是 About Me,因爲我對於申請的項目而言,沒有什麼積累,而且沒有相關領域的貢獻,所以把這一項放在了最後。如果你是申請 Kubernetes,而日常是 Docker 的 contributor,那把 About Me 放在最前面是更好的選擇,完全看申請而定。

一般來說這些是都要有的,還有一些其他的,社區特定的要求,這個也是要注意的。這裏還有一些我認爲寫的比較好的 proposal:

  • Integrate Unikernel Runtime[8]

  • Optimization of Distance Between Methods in Single Java Class[9]

感興趣也可以看下。

Community Bonding Period

走到這一步,離拿錢就不遠了,因爲 GSoC 申請比完成更難。在 Community Bonding Period,你需要跟自己的 mentor 建立聯繫,積極融入社區等等,但是沒有量化的標準,這個就不再多說了。

開始寫碼

寫碼這個,不同的項目有不同的要求。有一部分項目是給開源的 repo 貢獻代碼,因此要走整個 review 的流程,這想必大家都比較熟悉,不再多說。但是還有一部分項目,是 standalone 的,就是自己開了個 repo,自己寫,比如我申請到的 Processing.R[10]。這就會有很多問題,這裏也着重說一下對於這一類項目的建議。

首先,要明確之前 proposal 裏寫的 schedule 只是爲了給社區信心的,事實上在開始寫碼之前,mentor 會跟你重新制定計劃。所以如果你在 Community Bonding Period 寫了很多 feature,很可能沒有用,因爲 mentor 說不定會給你重新制定要求。

關於 standalone 的項目,跟 mentor 以及社區其他成員的交流是很關鍵的。因爲你的 repo 別人都是沒有 watch 的,所有的變動,可能只有你和你的 mentor 知道。如何讓社區裏的其他人看到你的貢獻,非常重要。所以儘可能多在 IRC 裏跟大家分享你遇到的問題,或者你的項目中的新 feature,可能會讓你感覺到自己不是玩單機遊戲。

其次就是要儘早引入 CI,並且所有變動都以 PR merge 的方式進行,以保證代碼質量。一個人的項目,質量很容易滑坡,CI 和 PR 可以讓 mentor 對你的代碼有一個很好的 review 體驗,他也會更加積極一點。

最後是不要太肝。因爲自己的項目,每個 PR 的生命週期都是由自己負責的,很容易就會進入瘋狂開發的狀態,但是記住上面說的,在開始寫碼之前,mentor 會跟你重新制定計劃 :)

Evaluation 與獎金髮放

Evaluation 是一個雙向的評估,mentor 會評估學生的工作完成度如何,學生會評估社區和 mentor 對自己的幫助是否到位,學生對社區的評估可能會影響社區明年能夠參加 GSoC 以及 slots 的數量,mentor 的評估決定學生能否拿到獎金。

如果通過了 evaluation,獎金會在幾天內到賬。

注意事項與 Tips

  1. 只有學生纔可以申請 GSoC。

  2. 一般來說 GSoC 主頁需要科學上網才能訪問。

  3. 時差問題是申請的時候需要注意的問題,這個需要格外注意,每年都有人錯過申請。

  4. 獎金的發放是通過 Payoneer[11] 發放的,如果是非美元賬戶,需要支付 4% 左右的換匯費用。

  5. 第一次入選 Mentoring organizations 的組織原則上只有 1 個或者 2 個 slots。

結語

這是一篇摸魚作,希望能夠對各位有所幫助。其實大家在選擇開源社區的時候可以多問問有經驗的人,儘可能選擇一個友好的社區作爲開始,這樣會在開源的路上走的遠一點。。

文章亦轉載在東嶽團隊博客[12]

相關文章

  • Google 編程之夏(GSoC):海量優質項目,豐厚報酬,你竟然還不知道?[13]

License

  • This article is licensed under CC BY-NC-SA 3.0[14].

  • Please contact me for commercial use.

參考資料

[1]

Google Summer of Code: https://developers.google.com/open-source/gsoc/

[2]

官方介紹: http://write.flossmanuals.net/gsocstudentguide/what-is-google-summer-of-code/

[3]

2017 Organizations: https://summerofcode.withgoogle.com/organizations/

[4]

Purchasing Power Parity: https://developers.google.com/open-source/gsoc/help/student-stipends

[5]

Purchasing Power Parity: https://developers.google.com/open-source/gsoc/help/student-stipends

[6]

The Processing Foundation: https://summerofcode.withgoogle.com/organizations/4962961559912448/

[7]

Proposal for Processing.R: https://docs.google.com/document/d/1b0HhRVKtCJkDaxP9dfSwzthzX0FRv6Y_0Yk58r634TA/edit?usp=sharing

[8]

Integrate Unikernel Runtime: https://docs.google.com/document/d/1Vld4j0B-wk1A1827gIc5fzWHJlzQVqcYQnCAKJwe_ZM/edit?usp=sharing

[9]

Optimization of Distance Between Methods in Single Java Class: https://docs.google.com/document/d/1lWXpWhUN6cE06sjQANjWxamc_X3ddbSphTRSofChLyk/edit?usp=sharing

[10]

Processing.R: https://github.com/gaocegege/Processing.R

[11]

Payoneer: https://www.payoneer.com/home/

[12]

東嶽團隊博客: http://blog.dongyueweb.com/

[13]

Google 編程之夏(GSoC):海量優質項目,豐厚報酬,你竟然還不知道?: https://zhuanlan.zhihu.com/p/27330699

[14]

CC BY-NC-SA 3.0: https://creativecommons.org/licenses/by-nc-sa/3.0/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章