บทความนี้จะมาบอกเล่าเกี่ยวกับโครงการ Google Summer of Code เมื่อปี 2019 ที่ผ่านมา ผ่านประสบการณ์ของผมเองที่ได้เข้าร่วมมา จะมาเล่าว่ามันคืออะไร โครงการนี้มีไว้ทำไม ผมได้อะไรจากโครงการนี้บ้าง และวิธีการสมัครเข้าร่วมโครงการสำหรับผู้ที่สนใจ

Image alt

Introduction

Google Summer of Code หรือ GSoC เป็นโครงการที่จะจัดในช่วงฤดูร้อนหรือช่วงปิดภาคการศึกษาของทุกปี เพื่อให้นักเรียนและนักศึกษาเข้ามามีส่วนร่วมในการเขียน code พัฒนาระบบ open source projects จากที่ไหนก็ได้ในโลก ซึ่งกฏข้อสำคัญคือผู้สมัครจะต้องเป็นนักเรียนหรือนักศึกษาเท่านั้น (ต้องมีสถานะนักเรียน นักศึกษา ป.ตรี ป.โท หรือ ป.เอก) โดยผู้เข้าร่วมโครงการจะสามารถเลือกได้ว่าอยากทำงานกับทีมไหนหรือโปรเจคไหน

โครงการนี้กินระยะเวลาทั้งหมดประมาณ 3 เดือนโดยปกติจะเริ่มตอนมิถุนายน - สิงหาคม (หน้าร้อนฝั่ง America & Europe) โดยที่ผู้เข้าร่วมโครงการจะถูก pair เข้ากับ mentor (คล้ายๆ กับพี่เลี้ยง) ของแต่ละทีม ที่จะช่วยไกด์เราตลอดตั้งแต่ต้นจนจบโครงการ โดย mentor จะคอย support และจะช่วยแนะนำว่าเค้าอยากให้เราพัฒนาในส่วนไหนของระบบ อยากให้สิ่งที่เราทำมันออกมาในลักษณะไหน

Update 2011-11-10: GSoC 2022 เปิดโอกาสให้ใครสมัครก็ได้ ผู็สมัครไม่จำเป็นต้องเป็นนักเรียนนักศึกษา

Organizations

Image alt
รูปจาก summerofcode.withgoogle.com
โดยขั้นตอนแรกเราต้องเลือก Organization กันก่อน ซึ่งจากที่บอกไปแล้วว่าเราจะต้อง contribute to open-source projects ซึ่งทีมหรือองค์กรที่เราสามารถเลือกได้ส่วนมากก็จะเป็นองค์กรไม่แสวงผลกำไร (non-profit organizations) ซึ่งบางองค์กรก็คือทีมที่ได้สร้าง technology หรือ framework ที่มีชื่อเสียงที่เราอาจจะได้ใช้หรือเคยได้ยินกันมาบ้างอยู่แล้วเช่น debian ที่ทำระบบปฏิบัติการ, Jenkins ที่พัฒนาระบบ CI/CD หรือแม้แต่ทีม ruby ที่เป็นทีมหลักในการ develop และ maintain ภาษา ruby

Organizations ที่อยู่ในโครงการ GSoC ก็มาจากการสมัครเหมือนกันครับ คือแต่ละองค์กรที่จะเข้าร่วมต้องเขียน Proposal อธิบายเหตุผลว่าทำไมถึงอยากเข้าร่วม ผ่านการคัดกรองมาแล้ว ทำให้มั่นใจได้ในระดับนึงว่าเราจะได้ไปทำงานกับองค์กรที่มีคุณภาพ คนเก่งๆ

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

สถิติ: GSoC 2019 มีผู้ถูกคัดเลือก 1,134 จากผู้สมัครทั้งหมด 30,922 คน หรือคิดเป็นอัตรการแข่งขัน 1:27

ตัวผมเองเลือกทำกับโปรเจค GraphicsFuzz ซึ่งเป็น tool ที่ช่วยในการหาบัคและข้อบกพร่อง (bugs and vulnerabilities) ใน graphics drivers/gpu ซึ่งถูกพัฒนาโดยนักพัฒนาและนักวิจัยจาก Google ซึ่งส่วนใหญ่ทีมนี้จะเน้นพัฒนาเครื่องมือในด้าน Software Security สาเหตุที่เลือกอันนี้ก็เพราะคิดว่าอยากให้ตัวเองลองทำอะไรใหม่ๆ อยาก challenge ตัวเองในสิ่งที่ไม่เคยทำมาก่อน ตัวผมนั้นไม่ได้เป็นผู้เชียวชาญด้วน Security เลยแม้แต่น้อย แต่ก็แค่อยากลองสมัครดูสักครั้ง 🚀

เข้าร่วมแล้วได้อะไร

1. Contribution to Open source

ถ้าใครยังไม่เคย contribute หรือเขียน code บน open source projects มาก่อนเลยผมว่าโครงการนี้เป็นจุดเริ่มต้นที่ดีเลยครับ เพราะแน่นอนว่าก่อนที่เราจะสามารถไปมีส่วนร่วมพัฒนาระบบได้ เราต้องมีความเข้าใจในระบบนั้นๆ ก่อน ตรงนี้ถือเป็นโอกาสในการเรียนรู้ที่ดีมากๆ เราอาจได้ทำในสิ่งที่ไม่เคยทำมาก่อน ในอนาคตเราอาจจะได้มีโอกาสร่วมงานกับทีมนั้นๆ หรือทำงานในทีมนั้นจริงๆ อีกก็ได้ครับ

2. ประสบการณ์การทำงาน

เราได้ทำงานร่วมกับ mentor ซึ่งเค้าก็เป็น developer ที่เขียน code อยู่แล้วในทุกๆวัน และแน่นอนว่าเค้ามีความเข้าใจใน project ที่เค้าทำมากอยู่แล้ว เราได้เห็นวิธีคิด วิธีแก้ปัญหาจากคนเก่งๆ ได้เรียนรู้ทั้ง hard skill และ soft skill

3. ค่าตอบแทน

ข้อนี้จริงๆสำคัญสุดเลยครับ 555 (หยอกๆ) คือเนื่องจากว่าเป็น Program ที่ sponsored by Google เขาก็เลยมีงบอัดฉีด โดยเงินที่ได้นี้จะได้ไม่เท่ากันครับ จะขึ้นอยู่กับประเทศที่สถานศึกษาของเราตั้งอยู่ครับ ถ้าเป็นที่ไทยจะได้ 3,000 usd ถ้าตีเป็นเงินไทยก็ประมาณ ~100,000 บาทครับสำหรับช่วงเวลา 3 เดือน 💸💸💸

4. Cool swag

Image alt
รูปจาก https://mobile.twitter.com/_saurabh_thakur/status/1198589197990318081

อันนี้อาจไม่ใช่ประโยชน์หลักๆของการเข้าร่วมโครงการนี้ แต่ว่ามีแล้วก็เท่ดีครับ ฮ่าๆ หลังจบโครงการเขาจะส่ง swag พวก เสื้อกับ sticker มาให้ครับ แต่ขอบอกว่ารอนานหน่อย ผมรอหลายเดือนเหมือนกันกว่าเขาจะส่งมาให้

การทำงานจริง

ต้องบอกว่าถึงแม้นี่จะไม่ใช่โครงการฝึกงาน (internship) แต่ส่วนตัวผมว่ารูปแบบการทำงานมันคล้ายๆกับ การฝึกงานเลย คือหลังจากเราถูกเลือกให้เข้าร่วมโครงการแล้ว เราจะต้องพัฒนาสิ่งที่เราได้เลือกไว้ตั้งแต่ตอนสมัครให้เสร็จภายในระยะเวลา 3 เดือนภายใต้การดูแลของ mentor ของโปรเจคนั้นๆ

ในแต่ละ Organization ก็จะมีรูปแบบการทำงานหรือ policy ที่แตกต่างกันออกไปครับ ทั้งนี้เพราะว่า GSoC ไม่ได้มีกฏตายตัวที่ทุกทีมจะต้องทำตาม ส่วนของผมเองนั้น ปกติจะคุยกับ mentor อาทิตย์ละครั้ง ซึ่งเคสของผมโชคดีตรงที่มี mentor 2 คนครับ เป็น software engineer จากทาง google ปกติการคุยแต่ละครั้งก็จะพูดถึงสิ่งที่ได้ทำมากับสิ่งที่แพลนจะทำถัดไป ซึ่งเขาก็จะให้ feedback มาว่าที่เราทำไปแล้วนั้นมันมีตรงไหนที่ต้องแก้หรือหรือเขาคิดเห็นยังไงกับสิ่งที่เราทำไป

การทำงานกันหลักๆ ก็จะทำผ่าน pull request คล้ายๆกับรูปแบบการทำงานของ open source ทั่วๆไปครับ ซึ่งก่อนที่จะได้ merge เข้า codebase แต่ละ PR ก็ขอบอกว่ายากมากครับ ฮ่าๆ เพราะบางครั้งเขาอาจจะถามเราละเอียดเลยครับ เพราะฉะนั้นเราต้องสามารถ discuss สิ่งที่เราตัดสินใจทำลงไปได้ (decision choice) ว่าทำไมถึงไปท่านี้ ทำไมถึงไม่ไปอีกท่านึง และต้องพร้อมอธิบาย code ที่เราเขียนไปทุกบรรทัด

ตรงนี้ต้องขอย้ำอีกทีนะครับว่าแต่ละ organization ไม่เหมือนกัน ทีมอื่นอาจจะมีรูปแบบการทำงานที่แตกต่างกันออกไป

ในระหว่างที่ร่วมโครงการ ก็จะมีการประเมินผลงานสองครั้ง ซึ่งครั้งแรกจะเป็นช่วงกลางของโครงการ โดย mentor เราจะ review performance ของเราจากสิ่งที่เราได้ทำ ซึ่งถ้าไม่ผ่านตรงนี้ก็จะไม่ได้ไปต่อครับ แต่ถ้าผ่านแล้วเราก็จะได้เงินก้อนแรก (ที่รอคอยมานาน 55) ​🤩 ส่วนการประเมินอีกครั้งก็คือตอนจบโครงการเลยครับ จะมี Final Presentation ที่เราต้องเตรียมบรรยายให้คนในทีมกับเพื่อนคนอื่นๆฟัง เป็นการสรุปว่าเราพัฒนาอะไรไปบ้าง ตรงนี้เราก็ได้ฟังจากเพื่อนคนอื่นๆ ใน organization เหมือนกันครับ เป็นโอกาสที่ดีในการสร้าง connection ด้วย

วิธีการสมัคร

ขั้นแรกคือให้ทำการเลือก organization ที่เราอยากทำก่อนครับ แล้วดูว่ามี idea ไหนมั้ยที่อยากทำเป็นพิเศษ ซึ่งหลังจากได้เจออันที่ใช่แล้ว เราจะต้องเขียน Proposal ครับ ว่าเราจะทำให้มันสำเร็จได้ยังไง ซึ่ง Proposal นี้ถือว่าเป็นส่วนสำคัญที่สุดเลยครับ สำหรับการสมัคร GSoC เพราะเป็นสิ่งเดียวที่จะบอกเลยว่าเราได้ไปต่อ หรือต้องกลับบ้าน โดยปกติแล้วเราก็จะต้องเขียนให้ละเอียดถึงระดับที่ว่าอาทิตย์แรกเราจะทำอะไรบ้าง อาทิตย์ที่สองจะมี function ไหนเสร็จบ้าง ซึ่งก็จะเขียนไปจนครบสามเดือนเลยครับ แล้วสุดท้าย final product ของเรามันจะทำอะไรได้บ้าง ครบถ้วนตรงกับที่ทีมต้องการหรือไม่

เราสามารถเลือก organization + idea ได้มากสุด 3 อันดับโดยเรียงลำดับจากความชอบมากที่สุด (คล้ายๆ กับการเลือกคณะตอน admission) ซึ่งเราจำเป็นต้องเขียนและส่ง Proposal แยกสำหรับทุกลำดับที่เราเลือกไปครับ

ทริคที่ส่วนใหญ่ที่ทำกันก็คือในช่วงที่เปิดรับสมัคร เราอาจจะไปแนะนำตัวเองให้ทีมที่เราอยากทำงานด้วยรู้จักเรา ไม่ว่าจะเป็นผ่านทางอีเมล์ หรือว่าไปช่วยแก้ bug หรือพัฒนาอะไรเล็กๆ น้อยๆ ในระบบนั้นก่อน ซึ่งในช่วงเวลาเดียวกัน ทาง project maintainers เองส่วนใหญ่ก็จะมีการเตรียม bug ticket หรือ feature ที่เตรียมไว้เป็นพิเศษสำหรับนักพัฒนาหน้าใหม่โดยเฉพาะ (new gsoc starter) ตรงนี้เป็นจุดเริ่มต้นที่ดีและเป็นสิ่งที่ควรทำมากๆครับ สำหรับคนที่จะทำงานในทีมนั้นๆ เหมือนไปสร้าง first impression ไว้

gsoc timeline
timeline ของโปรแกรม

ช่วงเวลาสำหรับการสมัครสำหรับฝั่งผู้เข้าร่วมโครงการจะเริ่มเปิดประมาณมีนาคมของทุกปีครับ ส่วนเริ่ม coding จริงๆ จะเริ่มประมาณพฤษภาคมเป็นต้นไป ตรงนี้อาจจะเปลี่ยนไปในแต่ละปี ต้องหมั่นเช็คจากหน้าเว็บของ GSoC บ่อยๆครับ

ไม่รู้จัก/ไม่เข้าใจ project จะสมัครได้ไหม

ได้ครับ

อ้างอิงจากเคสผมเลยครับ เพราะตัวผมเองก่อนเข้าร่วมโครงการก็ไม่ได้รู้จักกับโปรเจคที่ผมทำเลย (GraphicsFuzz) แต่ทุกอย่างมันต้องมีจุดเริ่มต้น ระหว่างที่สมัครเราก็ทำการศึกษา ว่า organization ที่เราสนใจเขาทำอะไรกัน มีส่วนไหนของระบบที่เราอยากทำเป็นพิเศษ และเนื่องจากทุก organization และทุก project เป็น open source หมดอยู่แล้ว เราสามารถ clone project มาศึกษาได้เลยครับ ใช้เวลาคลุกคลีกับมันสักพักเราก็จะเริ่มรู้ขึ้นมาบ้าง เราไม่จำเป็นต้องเป็น expert ใน field นั้นๆ เลยครับ

สรุป

ผมว่า GSoC เป็นโครงการดีๆ โครงการนึงเลยครับ เราสามารถเขียน code พัฒนา open-source projects จากที่ไหนก็ได้แล้วก็ยังได้ทำงานร่วมกับองค์กรระดับโลกแถมได้ประสบการณ์ได้เงินอีกด้วย ในไทยเราเองโครงการนี้ยังไม่เป็นที่รู้จักสักเท่าไร อยากจะแนะนำให้เราลองสมัครกันดูครับ ตัวผมเองตอนสมัครก็ยังไม่ค่อยรู้เท่าไรว่ามันมีโครงการนี้อยู่ ยังไม่ค่อยมีบทความภาษาไทยเขียนเกี่ยวเรื่องนี้ด้วย ได้ยินครั้งแรกก็คือเพื่อนต่างชาติชวนไป ก็เลยอยากแบ่งปันประสบการณ์สิ่งที่ตัวเองเจอมาผ่านบล็อคนี้ครับ ถ้าใครมีข้อสงสัยอยากรู้อะไรเพิ่มสามารถหลังไมค์มาได้เลยครับ

สำหรับสาย greek ที่อยากรู้เพิ่มเติมว่าผมทำอะไร สามารถอ่านต่อได้ที่: https://summerofcode.withgoogle.com/archive/2019/projects/6377225270591488

Reference: