บันทึกความเป็นไปตลอด 1 เทอมในการสอนภาษา Python ในวิชาเขียนโปรแกรมเบื้องต้นของนักศึกษาปี 1 ครับ

เทอมนี้ผมได้สอนวิชา การเขียนโปรแกรมคอมพิวเตอร์ (Principle of Programming) สำหรับนักศึกษาปี 1 และผมก็ตื่นเต้นเหลือเกินเพราะไม่คิดว่าชีวิตนี้จะได้มาสอนเขียนโปรแกรม ผมพอรู้ตัวดีว่าผมไม่แน่นการเขียนโปรแกรมแบบนี้ (ปกติเขียนแต่เว็บ) ตอนผมเรียนปี 1 ได้เรียนภาษา Pascal กับ C ก็ย่ำแย่ไม่ใช่น้อย เรียกได้ว่าผ่านมาด้วยความเมตตาของอาจารย์เลยแหละ

แล้วพอรู้ตัวว่าจะต้องมาสอนวิชานี้ ผมก็คิดอยู่ว่าจะสอนด้วยภาษาอะไรดี เนื่องจากที่นี่ไม่ได้บังคับ อาจารย์บางคนอาจจะสอน Java บางคนอาจสอน C (แต่ส่วนใหญ่จะเป็น C ตามธรรมเนียมที่สืบทอดกันมา) และด้วยความที่มีนิสัยผิดแปลกจากชาวบ้านเขา ผมก็เริ่มคิดที่จะเปลี่ยนภาษาที่ใช้สอน...

ทำไมต้องเปลี่ยน ? เหตุผลสำคัญ ของผมก็คือ อยากจะให้นักศึกษาได้เรียนรู้ภาษาคอมพิวเตอร์เบื้องต้นภาษาใหม่ๆ ที่เขาว่ากันว่าเขียนง่าย เขียนเร็ว และต้องเป็นไปตามแบบแผนของภาษาคอมพิวเตอร์ที่เป็นเสมือนแบบอย่างที่ใช้สอน กันมาแต่เก่าก่อนอย่างภาษา C/C++ ด้วย

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

ในที่สุด ผมก็ List ภาษาคอมพิวเตอร์ที่คิดว่าเอามาสอนได้ แล้วก็ได้มาตามนี้ครับ

- C
- Java
- Ruby
- Python

ภาษา C : ตัวเลือกที่ปลอดภัยที่สุด ก็คือสอนตามๆ เขานั่นแหละครับ

ภาษา Java : ตัวเลือกที่ดูดีขึ้น มาอีกระดับหนึ่ง แต่การนำไปสอนนักศึกษาปีหนึ่งนั่นอาจจะดูโหดร้ายไปสักนิด เพราะนักศึกษา 98% ในกลุ่มที่จะสอนนี้ไม่เคยเขียนโปรแกรมมาก่อน (และไม่เคยเรียนรู้เรื่องของกระบวนการพัฒนาโปรแกรม, เรื่องของ Algorithms ด้วย) แค่เขียนแบบ Structure ก็ดูจะไม่ใช่เรื่องง่ายที่จะทำความเข้าใจแล้ว นี่ไปพูดถึง Object-Oreinted ผมคงโดนนักศึกษากลุ่มนี้เกลียดชัีงไปตลอดชีวิต (ha)

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

ภาษา Ruby : เหมาะสมในเรื่องของความง่ายในการเขียนโปรแกรม แต่ปัญหาคือสำหรับแถวนี้ (แถวไหนลองคิดเอาเอง) ภาษา Ruby เป็นเรื่องใหม่มากๆ และเอกสารอ้างอิง / ข้อมูลจากอินเตอร์เน็ต ยังหายากอยู่ ผมคิดว่าตัวเลือกนี้เหมาะสมน้อยที่สุด

ภาษา Python : ดูเป็นตัวเลือกที่น่าสนใจ ด้วยความง่ายของภาษา, ข้อดีจากสื่อแหล่งต่างๆ ที่ชื่นชมกัน, แหล่งข้อมูลในรูปแบบภาษาไทยก็ยังหาได้ง่าย (มีหนังสือของ สสท. เล่มหนึ่ง, เอกสารที่ Download จากอินเตอร์เน็ต, เว็บ codenone.com) ผมคิดว่านี่เป็นตัวเลือกที่ดีเลยแหละ

สุดท้ายคนที่ตัดสินใจว่าจะใช้ภาษาใดในการเรียนการสอน ก็คือผู้เรียนนั่นเองครับ

ผมถามนักศึกษาในคาบแรกที่เข้าสอน ว่าจะเรียนภาษาอะไร ระหว่าง C กับ Python (เหลือสองตัวเลือกเพราะเหตุผลดังที่กล่าวมา) นักศึกษาในกลุ่มนี้มีบางคนซิ่วมาจาก ม.อื่น และเคยเรียนภาษา C มาบ้างแล้ว ทั้งห้องโหวตกันและเลือกภาษา Python ครับ..

เหตุผลของนักศึกษามีนิดเดียว คือเขาถามผมว่า ภาษาไหนใหม่กว่ากัน ระหว่าง C กับ Python เขาอยากเรียนภาษาใหม่ๆ อยากตามทันเทคโนโลยีและกระแสนิยม

สุดท้ายผมก็ใช้ภาษา Python สอน ผมเคย Search เจอในอินเตอร์เน็ตก็มีคนบอกว่า บาง ม.ก็ใช้ Python สอนเด็กปี 1 เหมือนกัน ผมเลยอุ่นใจขึ้นมาอีกนิดหน่อยว่า อย่างน้อยก็ไม่ใช่เราคนเดียวละที่แหกคอก

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

ผมติดตามพัฒนาการด้าน Programming ของนักศึกษากลุ่มนี้มาตลอดทั้งเทอม และผมได้เห็นความเปลี่ยนแปลงที่เกิดขึ้นซึ่งก็เป็นไปตามที่ผมคาดหวังไว้

พวกเขาไม่ได้เริ่มต้นจาก C แต่พวกเขาสามารถเขียนโปรแกรมได้ตามหลักการที่ถูกต้อง พวกเขาเรียนรู้และเข้าใจโครงสร้างข้อมูลแบบต่างๆ พวกเขารู้จัก Array แม้จะไม่เคยใช้ (เพราะไม่มีใน Python) แต่ก็รู้จักประโยชน์ของ List (ซึ่งมีประสิทธิภาพมากกว่า Array) พวกเขาสามารถเขียนโปรแกรมที่ทำงานได้ โดยใช้เวลาน้อยกว่าการเขียนด้วยภาษา C เกือบเท่าตัว

แน่นอนครับ สุดท้ายแล้วสิ่งที่ผมต้องการจะจุดประกายให้นักศึกษากลุ่มนี้ ก็คือ Rapid Programming นั่นเอง

พรุ่งนี้จะสอบปลายภาคแล้ว ได้ผลเป็นอย่างไรผมจะมาเขียนเล่าให้อ่านกันอีกทีครับ