ผมได้มีโอกาสเข้าร่วมโปรแกรม Google Summer of Code ปีนี้ โดยทำงานให้กับโครงการ Groovy ของ Codehaus
Google Summer of Code คือโปรแกรมส่งเสริมการพัฒนาซอฟต์แวร์เสรีที่ผลักดันด้วยทุนของกูเกิ้ล โดยผู้ที่สามารถจะเข้าร่วมโปรแกรมได้จะต้องมีสถานะเป็นนักเรียน/นิสิต/นักศึกษาในระดับใดก็ได้ตั้งแต่ปริญญาตรีจนถึงปริญญาเอก และทำงานให้กับองค์กรที่เข้าร่วมโครงการตลอดฤดูร้อน ซึ่งกินเวลาประมาณ 3 เดือน
เริ่มสมัคร
ตัวโปรแกรมจะแบ่งออกเป็น 3 ช่วง คือช่วงรับสมัคร และช่วงทำงานช่วงที่ 1 และ 2
ในช่วงรับสมัคร ผู้สมัครเข้าร่วมโปรแกรม จะเลือกงานจากข้อเสนอโครงการซึ่งมีองค์กรโอเพ่นซอร์สทั้งหลายมาเสนอไว้ ซึ่งแต่ละคนเลือกได้มากกว่าหนึ่งโครงการ และถ้าผู้สมัครได้รับเลือกจากหลาย ๆ โครงการ ก็จะมีการเรียงลำดับกันทีหลัง ซึ่งทำโดยทีมกูเกิ้ลและผู้ดูแลโครงการนั้น ๆ (mentor) ผมทำโครงการ Groovy Performance Tuning กับกิลโยม ลาฟอร์จ ซึ่งเป็นผู้จัดการโครงการของ Groovy จริง ๆ แล้วตัวข้อเสนอและไอเดียของโครงการนี้ผมร่างเองหมดแล้วก็ส่งให้กิลโยมเอาไป โพสต์ไว้ในหน้าข้อเสนอของ Groovy ซึ่งถ้าเรามีไอเดียมาเองและตัวองค์กรรับฟังแล้วนั้นก็จะไม่ค่อยมีปัญหาในการเข้าร่วมโปรแกรม ปีนี้ผู้ที่ผ่านมีประมาณ 1,100 คน โดยของ Codehaus นั้นใบสมัครผ่าน 7 และได้โควต้า 4 นั่นคือตัวข้อเสนออาจจะผ่านแต่ถ้าโควต้าขององค์กรนั้น ๆ ไม่พอเราก็จะไม่ได้เข้าร่วมโปรแกรม
เมื่อผ่านช่วงรับสมัคร ผู้สมัครก็จะเปลี่ยนสภาพเป็นผู้เข้าร่วมโครงการ(ผมจะเรียกว่านักเรียน) นักเรียนแต่ละคนก็จะได้รับอนุญาตให้เข้าร่วม private เมล์ลิ่งลิสต์ ซึ่งจะมีการโพสต์ข่าวสารเป็นระยะ ๆ จากผู้จัดการโปรแกรมจากกูเกิ้ล (เราเรียกเธอว่า LH) รวมทั้งมีกระทู้ไร้สาระมาเป็นระยะ ๆ จากเกรียนlnwทั้งหลาย
เมื่อผ่านช่วงแรกนักเรียนจะได้ 1. ของขวัญ ปีนี้เป็นหนังสือ Beautiful Code 2. บัตรเครดิตพร้อมเงินก้อนแรก จากกูเกิ้ล การ activate บัตรมีขลุกขลักเล็กน้อยเพราะต้องทำผ่านระบบโทรศัพท์อัตโนมัติ หลายคนรวมทั้งผม activate ด้วย Skype แต่บางคนบอกไว้ในลิสต์ว่าทำแล้วมีปัญหา ส่วนกระบวนการนำเงินจากบัตรออกมาใช้ก็ลำบากไม่แพ้กันเพราะชื่อบนบัตรไม่ใช่ชื่อตัวเราเองแต่เป็นคำว่า GSOC Student 2008 ดังนั้นการใช้บัตรซื้อของบนเวบไซต์หรือผ่าน Paypal ก็อาจจะมีปัญหา วิธีการที่ดีที่สุดคือการถอนเงินโดยตรงจากตู้ซึ่งค่าธรรมเนียมกูเกิ้ลจะเป็นคนจ่าย
จากนั้นก็จะเข้าสู่ช่วงทำงาน ช่วงการทำงานสองช่วงจะคั่นด้วยการประเมินกลางภาคและปิดท้ายด้วยการประเมินปลายภาค ถ้าไม่ผ่านการประเมินกลางภาคก็จบ ไม่ได้เงินก้อนที่สองและไม่ต้องทำต่อ แต่ถ้าผ่านมาได้ก็ได้เงินก้อนที่สองเข้าทางบัตรเครดิตเหมือนเดิม และถ้าผ่านการประเมินปลายภาคก็ได้อีกก้อนที่เหลือ โดยการประเมินว่าผ่านหรือไม่นั้นทำโดยผู้ดูแลโครงการซึ่งเราที่เป็นนักเรียน จะต้องติดต่ออยู่เรื่อยๆ เพื่อขอคำปรึกษาบ้าง รายงานผลความก้าวหน้าบ้างเป็นต้น ซึ่งปกติจะเป็นสัปดาห์ละครั้ง สำหรับของ Codehaus จะมีเมล์ลิ่งลิสต์อีกตัวไว้รายงานความก้าวหน้า ช่วงหลัง ๆ ผมใช้วิธีส่งผ่าน twitter แทน (โดยใช้ hashtag #gsoc)
ปัญหาที่เจอเป็นเรื่องทางเทคนิค
เรื่องเชิงสังคมไม่ค่อยมีปัญหาเพราะความคุ้นเคยกับชุมชนของ Groovy อยู่แล้ว ปัญหาใหญ่กลายเป็นเรื่องทางเทคนิคแทน เพราะระบบการ dispatch เมธอดของ Groovy ตัวใหม่นั้นเร็วระดับนึงอยู่แล้ว (เร็วกว่า JRuby เล็กน้อยบน shootout benchmarks) การแก้ปัญหาด้วยวิธีเดิมตามที่เตรียมไว้ (callsite caching) ไม่ทำให้เร็วมากขึ้นอย่างมีนัยสำคัญ ก็เลยจำเป็นต้องหาวิธีการใหม่ ระหว่างการค้นก็ไปรื้อบทความมาอ่านหลายชิ้นรวมทั้งงานวิจัยเบื้องหลัง tracemonkey ด้วย แล้วก็บังเอิญไปเจอว่างานเก่าที่ทำไว้นั้นสามารถเอามาแก้ให้ทำงานกับ Java 5 ได้ (ความเข้ากันได้กับ Java 5 เป็นข้อกำหนดเบื้องต้นของ Groovy 1.6) ก็เลยเอาเทคนิคการคอมไพล์แบบ Just-in-time ที่คิดไว้มาเขียนให้ใช้ได้กับระบบ callsite caching ใน Groovy 1.6
ก็เห็นอยู่บ้างเหมือนกันสำหรับบางคนที่มีปัญหากับผู้ดูแลโครงการ ซึ่งตรงนี้ถ้าหากแก้ไขเองไม่ได้ วิธีแก้ปัญหาคือแจ้งโดยตรงไปที่ LH เพื่อจัดการเจรจาหรือไม่ก็เปลี่ยนผู้ดูแลเป็นคนอื่นจากองค์กรเดียวกัน ผมเข้าใจว่าเป็นปกติของ Geek ที่จะโค้ดมากกว่าพูด บางทีบางครั้งจุดนี้ก็อาจจะเป็นข้อด้อยซึ่งผมเองก็เรียนรู้ที่จะสื่อสารให้มากขึ้นเช่นกัน อย่างไรก็ตามช่วงเวลาฤดูร้อนก็กำลังจะจบลงแล้วครับ ตอนนี้อยู่ในระยะประเมินปลายภาค และผลลัพธ์งานผมที่ได้จากเทคนิคการ JIT ก็ค่อนข้างน่าประทับใจ (อ่านต่อ)
สิ่งที่ได้
อาจจะสังเกตว่าผมไม่ได้ระบุเรื่องขอบเขตเวลาและเรื่องค่าตอบแทนที่ได้จากกูเกิ้ล เพราะอยากให้ไปหาอ่านต่อเองจากตัวโปรแกรม(หรือข่าวเก่าจาก sugree) สิ่งสำคัญที่ได้คือ 1. เสื้อยืด Google Summer of Code (สำคัญมาก) 2. การอนุญาตให้อ้างอิงกูเกิ้ลได้ใน Resume และ CV ในฐานะ work contractor 3. ประสบการณ์เข้าร่วมกับทีมโอเพ่นซอร์ส (สำหรับคนที่ไม่เคยเป็น contributor)
เสียดายที่ปีนี้ไม่มีข่าวเรื่องกิจกรรมทัวร์กูเกิ้ล สงสัยจะงดครับ สำหรับปีหน้าและปีถัด ๆ ไป ผมอาจจะผันตัวไปเป็นผู้ดูแล(แบบที่ sugree เป็น)แทน และคิดว่าใครหลาย ๆ คนอาจจะอยากลองลุยกับโปรแกรมและโครงการนี้ขึ้นมาบ้างนะครับ ปีหน้าอาจได้เจอกัน