วันอาทิตย์ที่ 28 กรกฎาคม พ.ศ. 2562

ขอพูดถึงเรื่องวิชา Coding กับเขาบ้าง

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

ก่อนอื่นต้องบอกว่าถ้าเราได้ติดตามข่าวด้านการศึกษาในช่วงสองสามปีมานี้ จะพบว่าทางกระทรวงศึกษาธิการได้มีการปรับปรุงหลักสูตรที่เริ่มใช้ในปีการศึกษา 2561โดยเปลี่ยนวิชาเทคโนโลยีสารสนเทศจากหมวดการงาน มาเป็นวิชาวิทยาการคำนวณในหมวดวิทยาศาสตร์ ซึ่งโค้ดดิงเป็นส่วนหนึ่งของวิทยาการคำนวณ ดังนั้นเรื่องการโค้ดดิงนี้จึงไม่ใช่เรื่องใหม่ที่จะมาคิดริเริ่มจากกระทรวงศึกษาในรัฐบาลนี้ ซึ่งจุดประสงค์ของวิทยาการคำนวณนั้นเท่าที่ติดตามดู ไม่ได้ตั้งใจจะสร้างเด็กออกไปเป็นนักพัฒนาโปรแกรม แต่ต้องการสร้างกระบวนการคิดอย่างเป็นระบบ สามารถใช้งานเทคโนโลยีดิจิทัล และรู้เท่าทันสื่อสมัยใหม่ เพื่อให้มันติดตัวเขาไปไม่ว่าในอนาคตเขาจะไปประกอบอาชีพใด เข้าใจว่าเด็กที่เรียนในปี 2561 จะเป็นเด็ก ป.1 ป.4 ม.1 และ ม.4

ในแง่ที่เกี่ยวข้องกับโค้ดดิง ในเด็กเล็กประถมต้น เขาจะไม่ได้ให้เรียนเขียนโปรแกรมกับคอมพิวเตอร์ แต่จะสร้างการคิดอย่างเป็นระบบผ่านทางเครื่องมืออย่างการ์ดคำสั่ง หรือเกมกระดาน (board game) เป็นต้น เด็กป.4 จะได้เรียนการเขียนโปรแกรมผ่านทางภาษาโปรแกรมประเภท Block Programming คือลักษณะการเขียนโปรแกรมที่นำเอา Block คำสั่งมาเรียงต่อกัน ซึ่งภาษาที่เขาจะให้เรียนคือ Scratch ซึ่งจะให้เรียนในชั้น ป.4  ส่วนเด็กมัธยมก็จะได้เรียนเขียนโปรแกรมด้วยภาษา Python ซึ่งเป็นภาษาที่เรียนรู้ได้ง่าย เท่าที่ตามข่าวมาและพยายามทำความเข้าใจก็คือเขาน่าจะไม่ได้ให้เด็กไปเน้นที่ตัวไวยากรณ์ของภาษา ดังนั้นภาษาเขียนโปรแกรมที่เลือกใช้จึงเป็นภาษาที่เข้าใจง่าย เพื่อให้ผู้เรียนได้เน้นที่กระบวนการคิดแก้ปัญหาอย่างมีตรรกะ และเป็นระบบมากกว่า   

ในส่วนของคำว่าโค้ดดิงผมขออ้างอิงจาก  Facebook ของ อ.ยืน ภู่วรวรรณ ปรมาจารย์ด้านวิทยาการคอมพิวเตอร์ของประเทศไทยคนหนึ่งที่บอกว่า

"โค้ดดิ้ง (Coding) เป็น Broader term ส่วน คอมพิวเตอร์ โค้ดดิ้ง (Computer coding) หรือ โปรแกรมมิ่ง (Programming) เป็น Narrow term คือมีความหมายที่แคบกว่า หรือเป็น Subset
โค้ด คือรหัส หรือการทำสัญลักษณ์ การโค้ดดิ้งคือ การเขียนสัญลักษณ์ เพื่อการบอกลำดับขั้นตอน ลำดับความคิด เพื่อสื่อสารให้เข้าใจกัน"

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

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

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

ดังนั้นการโค้ดดิงและภาษาที่สามน่าจะหมายถึงการทำให้เด็กคิดแก้ปัญหาได้อย่างมีตรรกะ และสื่อสารได้อย่างเป็นระบบหรือเปล่า? ซึ่งตรงนี้เท่าที่อ่านจากหลาย ๆ สื่อ มีคนบอกว่าถ้าจะหมายถึงอย่างนี้เปลี่ยนจากคำว่าโค้ดดิงเป็นอย่างอื่นดีไหม เช่นความสามารถในการแก้ปัญหา (problem solving) อย่างเป็นระบบอะไรแบบนี้ ซึ่งตรงนี้ผมว่ามีความสำคัญนะครับ เพราะถ้าไม่สื่อสารชี้แจงกันให้ดี ผมว่าเดี่ยวมันก็จะกลายเป็นเหมือนการสอนภาษาอังกฤษในบ้านเราที่เน้นกันแต่ไวยากรณ์ แต่เอาไปพูดกับฝรั่งไม่ได้ การเรียนโค้ดดิงนี่ก็อาจจะกลายเป็นเน้นอะไรแบบนี้ เธอเขียนสัญญลักษณ์ของโฟลว์ชาร์ตตัวนี้ผิดนะ หรือคำสั่ง "Print()" ของเธอผิดนะ เพราะเธอใช้ P จริง ๆ ต้องใช้ p อะไรแบบนี้ 

สุดท้ายผมขอจบบล็อกนี้ด้วยการยกตัวอย่างให้เห็นว่าการคิดอย่างเป็นระบบนั้นมันอยู่รอบ ๆ ตัวเรา บางครั้งมันก็เป็นเรื่องง่าย ๆ ที่เรามองข้ามไป

(หมายเหตุเรื่องที่จะเล่าต่อไปนี้ มาจากเรื่องจริง แต่อาจมีการดัดแปลงคำพูดบางอย่าง และตัวละครเพื่อให้มีความเหมาะสม :))

หลายปีก่อนนักศึกษาป.ตรีที่เป็นนักศึกษาในที่ปรึกษาผม นำเล่มที่จะต้องใช้ขึ้นสอบหัวข้อมาให้ดูเป็นครั้งแรก นักศึกษาเขียนมาครบสามบทที่ต้องมีในการสอบ แต่นักศึกษาใช้วิธีรันเลขรูปแบบนี้สมมติบทที่ 1 มี 10 รูป ก็รันไปรูปที่ 1 ไปถึงรูปที่ 10 พอขึ้นบทที่ 2 ก็เริ่มตั้งแต่รูปที่ 11
ผม: คุณได้เคยเปิดเล่มของรุ่นพี่ดูบ้างไหมว่าเขารันเลขรูปยังไง
นศ.: ไม่เคยครับ
ผม: (เอาเล่มรุ่นพี่ให้ดู) เขารันยังไง
นศ.: เขารันแบบบทที่ 1 ก็ใช้รูป 1.1 1.2 ไปเรื่อย ๆ พอบทที่ 2 ก็เริ่มรันจาก 2.1 2.2 โอเค ผมเข้าใจแล้วครับ เดี๋ยวกลับไปแก้เลยครับ สวัสดีครับ
ผม: เดี๋ยว รู้ไหมทำไมเขาทำแบบนี้
นศ.: (ทำหน้าครุ่นคิดอยู่พักหนึ่ง) เอ้อ เพื่อความเป็นระเบียบหรือครับ
ผม: อืม มองไม่ออกจริง ๆ หรือ คุณลองคิดสิว่าถ้ารันเลขรูปแบบคุณ สมมติว่าถ้าผมบอกว่าให้คุณไปเพิ่มรูปในบทที่ 1 ไปรูปหนึ่งมันจะเกิดอะไรขึ้น
นศ.: (ทำหน้าแบบเกิดความรู้แจ้งสุดขีด) โอ้วเข้าใจแล้วครับ ผมก็ต้องไปรันเลขรูปใหม่ทั้งหมดในบทที่ 2 และบทที่ 3 ด้วย แต่ถ้าทำแบบพี่การเพิ่มหรือลดรูปในบทที่ 1 ก็จะไม่กระทบส่วนที่เหลือของเล่มครับ ขอบคุณครับ สวัสดีครับ
ผม: เดี๋ยว
นศ.: (ทำหน้าแบบจะเอายังไงกับตูอีกวะ)
ผม: แล้วรู้ตัวไหมว่ามันน่าอายที่เราซึ่งเป็นนักศึกษาวิทยาการคอมพิวเตอร์ แต่เราไม่สามารถประยุกต์ความรู้ที่เราเรียนและใช้มาตลอดเวลาที่เราทำโปรแกรมมาใช้กับสิ่งที่อยู่ในชีวิตประจำวันของเราได้ ไหนลองตอบหน่อยสิว่าสิ่งที่รุ่นพี่ทำนี่มันน่าจะตรงกับอะไรในสิ่งที่เราเรียนและใช้ทำโปรแกรมมา
นศ.: (ทำหน้าแบบ จัดเล่มมันเกี่ยวอะไรกับทำโปรแกรมวะ ผ่านไปสักครู่ ทำหน้าแบบเกิดความรู้แจ้งสุดขีด) ได้แล้วครับ Modular Design ครับอาจารย์ ถ้าเราออกแบบและพัฒนาเป็นโมดูล การแก้ไขใด ๆ ก็จะกระทบเฉพาะในโมดูลนั้น
ผม: เออ ดีแล้ว เข้าใจแล้วนะ ไปได้ อาจารย์จะได้ดู Netflix ต่อ เอ๊ยไม่ใช่ทำงานต่อ