Cũng lâu rồi mình chưa viết blog. Một phần vì bận việc và chín phần vì lười 😃. Nay bị sếp hối có chút thời gian rảnh rỗi, mình sẽ chia sẻ với các bạn về văn hóa "cho đi để nhận lại" ở EGANY
💡 Giới thiệu
EGANY luôn coi trọng và khuyến khích tinh thần chia sẻ. Sẽ không bao giờ có chuyện giấu nghề ở công ty. Điều đó thể hiện rõ nhất ở các buổi thuyết trình vào mỗi chiều thứ 6 hoặc các buổi workshop nhỏ vào các ngày còn lại trong tuần (tùy thuộc vào tình hình công việc của tuần đó, thường là thứ 5).
Trong thời gian gần đây, team developer đang tập tành "cho đi" thông qua open source software. Bài viết hôm nay sẽ chia sẻ cho mọi người cách đóng góp cho các dự án open source và những điều cần lưu ý khi thực hiện.
🎁 Nhận được gì khi đóng góp cho dự án open source?
Bản thân mình và hầu hết các bạn có lẽ đã tự hỏi mình những câu hỏi sau:
- "Tại sao mình phải đóng góp trong khi họ không hề trả công cho mình?"
- "Họ không mang lại lợi ích gì cho mình tại sao mình phải giúp họ? Như vậy có phải mình đang làm phí thời gian của bản thân hay không?"
- "Nếu giúp họ rồi mà họ không cho lại mình thì sao?"
Vậy tại sao mình vẫn làm? Đơn giản vì mình thích. Mình thích chia sẻ và giúp đỡ người khác và việc đó làm mình cảm thấy vui và hạnh phúc. Nếu ai cũng muốn có lợi cho mình thì có lẽ sẽ chẳng ai giúp ai bao giờ. Hãy cho đi rồi bạn sẽ được nhận lại.
Tất nhiên, nói như vậy không có nghĩa là bạn sẽ không nhận được gì khi thực hiện. Sau đây là những lợi ích khi tham gia đóng góp open source:
1. Học hỏi kiến thức mới
Open source khuyến khích sự "hợp tác" (collaboration) từ cộng đồng. Bạn sẽ học được rất nhiều thứ khi tham gia, bao gồm:
- Kỹ năng mềm: trình bày, tranh luận, thuyết phục, giải quyết vấn đề, …
- Kỹ năng chuyên môn: cấu trúc dữ liệu (data structure), giải thuật (algorithm), thiết kế nói chung (design pattern, design system) cũng như các mẹo xử lý để tối ưu hệ thống hoặc luồn lách để vượt qua giới hạn của ngôn ngữ lập trình (programming language)
- Kỹ năng khác: Mình không chắc đây có thuộc về kỹ năng mềm không nhưng từ lúc bắt đầu đóng góp cho open source thì trình độ tiếng Anh của mình cũng tiến bộ rõ rệt (tất nhiên chỉ là kỹ năng đọc/viết thôi chứ nói thì vẫn bập bẹ như trẻ mẫu giáo 😅)
Tất cả những kiến thức trên đều rất quý giá và đôi khi bạn sẽ phải trả tiền để học những thứ đó. Việc tiếp cận được những kiến thức này miễn phí là một cơ hội bạn không nên bỏ qua.
2. Nâng tầm dự án của bạn
Những kiến thức bạn học được không ít thì nhiều sẽ giúp cải thiện chất lượng sản phẩm bạn đang làm, từ cách tổ chức thư mục, cách thiết lập CI/CD cho tới quy trình phát triển sản phẩm, những gì nên và không nên có trong một sản phẩm.
Bên cạnh những yếu tố trên, nếu bạn open source chính dự án các bạn đang phát triển thì bạn cũng sẽ nhận được những góp ý, ý tưởng cũng như hàng loạt những vấn đề người dùng gặp phải khi sử dụng sản phẩm của bạn. Biết đâu còn có người cần dự án của bạn và chấp nhận đầu tư thì sao?
3. Bảo mật
Do tính chất open source, chúng ta có thể kiểm tra độ an toàn của sản phẩm mà mình đang sử dụng. Nếu có bất kỳ mã độc hoặc lỗ hổng bảo mật nào thì sớm muộn nó cũng sẽ bị phát hiện và khắc phục. Tuy nhiên, đây cũng là con dao hai lưỡi do kẻ xấu có thể lợi dụng để tấn công vào các lỗ hổng chưa được phát hiện.
4. Giá trị tinh thần
Khi giúp đỡ người khác và nhận được lời cám ơn từ họ, mình cảm thấy rất vui. Vui vì mình giúp đỡ được người khác và vui khi tinh thần chia sẻ của mình ít nhiều sẽ lan tỏa tới cộng đồng. Đôi lúc được vinh danh cũng nở mày nở mặt với đồng nghiệp và bạn bè.
5. Giá trị vật chất & cơ hội nghề nghiệp
Rất nhiều công ty sử dụng và săn đón nhân tài thông qua các open source project. Họ sẵn sàng trả một khoảng tiền lớn để bạn tiếp tục phát triển/đóng góp cho sản phẩm của họ. Hơn nữa, nếu bạn tích cực tham gia đóng góp open source thì đó cũng là một điểm nhấn đẹp trong CV của bạn đấy! Mình từng được offer sponsorship tuy nhiên mình từ chối vì Github Sponsor chưa có ở Việt Nam. Tứk đó là đam mê cũng như động lực để phát triển mỗi ngày của mình.
🤔 Làm sao để đóng góp cho open source software?
1. Sử dụng
Bạn đọc không sai đâu. Chỉ cần các bạn sử dụng và đóng góp ý kiến hoặc báo lỗi (nếu có) là các bạn đã đóng góp cho open source rồi đấy. Đơn giản phải không nào?
2. Giải đáp thắc mắc
Sẽ không ít người dùng gặp khó khăn khi sử dụng open source software. Nếu các bạn có kinh nghiệm sử dụng qua dự án và biết cách giải quyết thì đừng ngần ngại giúp họ nhé. Đôi khi bạn sẽ bắt gặp chính vấn đề mình đang vấp phải. Đó chính là cơ hội để bạn và những developer khác trao đổi và thảo luận giải pháp đấy.
Hiện mình đang làm theo cách này và cảm thấy khá hiệu quả. Ngoài việc học thêm và hiểu sâu hơn về thư viện thì mình cũng gián tiếp giải quyết các vấn đề mình đang gặp phải trong quá trình phát triển.
3. Trực tiếp đóng góp source code
Nếu có khả năng, bạn có thể trực tiếp đóng góp vào source code của dự án open source. Bạn không nhất thiết phải can thiệp vào logic của dự án. Đóng góp tài liệu (documentation) cũng là một cách để tham gia phát triển.
Thay vì đóng góp vào các dự án có sẵn, bạn có thể publish dự án của chính mình để mọi người cùng sử dụng và phát triển. Cá nhân mình chỉ có document-templates. Các thành viên trong công ty thì có:
- ReactAZ (thời chị Quỳnh còn làm React Native, giờ không maintain nữa)
- Tổng hợp package của anh Tuấn (được maintain bởi anh Tuấn & đang áp dụng vào các dự án hiện tại của EGANY)
- Repo của bạn Thuận (hình như không còn maintain)
⚠ Cần lưu ý gì khi đóng góp open source?
1. License
License (tạm dịch là giấy phép) là một điểm quan trọng bạn nên lưu ý khi sử dụng các sản phẩm open source.
Một số bạn lầm tưởng open source là miễn phí và bạn muốn làm gì với source code cũng được. Điều này đúng với hầu hết các dự án open source hiện có. Tuy nhiên, vẫn có một số dự án không cho phép bạn chỉnh sửa hoặc chỉ miễn phí nếu bạn dùng để phát triển phần mềm trong hệ sinh thái (ecosystem) của họ.
Hãy đọc thật kỹ để không vi phạm "giấy phép" các bạn nhé!
2. Ai cũng có thể tham gia đóng góp
Không riêng gì developer, ai cũng có thể tham gia đóng góp cho open source software.
Nếu bạn theo học các chuyên ngành về ngôn ngữ, bạn có thể tham gia dịch tài liệu. Nếu bạn sử dụng sản phẩm thì có thể báo lỗi hoặc góp ý tưởng. Nếu bạn không có chuyên môn hoặc không có thời gian để trực tiếp giúp đỡ dự án thì bạn có thể sponsor (tài trợ) để dự án có kinh phí phát triển thêm.
Như cư dân mạng vẫn nói:
Nếu muốn bạn sẽ tìm cách. Nếu không muốn bạn sẽ tìm lý do
3. Quy trình
Khi đã quyết định tham gia, bạn nên đọc kỹ các quy định, hướng dẫn đóng góp của từng dự án cụ thể (nếu có). Nó sẽ giúp quá trình đánh giá (review) của maintainer (người đảm nhận trách nhiệm duy trì dự án) diễn ra suôn sẻ và tăng tỉ lệ được chấp thuận cho yêu cầu của bạn.
Nếu dự án không đề ra bất kỳ một quy trình nào, hãy làm theo quy trình của một trong những dự án lớn hoặc nổi tiếng mà bạn từng tham gia. Mình gặp rất nhiều trường hợp đặt câu hỏi hoặc báo lỗi nhưng không theo format rõ ràng, rất khó để người khác có thể hỗ trợ và đôi khi bị "phớt lờ" do họ quá chán nản với những người như vậy.
4. Open source không phục vụ bạn
Đây cũng là một lầm tưởng của một số bạn. Open source sinh ra để phục vụ cho cộng đồng. Cộng đồng có thể bao gồm bạn nhưng cũng có thể chỉ bao gồm một bộ phận khách hàng của sản phẩm đó.
Vì lý do trên, hạn chế việc tạo ra các chủ đề như:
- "Tôi muốn có tính năng X phục vụ cho dự án của tôi"
- "Tại sao yêu cầu của anh/chị A được chấp thuận mà không phải là của tôi"
- "Tôi từng giúp dự án, bây giờ dự án phải giúp tôi"
Đa số các yêu cầu như vậy đều sẽ bị từ chối. Bạn có quyền đóng góp ý kiến/ý tưởng nhưng đừng ép họ phải làm theo ý bạn. Làm bạn họ thì được chứ đừng làm ông cố nội họ nhé các bạn!
Trong trường hợp các bạn đặt câu hỏi, hãy cố gắng tự giải quyết nó trước. Chỉ khi không giải quyết được thì mới đặt câu hỏi. Hãy cố gắng trình bày thật rõ ràng input, output các bạn muốn có và các giải pháp đã áp dụng. Nếu có thêm demo để tái tạo lỗi thì sẽ tuyệt vời hơn nữa! Điều này áp dụng cho tất cả dự án chứ không riêng gì open source đâu nhé.
🎉 Lời kết
Hi vọng bài viết sẽ giúp các bạn phần nào hiểu được về văn hóa "cho đi để nhận lại" ở EGANY nói chung và việc đóng góp cho open source software nói riêng.
Bạn nghĩ sao về việc đóng góp cho open source? Liệu nó có thực sự mang lại lợi ích cho bạn hay chỉ làm phí thời gian của bạn? Chia sẻ cho mình biết dưới comment nhé!
Happy hacking!