- ใน คอร์สเรียนเขียนโปรแกรม 12 ครั้ง สำหรับนักเรียนมัธยมต้นและมัธยมปลาย ผู้สอนเลือก Forth ซึ่งเป็นภาษาแบบ concatenative ที่อิงสแตกจากปี 1970 เพื่อเน้นแนวคิดพื้นฐานมากกว่าไวยากรณ์
- ออกแบบให้ผู้เรียนใช้จานกระดาษจำลองโครงสร้างแบบเข้าหลังออกก่อนและการคำนวณด้วยตัวเองก่อนย้ายไปทำบนคอมพิวเตอร์ เพื่อให้เข้าใจด้วยร่างกายว่า อินเทอร์พรีเตอร์ Forth ทำงานอย่างไร
- ใช้ Easy Forth ที่ไม่ต้องติดตั้ง โดยกำหนดให้ผลงานสุดท้ายเป็นภาพ แอนิเมชัน หรือเกม นักเรียนปรับกติกาและสีของ Snake หรือสร้างผลงานระดับพิกเซลจนเสร็จ
- Forth มีภาระด้านไวยากรณ์น้อย แต่ผู้เริ่มต้นต้องจัดการโครงสร้างระดับต่ำอย่างสแตกตั้งแต่เนิ่น ๆ และเป็นไปได้ว่า Scratch ซึ่งให้ฟีดแบ็กทางภาพทันทีอาจเหมาะกับคอร์สเบื้องต้นมากกว่า
- สิ่งสำคัญกว่าภาษาใดภาษาหนึ่งคือสภาพแวดล้อมที่เห็นผลลัพธ์ได้เร็วและสำรวจด้วยตัวเองได้ และเมื่อความเสี่ยงจากการพึ่งพา LLM จนเรียนรู้หรือรักษาทักษะไม่ได้เพิ่มขึ้น การศึกษาที่มีมนุษย์เป็นศูนย์กลาง ก็ยิ่งจำเป็น
เหตุผลที่เลือก Forth
- แทนที่จะใช้ Python หรือ Scratch ผู้สอนเลือก Forth ซึ่งเป็น ภาษาแบบ concatenative ที่อิงสแตก เพื่อสำรวจเส้นทางการสอนที่ไม่ค่อยมีใครลอง
- ต้องการหลีกเลี่ยงภาระจากการสอนไวยากรณ์ เพื่อใช้เวลาชั้นเรียนที่จำกัดกับแนวคิดพื้นฐาน
- สำหรับผู้มีประสบการณ์เขียนโปรแกรม Python อ่านเหมือน pseudocode แต่สำหรับคนที่เพิ่งเริ่มเรียนก็ยังเข้าใจยากอยู่ดี
- ภาษาที่พิจารณาคือ Forth และ Haskell
- Forth น่าสนใจตรงที่คำสั่งทำงานตามลำดับที่เขียน ดังนั้นหากเข้าใจสแตกก็สามารถสร้างโปรแกรมได้
- Haskell เข้ากับแนวคิดตัวแปรและฟังก์ชันที่เรียนในคณิตศาสตร์ได้ดี จึงเลี่ยงความสับสนจากแนวทางการเขียนโปรแกรมทั่วไปที่ปฏิบัติกับตัวแปรเหมือนกล่องใส่ค่า
- เหตุผลที่เลือก Forth ในท้ายที่สุดมีสองข้อ
- ผสานเข้ากับสภาพแวดล้อมการเรียนรู้แบบปรับแต่งเองได้ง่าย
- สำหรับการสาธิตผลงานท้ายคอร์สในห้องเรียน เห็นว่า การเขียนโปรแกรมเชิงขั้นตอน จะเข้าใจง่ายกว่าการเขียนโปรแกรมเชิงฟังก์ชัน
- การใช้ภาษาที่ไม่ค่อยเป็นที่รู้จักทำให้นักเรียนที่มีประสบการณ์เขียนโปรแกรมอยู่แล้วได้เรียนรู้สิ่งใหม่ และผู้เริ่มต้นก็ไม่รู้สึกถูกทิ้งไว้ข้างหลัง
การออกแบบหลักสูตร 12 ชั่วโมง
- คอร์สจัดสัปดาห์ละครั้ง ครั้งละ 1 ชั่วโมง รวม 12 ครั้ง และไม่ได้คาดหวังให้นักเรียนทำงานนอกชั้นเรียนมากนัก
- เป้าหมายสุดท้ายคือให้นักเรียนสร้างภาพ แอนิเมชัน หรือเกมอย่างใดอย่างหนึ่งด้วยตัวเองในสภาพแวดล้อม Forth
- ต้องการให้เหลือผลงานที่มองเห็นและเก็บไว้ได้แม้คอร์สจบแล้ว
- ต้องการหลีกเลี่ยงสถานการณ์ที่เรียนเนื้อหาเทคนิคมากมายแต่รู้สึกว่าไม่มีอะไรติดมือ
- นักเรียนแต่ละคนใช้ระบบปฏิบัติการต่างกัน และอุปกรณ์บางเครื่องติดตั้งซอฟต์แวร์ภายนอกไม่ได้ จึงต้องสามารถรันโค้ดบนคอมพิวเตอร์ของตัวเองได้โดยไม่ต้องดาวน์โหลดหรือติดตั้งเพิ่มเติม
- ตอนแรกตั้งใจจะเขียน Forth เองด้วย Rust แล้วฝังเป็น WASM ในเว็บไซต์ของคอร์ส แต่การแก้บั๊กใช้เวลานานกว่าที่คาด จึงเปลี่ยนแผน
- เลือก Easy Forth ของ Nick Morgan เป็นทั้ง หลักสูตรและอินเทอร์พรีเตอร์ และนำสไลด์ แผนการสอนรายครั้ง รวมถึงสำเนา Easy Forth ขึ้นพอร์ทัลออนไลน์
เริ่มบทเรียนจากแนวคิดของคอมพิวเตอร์
- คาบแรกเริ่มจากประวัติศาสตร์ของการคำนวณและคำถามว่าคอมพิวเตอร์คืออะไร
- แสดงอุปกรณ์หลายอย่างรวมถึงลูกคิด แล้วถามว่าเป็นคอมพิวเตอร์หรือไม่ จากนั้นนิยามคอมพิวเตอร์ว่า “ทุกสิ่งที่คำนวณตัวเลข”
- ตามนิยามนี้ แทบทุกอย่างสามารถเป็นคอมพิวเตอร์ได้ และนักเรียนก็พบว่ารวมถึงตัวพวกเขาเองด้วย
- หลังจากขยายความเข้าใจเดิมเกี่ยวกับขอบเขตของคอมพิวเตอร์แล้ว จึงแนะนำ Forth กับ การใช้งานจริง และการประยุกต์ใช้ในระบบฝังตัว
- Easy Forth ตั้งสมมติฐานว่าผู้อ่านรู้ภาษาโปรแกรมอย่างน้อยหนึ่งภาษาและรู้จักโครงสร้างข้อมูลแบบสแตกอยู่แล้ว แต่นักเรียนไม่มีความรู้นั้น จึงต้องอธิบายเพิ่มเติม
เข้าใจ data stack ด้วยจานกระดาษ
- ก่อนใช้คอมพิวเตอร์ ผู้สอนใช้จานกระดาษช่วยให้เห็นภาพ data stack ซึ่งเป็นฐานของ Forth
- ตัวเลขที่คั่นด้วยช่องว่างจะถูกใส่เข้าสแตกตามลำดับที่ป้อน
- หากป้อน
1 2 3แล้วสั่งแสดงผลด้วย. . .สิ่งที่ถูกใส่เข้าทีหลังสุดจะออกมาก่อน กลายเป็น3 2 1 - สแตกเป็นโครงสร้างแบบเข้าหลังออกก่อน (Last-In First-Out) ทำงานหลัก ๆ ด้วยการใส่รายการไว้ด้านบนที่เรียกว่า push และนำรายการออกจากด้านบนที่เรียกว่า pop
- หากป้อน
- นักเรียนแต่ละคนได้รับจานกระดาษและลงมือทำการคำนวณแบบ Forth ด้วยตัวเอง
- เมื่อ push ตัวเลข ก็เขียนตัวเลขบนจานแล้ววางไว้ด้านบนสุด
- เมื่อบวก ก็หยิบจานสองใบด้านบนสุดออกมา บวกกัน แล้ววางจานใบใหม่ที่เขียนผลลัพธ์ไว้ด้านบน
8 6 +คือการใส่ค่าสองตัวแล้วบวกกัน จากนั้นวาง14ไว้บนสแตก2 3 *คือการวาง6ซึ่งเป็นผลคูณของสองค่าไว้บนสแตก
- ทำซ้ำหลายการคำนวณเพื่อให้นักเรียนรับบทเป็น อินเทอร์พรีเตอร์ Forth ด้วยตัวเอง
- หลังจากเข้าใจว่าคอมพิวเตอร์ทำงานนี้โดยอัตโนมัติ จึงเปลี่ยนไปใช้เครื่องจริง
ลงมือใช้ Easy Forth และผลงานสุดท้าย
- ทุกสัปดาห์เรียนตามบทเรียนของ Easy Forth พร้อมอธิบายแนวคิด ทำแบบฝึกหัด และถามตอบ โดยทั้งคอร์สดำเนินไปโดยไม่มีปัญหาพิเศษ
- สำหรับโปรเจกต์สุดท้ายที่ต้องทำให้เสร็จภายใน 12 ชั่วโมงและแสดงสิ่งที่เรียนมา ผู้สอนใช้เฟรมเวิร์กกราฟิกของ Easy Forth
- ให้นักเรียนสร้างภาพ แอนิเมชัน หรือเกมได้
- เนื่องจากเวลาอาจไม่พอสำหรับทำเกมใหม่ให้เสร็จ จึงแนะนำให้แก้ เกม Snake ที่มีมาให้เพื่อสร้างผลลัพธ์ที่เป็นเอกลักษณ์
- ดึงโค้ดจาก playground ของ Easy Forth ออกมาเป็นหน้าแยก และขยายให้ด้านหนึ่งเป็นโค้ด อีกด้านเป็นพื้นที่กราฟิกขนาดใหญ่
- ในคาบสุดท้าย นักเรียนค้นพบอย่างรวดเร็วว่าแค่เปลี่ยนโค้ด Snake เล็กน้อย กติกาและสีก็เปลี่ยนไป
- แม้ยังไม่ถึงระดับทำ refactoring ขนาดใหญ่ แต่ก็คุ้นเคยพอที่จะสำรวจและแก้ไข Forth โดยไม่กลัว
- แสดงวิธีวาดวัตถุด้วยกราฟิกในตัว และตัวอย่างการสร้างคำใหม่ที่ช่วยวาดรูปทรงอย่างเส้นได้ง่าย
- นักเรียนทุกคนเลือกผลงานของตัวเอง โดยส่วนใหญ่สร้างภาพแบบพิกเซลทีละจุด
- หลังจบคอร์ส ผู้สอนยังคงเปิดสภาพแวดล้อมออนไลน์ไว้ระยะหนึ่ง เพื่อให้นักเรียนที่ต้องการสามารถทดลองและเรียนรู้ต่อได้
ข้อสรุปจากการสอน Forth
- Forth เป็นภาษาสำหรับการสอนที่น่าสนใจ แต่ไม่แน่ใจว่าเป็นตัวเลือกที่ดีที่สุดหรือไม่
- แม้ไม่มีไวยากรณ์ยุ่งยาก แต่ผู้เริ่มต้นต้องคิดถึงองค์ประกอบระบบที่โปรแกรมเมอร์จำนวนมากมักซ่อนไว้ใต้ abstraction โดยตรง
- สแตกเป็นโครงสร้างข้อมูลพื้นฐานของวิทยาการคอมพิวเตอร์ แต่ไม่จำเป็นต้องวางไว้หน้าสุดของการสอนช่วงต้น
- จุดแข็งคือการเขียนโค้ดเป็นลำดับของคำได้ และภาษาแบบ concatenative ที่มีองค์ประกอบระดับสูงกว่านี้ก็อาจมีประโยชน์ต่อการสอน
- ภาษาอย่าง Factor หรือแนวทางที่ต่างออกไปโดยสิ้นเชิงก็อาจเป็นตัวเลือกได้
- หากเลือกใหม่ อาจพิจารณาสื่อที่เน้นฟีดแบ็กทางภาพที่ชัดเจนและทันทีมากกว่าโครงสร้างภายใน
- Scratch สามารถสอน control flow, ตัวแปร, ฟังก์ชัน และอื่น ๆ โดยไม่ต้องลงรายละเอียดระดับต่ำ และขยับ sprite ได้ง่าย
- ตัวภาษาโปรแกรมเฉพาะไม่ได้สำคัญมากนัก และแม้ในคอร์สสั้น ๆ นักเรียนก็เรียน Forth ได้อย่างมีประสิทธิภาพ
- นักเรียนแต่ละคนอาจเหมาะกับ paradigm ที่ต่างกัน จึงยากจะปรับกระบวนการเรียนรู้ให้ละเอียดสมบูรณ์แบบ
- สิ่งสำคัญคือสภาพแวดล้อมที่เห็นผลลัพธ์ได้เร็ว ทำซ้ำได้ และช่วยให้ สำรวจด้วยตนเอง
- นักเรียนได้รับประสบการณ์เบื้องต้นระดับต่ำที่ทำให้เข้าใจโครงสร้างข้อมูลพื้นฐานของวิทยาการคอมพิวเตอร์อย่างลึกซึ้ง
- สำหรับผู้สอนเอง ก็เป็นโอกาสในการปรับปรุงวิธีสอนด้วยแนวทางเดียวกับการเรียนรู้ซ้ำ ๆ ที่เรียกร้องจากนักเรียน
การเรียนรู้ที่มีมนุษย์เป็นศูนย์กลางซึ่งจำเป็นในยุค LLM
- ยิ่งการเขียนโปรแกรมถูกขับเคลื่อนด้วยระบบอัตโนมัติเชิงความน่าจะเป็นมากขึ้นเท่าไร การสอนให้มนุษย์เขียนโปรแกรมด้วยตัวเองก็ยิ่งสำคัญขึ้นเท่านั้น
- แม้คนที่เขียนโปรแกรมเป็นอยู่แล้ว หากพึ่งพา LLM ก็อาจ ทำให้ทักษะถดถอยได้ และคนที่ไม่ได้เรียนตั้งแต่ต้นอาจ ไม่สามารถสร้างทักษะนั้นขึ้นมาได้เลย
- ผู้ที่ต้องการเรียนทักษะใหม่ ๆ ก็ใช้ LLM แทนสื่อที่มีชื่อเสียงเชื่อถือได้มากขึ้นเรื่อย ๆ
- LLM อาจ ไม่ถูกต้อง, มีแนวโน้ม ประจบผู้ใช้ และในบางกรณีอาจ ทำให้อาการป่วยทางจิตรุนแรงขึ้นอย่างมาก
- สำหรับเด็กที่อยู่ในช่วงเรียนรู้วิธีปฏิสัมพันธ์กับโลก คุณลักษณะเหล่านี้ยิ่งอันตรายกว่าเดิม
- เราต้องจัดหา สภาพแวดล้อมที่มีมนุษย์เป็นศูนย์กลาง ซึ่งทุกคน โดยเฉพาะเด็ก ๆ สามารถเรียนทักษะอย่างการเขียนโปรแกรมได้ ไม่ว่าพื้นเพจะเป็นอย่างไร
- ผู้คนจากหลากหลายพื้นเพจำเป็นต้องใช้เวลาและพลังงานในการแบ่งปันความรู้ และสอนวิธีได้รับความรู้เพิ่มเติมอย่างปลอดภัยด้วย
- แม้ไม่ใช่ครูมืออาชีพ ก็ต้องเรียนรู้วิธีสอน และสร้างพื้นที่ที่ความรู้ไหลเวียนระหว่างผู้คนได้อย่างอิสระ
1 ความคิดเห็น
ความเห็นจาก Lobste.rs
Easy Forth ดูเหมือนจะเป็นแหล่งข้อมูลที่ดี และอยากแนะนำให้โปรแกรมเมอร์ทุกคนลองใช้เวลา 10 นาทีสัมผัส Forth ดู เป็นภาษาที่เรียนรู้ง่ายมาก ทั้งคุ้นเคยและสั่นคลอนวิธีคิดไปพร้อมกัน และยังนำไปใช้สร้างภาษาระดับสูงแบบเร่งด่วนตั้งแต่ต้นได้ง่าย
DOES>ไม่เป็นเช่นนั้นการเขียน Forth implementation นั้นสนุก แต่ยิ่งเขียนโค้ดมากก็ยิ่งชอบน้อยลง เพราะมี คำสั่งรบกวนสายตา อย่าง
DUP,ROT,SWAPที่ทำให้ตามโฟลว์ได้ยาก และยังค่อนข้างส่งเสริมการใช้ตัวแปร global ซึ่งไม่ใช่สิ่งที่ชอบhttps://archive.ph/0ZOVa