หน้าเว็บ

01 ตุลาคม 2551

017 | Python กับการเขียนโปรแกรมเบื้องต้น

เทอมนี้ผมได้สอนวิชา การเขียนโปรแกรมคอมพิวเตอร์ (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 นั่นเอง

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

1 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...

ตอนนี้เป็นปี 2009 แล้วนะครับ

สงครามของโลกโปรแกรมมิ่งหนักหน่วงขึ้นทุกทีๆ

มือใหม่ที่ขาดความเข้าใจ ขาดการเรียนรู้จากผู้ที่มีประสบการณ์ที่ดี อาจจะขยาด ถอยหนีจากความอยากเป็นโปรแกรมเมอร์ไปเลยทีเดียว

สงคราม Dot.Net กับ Java และ Adobe(Flash/Flex/Air)
เป็นสิ่งที่เราต้องติดตามอย่างรู้ทัน

ผมเองเป็นมือสมัครเล่น แต่มีใจรักเป็นทุนอยู่มาก
โดยส่วนตัว ชอบ BASIC น่าเสียดายที่ VB ง่ายๆ
ถูกทำให้กลายพันธ์ไปกับ Dot.Net ด้วย

สิ่งหนึ่งที่ Microsoft ทำได้ดีคือ ทำให้โปรแกรมมีขนาดโตมากขึ้นเรื่อยๆ ต้องการ Resource มากขึ้นเรื่อยๆ

Python (Interpreter) เองมีขนาดเล็กมาก version 3.0 มีขนาดเพียง 13 Mb สามารถ Install ได้สะดวกรวดเร็วมาก

มีคนกล่าวว่า Python เป็นภาษาที่ดีมาก แต่มาผิดเวลานิดหน่อย (ถ้ามาก่อน Java ก็จะรุ่งกว่านี้มาก) พอจะเริ่มเข้าตากรรมการผู้ใช้ทั่วไป ก็มี Ruby เข้ามาร่วมวงด้วย

อย่างไรก็ตามการที่ Google ใช้ Python ย่อมเป็นเครื่องพิสูจน์ความสำเร็จที่ปฏิเสธไม่ได้

จากการค้นการศึกษาอยู่พักใหญ่ๆ เจะเห็นได้ไม่ยากว่า Python เป็นภาษาที่มีคนใช้จำนวนมาก ในช่วงระยะเวลาอายุไม่กี่ปีของ Python เอง

ผมเองจะลงมือใช้ Python อย่างเต็มที่ ก็ติดอยู่กับการใช้ภาษาไทย ซึ่งพึ่งจะทดลองใช้งานได้

สำหรับการสอนนั้น ผมเห็นด้วยว่า Python นั้นมีความเหมาะสมมาก

สักพักเราอาจจะลองดูกับ Ruby

และก็ต้องคอยติดตามค่าย Adobe(Flex/Air) ด้วย

----------------------------------------------------

ส่วน Dot.Net นั้น เหมือนถูกบังคบให้ใช้โดยไม่รู้ตัวอยู่แล้ว
รวมทั้ง Java ด้วย

เมื่อเรามีประสบการณ์มากขึ้น ก็ย่อมจะหยิบมาทดลองใช้งานได้

ณ ปัจจุบันนี้ Interpreter กับ Compiler แถบจะแยกจากกันไม่ออกว่าใครเป็นใคร