Ngày xuất bản: 28 tháng 10 năm 2025
Tôi là Harsh Singh, sinh viên năm cuối ngành Kỹ thuật hoá học tại IIT (ISM) Dhanbad và là người tham gia Google Summer of Code (GSOC) năm 2025. Bài đăng này chia sẻ hành trình của tôi để được chấp nhận tham gia GSoC và một số điều tôi học được trong quá trình tham gia.
Trước GSoC: Khám phá việc phát triển tiện ích
Vào năm đầu tiên, giống như nhiều người khác, tôi rất muốn tham gia CyberLabs, câu lạc bộ công nghệ chính thức của trường đại học chúng tôi. Để chuẩn bị, tôi đã tìm đến một đàn anh và anh ấy cho tôi xem một tiện ích Chrome mà anh ấy đã tạo để vào câu lạc bộ. Nó hoàn toàn khác với quy trình phát triển web tiêu chuẩn mà tôi biết. Có vẻ như đây là một cách hay để chèn tập lệnh và sửa đổi trang web trên trình duyệt của riêng bạn.
Tôi đã thử nghiệm rất nhiều API tiện ích, thậm chí còn chứng kiến quá trình chuyển đổi từ Manifest V2 sang V3. Tôi đã xây dựng được một dự án nhỏ bằng các tiện ích này, tham gia CyberLabs, sau đó bận rộn với cuộc sống đại học và tạm gác việc phát triển tiện ích.
Gần đây, trong khi nghĩ đến việc đăng ký tham gia Google Summer of Code (GSoC), tôi đã bắt gặp một dự án về Chrome Extensions API. Nỗi nhớ ùa về – "Thật tuyệt nếu lần này mình tạo ra một API mà sau này một sinh viên năm hai sẽ dùng để truy cập vào CyberLabs? Đó sẽ là cách khoe khoang hiệu quả nhất." Vì tôi đã hiểu hầu hết thuật ngữ về tiện ích qua công việc trước đây, nên dự án này có vẻ rất phù hợp với tôi.
Đang chuẩn bị áp dụng
Tôi quyết định liên hệ với Oliver, một Kỹ sư phụ trách mối quan hệ với nhà phát triển trong nhóm Tiện ích của Chrome. Tôi hỏi anh ấy những điều cần thiết để trở thành một ứng viên thành công cho chương trình GSoC của Chromium. Anh ấy đã trả lời trong vòng vài ngày! Email của anh ấy rất khích lệ; anh ấy nói rằng họ chỉ muốn xem liệu tôi có thể khám phá cơ sở mã và viết một số mã C++ hay không.
Tôi bắt đầu bằng cách thiết lập Chromium trên máy của mình. Đó là một cuộc vật lộn thực sự; tôi đã mất 4 ngày và vô số lần thử để cuối cùng thiết lập được cơ sở mã khổng lồ và tạo được bản dựng thành công. Tôi tìm thấy một vấn đề đơn giản trên mạng (vấn đề về sidePanel.open() mà không có cử chỉ của người dùng) và đã gửi một bản vá để khắc phục vấn đề đó. (Nhìn lại thì đó chỉ là một thay đổi nhỏ 🙂). Tôi đã gửi email cho Oliver về tiến trình của mình. Anh ấy nói với tôi rằng họ không có kế hoạch hỗ trợ việc này, nhưng anh ấy cũng nói rằng những việc tôi đã làm là đủ để cho thấy tôi nghiêm túc. Sau đó, anh ấy đề nghị tôi làm việc trên phương thức getPosition cho bảng điều khiển bên. Tôi đã tìm ra cách, gửi thư lại cho anh ấy và anh ấy rất vui, nói rằng cách tiếp cận của tôi phù hợp với những gì nhóm của họ đã thảo luận. Điều này giúp tôi tự tin tiếp tục dự án, vì tôi biết rằng mình có thể hiểu mã và thực hiện các thay đổi.
Đề xuất của tôi cho GSoC
Tiếp theo là đề xuất GSoC. Nội dung mô tả dự án ban đầu ("SidePanel APIs & DNR APIs") rất chung chung, nên tôi không biết nên liệt kê những nhiệm vụ cụ thể nào hoặc cách tạo một dòng thời gian trong đề xuất của mình. Tôi đã gửi email cho Oliver về vấn đề này và anh ấy trả lời rằng đã cập nhật nội dung mô tả dự án. Tôi rất vui khi biết anh ấy đã thêm một số API, trong đó có API sidePanel.getPosition mà tôi đang làm việc.
Các thành phần chính trong đề xuất của tôi là hiểu biết về dự án, ý tưởng thiết kế, công việc trước khi đề xuất và lịch trình bàn giao. Tôi đã xác định chính xác phạm vi công việc của mình, vì điều này cho thấy tôi hiểu rõ công việc liên quan. Tôi đã soạn thảo đề xuất và được xem xét hai lần.
Một điều tôi hối tiếc (và đây cũng là một lời khuyên quan trọng cho những người đăng ký trong tương lai) là tôi đã không đưa ra một quy cách thiết kế phù hợp cho các tính năng mà tôi dự định xây dựng. Ví dụ: khi đề xuất một API để đóng bảng điều khiển bên, tôi nên phác thảo các tham số, giải thích lý do cho lựa chọn của mình, giải thích cách tôi sẽ xử lý các trường hợp đặc biệt và mô tả cách API có thể được chuẩn hoá cho tất cả các trình duyệt. Điều này sẽ cho thấy mức độ hiểu biết sâu sắc hơn nhiều.
Trong bối cảnh dự án tiện ích Chromium, một cơ quan chủ chốt là WECG (WebExtensions Community Group, phát âm là "wee-C-G"), nơi các thiết kế API mới được thảo luận chính thức. Trong thời gian diễn ra GSoC, người đóng góp có thể cần trình bày đề xuất API của họ cho nhóm này. Do đó, việc chuẩn bị sẵn một ý tưởng thiết kế trong đề xuất GSoC là một lợi thế rất lớn, vì điều này cho thấy bạn đã chuẩn bị cho bước quan trọng này và sẽ làm tốt trong thời gian diễn ra GSoC.
Vào đầu tháng 5, tôi nhận được email thông báo rằng tôi đã được chấp nhận! 🙂
Nội dung đóng góp của tôi trong GSoC
Thời gian diễn ra GSoC thật tuyệt vời. Người cố vấn của tôi, Solomon, là một người vô cùng tốt bụng và chúng tôi đã có những cuộc họp hiệu quả hằng tuần giúp tôi đi đúng hướng. Tôi cũng quen biết một người đóng góp khác là Amit P. Anh ấy đã giúp đỡ tôi rất nhiều mỗi khi tôi cảm thấy thất vọng. Việc tham dự các cuộc họp của WECG đã giúp tôi mở mang tầm mắt. Tôi thấy cách mọi thứ hoạt động ở cấp độ đó và hiểu được lý do kinh nghiệm lại quan trọng đến vậy. Tôi đã thảo luận về các đề xuất API của mình ở đó và nhận được sự đồng ý của một nhà cung cấp trình duyệt khác.
Ban đầu, tôi đã mở một số CL (danh sách thay đổi). Tiến độ của tôi chậm lại sau này do quá trình xem xét mã nguồn diễn ra liên tục, nhưng tôi vẫn vui vẻ tiếp tục. Đóng góp chính của tôi là cho Side Panel API:
- API
sidePanel.getLayout() - API
sidePanel.close() - Sự kiện
sidePanel.onOpened()vàsidePanel.onClosed()(Các sự kiện này dựa trên đề xuất về vòng đời của Microsoft)
Các CL khác của tôi cho Commands API vẫn đang trong quá trình thực hiện (tuỳ thuộc vào mức độ hoạt động của tôi sau GSoC 🙂). Bạn có thể xem thông tin chi tiết trong báo cáo cuối cùng của tôi, có trong đường liên kết "xem mã" trên trang dự án GSoC của tôi.
Xin cảm ơn đặc biệt đến Oliver Dunk, Solomon Kinard, Kelvin Jiang, Devlin Cronin, Tom Lukaszewicz và Andrea Orru, những người đã xem xét hầu hết các CL của tôi. Tôi cảm thấy rất vui khi thấy mã của mình trở thành một phần của Chrome. Các cố vấn của tôi nhận xét rằng tôi có tinh thần "làm chủ" rất cao, đó là một lời khen ngợi lớn đối với tôi.
Kết thúc
Nếu bạn hỏi tôi về những gì GSoC mang lại cho tôi, thì đó không chỉ là kiến thức kỹ thuật. Điều này giúp tôi có cơ hội tham gia vào những cuộc thảo luận quan trọng, những cuộc thảo luận sẽ ảnh hưởng đến nhiều nhà phát triển tiện ích. Đó là công việc đầu tiên của tôi được đưa vào một ứng dụng thực tế. Tôi đã gặp những người cố vấn là bệnh nhân, họ đã hướng dẫn và dạy tôi rất nhiều điều, giúp tôi có được trải nghiệm vô cùng phong phú.
Tôi hy vọng câu chuyện của mình có thể là một nguồn tham khảo hữu ích cho những người khác muốn đóng góp cho Chromium hoặc tham gia Google Summer of Code.
Mẹo dành cho những người đăng ký tham gia GSoC
- Chọn một ý tưởng mà bạn thực sự thích. Lãi suất nên là ưu tiên hàng đầu của bạn. Bạn luôn có thể cải thiện kỹ năng của mình, nhưng niềm đam mê mới là thứ giúp bạn tiếp tục khi mọi thứ trở nên khó khăn. Tôi đã từng ở cả hai phía và tin tôi đi: khi làm việc gì đó mà bạn không hứng thú, bạn sẽ đổ lỗi cho người khác khi mọi chuyện không suôn sẻ. Tuy nhiên, nếu yêu thích công việc, bạn sẽ xem đó là một thử thách cần vượt qua.
- Đừng ngại cạnh tranh. Tôi thấy rất nhiều người mất động lực sau khi xem danh sách những người khác đang đăng ký tham gia các kênh cộng đồng. Mọi dự án tốt đều sẽ có sự cạnh tranh. Tập trung vào điểm mạnh của bạn. Nếu bạn đã từng làm việc với thư viện nào đó, hãy tìm một dự án sử dụng thư viện đó. Bạn sẽ có lợi thế vì có thể mang đến những trải nghiệm độc đáo.
- Ghi nhận yếu tố may mắn và tập trung vào giao tiếp. Thực tế là GSoC cũng cần một chút may mắn. Một số dự án phổ biến nhận được hơn 300 đề xuất cho 1 đến 2 vị trí. Tôi không chắc là người cố vấn có thể đọc chi tiết từng câu hỏi. Đây là lý do tại sao việc giao tiếp sớm là yếu tố then chốt. Hãy tham gia vào dự án từ trước và đảm bảo đề xuất của bạn có tính thuyết phục và đi thẳng vào vấn đề.
- Nếu bạn không được chọn, thì đó không phải là dấu chấm hết. Giờ đây, bạn đã có những đóng góp nguồn mở có giá trị trong hồ sơ của mình. Hãy dùng bản đó để đăng ký các cơ hội khác trong mùa hè. Bạn đã làm xong phần việc khó khăn rồi!
Cuối cùng nhưng không kém phần quan trọng:
"Ai cũng được tạo ra để làm một công việc cụ thể, và mong muốn làm công việc đó đã được đặt vào trái tim của mỗi người." – Rumi
Cảm ơn bạn đã đọc.