“Đừng ngại đối mặt với nỗi sợ và sự không thoải mái. Vì đó chính là lúc chúng ta đang trở nên tốt hơn.”
Hưng Nguyễn - Creator of Jest Preview & Vitest Preview, Senior Frontend Engineer at Filum
Bước đệm cho mình tham gia cộng đồng open-source là vào năm 2018. Lúc ấy mình có viết một thư viện để giúp integrate tính năng Login with LinkedIn vào ứng dụng web một cách dễ dàng hơn. Phải mất 5 năm sau, dự án mới được 80 GitHub stars và 5000 lượt download mỗi tuần. Mãi tận sau này khi làm open-source full-time mình mới hiểu được cách cộng đồng này hoạt động, cách contribute vào một dự án và tìm người dùng cho dự án của mình ra sao. Những thứ này giúp mình khá nhiều cho việc thực hiện dự án thứ 2 của mình - jest-preview
.
Năm ngoái mình quyết định nghỉ việc full-time để tìm kiếm những thử thách mới. Thử thách đầu tiên trong hành trình đó là phát triển thư viện mã nguồn mở của riêng mình. Lý do có sự ra đời của Jest Preview là trong quá trình làm việc, mình phải viết rất nhiều frontend test cho các web app, và mình gặp vấn đề bất tiện khi debug một test fail, mình không tưởng tượng được điều gì thực sự đang diễn ra. Mình quyết định thử viết một thư viện để hỗ trợ frontend engineer có thể nhìn thấy giao diện khi test bằng Jest trên trình duyệt web. Khi xây dựng Jest Preview, mình chỉ nghĩ đơn giản là mình đang tạo ra một thư viện để giúp cho công việc hàng ngày của mình được dễ dàng hơn. Sau này, mình mới biết các bạn frontend engineer ngoài kia cũng gặp những pain point giống mình. Cho nên thư viện nhận được nhiều sự hưởng ứng từ cộng đồng khắp nơi trên thế giới. Do mình không có tư duy kiếm tiền tốt, nên làm cái này cho vui và vì sở thích thôi =)).
Còn câu chuyện nản chí là bình thường. Khi phát triển một tính năng ở công ty, không cách này hay cách khác, bạn sẽ tìm ra được giải pháp cho nó, dù là code “đẹp” hay “không đẹp”. Còn phát triển thư viện mã nguồn mở, đôi khi mình không thể biết được liệu cái ý tưởng đó có khả thi hay không, lỡ nó không work, lỡ thất bại có phải mất thời gian hay không. Vậy mà mình vẫn đâm đầu vào và tiếp tục phát triển các feature, cải thiện thư viện, giúp Jest Preview hoàn thiện hơn. Cứ làm đi đã, rồi phần thưởng xứng đáng sẽ tìm đến bạn, tin mình đi.
Tháng 6 2022, ban tổ chức của sự kiện React Summit gửi email cho mình - “thư viện của bạn nhận nominate cho hạng mục The Most Exciting Use of Technology, giải thưởng React Open Source Awards, chúng tôi muốn mời bạn sang Hà Lan để tham dự sự kiện.” Lúc đấy mình xúc động quá vì đó là giấc mơ mình chưa bao giờ nghĩ đến. Chỉ nghĩ đơn giản làm thư viện linh tinh rồi vứt lên trên GitHub thôi ấy, tự nhiên được nominate cho một giải thưởng hoành tráng thế. Kết quả mặc dù mình không xin được visa sang Hà Lan dự sự kiện 🥲, nhưng bù lại mình có thêm nhiều trải nghiệm thú vị và có thêm connection với những developer tài năng trên thế giới. Một lần khác, Jest Preview được Dan Abramov, core team của React vào tặng star. Cầm điện thoại refresh là star tăng vọt, mình hoảng và không tin vào những gì đang diễn ra luôn.
Bên cạnh đó, nhiều trải nghiệm mình sẽ không dễ dàng có được nếu chỉ đơn thuần làm công việc 9 to 5. Mình có cơ hội biết đến các tech conference, mở rộng kết nối với các bạn dev siêu xịn tại đó. Đơn cử như năm ngoái mình có tham dự CityJS Singapore và được gặp Even You, tác giả của VueJS và Vite. Sau cuộc trò chuyện đấy mình lại thêm ý tưởng để cải thiện Jest Preview, và tạo thêm thư viện Vitest Preview. Thêm nữa, thi thoảng mình nhận được những lời cám ơn từ các bạn engineer trong cộng đồng, nhờ thư viện của mày mà bọn tao tiết kiệm nhiều thời gian debug code, giúp công việc hàng ngày của bọn tao dễ dàng hơn.
Những bạn muốn đóng góp vào các dự án open-source lời khuyên của mình là “đừng sợ đọc code thư viện, đừng nghĩ mình không thể cạnh tranh với contributor khác”. Cá nhân mình, nếu muốn hiểu sâu về một công nghệ mình sẽ cố gắng contribute cho cộng đồng/ công nghệ đó. Một vài kinh nghiệm chủ quan của mình khi tiếp cận với một project mà mình thấy thú vị và muốn involve vào:
- Dùng công nghệ đó hàng ngày: chỉ khi dùng công nghệ đó hàng ngày, mình mới có đủ context, hiểu bài toán mà công nghệ đó đang giải quyết. Sẽ rất khó để tìm hiểu một công nghệ nếu chính bạn không phải là người dùng của công nghệ đó.
- Tham gia cộng đồng: hầu hết các cộng đồng (đặc biệt là cộng đồng open-source) đều có một vài kênh để trao đổi như Discord, GitHub Discussion, Slack…mình sẽ có cơ hội học hỏi và trao đổi trực tiếp từ author và maintainer.
- Đọc các issue/ PR cũ: việc đọc cả source code from scratch là điều gần như không thể với bất cứ công nghệ nào. Thậm chí cả những maintainer chính cũng không hiểu hết. Thay vào đó hãy đọc lại những issue được mark là completed, hay những PR gần đây. Mình sẽ có cơ hội để đọc một phần source code với scope nhỏ hơn. Dần dà bạn sẽ quen và hiểu source code để contribute. Đồng thời biết cách maintainer và outside contributors đóng góp cho dự án thế nào.
- Contribute docs và test: có hai thứ luôn luôn có thể contribute cho bất cứ dự án open-source nào đó là documentation và test. Khi đọc docs, có chỗ nào khó hiểu, chỗ nào có thể viết test để tăng coverage, cover thêm nhiều trường hợp, hãy gửi pull request. Những PR đó của bạn thường sẽ được merge rất nhanh chóng, và còn được các coder xịn xò review cho nữa.
- Dựng project ở local: key là không nên tham vọng đọc hiểu hết cả hệ thống, một thời điểm chỉ cần tập trung một thứ nhỏ thôi. Sau một thời gian làm quen với dự án, đừng ngại hỏi các maintainer cách dựng project local (xem lại ý 2), họ sẽ rất open để chỉ cho mình (lúc này mình có thể gửi PR documentation để cho người sau nhàn hơn)…
Cuối cùng, mình muốn nhắn nhủ đến tất cả các bạn độc giả: “Đừng ngại đối mặt với nỗi sợ và sự không thoải mái. Vì đó chính là lúc chúng ta đang trở nên tốt hơn.” Mình đã từng có những nỗi sợ và niềm nghi hoặc về chính bản thân mình. Nhưng rồi mình vẫn lựa chọn đối diện với những nỗi sợ đó một cách ngẩng cao đầu. Sự không thoải mái (uncomfortable) là không thể tránh khỏi, thậm chí rất nhiều. Nhưng cứ đi rồi dần dần ta sẽ nhìn thấy đường tới đích. Vì như Lỗ Tấn đã từng nói: Kì thực trên mặt đất vốn làm gì có đường, người ta đi mãi thì thành đường thôi.