Google 程式設計之夏:海量優質專案,豐厚報酬,你竟然還不知道?

LoLo發表於2017-06-11

本文同時釋出於知乎專欄:Google 程式設計之夏:海量優質專案,豐厚報酬,你竟然還不知道?

零、楔子

這篇文章包含了對 Google 程式設計之夏(Google Summer of Code,簡稱 GSoC)的介紹、個人感受和一些申請技巧。寫作的契機源於一篇釋出在 Google Open Source 上的部落格:Google Summer of Code 2017 statistics part 1,這篇部落格列出了 2017 年參與專案的學生的國家分佈情況,其中有幾項數字頗為有趣:2017 年總共有來自 72 個國家的 1318 名學生獲得了專案資格,其中來自中國大陸的學生 49 名,來自美國的學生 126 名。學生最多的是哪個國家呢?你們可能猜到了,是我們的鄰居印度,有足足 569 名!超過全部學生的 40%。

印度學生的比例之高令人咋舌,相比之下我們中國學生的人數就有點少得可憐了。然而就我個人的感受而言,中國學生數量少的最大原因也許是:根本沒有聽說過這個專案!“GSoC 是什麼?好吃麼?”,估計這才是絕大部分人聽到 GSoC 之後的感受。

我自己瞭解到 GSoC,是大一暑假機緣巧合下看到了同校大神楊壘的一篇部落格 申請 Google Summer of Code 2015。之後本打算在 2016 年申請的,但因為暑假參加了車協的暑期遠征而擱置,而後在 2017 年申請並順利通過。這一年多裡我也時不常的跟身邊的小夥伴賣安利。後來在今年的 GSoC 微信群中也看到了好幾個北大同學,大家也更多的是靠身邊人的口口相傳瞭解到 GSoC。非常開心在這之中自己也為 GSoC 在我校的普及做出了一點微小的貢獻。

當我看到印度學生人數 10 倍於我們,參與人數排名前十的學校中有八個來自印度時,除了多少有些不服氣,更多的是欽佩印度程式設計師們相互提攜、資訊共享的機制,這點上跟他們為何能在矽谷混的風生水起有不少共通之處,不過不是本文重點,不做展開。基於這些背景,這幾天我一直籌劃著寫一篇較為正式的文章,介紹 GSoC 並提供一些自己的感受和申請經驗。以後再安利時便不必再笨拙的口述,直接把文章丟過去就好~ 同時也希望更多熱愛技術的同學們能夠通過本文,瞭解並有機會參與到這樣一個 Google 組織的、含金量高、報酬豐厚(你可以拿到數萬元的獎勵!)、擁有眾多大名鼎鼎的開源社群參與的暑期專案。希望能以此為廣大技術水平紮實並渴望鍛鍊的國內大學生們提供一點微小的幫助,不要再因為“不知道”、“沒聽說”而錯過了這樣一個優秀的專案!

一、Google 程式設計之夏是什麼

這個問題,我們先來看看 Google 官方是怎麼說的:(出自 What is Google Summer of Code?

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 程式設計之夏是一個全球性專案,旨在為學生們和開源、自由軟體、技術相關的組織建立聯絡,讓學生們貢獻程式碼並獲得報酬!組織會提供導師,在學生從熟悉社群到貢獻程式碼的整個過程中提供指導。這個想法的目的是讓學生們參與和熟悉開源社群,並幫助他們充分利用暑假時間去得到鍛鍊。

在我看來這段介紹十分簡明扼要,如果你想了解更多細節,可以到 What is Google Summer of Code? 閱讀全文。

如果用一句話概括的話就是,學生用一個暑假的時間(其實從 5 月底 6 月初就會開始,國外放暑假較早)在導師的指導下為開源社群寫程式碼,Google 為你的工作支付報酬(2017 年之前似乎是 5K 刀;2017 年開始分地區支付,中國大陸降低至 3.6K 刀,換算過來約 25K 軟妹幣,仍然是一筆可觀的收入)。

二、GSoC 含金量高在哪裡

通常而言,同學們夏天想自我提升的話有兩個去處,一是暑研、二是暑期實習。GSoC 偏向工程,和後者更為相似(但也有很大不同),和暑期實習對比著來分析,更容易看出 GSoC 的優勢:

  • 時間安排和工作模式
    • 以 2017 年為例。5 月 4 日 Google 宣佈入選學生名單,之後到 5 月 30 日約一個月的時間為 Community Bonding Period,在這段時間裡可以熟悉社群、和導師針對你的專案進行探討等。5 月 31 日開始至 8 月 29 日是正式工作時間,你將會在約 12 周的時間裡完成你所申請的專案。除了開始時間略早於國內期末考試時間外,時間跨度上基本與大部分暑期實習無異。而具體的任務量因專案而異,但通常不會太過繁重。導師也一般不會為難你,即使不能全部完成預期的內容,只要全程認真負責的參與,大都也會給 Pass。可能更多的時候是專案對中國學生而言是比較水的,比如前幾天(Coding Period 才剛剛開始)群裡就有人表示已經把全部 Coding 做完了現在正無聊的寫文件……
    • GSoC 的任務全部是線上(online)完成的,相對於實習時每日早晚高峰痛苦的擠地鐵(不忍吐槽帝都的交通),你完全可以在家中、在學校宿舍完成需要做的一切。簡捷高效,不要太省心!
  • 報酬
    • 降價之前的報酬折算至每月是 11K 有餘,幾乎快趕上一線網際網路公司的正式應屆員工價格了。降價之後大概是一月 8K 多,仍然是碾壓各家一線的實習生價格。還不用扣稅喲!
  • 個人成長
    • 在 GSoC 專案期間,每個學生都會被分配一名導師,在整個專案期間給予你幫助。就我的親身經歷和身邊人的體會,雖然會有些比較懶的放養導師,不過基本上還都是非常認真負責而且熱心的。導師本身的技術水平也都十分出色。而如果你參與的是 GCC、OpenCV 這類久負盛名的工具、語言、框架的組織下的專案,很可能你的導師就會是這些組織的 Core Team Developer,他們可都是在行業內備受尊敬的大牛。
    • 再拿我的經歷舉例。有一次我向主倉庫提交了一段總計不超過 50 行的改動,但因為改動較為關鍵,組織內的幾個導師和我充分的討論了足足一週,覆蓋了程式碼風格、效能優化、可測試性、向前和向後相容、設計原則等方方面面,經過數次修改,最終成功併入。這個過程中是收穫巨大的。通常我們會講被 review 是非常好的學習途徑,寫越少而精的程式碼,被 review 的越詳細,對應的成長是越快的。而 GSoC 正是這種模式。
    • 相比而言,大部分一線開發崗位的實習,負責帶你的人很可能也只是剛畢業工作過三五年,本身技術水平不算驚豔,而業務導向的開發則是以效率為先的,很難有機會有人給你的程式碼做詳盡細緻的 review。更糟糕的一些情況是,可能有些實習生大部分時間都在做“打雜”的工作,而不能進行真正有意義的創造,更談不上學習了。
    • 當然實習也絕不能被一棍子打死,像 MSRA 的研究實習生、BAT TMD 華為這些一線公司的實驗室或者核心部門實習也都是相當有含金量的,其中也有很多 GSoC 中所不能學習到的東西,也是非常值得選擇的。

綜上來看,GSoC 的質量是相當高的,從各方面來看,都非常值得參與。Google 官方資料中有這樣一句話:

Successful students have widely reported that their participation in GSoC made them more attractive to potential employers and that the program has helped greatly when embarking on their technical careers.

GSoC 在世界範圍內都很受認可,成功的完成 GSoC 專案的你會更容易受到用人公司的青睞。如果未來希望加入 Google,這段經歷則更是一大加分項。

而由於 GSoC 是全線上遠端工作,你也完全可以選擇在參加科研或實習的同時,也參與一個 GSoC 專案,兩者兼得。比如我自己,在今天夏天參與 GSoC 專案的同時,也會在 MSRA 大資料組實習。因這次 GSoC 認識的 @大缺弦 也是同樣既參與 GSoC 又在 MSRA 實習。所以說完全不用擔心因為參加 GSoC 而錯過其他機會!

三、申請資格、流程和技巧

任何在讀的本科、碩士、博士生均可以申請 GSoC。如果你已經畢業了,那就非常遺憾不能再以學生身份參與 GSoC 了。Google 還有一些更細節的要求,但一般都是可以滿足的,具體可參照:FAQ#What are the eligibility requirements for participation?

Google 每年都會發布 GSoC 的時間表,例如 2017 年的:Google Summer of Code 2017 Timeline

其中有一項是 List of accepted mentoring organizations published,即宣佈當年的組織列表,每個組織都會有一個主頁,列出可供你選擇的 Project Ideas。今年是在 2 月 27 日宣佈的。在這之後你就可以檢視成百上千個 Ideas 並找出你所感興趣的了。在 Student application deadline 之前(今年為 4 月 3 日),你可以向 Google 提交至多 5 份 Proposals,每一份 Proposal 要包含你對其中一個 Idea 的設想、實施方案、時間規劃等,Proposal 需要寫的具體內容因組織者的要求而異。此後由組織負責審閱所有學生提交的 Proposals,選出他們所認為優秀的。在約一個月之後(今年為 5 月 4 日),Google 會宣佈被選中的學生列表,如果你順利通過,便可以開始當年的 GSoC 之旅了!

以上是申請流程的基本概要,Google 官方也提供了非常詳盡的 學生指南FAQ,這些內容你都可以在其中找到,並且有更為詳細和準確的申請介紹和指導。

下面就是私貨啦!一些我自己的和其他 GSoC 參與者的人生經驗!

首先是選什麼。參與 GSoC 的組織會有數百個,一個個看根本看不過來,選擇困難症們可要頭疼了。我的建議是選擇自己有過實際使用經驗的,相對於從未使用過的語言、框架等,你會對它們更加了解,比如今年我就考慮了 homebrew、checkstyle(Java 靜態檢查工具,很早就引入了 PKU Helper 開發之中,後來我也最終選擇了這個組織下的專案);其次,選擇與自身技術棧相匹配的,比如我最擅長的技術棧是 JVM Based Language,我就會更加留意用到 Java、Clojure、Scala 的專案。

劃定了最初範圍之後,你就可以通過組織公開的聯絡渠道,同導師們聯(套)系(磁)。通常來講以 Mailing List 和 IRC 居多,也有 IM。你可以進一步的瞭解這些組織和下屬的專案,從而找到你最感興趣的。雖然每個人可以填寫多至 5 份 Proposals,但就實際經驗而言,認真書寫一份 Proposal 就要花費非常多的精力了,廣撒網是不太可取的,重在精不在多。根據 Google Summer of Code 2017 statistics part 2,2017 年共有 4764 名學生提交了 7089 份 Proposals。也就是說平均下來每個人也就提交了一份多而已。

在選定了 checkstyle 之後,我非常感興趣一個叫 Optimization of Distance Between Methods in Single Java Class 的專案。它涉及到演算法、數學模型,非常有趣同時又附有挑戰性。

之後就是為此撰寫 Proposal,其中分為了三大部分:About Me、Project 和 Extra Information。About Me 就是一些個人基本資訊和程式設計技能的介紹,Extra Information 給出了我的工作時間、時區和一些想說的話。Project 是最要的部分,包含了 Project Description、Outline 和 Expected Timeline。其中詳細的給出了我預想的數學模型的設計、統計分析過程、可使用的演算法和實現以及會為此撰寫一篇 Article。

書寫 Proposal 的重點在我看來就是要認真細緻、考慮可行性和工作量、和導師們充分討論,最後再加上一條美觀。在以上的方法論下我花費了一週多的時間磨出一份顏值甚高的 Proposal 來,和導師們也討論的風生水起。本來覺得拿到這個專案板上釘釘了,結果離 application deadline 還有兩天的時候,導師突然私信我說,我們認為這個專案太難了,我們可能找不到足夠多的導師來帶你,所以你趕緊再找一個專案趕一篇 Proposal 出來吧。我:???……沒辦法,花了半天的時間挑了另一個看著還可以的專案火速寫了一篇出來。導師也夠意思,跟我說你隨便寫寫思路就完了,不用太詳細。之後趕在 deadline 前順利上交兩份 Proposals,並且中了後面那篇。

導師對我的 Proposal 評價很高,如果以後有申請的小夥伴感興趣想參考的話可以移步 Google Docs:

除了一份質量過硬的 Proposal 之外,在宣佈最終名單之前和導師們的套磁也是非常重要的!多在 Mailing List 中刷刷臉,積極參與討論。如果能夠提出 Bug 甚至修復 Bug 或者實現新的 Feature 那是最好的。Checkstyle 的導師在最開始就清楚的寫到學生的 Fixed Issue 數是很重要的指標。後來在 deadline 之前我足足交了 8 個 PR 位列十多個競爭者第一,這點也為我最終被選中加了不少分。

總結一下,認真投入、積極參與、多討論多反饋,甚至去幫助社群中的其他開發者,那麼你就會有非常大的機會被選中!今年 4764 名提交了 Proposals 的學生中有 1318 名被選中,入選率大於四分之一,是相當高的。而且這 4764 人裡其實有很多人是根本沒有好好寫 Proposal 的,也有很多人是水平真的很差也過來申請的。所以對絕大多數基礎不差的國內大學生來講,只要好好申請都是比較容易中的。要知道,我們們大學生的技術功底,甚至英語水平,絕不比印度學生差(印度人的英語真的不見得都好),人家可以申請到 500+,我們們也可以做到,49 人遠遠不是我們們的真實水平!

四、結語

2017 年的 GSoC 已經在如火如荼的進行中了,今年錯過了的小夥伴們不要遺憾,只要你們不是下個月就畢業離開校園了,GSoC 2018 便等著你們~ 離明年的 GSoC 申請開放還有半年多的時間,如果你覺得現在自己能力還稍顯不足,那就趁著這段時間努力提高自己,逐漸嘗試閱讀一些 GitHub 上的開源專案,甚至參與其中吧!祝願你們都能順利申請到自己喜歡的 GSoC 專案!

相關文章