สิ่งที่ผมได้จากการ Contribute Open Source

บางครั้งผมโดนคนรอบตัวถามว่า “ผมรู้ไงว่ามันทำงานได้แบบนี้” คำตอบของผมคือ “ผมลองไล่อ่านโค้ดมันมาแล้ว” หรือบางครั้งผมให้เหตุผลในการอัพเดต Library บางตัวว่า “โค้ดเวอร์ชั่นใหม่เขียนเข้าใจง่ายกว่าเวอร์ชั่นเก่า ทำให้เวลามีปัญหาเราจะรู้ได้ว่ามันเกิดจากอะไร”

ผมกลับมาถามตัวเองว่าผมไปเอานิสัยชอบนั่งไล่อ่านโค้ดของพวกโอเพ่นซอร์สมาจากไหน แล้วทำไมทุกครั้งที่เจอปัญหาแปลกๆ ที่ไม่ค่อยมีคนเจอ แทนที่จะไปหาคำตอบหรือรอให้คนอื่นให้เจอเหมือนกันมาช่วย ผมกลับเริ่มต้นที่ Github Repo นั้นแทน

คำตอบที่ผมได้นั้นคือสิ่งนั้นมันเกิดหลังจากที่ผมได้ Contribute to Open Source

Pull Request แรกของผมต้องย้อนกลับไปประมาณ 3 ปีก่อนสมัยผมยังพัฒนา iOS เป็นงานหลักอยู่ ถ้าใครจำได้ช่วงคนทำ iOS จะมีปัญหากับ IDFA ของ Apple ทำให้บางแอพโดน Reject เมื่อใช้ Facebook iOS SDK

จริงๆ แล้วมันเป็นแค่การลบอักษรแค่ 5–6 ตัว แถมยังใช้เวลาในการเขียนรายละเอียดนานกว่าแก้โค้ดหลายชั่วโมงอีก แต่หลายชั่วโมงนั้นถูกใช้ไปเพื่อหาคำอธิบายว่าทำไมเราต้องลบอักษรไม่กี่ตัวนั้นออกไป สิ่งที่ได้ตามมาคือผมได้รู้วิธีการดูว่าไฟล์
แอพพลิเคชั่นใช้ Framework อะไรอยู่ข้างในบ้าง ทำให้ผมรู้ได้ทันทีเมื่อเอา Library ตัวใหม่เข้ามาในโปรเจคแล้วมันจะทำให้เสี่ยงแต่การโดน Reject หรือเปล่า

จากนั้นผมก็เริ่มมีนิสัยเวลาเจอปัญหา หรือทำไม่ได้ตาม Document ก็เปิดโค้ดดูก่อนเลย

“code never lies comments(documents) sometimes do”

แต่นั้นมันเมื่อ 3 ปีที่แล้ว หลังจากนั้นผมก็ไม่ได้ Contribute อะไรอีกเลย จบ!

จาก Mobile สู่ Web และความอบอุ่นของ Community

จนกระทั่งปลายปีที่แล้วหลังจากใช้ React มานาน จนรู้สึกว่าเราน่าจะ Contribute อะไรกลับไปได้บ้าง เลยเริ่มตั้งเป้าหมายว่าต้องมี Pull Request ไปบน React Ecosystem สักอันก่อนสิ้นปีให้ได้ เลยเริ่มเปิดหา Issue ต่างๆ บน Github ตั้งแต่ CRA, React, และ React-Native เพื่อดูว่าอันไหนมันง่ายพอที่เราจะทำได้บ้าง และก็ได้ PR แรกของตัวเองในโลก React มา

มันทำผมคิดว่าการ Conrtribute ก็ไม่ยากนี่หว่า และเริ่มสนุกกับการหา Issues ง่ายๆ ทำเพิ่มอีก 3–4 อันมาทำต่อ

มากกว่าการได้มี commit อยู่บน Repo สิ่งที่ผมได้รับมากกว่านั้นอีกคือการต้อนรับที่ดีจาก Maintainer ของแต่ละ Repo ในการทำ Code Review ที่เหมือนจะเป็นสิ่งที่น่ากลัว มันกลับกลายเป็นสิ่งที่ทำให้ผมได้พัฒนาตัวเองมากขึ้นกว่าเดิมอีก

หลายครั้งที่โค้ดจำเป็นต้องแก้ไข แทนที่เขาจะบอกเลยว่าต้องแก้อะไร แต่เขามักแนะแนวทางว่าควรคิดยังไงกับการแก้ปัญหานี้มากกว่า และมุมมองแบบอื่นๆ ซึ่งมันทำให้เราได้มองปัญหาในอีกหลายๆ มุม ทำให้รู้ว่าหลายๆ ครั้งการแก้ปัญหาเดียวกันแต่มองคนละด้านอาจจะได้วิธีการที่ดีกว่า และ Maintainer ของโปรเจคไม่จำเป็นต้องถูกต้องเสมอไป เช่นเดียวกันกับวิธีของเราก็ไม่ได้ถูกต้องสำหรับคนอื่นเสมอไปเช่นกัน

เมื่อไม่มีคำว่า คุณ กับ ผม เหลือเพียงแต่คำว่า เรา

ผมอาจโชคดีมากเวลาได้ Comment จาก Reviewer เขามักจะใช้คำว่า We มากกว่า I (หรือสุดๆ เลยคือ Persoanlly, …) มันทำให้รู้สึกได้เลยว่าเวลาพูดว่า “เรา” นั้นมันหมายถึงทุกคนตั้งแต่คนพัฒนาและคนที่นำโปรเจคไปใช้งานต่อรวมอยู่ด้วย ส่วนใหญ่เมื่อมีคนมี Solution ในการแก้ปัญหาที่ดีกว่า เรามักจะได้อ่านประโยคประเภท “เราสามารถทำ… เพื่อแก้ปัญหานี้ได้หรือไม่? คุณคิดเห็นยังไง?” ซึ่งผมมองว่ามันทำให้การทำ Code Review เป็นมิตรมากขึ้นไปอีก เพราะเมื่อไหร่ที่มีคนมีความคิดเห็นไม่ตรงกับคุณ เขามักจะอธิบายแนวคิดของเขาที่มีต่อปัญหานั้นแทนที่จะบอกว่าของเขามันดีกว่าของคุณยังไง ทำให้มองเห็นสิ่งที่ว่า

เรารีวิว Code ไม่ได้รีวิวคนเขียน Code

เราได้จะได้คำว่า “ขอบคุณ” เสมอ

ไม่ว่าโค้ดของเรานั้นจะดีหรือแย่ จะได้รับการ merge หรือไม่ แต่สิ่งหนึ่งที่เราจะได้เสมอคือคำขอบคุณจากผู้ดูแลโปรเจคนั้น และสิ่งนี้แหละที่ทำให้การ Review ไม่ใช่เรื่องน่ากลัวอีกต่อไป


ถึงตรงนี้เป็นแค่ประสบการณ์ที่ผมได้รับจากการเริ่ม Contribute เท่านั้น บทความหน้าจะพูดถึงว่ามันทำให้เราเป็นนักพัฒนาที่ดีขึ้นได้ยังไง และเมื่อโค้ดเล็กๆ ของเรานั้นมันมีประโยชน์กับคนอื่นๆ รวมถึงอะไรที่ควรทำเมื่อเราเปิด Pull Request เผื่อช่วยให้ Reviewer ทำงานได้ง่ายขึ้น

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.