我是一名來自中國的二年級學生,對網頁開發充滿熱情。在我大一的時候,我加入了我們學校的一個技術俱樂部。這個俱樂部是我接觸編程和開源的起點。在俱樂部裡,我遇到了一群志同道合的夥伴,他們熱愛編程。正是從他們那裡,我在 2023 年初得知了 Google Summer of Code(GSoC)。這個由 Google 組織的全球性計劃將學生與開源組織聯繫起來,並指導他們通過參加開源活動來充分利用他們的暑假。
我決定試一試,提交了我的申請。幸運的是,我被錄取了。我在貢獻於 Chrome Extension Samples 倉庫的那個夏天,留下了難忘而珍貴的回憶。當然,我也學到了很多:有效的溝通、編程技能和規劃能力等等。
隨著 GSoC 2023 的結束,我想分享一些我在 GSoC 中的經歷。這篇文章將通過我自己的參與簡要介紹 GSoC 的一般過程,希望對你有所幫助!
我如何參與 GSoC 的故事#
我申請了 Chromium GSoC 2023 項目,我的主要任務是將現有的 Chrome 擴展樣本升級到 Manifest V3,包括一些相關的腳本和文檔。
一開始#
我在 2023 年 2 月首次聽說 GSoC,但當時還不確定自己是否想申請。我當時有幾個顧慮:
- 我性格內向,英語不是我的母語,因此與導師的溝通可能會有挑戰。
- GSoC 社區來自世界各地,處理時區差異可能會很困難。
- GSoC 是一個如此知名的計劃,競爭激烈,讓我覺得自己的機會渺茫。
然而,我可以自信地說,這些都不是問題。
在我講述我的故事之前,我想談談 2022 年初發生在我身上的一件事。這次事件也是我參加 GSoC 的機會。我想將一個基於 Manifest V2 的瀏覽器擴展遷移到 Manifest V3。為了完成遷移,我必須參考文檔並理解每個 API 的變更。我還需要查找是否有相關的樣本作為參考。理解新的 API 並轉移代碼對我來說相當具有挑戰性。
因此,當我瀏覽 GSoC 項目列表並捕捉到與 MV3 相關的想法時,我感到非常興奮。我渴望為改善 Manifest V3 擴展樣本做出貢獻,為未來的開發者提供便利。
在 3 月,我給負責的導師 Oliver 發了一封簡短的電子郵件,表達了我的意圖:
參加 GSoC 項目的申請
嗨,
我是一名來自中國的計算機科學本科生。我在 GSoC 中了解到與 Chrome 擴展樣本相關的項目,並對改善 Manifest V3 樣本感興趣。我在 API 樣本方面的經驗不多,但我在網頁開發和 MV3 擴展開發方面有經驗(https://github.com/daidr/paimon-webext),這讓我意識到 MV3 API 樣本的重要性,因此我希望能夠學習並為此做出貢獻。我還可以申請這個項目嗎?
謝謝。
不久之後,我收到了 Oliver 和 Ali(Oliver 的上司)的回覆。他們回答了我的問題,並提供了有關 GSoC 具體規則和時間表的詳細信息。他們還與我分享了許多有價值的參考資料。
這就像一針強心劑,增強了我向前邁進的決心。如果你有興趣參加即將到來的開源活動,無論是 GSoC 2024 還是其他任何活動,邁出第一步是至關重要的;不要猶豫,勇敢地嘗試。
在申請之前,我檢查了項目的代碼並瀏覽了文檔。雖然 GSoC 為參與者提供了近一個月的社區聯繫期,以便熟悉社區,但事先的知識減輕了壓力,讓我能夠寫出更具針對性的提案。
我嘗試解決項目提供的入門錯誤。這些問題相對簡單,幫助我快速理解項目。我感謝我的導師 Oliver(雖然當時他還不是我的導師)。每當我需要澄清時,他都會及時回覆我的電子郵件,耐心地解決我的問題。在撰寫提案時遇到問題時,你也可以將其發送給你的導師,看看是否有需要改進的地方。
獲得錄取#
撰寫提案是申請前的最後一步。提案應包括想法、目標和時間表,此外還有申請表。根據你希望參與的項目,可能會提供額外的提案模板。網上有許多現成的提案範例可供參考。
完成草稿後,我將其發送給我的導師以獲取反饋。一旦提交申請,就會有一段漫長的等待。在 5 月初,我收到了我被錄取的通知。
代碼工作#
在最初的聯繫期,我首先處理了剩餘的入門錯誤,並檢查是否有我需要學習的新技能。其餘時間我都在閱讀文檔。
在與我的導師討論後,我們調整了一些目標,使分配給任務的時間更加合理。我們還討論了一個創建新的 developer.chrome.com 頁面的想法,列出所有 API 樣本並提供基本過濾器,以幫助開發者快速找到所需的樣本。對我來說,這是一個相當複雜的任務,我和我的導師花了相當多的時間來定義項目並撰寫產品需求文檔(PRD)。
對於這個更大的任務,我們決定需要在樣本倉庫中編寫一個自動化腳本,以遍歷倉庫並生成一個包含擴展樣本及其使用的 API 列表的 JSON 文件。developer.chrome.com 文檔倉庫現在使用這個文件來構建頁面。
我最初考慮使用 Babel 來分析樣本代碼的抽象語法樹並識別它使用的 API。在與我的導師分享這個想法後,我發現他們之前曾在類似的項目上工作過,這證實了這種方法的可行性。在我完成代碼後,我的導師和他團隊的其他成員提供了寶貴的建議,包括注意代碼分段、標準化代碼風格和正確記錄函數。
經過幾次大大小小的審查,代碼成功合併。你可以在GitHub上找到整個討論,或查看實時頁面。
總結#
如果你問我 GSoC 帶給我的東西:首先,當然是對瀏覽器擴展 API 相關知識的理解。通過閱讀文檔和編寫新樣本,我對各種瀏覽器擴展 API 有了詳細的了解。
此外,我還獲得了許多在被錄取之前幾乎沒有接觸過的技能,例如遵循全面的代碼審查過程和創建 PRD。我還開始使用 GitHub Actions 來自動化工作流程,學會了如何使用 Babel 遍歷所有擴展樣本並跟踪使用的 API。此外,我還首次接觸了 Nunjucks 模板引擎。這些能力對編程至關重要,我很高興我學會了它們。參加開源社區讓我感到快樂。
這個夏天給了我許多難以磨滅的回憶。編程讓我感到非常滿足。我遇到了耐心的導師,他們指導我並教會我有趣的知識,豐富了我的經歷。
計算機科學領域的知識是無窮無盡的。當我與他人比較時,我意識到自己對開源的理解只是冰山一角。然而,每一點都很重要。我相信 GSoC 是參加開源的良好起點。
我也希望我的經歷能為未來參加開源活動的人提供一些參考。
以下是我對任何想參加 Google Summer of Code 的人的一些建議:
- 選擇適合你的想法:在我看來,尋找想法時,興趣應該是你的首要考慮,其次是技能。這種策略將使你在貢獻過程中保持熱情。
- 質量勝於數量:你可以提交多個提案來增加被 GSoC 錄取的機會。然而,我認為質量可能更為重要,因為人的精力是有限的。專注於兩到三個想法可能會更有幫助。
- 不要害怕新事物:不要猶豫去嘗試你在項目中沒有接觸過的技術。你有近一個月的社區聯繫期來熟悉不熟悉的技術,還有整個夏天來實施它們。就去做吧!
- 提前熟悉項目:例如,通過閱讀開發文檔、查看以前的提交歷史和問題、瀏覽過去的拉取請求來了解項目。提前對項目有一個整體的了解將幫助你寫出更全面的提案。
- 保持溝通:定期與你的導師溝通,遇到問題時不要猶豫提出問題,無論是在申請之前還是被錄取之後。大多數導師都願意幫助你解決問題;這樣他們也可以跟蹤你的進度。
謝謝你的閱讀。