1 คะแนน โดย GN⁺ 6 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ใน คอร์สเรียนเขียนโปรแกรม 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 แทนสื่อที่มีชื่อเสียงเชื่อถือได้มากขึ้นเรื่อย ๆ
  • เราต้องจัดหา สภาพแวดล้อมที่มีมนุษย์เป็นศูนย์กลาง ซึ่งทุกคน โดยเฉพาะเด็ก ๆ สามารถเรียนทักษะอย่างการเขียนโปรแกรมได้ ไม่ว่าพื้นเพจะเป็นอย่างไร
  • ผู้คนจากหลากหลายพื้นเพจำเป็นต้องใช้เวลาและพลังงานในการแบ่งปันความรู้ และสอนวิธีได้รับความรู้เพิ่มเติมอย่างปลอดภัยด้วย
  • แม้ไม่ใช่ครูมืออาชีพ ก็ต้องเรียนรู้วิธีสอน และสร้างพื้นที่ที่ความรู้ไหลเวียนระหว่างผู้คนได้อย่างอิสระ

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

 
GN⁺ 6 시간 전
ความเห็นจาก Lobste.rs
  • การให้เด็กและวัยรุ่นได้สัมผัสกับ เครื่องมือและภาษาเชิงคอมพิวติ้งที่ไม่ใช่กระแสหลัก มีประสิทธิภาพในการสอนให้เห็นขอบเขตของวงการคอมพิวติ้งและแนวทางที่หลากหลายในการนำไปใช้แก้ปัญหา
  • ชอบ Forth มาก แต่สำหรับการสอนอาจไม่ใช่ตัวเลือกที่ดีที่สุด ถึงอย่างนั้น สำหรับโปรแกรมเมอร์แล้ว การได้สัมผัสกับ กระบวนทัศน์การเขียนโปรแกรมที่หลากหลาย เป็นเรื่องสำคัญ
    Easy Forth ดูเหมือนจะเป็นแหล่งข้อมูลที่ดี และอยากแนะนำให้โปรแกรมเมอร์ทุกคนลองใช้เวลา 10 นาทีสัมผัส Forth ดู เป็นภาษาที่เรียนรู้ง่ายมาก ทั้งคุ้นเคยและสั่นคลอนวิธีคิดไปพร้อมกัน และยังนำไปใช้สร้างภาษาระดับสูงแบบเร่งด่วนตั้งแต่ต้นได้ง่าย
    • ส่วนใหญ่ของ Forth นั้นเรียบง่าย แต่องค์ประกอบอย่าง DOES> ไม่เป็นเช่นนั้น
      การเขียน Forth implementation นั้นสนุก แต่ยิ่งเขียนโค้ดมากก็ยิ่งชอบน้อยลง เพราะมี คำสั่งรบกวนสายตา อย่าง DUP, ROT, SWAP ที่ทำให้ตามโฟลว์ได้ยาก และยังค่อนข้างส่งเสริมการใช้ตัวแปร global ซึ่งไม่ใช่สิ่งที่ชอบ
  • มีเพื่อนแนะนำ Forth เพราะบอกว่าชอบเรียนรู้ภาษาโปรแกรมที่น่าสนใจ และตั้งใจว่าจะลองเรียนจริง ๆ
  • หากตอนนี้เข้าไปที่หน้านั้นไม่ได้ ก็สามารถใช้ archive นี้ได้
    https://archive.ph/0ZOVa
    • ที่จริงแล้วไม่ใช่ว่าหน้านั้นถูกถอดออก แต่เป็นเพราะ ISP บล็อก อยู่