วันอาทิตย์ที่ 9 พฤษภาคม พ.ศ. 2553

การแข่งขันคอมพิวเตอร์โอลิมปิก

เมื่อยี่สิบปีก่อน สถาบันส่งเสริมการสอนวิทยาศาสตร์และเทคโนโลยี (สสวท.) ได้ส่งผมและ ดร.นงนุช วรรธนะวหะ เป็นผู้สังเกตการณ์การแข่งขันคอมพิวเตอร์โอลิมปิกครั้งที่สองที่เมืองมินส์ สหภาพโซเวียต (ก่อนที่จะมีการแตกออกเป็นหลายประเทศเหมือนที่เป็นอยู่ในปัจจุบัน). การแข่งขันนี้เขามีชื่อว่า IOI หรือ International Olypiad in Informatics และจัดครั้งแรกที่ประเทศบัลแกเรีย. ประเทศที่มาเข้าร่วมแข่งขันส่วนใหญ่คือประเทศยุโรปตะวันออกในค่ายสังคมนิยม และ มีประเทศจากเอเชียคือจีนแผ่นดินใหญ่ และ มองโกเลีย. การสอบยุคนั้นสอบสองวัน วันละ 6 ชั่วโมง และ ข้อสอบมีเพียงข้อเดียว. ผู้เข้าสอบก็เป็นนักเรียนมัธยมทั้งนั้น. การสอบแข่งขันนั้นนักเรียนแต่ละคนจะต้องคิดแก้ปัญหาคนเดียว ช่วยกันคิดไม่ได้.
ก่อนสอบก็มีการพิจารณาเลือกข้อสอบกันระหว่างหัวหน้าทีม. เมื่อตกลงข้อสอบได้แล้ว หัวหน้าทีมก็จะแปลข้อสอบเป็นภาษาของประเทศของตนเอง. ระหว่างการแปลจนถึงการเข้าสอบนั้น หัวหน้าทีมจะไม่ได้พบกับนักเรียนของตนอีก. จะได้พบอีกทีก็เมื่อสอบเสร็จแล้วเท่านั้น.
ผมและดร.นงนุช เห็นข้อสอบแล้ว ก็รู้ทันทีว่า นักเรียนของเราคงจะสู้ไม่ได้. เพราะขณะที่เราออกข้อสอบให้นักเรียนของเราคำนวณพื้นที่สี่เหลี่ยมผืนผ้า หรือ พื้นที่วงกลมอยู่นั้น ข้อสอบของเขาให้เขียนโปรแกรมเลื่อนแผ่นเลขจำนวน 14 แผ่นที่อยู่ในกรอบสี่เหลี่ยมขนาด 4x4 และมีตัวเลขระหว่าง 1 - 14 ที่วางในกรอบตามใจชอบ ให้เลื่อนมาเรียงกัน โดยการเลื่อนนั้นตัองน้อยครั้งที่สุด.
ถ้าเราแวะไปที่แผงร้านขายของเล่นตามตลาด จะเห็นว่าเขาขายของเล่นแบบนี้ แต่แผ่นตัวเลขนั้นมี 15 แผ่น. นานมาแล้วของเล่นชนิดนี้เป็นเกมที่สร้างความปวดสมองให้แก่คนทั่วโลกมาแล้ว แต่เกมนี้กำหนดให้เลข 1 ถึง 13 เรียงกันอยู่แล้ว มีแต่เพียงเลข 14 และ 15 เท่านั้นที่เรียงสลับกัน. เกมเขากำหนดให้สลับเลข 14 กับ 15 ให้ได้. ปรากฏว่าไม่มีใครสามารถเลื่อนได้ตามโจทย์เลย เพราะโจทย์นี้แก้ไม่ได้ (unsolvable).
โจทย์ที่เขาออกนั้นง่ายกว่า เพราะมีตัวเลขเพียง 14 ตัว. ดังนั้นจะสามารถแก้โจทย์ได้ทุกแบบ ไม่ว่าจะวางตัวเลขไว้แบบไหน. แต่เขาไม่ได้ให้ตัวเลขมาเลื่อน. เขาให้นักเรียนเขียนโปรแกรมต่างหาก. โปรแกรมที่จะทำให้คอมพิวเตอร์เลื่อนตัวเลขใด ๆ ได้นั้น หากนักเรียนเขียนได้ถูกต้อง จะเป็นเนื้อโปรแกรมยาวสิบกว่าหน้า!
ด้วยเหตุนี้เอง เมื่อเรากลับมาแล้ว ก็ต้องรีบเตรียมการคัดนักเรียน และ ฝึกฝนให้รู้วิธีแก้ปัญหาต่าง ๆ ซึ่งเนื้อหานั้นมากยิ่งกว่าระดับนักศึกษาปริญญาตรีทั่วไปจะรู้เสียอีก. ในที่สุดทาง สสวท. ก็เชิญ อ. ยืน ภู่วรวรรณ และ อาจารย์ทางด้านคอมพิวเตอร์จากมหาวิทยาลัยหลายแห่งมาช่วยฝึกอบรมนักเรียน. หลังจากนั้นเรื่องนี้ก็กลายเป็นงานประจำไป ประกอบด้วยการคัดเลือกนักเรียนทั่วประเทศมา 30 คน, จัดฝึกอบรมการเขียนโปรแกรมตั้งแต่เบื้องต้น รวมเทคนิคการแก้ปัญหา, และ ซ้อมเขียนโปรแกรมจนกว่าจะชำนาญขนาดเห็นปัญหาก็สามารถคิดคำสั่งให้เลื่อนไหลออกมาได้.
เทคนิคที่เราต้องสอนในการแก้ปัญหา พอสรุปได้ว่ามีเนื้อหาต่อไปนี้
  • การแก้ปัญหาเชิงเรขาคณิต
  • การแก้ปัญหา Optimization เน้นที่ Integer Programming
  • การจัดเรียงข้อมูลแบบเร็ว
  • การสร้างภาพกราฟิกส์ขั้นต้น
  • การคำนวณค่าสถิติต่าง ๆ
  • การคำนวณค่าในเชิง combinatorial
  • การคำนวณเชิงตรรกะและเซ็ต
  • การคำนวณในแบบ Heuristics
  • หลักการด้าน Data Structures

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

ไม่ทราบว่าเขานึกขายหน้าเด็กนักเรียนคอมพิวเตอร์โอลิมปิกบ้างหรือเปล่า?

ไม่มีความคิดเห็น:

แสดงความคิดเห็น