Mùa hè mã và tiện ích của Chrome

Tôi là sinh viên năm hai đến từ Trung Quốc và tôi đam mê phát triển web. Trong năm đầu tiên, tôi tham gia một câu lạc bộ kỹ thuật ở trường đại học của chúng tôi. Câu lạc bộ này là nơi tôi bắt đầu lập trình và sử dụng nguồn mở. Trong câu lạc bộ, tôi đã gặp một nhóm bạn có chung chí hướng và thích lập trình. Chính nhờ họ mà tôi biết đến chương trình Mùa hè viết mã của Google vào đầu năm 2023. Chương trình toàn cầu do Google tổ chức này kết nối học sinh với các tổ chức nguồn mở và hướng dẫn học sinh sử dụng hiệu quả mùa hè của mình bằng cách tham gia các hoạt động nguồn mở.

Tôi đã gửi đơn đăng ký để dùng thử. Thật may là tôi đã được chấp nhận. Mùa hè tôi đóng góp vào kho lưu trữ Mẫu tiện ích của Chrome rất đáng nhớ và quý giá. Tất nhiên, tôi cũng đã học được rất nhiều: kỹ năng giao tiếp hiệu quả, kỹ năng lập trình và khả năng lập kế hoạch cùng nhiều thứ khác.

Khi GSoC 2023 sắp kết thúc, tôi rất muốn chia sẻ một số trải nghiệm của mình với GSoC. Bài đăng này sẽ giới thiệu ngắn gọn về quy trình chung của GSoC do tôi tham gia. Hy vọng sẽ hữu ích cho bạn!

Câu chuyện về cách tôi đóng góp cho GSoC

Tôi đã đăng ký tham gia Dự án Chromium GSoC 2023. Nhiệm vụ chính của tôi là nâng cấp các mẫu tiện ích hiện có của Chrome để các mẫu tiện ích của Chrome hoạt động trong Manifest V3, bao gồm cả một số tập lệnh và tài liệu có liên quan.

Khi bắt đầu

Lần đầu tôi biết đến GSoC là vào tháng 2 năm 2023 nhưng chưa chắc mình có muốn đăng ký hay không. Trước đó, tôi có một vài mối lo ngại:

  • Tôi là người hướng nội và tiếng Anh không phải là ngôn ngữ bản địa của tôi, nên việc giao tiếp với người cố vấn có thể gặp khó khăn.
  • Các cộng đồng GSoC đến từ khắp nơi trên thế giới và việc xử lý sự khác biệt về múi giờ có thể khó khăn.
  • GSoC là một chương trình nổi tiếng và có thể cạnh tranh, khiến cơ hội của tôi dường như nhỏ bé.

Tuy nhiên, tôi có thể tự tin khẳng định rằng không có vấn đề nào trong số này.

Trước khi kể câu chuyện của mình, tôi muốn nói về một điều đã xảy ra với mình vào đầu năm 2022. Sự cố này cũng là một cơ hội để tôi tham gia GSoC. Tôi muốn di chuyển một tiện ích của trình duyệt dựa trên Manifest V2 sang Manifest V3. Để hoàn tất quá trình di chuyển, tôi đã phải tham khảo tài liệu và hiểu rõ mọi thay đổi về API. Tôi cũng phải tìm xem có mẫu nào liên quan để tham khảo không. Tôi khá khó khăn trong việc hiểu và chuyển mã API mới.

Đó là lý do tôi rất hào hứng khi duyệt xem danh sách dự án của GSoC và bắt được ý tưởng liên quan đến MV3. Tôi rất muốn góp phần cải thiện các mẫu tiện ích Manifest V3 và mang lại tiện nghi cho các nhà phát triển trong tương lai.

Vào tháng 3, tôi đã gửi email ngắn gọn cho Oliver (một trong những cố vấn phụ trách) một email ngắn gọn về ý định của tôi:

Đơn đăng ký tham gia dự án GSoC

Chào bạn!

Tôi là sinh viên đại học ngành khoa học máy tính ở Trung Quốc. Tôi đã biết về dự án liên quan đến Mẫu tiện ích của Chrome tại GSoC và muốn cải thiện Manifest V3 Samples. Tôi chưa có nhiều kinh nghiệm làm việc về Mẫu API, tuy nhiên, tôi có kinh nghiệm phát triển web và phát triển tiện ích MV3 (https://github.com/daidr/paimon-webext), điều này đã khiến tôi nhận ra tầm quan trọng của các mẫu API MV3, vì vậy tôi muốn cả hai tìm hiểu và đóng góp vào nó. Tôi vẫn có thể đăng ký tham gia dự án này chứ?

Cảm ơn bạn.

Không lâu sau, tôi nhận được phản hồi của Oliver và Ali (sếp của Oliver). Họ đã trả lời các câu hỏi của tôi và cung cấp thông tin chi tiết về các quy tắc cũng như tiến trình cụ thể của GSoC. Họ cũng chia sẻ với tôi nhiều tài liệu tham khảo có giá trị.

Nó như bị bắn vào tay, củng cố quyết tâm tiến lên của tôi. Bước đầu tiên là rất quan trọng nếu bạn muốn tham gia các sự kiện nguồn mở sắp tới, dù là GSoC 2024 hay bất cứ sự kiện nào khác. Đừng ngần ngại và mạnh dạn thử tham gia.

Trước khi áp dụng, tôi đã kiểm tra mã của dự án và đọc lướt tài liệu. Mặc dù GSoC có thời gian gắn kết cộng đồng gần một tháng để người tham gia làm quen với cộng đồng, nhưng kiến thức trước đó đã giúp giảm bớt áp lực và cho phép tôi viết bản đề xuất có mục tiêu cụ thể hơn.

Tôi đã thử giải quyết các lỗi khởi đầu do dự án cung cấp. Những vấn đề này tương đối đơn giản và giúp tôi nhanh chóng hiểu được dự án. Tôi biết ơn người cố vấn Oliver (mặc dù khi đó ông không phải là cố vấn của tôi). Anh nhanh chóng trả lời email của tôi mỗi khi tôi cần làm rõ và kiên nhẫn giải quyết vấn đề của tôi. Khi gặp vấn đề trong quá trình viết đề xuất, bạn cũng có thể gửi đề xuất cho cố vấn để xem có khía cạnh nào cần cải thiện không.

Được chấp nhận

Viết đề xuất là việc cuối cùng cần làm trước khi áp dụng. Đề xuất phải bao gồm các ý tưởng, mục tiêu và lịch trình ngoài biểu mẫu đăng ký. Tuỳ thuộc vào dự án bạn muốn thực hiện, bạn có thể được cung cấp một mẫu bổ sung cho đề xuất. Nhiều ví dụ đề xuất tạo sẵn có sẵn trực tuyến để tham khảo.

Sau khi hoàn thành bản nháp, tôi đã gửi bản nháp đó cho cố vấn để xin ý kiến phản hồi. Sau khi gửi đơn đăng ký, bạn phải chờ rất lâu. Và vào đầu tháng 5, tôi nhận được thông báo rằng tôi đã được nhận vào.

Công việc lập trình

Trong thời gian liên kết ban đầu, trước tiên, tôi đã xử lý những lỗi khởi đầu còn lại và kiểm tra xem có kỹ năng mới nào mà tôi phải học hay không. Và tôi dành thời gian còn lại để đọc tài liệu.

Sau khi thảo luận với cố vấn, chúng tôi đã điều chỉnh một số mục tiêu để thời gian phân bổ công việc hợp lý hơn. Chúng ta cũng đã thảo luận về ý tưởng tạo trang developer.chrome.com mới liệt kê tất cả mẫu API và cung cấp bộ lọc cơ bản để giúp nhà phát triển nhanh chóng tìm thấy mẫu cần thiết. Đây là một nhiệm vụ khá phức tạp đối với tôi và người cố vấn cũng như tôi đã mất khá nhiều thời gian để xác định dự án và viết tài liệu yêu cầu của sản phẩm (PRD).

Đối với nhiệm vụ lớn hơn này, chúng tôi quyết định cần có một tập lệnh tự động trong kho lưu trữ mẫu để truyền tải kho lưu trữ và tạo một tệp JSON chứa danh sách các mẫu tiện ích và API mà các mẫu đó sử dụng. Kho lưu trữ tài liệu developer.chrome.com hiện sử dụng tệp này để tạo trang.

Lần đầu tiên tôi cân nhắc việc sử dụng CameraX để phân tích Cây cú pháp trừu tượng của mã mẫu và xác định các API mà mã mẫu sử dụng. Sau khi chia sẻ ý tưởng này với cố vấn, tôi phát hiện ra rằng trước đây họ đã từng làm một dự án tương tự, nhờ vậy mà khẳng định được tính khả thi của phương pháp này. Sau khi tôi hoàn thành đoạn mã này, người hướng dẫn của tôi và các thành viên khác trong nhóm đã đưa ra những gợi ý hữu ích, như việc chú ý đến việc phân đoạn mã, chuẩn hoá kiểu mã và ghi lại các chức năng đúng cách.

Sau nhiều lần đánh giá lớn và nhỏ, mã đã được hợp nhất thành công. Bạn có thể tìm thấy toàn bộ chuỗi bài đăng trên GitHub hoặc xem trang trực tiếp.

Kết thúc

Nếu bạn hỏi tôi GSoC đã mang đến cho tôi những gì: trước tiên, đó là việc tìm hiểu kiến thức liên quan đến các API tiện ích của trình duyệt. Bằng cách đọc tài liệu và viết mẫu mới, tôi đã hiểu chi tiết về các API tiện ích trình duyệt khác nhau.

Ngoài ra, tôi cũng học được nhiều kỹ năng mà tôi chưa được biết đến trước khi được chấp nhận tham gia GSoC, chẳng hạn như tuân theo quy trình đánh giá đoạn mã toàn diện và tạo PRD. Tôi cũng đã bắt đầu sử dụng các thao tác trên GitHub để tự động hoá quy trình công việc và tìm hiểu cách sử dụng Jetpack để truyền tải tất cả các mẫu tiện ích và theo dõi các API được sử dụng. Hơn nữa, tôi có trải nghiệm đầu tiên với công cụ mẫu Nunjucks. Những khả năng này rất cần thiết cho hoạt động lập trình và tôi rất vui vì mình đã học được những khả năng đó. Tôi rất vui khi được tham gia vào các cộng đồng nguồn mở.

Mùa hè này để lại trong tôi nhiều kỷ niệm khó phai. Việc lập trình mang đến cho tôi nhiều nội dung. Tôi đã gặp gỡ được những người cố vấn kiên nhẫn hướng dẫn và dạy cho tôi những kiến thức thú vị, giúp trải nghiệm của tôi phong phú hơn.

Kiến thức trong lĩnh vực khoa học máy tính là vô tận. Khi so sánh mình với những người khác, tôi nhận ra rằng sự hiểu biết của tôi về nguồn mở chỉ mới là bề nổi. Tuy nhiên, đôi chút hữu ích. Tôi tin rằng GSoC là một điểm khởi đầu tuyệt vời để tham gia vào mô hình nguồn mở.

Tôi cũng hy vọng rằng kinh nghiệm của mình có thể cung cấp một số tài liệu tham khảo để tham gia vào các hoạt động nguồn mở trong tương lai.

Sau đây là một số đề xuất của tôi cho bất cứ ai muốn tham gia Mùa hè lập trình của Google:

  1. Chọn một ý tưởng phù hợp với bạn: Theo tôi, khi tìm kiếm ý tưởng, bạn nên ưu tiên mối quan tâm của mình, sau đó là kỹ năng. Chiến lược này sẽ cho phép bạn duy trì sự nhiệt tình trong suốt quá trình đóng góp.
  2. Chất lượng hơn số lượng: Bạn có thể gửi nhiều đề xuất để tăng cơ hội được chấp nhận tham gia GSoC. Tuy nhiên, tôi cho rằng chất lượng có thể quan trọng hơn vì năng lượng của con người có hạn. Cuối cùng, việc tập trung vào 2 hoặc 3 ý tưởng có thể sẽ hữu ích hơn.
  3. Đừng e ngại những điều mới mẻ: Đừng ngần ngại thử nghiệm những công nghệ mà bạn chưa từng sử dụng trong một dự án. Bạn có gần một tháng gắn kết cộng đồng để làm quen với các công nghệ lạ và cả mùa hè để triển khai các công nghệ đó. Hãy thử xem!
  4. Làm quen với dự án trước: Ví dụ như đọc tài liệu về quá trình phát triển, xem lịch sử và các vấn đề cam kết trước đó, cũng như đọc lướt qua các yêu cầu lấy dữ liệu trước đây. Việc có được sự hiểu biết trước về dự án sẽ giúp bạn viết một đề xuất toàn diện hơn.
  5. Duy trì giao tiếp: Thường xuyên trao đổi với người cố vấn và đừng ngần ngại đặt câu hỏi khi đối mặt với vấn đề, dù là trước khi nộp đơn hay sau khi được chấp nhận. Hầu hết các cố vấn đều sẵn lòng giúp bạn giải quyết vấn đề. Bằng cách này, họ cũng có thể theo dõi tiến độ của bạn.

Cảm ơn bạn đã đọc thư.