คณิตศาสตร์ในเด็กประถม

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

สอนความคิดสร้างสรรค์ให้เด็กด้วย Scratch

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

หลักการเขียนโปรแกรมใน BYOB ตอนที่ 2

ฟังก์ชัน square สามารถวาดรูปสี่เหลี่ยม 100 x 100 ได้ขนาดเดียวทุกคร้้งที่เรียกใช้ฟังก์ชันนี้ ซึ่งไม่ค่อยยืดหยุ่น ถ้าเราต้องการสี่เหลี่ยมขนาดอื่นละ ทำได้ไหม ตามหลักการแล้ว คือการทำ Generalization ให้กับฟังก์ชัน โดยการส่งผ่านข้อมูลให้กับฟังก์ชัน เพื่อให้ฟังก์ชั่นทำงานได้ยืดหยุ่นขึ้น ไม่เฉพาะเจาะจงอยู่กับการทำงานเพียงแบบเดียว (วาดรูปสี่เหลี่ยม 100 x 100) เช่น ถ้าต้องการวาดสี่เหลี่ยมขนาดอื่นๆ ทำได้ด้วยการให้ข้อมูลขนาด (size) ให้กับฟังก์ชัน square เพื่อให้ได้สี่เหลี่ยมตามขนาดที่ใส่เข้าไปในฟังก์ชัน square (size) อย่างไรก็ตาม รูปที่ได้ยังเป็นสี่เหลี่ยมจัตุรัสทุกคร้้ง ถ้าต้องการให้เป็นสี่เหลี่ยมผืนผ้าละ ต้องทำอย่างไร ก็คงต้องให้ข้อมูลมากขึ้น คือให้ความกว้าง กับ ความยาวของสี่เหลี่ยม จะเห็นได้ว่ายิ่งต้องการให้ฟังก์ชันทำงานได้หลากหลายรูปแบบ ก็ต้องเพิ่มข้อมูลให้กับฟังก์ชันด้วย ลองนึกดูว่า ถ้าต้องการให้ได้สี่เหลี่ยมแบบอื่นด้วยละ เช่น สี่เหลี่ยมขนมเปียกปูน สี่เหลี่ยมคางหมู ต้องเพิ่มข้อมูลอะไรบ้างให้กับฟังก์ชัน นอกจากเพิ่มข้อมูลเข้าไปแล้ว การทำงานภายในของฟังก์ชันก็ต้องเปลี่ยนด้วย มากน้อยขึ้นกับวัตถุประสงค์ใหม่ของฟังก์ชัน โดยสรุป ระดับของการทำ Generalization ให้กับฟังก์ชันต้องดูความเหมาะสม ฟังก์ชันที่ทำงานได้สารพัดอย่างย่อมมีความซับซ้อนตามไปด้วย การใส่ข้อมูลให้กับฟังก์ชัน ทำให้หน้าตาของมัน (function interface) เปลี่ยนไป ฟังก์ชันด้านซ้ายคือ ฟังก์ชันวาดรูปสี่เหลี่ยมจัตุรัสได้หลายขนาด "square (size) steps" กับฟังก์ชันวาดรูปสี่เหลี่ยมผืนผ้าตามขนาดกว้าง x ยาว  "square (width) …

เรียน JavaScript ผ่านเว็บ

สำหรับคนที่ต้องการเรียน JavaScript ผ่านเว็บไซต์ ขอแนะนำเว็บไซต์ Codecademy สอนเขียนโปรแกรมทีละขั้นตอน ด้วยคำสั่ง คำอธิบาย สั้นๆ ง่ายๆ โดยผู้เรียนเขียนโค้ดในเว็บได้เลย และ ถ้าสมัครเป็นสมาชิก ก็จะสามารถบันทึกข้อมูลการเรียนที่ผ่านมาได้ ไม่จำเป็นต้องเรียนรวดเดียว ช่วงนี้ใช้ได้ฟรี แต่อนาคตอาจเสียเงิน ลองดูนะครับ

หลักการเขียนโปรแกรมใน BYOB ตอนที่ 1

ความสามารถในการสร้างฟังก์ชัน หรือการสร้างบล็อกใหม่ขึ้นมาได้ใน BYOB เป็นการเพิ่มขีดความสามารถในการเขียนโปรแกรมให้กับ Scratch เนื่องจากฟังก์ชันถือเป็นเครื่องมือสำคัญ ในการเขียนโปรแกรม แต่ใช่ว่า Scratch จะทำอะไรเกี่ยวกับฟังก์ชันไม่ได้เลย ลองอ่าน ฟังก์ชันใน Scratch 1 และ 2 การสร้างฟังก์ชันเป็นการลดความซับซ้อน และซ่อนรายละเอียดของการทำงาน ให้อยู่ในรูปของชื่อฟังก์ชันแทน ในทางทฤษฎีเรียกกระบวนการนี้ว่า แอ็บสแทรกชัน (Abstraction) การสร้างฟังก์ชัน หรือ การนิยามฟังก์ชัน เช่นฟังก์ชัน square เป็นการผูกชื่อของฟังก์ชัน (square) กับ ส่วนคำสั่งการทำงานของฟังก์ชัน (วาดรูปสี่เหลี่ยมขนาด 100 x 100) เมื่อนิยามฟังก์ชัน square ขึ้นมาแล้ว ชื่อฟังก์ชันจะแทนแนวคิดที่อยู่เบื้องหลัง (การวาดรูปสี่เหลี่ยม) เมื่อใดที่ต้องการวาดรูปสี่เหลี่ยม ก็สามารถเรียกใช้งานฟังก์ชันผ่านการเรียกชื่อฟังก์ชัน square (function call) ส่วนการทำงานจริงจะอยู่ที่ตัวฟังก์ชัน (function body) ซึ่งมีคำสั่งต่างๆ ตั้งแต่จรดปากกา เดินเป็นรูปสี่เหลี่ยมพร้อมกับลากเส้นไปด้วย เมื่อไรจำเป็นต้องสร้างฟังก์ชันขึ้นใช้เอง โดยปกติฟังก์ชันมักถูกคิดไว้ก่อนแล้ว ตอนออกแบบโปรแกรม อย่างไรก็ตาม เมื่อเขียนโปรแกรมไป …