本文作者 GeekPlux,原文連結:參加 Google Summer of Code 的體驗,註明作者和原文地址即可轉載。

Google Summer of Code (簡稱 GSoC)中文我叫它「谷歌程式設計夏令營」,是一年一度谷歌組織的類似暑期實習的程式設計活動。2018 年的申請馬上就要開始了,在此我分享一下我參加 2017 年 GSoC 的體驗。

什麼是 Google Summer of Code?它值得參加麼?

這個問題可以參考Google 程式設計之夏(GSoC):海量優質專案,豐厚報酬,你竟然還不知道?這篇文章,裡面介紹的非常詳細,還客觀的論述了為什麼 GSoC 值得參加。不過在此我還是簡單科普一下:

簡言之,

GSoC 是一年一度谷歌組織的、全球性的學生程式設計活動。學生利用暑假時間給開源社群貢獻程式碼,谷歌支付報酬給學生

將 GSoC 的特點提煉一下就是:

針對學生

。只有學生身份才能申請參加(包括本科、碩士、博士)

一年一度

。每年都能申請,3 月末開始(建議早點開始套磁)

全球性

。你可能會和世界各地的學生一起工作

開源社群

。你是為開源社群貢獻程式碼,大部分組織在 GitHub 上,所以你的貢獻都是開源的,誰都能看到

暑假期間

。6 月正式開始工作,到 9 月

報酬

。谷歌支付報酬,中國區為 3600 刀,比大廠實習工資都高

遠端工作

。這點在剛才的概念介紹中沒提到,你可以在你想呆的任何地方寫程式碼,不用去辦公室

導師指導

。每個專案會給你配一個導師,有的導師非常負責且是大牛,你可以跟他學到很多

我相信這些點已經足夠吸引一個在校學生了。

GSoC 怎麼申請?

這個問題參考Google Summer of Code 學生申請指南。其實很簡單,就是一篇 proposal,透過就可以參加當年的 GSoC 了。其他的參考資料可以看 gsoc-cn。

正文 - 參加 GSoC 的體驗

申請

我是在 2017 年的 2 月份開始關注當年的 GSoC 申請。雖然每年各組織是在 2 月末公佈自己的專案,但它們組織內部會在 1 月份甚至更早就開始謀劃今年 GSoC 的專案計劃,而且一般會公佈在組織的主頁上。我當時搜尋到一些已經公佈的專案,篩選了 3 個和我技能相匹配並且自己也想參加的專案,直接發了郵件過去。自我介紹了一番,並把自己針對這個專案的簡單想法闡述了一下,其中有一個專案的 mentor(導師)非常熱情,來回幾番交流也十分愉快,算是理清了這個組織在做什麼,他們這個專案想達到的效果。另外兩個只是回覆了我郵件便直接索要我的 proposal 了。說實話在不瞭解專案需求的情況下很難寫一篇令人滿意的 proposal,所以我也對這兩個專案沒怎麼上心。

GSoC 的流程是 2 月末公佈專案 idea,3 月末學生申請,所以有 1 個月的時間準備。但是早起的鳥兒有蟲吃,有的人是 1 月份或上一年的 12 月就開始給專案貢獻 PR(pull request) 了,所以他們申請的優勢相當大。我的建議是越早準備越好,因為郵件的溝通沒有 IM 頻繁,再加上時區問題,交流的時間跨度會拉的很長。

我當時由於自己在參與一個科研投稿專案,分身乏術,幾乎對申請上 GSoC 不抱什麼希望了。但是在申請 deadline 前的幾天,那個之前和我頻繁交流的導師來詢問我的 proposal,他督促我趕緊提交一份,即使不完美,提交了總比放棄好。我被他鼓勵之後,立馬連夜趕了一份出來提交了,雖然寫的簡單草率,但也是達到了一份合格 proposal 的要求:把需求、自己的解決辦法、時間規劃都寫清楚了。deadline 前一天導師還對我進行了影片面試,幸運的是最後通過了稽核,在學生生涯的最後一年趕上了 GSoC 的末班車。

工作

雖然 GSoC 是針對學生的,但我們不能以學生的心態面對這件事,而應該抱以僱員的態度。申請通過後,5 月整個月是暖身期,你可以熟悉組織裡程式碼的提交流程,和組織裡其他人聊聊天吹吹水搞搞關係,和導師多溝通一下之後暑假裡的時間安排。比如你暑假有兩週想去旅遊,可以把這兩週的工作提前完成。所以參加 GSoC 很自由,但要負責。

主要的工作流程全在 GitHub 上完成,從提 issue,到最後的 Pull Request 和 Code Review,日常交流是用 IRC 和 Gitter,文件管理用 Google doc。我的導師是義大利人,除了帶我,還要帶 4 個人,分別來自印度、牙買加、瑞士和俄羅斯。大家時區不同,每天 IRC 裡的 Good morning 出現在各個時段。聊天都用英語,都是書面交流,所以口語差也沒關係。

6 月正式開工,當時我是要用 WebGL 去重寫一個大概 2 萬節點,10 萬條邊的圖結構視覺化專案,前期工作不算一馬平川,但也算走的穩當。到了中期,如何在 WebGL 中做互動成了一大難題,到了後期則是效能的最佳化。最終到 9 月份的時候我在 proposal 中提到的差不多有 90% 完成了,除了效能問題還有待提高。

3 個月中,我除了參加 GSoC 還需要水一篇論文,所以時間特別緊張,幾乎是兩班倒。導師問我進度的時候就各種解釋,然後加班加點趕進度。每個月底會有一次評估,導師會針對你這個月的表現來決定你能不能繼續參加,我每次都是低空飄過。最後專案結束我覺得我可能沒達到導師的預期,但也算完成了工作。雖然總體上我覺得不是很出色,不過導師在 final evaluation 還是寫了不錯的評價。所有的工作總結在我之前的博文netjsongraph。js — Google Summer of Code (GSoC) 2017 summary中。

體驗

程式碼水平有所提高

。我參加的專案當時我導師他對前端可能沒我熟,不過對程式碼風格、commit message 規範的要求還是很高的,在郵件中曾不止一次強調。另外他還推薦書單讓我們閱讀,他認為程式設計有很多是非常核心的、穩定的和通用的,學這部分才是關鍵。

對開源有了全新認識

。之前可能覺得開源只是一些個人開發者或組織把自認為不錯的程式碼公佈出來供大家交流。參加 GSoC 之後才發現很多開源組織非常龐大,組織架構都很多層,有自己的一套工作流程和方式、儼然一家公司模樣,有自己的盈利方式,甚至有自己的基金。它們的目標不止是開發者,還可能是國家的基礎設施建設等。再從個人開發者的角度來說,你可能由於參加 GSoC 而更加熱愛開源,因為你發現開源社群的人都非常的熱心和認真。

和不同國家人工作的溝通成本很高

。一方面是因為時區問題,大部分溝通,延遲迴復都沒什麼問題,但一旦你提的 issue 是個緊急的 bug,而他這時候卻在睡覺時間就很尷尬。另一方面是語言問題,儘管大家都用英語,但水平參差不齊,習慣不一,很多時候得多說兩三次互相才能徹底理解對方的意思。不過認識新朋友看他們的 Twitter 和 Instagram 還是很有意思的。

學會包裝自己

。這方面我們隔壁的印度朋友簡直是典範,縱觀他們的 proposal 和最後的總結都寫的非常「浮誇」,平時的交流,他們也是非常頻繁,活躍在各個平臺。他們不是語言上浮誇,是內心上認為自己確實做到了他們敘述的效果。總之其他國家的同學比我們都高調一點,也很抱團,所以我們還是要學習一個。

最後

人生艱難,作為象牙塔裡的學生都能感到壓力。如果你想利用暑假的大好時光來增加一點人生的經驗,GSoC 可能是你不可多得的機會。享受一線網際網路公司實習的待遇還能在 GitHub 上刷經驗值,何樂不為?最重要的是,這可能是你開啟另一種生活方式的一個機會,也可能是改變你程式設計生涯的機會(有的人成了大型開源組織的 core team member),更是一個跳出你舒適區的機會。

我時常擔心自己變成溫水裡的青蛙,所以非常期待人生中的各種際遇,也想要體驗各種各樣的生活,在此共勉,加油朋友!

本作品採用知識共享 署名-非商業性使用-禁止演繹 4。0 國際 許可協議進行許可。