我是來自中國的二年級學生,對網頁程式開發很有熱忱。在就讀第一年時,我加入了學校的技術社團。這個社團讓我初步認識程式設計和開放原始碼。在俱樂部中,我認識了一群志同道合的合作夥伴,他們也熱愛編碼。正是在那時,我得知 2023 年初的 Google 程式設計夏令營。這個由 Google 舉辦的全球計畫,可讓學生與開放原始碼組織建立連結,並引導學生參與開放原始碼活動,充分利用暑假時間。
我試著提交申請,幸運的是,我已通過審查。我這個夏天投入 Chrome 擴充功能範例存放區的貢獻活動,是難忘而珍貴的回憶。當然,我也學到很多東西,包括有效溝通、程式設計技能和企劃能力等。
隨著 2023 年 GSoC 活動即將落幕,我認為有必要分享一些 GSoC 的經驗。這篇文章將簡要介紹 GSoC 的一般流程,並分享我參與計畫的經驗,希望對您有所幫助!
我如何參與 GSoC 的貢獻故事
我申請了 Chromium 2023 年 GSoC 專案,主要工作是將現有的 Chrome 擴充功能範例升級至 Manifest V3,包括一些相關指令碼和文件。
At the Very Beginning
我是在 2023 年 2 月首次得知 GSoC,但還不確定是否要申請。當時我有幾個疑慮:
- 我很內向,而且英文不是我的母語,因此與導師溝通可能會有些困難。
- GSoC 社群成員來自世界各地,因此要處理時區差異可能相當困難。
- GSoC 是相當知名的計畫,競爭相當激烈,因此我覺得自己獲獎的機會不大。
不過,我可以肯定地說,這些都不是問題。
在開始講述我的故事前,我想先談談 2022 年初發生的一件事情。這次事件也讓我有機會參與 GSoC。我想要將以 Manifest V2 建構的瀏覽器擴充功能遷移至 Manifest V3。為了完成遷移作業,我必須參考說明文件,並瞭解每項 API 變更。我還必須搜尋是否有相關的範例可供參考。我很難理解新的 API 並轉移程式碼。
因此,當我瀏覽 GSoC 專案清單並發現與 MV3 相關的想法時,感到非常興奮。我很樂意貢獻心力,改善 Manifest V3 擴充功能範例,並為日後的開發人員提供便利功能。
今年 3 月,我曾向負責指導的導師 Oliver 發送電子郵件,簡單說明我的意圖:
參與 GSoC 專案的申請
您好:
我是來自中國的 CS 學士班學生。我在 GSoC 中瞭解了 Chrome 擴充功能範例相關專案,並有意改善「資訊清單 V3」範例。我沒有太多 API 範例相關經驗,但我有網頁開發和 MV3 擴充功能開發經驗 (https://github.com/daidr/paimon-webext),因此瞭解 MV3 API 範例的重要性,因此我希望能學習並貢獻 MV3 API 範例。我還能申請這項專案嗎?
謝謝。
不久後,我收到 Oliver 和 Ali (Oliver 的主管) 的回覆。他們回答了我的問題,並詳細說明 GSoC 的具體規則和時程。他們也與我分享許多寶貴的參考資料。
這就像一劑強心針,讓我更堅定地朝目標前進。無論是 2024 年 GSoC 或其他活動,只要您有興趣參與即將舉行的開源活動,請務必勇敢嘗試,不要猶豫不決。
在申請之前,我查看了專案的程式碼,並大略瀏覽了說明文件。雖然 GSoC 提供了近一個月的社群交流期,讓參與者熟悉社群,但先前累積的知識也減輕了我的壓力,讓我能撰寫更有針對性的提案。
我嘗試解決專案提供的 Starter 錯誤。這些問題相對簡單,有助於我快速瞭解專案。我很感謝導師 Oliver (雖然當時他還不是我的導師)。每當我需要澄清問題時,他都會迅速回覆電子郵件,並耐心解決我的問題。撰寫提案時遇到問題,也可以將提案寄給導師,看看是否有需要改善的地方。
獲得核准
撰寫企劃書是申請前最後一項工作。除了申請表單之外,提案書還應包含構想、目標和時間表。視您希望參與的專案而定,我們可能會提供額外的提案範本。網路上有許多現成的提案範例可供參考。
完成草稿後,我將草稿傳送給導師,請他提供意見。提交申請後,您可能需要等待一段時間。5 月初,我收到了已通過審查的通知。
程式碼工作
在初始連結期間,我首先處理剩餘的初學者錯誤,並檢查是否有任何需要學習的新技能。我會將剩餘的時間用於閱讀說明文件。
與導師討論後,我們調整了部分目標,讓工作分配的時間更合理。我們也討論了一個想法,也就是建立一個新的 developer.chrome.com 頁面,列出所有 API 範例,並提供基本篩選器,協助開發人員快速找到所需範例。這項任務對我來說相當複雜,我和導師花了不少時間定義專案,並撰寫產品需求文件 (PRD)。
為了完成這項更大的工作,我們決定在範例存放區中建立自動化指令碼,以便遍歷存放區,並產生 JSON 檔案,其中包含擴充功能範例清單和所用 API。developer.chrome.com 說明文件存放區現在會使用這個檔案建構網頁。
我首先考慮使用 Babel 分析範例程式碼的抽象語法樹狀結構,並找出所使用的 API。與指導顧問分享這個想法後,我發現他們曾經處理過類似的情況,因此確認這個方法的可行性。我完成程式碼後,導師和他的團隊其他成員提供了寶貴的建議,包括注意程式碼區隔、標準化程式碼樣式,以及正確記錄函式。
經過多次大大小小的審查後,程式碼已成功合併。你可以在 GitHub 上找到整個會話串,或查看即時頁面。
設定程序即將完成
如果你問我 GSoC 帶給我什麼,首先當然是讓我瞭解瀏覽器擴充功能 API 相關知識。透過閱讀說明文件和編寫新的範例,我對各種瀏覽器擴充功能 API 有了更深入的瞭解。
此外,在加入 GSoC 之前,我幾乎沒有接觸過許多技能,但現在我已掌握了這些技能,例如遵循全面的程式碼審查程序,以及建立產品需求文件。我也開始使用 GitHub 動作來自動化工作流程,並瞭解如何使用 Babel 來遍歷所有擴充功能範例,並追蹤所使用的 API。此外,我第一次使用 Nunjucks 範本引擎。這些能力對程式設計至關重要,我很高興學會了這些技能。參與開放原始碼社群讓我感到快樂。
這個夏天為我留下許多難忘的回憶。我很喜歡編寫程式。我遇到的導師都很有耐心,他們指導我並傳授有趣的知識,豐富了我的學習體驗。
電腦科學領域的知識是無止境的,與其他人比較後,我發現自己對開放原始碼的瞭解只是冰山一角。不過,每分心力都能協助更多人瞭解影片內容。我認為 GSoC 是參與開放原始碼的絕佳起點。
我也希望我的經驗能為日後參與開放原始碼活動提供參考。
以下是我對想要參與 Google 程式設計夏令營的建議:
- 選擇適合自己的想法:我認為在尋找想法時,應以興趣為優先,其次才是技能。這項策略可讓你在整個貢獻過程中保持熱情。
- 重質不重量:您可以提交多個提案,提高參與 GSoC 的機會。不過,我認為品質可能更為重要,因為人類的能量有限。最後,專注於兩三個想法可能會更有幫助。
- 不要害怕新事物:請放心嘗試在專案中使用未曾使用過的技術。您有將近一個月的社群互動時間,可以熟悉不熟悉的技術,並在整個夏天實作這些技術。就去做吧!
- 事先熟悉專案:例如,詳閱開發說明文件、查看先前的提交記錄和問題,並瀏覽先前的提取要求。事先全面瞭解專案內容,有助於您撰寫更全面的提案。
- 保持聯繫:無論是在申請前還是錄取後,請務必定期與導師溝通,遇到問題時也請隨時提出疑問。大多數的導師都願意協助你解決問題,這樣一來,他們也能追蹤你的進度。
感謝您閱讀本郵件。