แนะนำบน HN: ภาษาภาพแบบใหม่สำหรับสอนเขียนโค้ดให้เด็ก
(pickcode.io)- Pickcode เป็น IDE ออนไลน์สำหรับ ชั้นเรียนวิทยาการคอมพิวเตอร์ ในระดับมัธยมต้นและมัธยมปลาย โดยมุ่งเป็นแพลตฟอร์มที่เรียบง่ายและเสถียร เพื่อลดเวลาที่ครูใช้ในการจัดการชั้นเรียน
- ฟีเจอร์หลักด้านการจัดการชั้นเรียน ได้แก่ รองรับ Chromebook, การติดตามงานของนักเรียน, การทำงานร่วมกันแบบเรียลไทม์ และการตรวจดูประวัติโค้ด
- ครูสามารถปรับแต่งและจัดระเบียบ สื่อการสอนและงานที่มอบหมาย ได้ และ Pickcode ระบุชัดเจนว่าไม่มีฟีเจอร์ช่วยเขียนโค้ดด้วย AI
- มีความคิดเห็นจากครูว่าเครื่องมือนี้ช่วยให้นักเรียนเข้าถึงได้ง่ายขึ้นและทำงานได้อย่างเป็นอิสระมากขึ้นในชั้นเรียน Java, Web Development, Python และ AP Computer Science Principles
- เมื่อเทียบกับ IDE ระดับมืออาชีพที่ซับซ้อน เครื่องมือนี้เน้นการสร้างชั้นเรียนและการจัดการนักเรียน จึงอาจเป็นตัวเลือกที่ช่วยลดสิ่งรบกวนในสภาพแวดล้อมห้องเรียนได้
IDE ออนไลน์ที่ออกแบบมาสำหรับห้องเรียน
- Pickcode เป็น IDE ออนไลน์สำหรับ ชั้นเรียน CS ในระดับมัธยมต้นและมัธยมปลาย
- เน้นการเป็น แพลตฟอร์มที่เรียบง่ายและเสถียร เพื่อช่วยให้ครูประหยัดเวลาในการจัดการชั้นเรียน
- มีเส้นทางเข้าใช้งานพื้นฐานไปยังหน้าเริ่มต้นใช้งาน เข้าสู่ระบบ และแผนราคา
ฟีเจอร์จัดการชั้นเรียนและเสียงตอบรับจากครู
- ฟีเจอร์หลักของ Pickcode มุ่งเน้นไปที่การดำเนินชั้นเรียนและการตรวจสอบงานของนักเรียน
- ทำงานได้บน Chromebook
- สามารถติดตามงานของนักเรียนได้
- รองรับการทำงานร่วมกันแบบเรียลไทม์
- ตรวจดูประวัติโค้ดได้
- ปรับแต่งสื่อการสอนได้
- จัดระเบียบงานที่มอบหมายได้
- ไม่มีฟีเจอร์ ช่วยเขียนโค้ดด้วย AI
- ครูประเมินว่าอินเทอร์เฟซเรียบง่ายแต่ขยายการใช้งานได้ และนักเรียนหลายช่วงวัยชื่นชอบ
- มีกรณีการใช้งานในชั้นเรียน Java, Web Development, Python และ AP Computer Science Principles
- มีเสียงตอบรับว่าเครื่องมือนี้ช่วยให้นักเรียนใช้งานได้ง่ายขึ้น ติดตามงานได้ และเดินหน้าทำงานอย่างเป็นอิสระ
- ยังมีความเห็นว่าทีมสนับสนุนตอบสนองรวดเร็วและช่วยเหลือดี อีกทั้งข้อเสนอแนะจำนวนมากได้รับการนำไปพัฒนาใช้งานจริง
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
สงสัยว่ามีเหตุผลที่ดีพอหรือไม่ที่ต้องบังคับให้ใช้คีย์เวิร์ด
var,set,callเสมอไป ใน BASIC ก็ไม่มีแบบนั้น และจากความทรงจำเลือนรางตอนที่หัดเขียนโปรแกรมครั้งแรกสมัยเด็ก สิ่งเหล่านี้น่าจะเป็น ความซับซ้อนที่ไม่จำเป็นยกตัวอย่างเช่น ใน LOGO แค่เขียน
forward 10,left 90ก็พอแล้ว แต่call paint.forward(10),call paint.left(90)ให้ความรู้สึกเยิ่นเย้อและรกเกินไปset x = 7ที่คีย์เวิร์ดช่วยให้ชัดเจนว่านี่คือการเปลี่ยนค่าตัวแปร ไม่ใช่การยืนยันความเท่ากันในทางเทคนิค ถ้าอยู่ในบริบทของโปรแกรมวาดรูป จะทำให้
forward()เป็นเมธอดระดับบนสุดก็ได้ แต่ตัดสินใจให้มันมีลักษณะ เชิงวัตถุ มากขึ้น เพื่อเตรียมเด็กนักเรียนไว้สำหรับตอนที่ต่อไปจะไปใช้เอนจินเกม 2D และต้องควบคุมสไปรต์หลายตัวforwardกับleftดูเหมือนทิศทางการเคลื่อนที่ โดยเฉพาะถ้าอยากให้พู่กัน “เคลื่อนที่ไปทางซ้าย” ก็จะยิ่งสับสนจริง ๆ แล้ว
forwardคือการวาด/เคลื่อนที่ และleftคือการหมุนทวนเข็มนาฬิกาที่รับอาร์กิวเมนต์ติดลบได้ด้วย ดังนั้นcall paint.draw(10),call paint.rotate(90)หรือrotate("up")น่าจะเข้าใจง่ายกว่าgosubสำหรับเรียกซับรูทีนอนึ่ง เพราะได้ยินมาว่า BASIC รุ่นแรก ๆ เป็นแบบนั้น เลยตั้งใจให้หมายเลขลิงก์เริ่มที่ 1 เหมือนกัน :)
[1] https://picaxe.com/basic-commands/program-flow-control/gosub...
[2] https://alandix.com/blog/2021/07/27/a-brief-history-of-array...
LET X=10ตอนนี้กำลังแนะนำ Godot ให้เด็กอายุ 10 ขวบ ตลอด 6 เดือนที่ผ่านมาเขาสร้างเกมด้วย Scratch และชอบ Scratch มาก แต่ก็หงุดหงิดกับข้อจำกัดของมันเหมือนกัน
ตอนแรกคิดว่าเขาน่าจะชอบมากกว่าถ้าได้ใช้ภาษาสคริปต์จริง ๆ แต่พอเริ่มใช้ GDScript ก็ท้อเร็วมากเพราะต้องพิมพ์เยอะเกินไป มือยังเล็กจึงพิมพ์สัมผัสได้ยาก และการพิมพ์ชื่อตัวแปรกับการเรียกเมธอดก็ใช้เวลานานเกินไป
อันนี้ดูเหมือนเป็นจุดสมดุลที่ดีมาก เลยว่าจะลองดู
ฉันกำลังสอน Python แบบเบามาก ๆ ให้เด็กอายุ 3 ขวบ และก็สงสัยอยู่ว่าทำไมความคืบหน้าถึงช้ากว่าความเข้าใจของเขา ตอนนี้ถึงได้รู้ว่าแค่การพิมพ์วงเล็บกับเครื่องหมายคำพูดก็ใช้เวลานานแล้ว
ฉันชอบโปรเจกต์นี้และตื่นเต้นที่จะได้ลองใช้ กำลังเริ่มเปลี่ยนมาคิดว่าเรื่องการเขียนโปรแกรมสำหรับเด็กนั้น ยิ่งมีมากยิ่งดี น่าจะดีด้วยซ้ำถ้าให้พวกเขาได้สัมผัสพลวัตของการเลือกจากหลายภาษาและหลายรูปแบบการทำงาน
แต่พอเอาภาษาโปรแกรม “จริง ๆ” ให้ดู เขากลับบอกว่าสิ่งเหล่านั้นทำใน Scratch ได้หมด และไม่จำเป็นต้องพิมพ์เยอะขนาดนั้น
เราลองทำ GameMaker ด้วยกันและได้ผลลัพธ์ที่เจ๋งมาก แต่พอฉันเผลอแป๊บเดียว เขาก็กลับไปทำโปรเจกต์ Scratch ของตัวเองอีก บางทีก็อดคิดไม่ได้ว่า ถ้าเหมือนตัวฉันสมัยก่อนแล้วเริ่มจากโค้ดตั้งแต่แรกจะดีกว่าไหม ;-)
แต่เพียงแค่ชี้ให้เห็นปัญหาแล้วถามว่าอยากจัดการอย่างไร เด็กก็จะเริ่มคิดกับปัญหานั้น และหาวิธีต่าง ๆ ที่ทำได้ภายใน Scratch เอง เช่น แบ่งโปรแกรมออกเป็นหลายอ็อบเจ็กต์หรือหลายเอเจนต์
Scratch ทรงพลังกว่าที่ความประทับใจแรกหรือโปรแกรมแรก ๆ ของมันทำให้คิดมาก
varและconstขอแสดงความยินดีกับการเปิดตัว Pickcode รายละเอียดต่าง ๆ ทำได้ดีและเห็นชัดว่าใส่ใจมาก
ฉันคิดว่าอย่างน้อยก็มีสองแนวทางในสายการเขียนโปรแกรมแบบภาพที่พยายามทำให้การเขียนโปรแกรมเข้าถึงคนที่ไม่ใช่นักพัฒนาได้มากขึ้น
บางความพยายามใช้ส่วนติดต่อแบบภาพเพื่อลด ภาระในการเรียนรู้ไวยากรณ์ แต่ไม่ได้ซ่อนลักษณะเชิงคำสั่งหรือความจำเป็นของการคิดเชิงอัลกอริทึม จริง ๆ แล้วอาจมองได้ว่าเป็น IDE ที่เข้าถึงได้ในอีกระดับหนึ่ง และฉันคิดว่า Pickcode กับ Scratch อยู่ในกลุ่มนี้
อีกแนวทางหนึ่งคือการสำรวจพาราไดม์การเขียนโปรแกรมแบบอื่นที่อาจเข้ากับอุปมาเชิงภาพได้ดีกว่าในระดับหนึ่ง และยังชวนให้ผู้ใช้คิดต่างจากการเขียนโปรแกรมเชิงคำสั่งด้วย Node-RED เป็นตัวอย่างที่ดีของการสำรวจการเขียนโปรแกรมแบบอิงโฟลว์ ซึ่งเป็นญาติใกล้ชิดกับการเขียนโปรแกรมเชิงฟังก์ชันแบบรีแอกทีฟ ส่วน LabVIEW ก็เป็นญาติใกล้ชิดอีกตัวในสาย dataflow แต่มีองค์ประกอบที่ดูเหมือนเวทมนตร์มากกว่า ซึ่งจริง ๆ แล้วก็คือค่าเริ่มต้นที่ฉลาดพอสมควรกับการตั้งชื่อตัวแปรภายในโดยอัตโนมัติ Apple Automator ก็ทำให้นึกถึงเหมือนกัน
ฉันไม่ได้มองว่าฝั่งไหนดีกว่าหรือแย่กว่าอย่างจำเป็น แต่เวลาเห็นภาษาภาพ การนึกถึงความต่างระหว่าง เชิงคำสั่งกับเชิงรีแอกทีฟ มีประโยชน์ เพราะมันทำให้ประสบการณ์ของผู้ใช้ปลายทางต่างกันมาก
จุดที่ว่า “ประสบการณ์การแก้ไขโค้ดมีโครงสร้างอย่างสมบูรณ์ และเลือกจากเมนูแทนการพิมพ์” นั้นยอดเยี่ยมมาก
อยากให้มีอะไรแบบนี้สำหรับโปรแกรมเมอร์ผู้ใหญ่ด้วย กล่าวคือเป็น ตัวแก้ไขเชิงโครงสร้าง แบบอเนกประสงค์ที่ใช้ได้กับหลายภาษาโปรแกรมมิ่ง เวลาเขียนโปรแกรม สิ่งที่นึกออกมาก่อนมักเป็นเจตนาเชิงความหมาย เช่น จะนิยามฟังก์ชันตรงนี้ แล้วตรวจเงื่อนไขตรงนั้น
ถ้าอย่างนั้นก็ไม่เข้าใจว่าทำไมเราไม่ส่งเจตนาเชิงความหมายนั้นให้ตัวแก้ไขโดยตรง ทำไมต้องแปลงเจตนาให้เป็นสตริงก่อน แล้วให้ตัวแก้ไขกลับมาพาร์สใหม่ด้วยวิธีที่เสี่ยงต่อความผิดพลาด จึงเปิดช่องให้เกิดข้อผิดพลาดทางไวยากรณ์งี่เง่าอย่างพิมพ์ผิด วงเล็บไม่ตรง หรือความสำคัญของตัวดำเนินการผิด ทั้งที่ถ้าเหลือไว้เฉพาะข้อผิดพลาดเชิงความหมายน่าจะดีกว่า
ตัวแก้ไขแบบนี้ก็ไม่จำเป็นต้องไม่เป็นมิตรกับคีย์บอร์ดเสมอไป คล้ายกับที่ Excel ไม่ได้ไม่เป็นมิตรกับคีย์บอร์ด อาจทำงานแบบตัวป้อนภาษาของเอเชียตะวันออก ที่พิมพ์ใน “หน้าต่างประกอบคำ” แล้วเลือกจาก “หน้าต่างตัวเลือก” เพื่อแทรกลงไปก็ได้
เท่าที่ผมเข้าใจ ปัญหาใหญ่ในกรณีนี้คือเรามักอยากกำหนดข้อจำกัดให้ทุกสถานะระหว่างทางของโค้ดต้องถูกต้องเชิงความหมายเสมอ ซึ่งดูน่าดึงดูดบนผิวเผิน แต่ในทางปฏิบัติกลับเป็นข้อจำกัดที่ร้ายแรง แม้แต่คนเก่งก็ยังคิดแบบหลวม ๆ ก่อนแล้วค่อยกลับมาแก้โค้ดทีหลัง แม้แต่ในระดับบรรทัดเดียวก็เป็นแบบนั้น การบังคับให้ถูกต้อง 100% ตลอดเวลาขัดกับวิธีคิดจริงของมนุษย์อย่างมาก
ผมมองว่าความไม่สอดคล้องนี้เป็นเรื่องพื้นฐาน ไม่รู้เหมือนกันว่ามีมนุษย์สักกี่คนที่คิดแบบนี้ แม้แต่นักคณิตศาสตร์มืออาชีพก็ว่ากันว่ามักคิดนำไปก่อน แล้วค่อยเติมความเคร่งครัดทีหลัง ถ้าพวกเขายังไม่ได้เดินหน้าอย่างเคร่งครัดทีละขั้น แล้วใครจะทำได้ล่ะ
ทุกวันนี้การเขียนโปรแกรมลงตัวอยู่กับ autocompletion ที่เข้าใจความหมาย และคำแนะนำต่าง ๆ และมันอาจไม่ใช่ผลของความขี้เกียจเฉย ๆ แต่อาจเป็นจุดเหมาะสมที่สุดจริง ๆ
ถ้ามีใครผลักดันเรื่องนี้จนสุด ปัญหาอาจถูกแก้ได้ แต่ถึงจะมีผลไม้ให้เก็บอยู่ตรงนี้ ก็ไม่ใช่ผลไม้ที่ห้อยต่ำแน่นอน
อย่างที่ saurik บอก โลก Lisp ที่ใช้ Emacs น่าจะใกล้เคียงกับสิ่งนี้ที่สุด แต่ถึงอย่างนั้นก็ยังทำอะไรก็ได้ตามต้องการอยู่ดี เพียงแค่มีเครื่องมือมากมายที่ช่วยให้ทำงานเชิงความหมายมากขึ้น ไม่ได้บังคับอย่างเด็ดขาด
ตอนนั้นผมได้งานเพราะเป็นผู้สมัครเพียงคนเดียวที่เคยได้ยินชื่อซอฟต์แวร์นี้ แค่เพราะเคยอ่านบทความสั้น ๆ ในแมกกาซีน
https://en.wikipedia.org/wiki/Omnis_Studio
วิธีเขียนโปรแกรมด้วยการคลิกรายการดรอปดาวน์และป๊อปอัปนั้นไม่ได้ออกแบบมาดีนัก โปรแกรมจะดูเหมือนรายการ และพอจะแก้ไขหนึ่งบรรทัดก็จะมีโมดัลไดอะล็อกเด้งขึ้นมาให้แก้ได้แค่บรรทัดนั้น แน่นอนว่าไม่มี IntelliSense หรือ code completion
แค่คิดก็เหมือน PTSD จะกำเริบจนรู้สึกว่าต้องหาเหล้าหรือบุหรี่มาช่วยแล้ว
หนึ่งในฟีเจอร์ที่ผมชอบที่สุดของ Scratch คือ คุณสร้าง syntax error ไม่ได้ บล็อกจะประกบกันได้หรือไม่ได้อย่างใดอย่างหนึ่งเท่านั้น เลยคิดว่าเด็ก ๆ สามารถเริ่มต้นและลองเล่นได้ง่ายขึ้นโดยไม่ต้องมีคำอธิบายหรือการสอนพิเศษแยกต่างหาก
ผมลองกดโน่นนี่เองหลังจากทำตามไม่กี่ขั้นแรกของ tutorial รูปสี่เหลี่ยม แล้วได้
call math paint.forward()ออกมา ซึ่งเกิด syntax error แน่นอนว่าบรรทัดนั้นไร้สาระ แต่ผมก็หาวิธีว่าคำสั่งmathควรทำงานอย่างไรไม่เจอ ถ้าตาม tutorial ต่อไปก็คงมีคำอธิบาย แต่ผมคิดว่า การค้นพบได้เอง ก็สำคัญเหมือนกันพอบล็อกเยอะขึ้น มันอาจซ้อนทับกันจนหาหลักฐานได้ค่อนข้างยาก ยังมีปัญหาเรื่องลืมใส่อาร์กิวเมนต์ของบล็อกด้วย ถึงอย่างนั้นมันก็ยังรันได้แต่ไม่ทำงาน
visual programming ชัดเจนว่าดีกว่าสำหรับเด็ก ๆ แต่ผมคิดว่าจำเป็นต้องมีแนวทางที่เข้มงวดกว่า Scratch และมี ความสามารถด้านการดีบัก ที่ดีกว่า
ดูดีมากจริง ๆ ทำให้นึกถึงตอนอยู่ที่ Khan Academy แล้วทำ เวอร์ชันแบบบล็อก ของตัวแก้ไข ProcessingJS
ตอนนั้น UI ค่อนข้างหยาบและดูแลรักษายาก เลยสุดท้ายเลิกทำไป แต่นี่ดูไหลลื่นทีเดียว ชอบที่มันเปิดเส้นทางให้โปรแกรมเมอร์หน้าใหม่เข้าสู่การเขียนโปรแกรมแบบมี type ได้มากขึ้นด้วย ผมก็คิดเหมือนกันว่าการเขียนโค้ดแบบบล็อกส่วนใหญ่มักห่างจากโค้ดจริงมากเกินไป
บางครั้งการแก้ไขแบบบล็อกลักษณะนี้ก็ผสานกับการตรวจสอบ type เพื่อให้เติม “ช่องโหว่” ได้อย่างชาญฉลาดผ่านการ query เป็นหลัก ซึ่งน่าจะเห็นได้เด่นที่สุดในตัวแก้ไขสำหรับภาษาฟังก์ชันบริสุทธิ์อย่าง Agda
ทำให้นึกถึง BASIC ของ ZX81 ขึ้นมาได้ ตอนนั้นไม่ต้องพิมพ์คีย์เวิร์ด เพราะบนคีย์บอร์ดพิเศษจะมีปุ่มสำหรับแต่ละคีย์เวิร์ดโดยเฉพาะ
ตัวแก้ไขเป็นแบบรับรู้บริบท หรือพูดอีกอย่างคือ ตัววิเคราะห์โทเคนที่ขับเคลื่อนโดย parser ก็คือตัวผู้ใช้เองนั่นแหละ ตอนนั้นมันให้ความรู้สึกเหมือนเวทมนตร์นิด ๆ ที่เครื่องรู้ได้ว่าเรากำลังจะใส่คำ/ตัวเลขหรือคีย์เวิร์ด และเป็นคีย์เวิร์ดประเภทไหน แม้ในเชิงการศึกษาสิ่งสำคัญจริง ๆ คือฉันเข้าใจเรื่องนี้ก็ตาม
สิ่งสำคัญของ ZX81 คือมัน เก็บ token แทนข้อความเพื่อประหยัดหน่วยความจำ RAM มีแค่ 1KB และยังต้องรวมหน่วยความจำจอแสดงผลอยู่ในนั้นด้วย ไม่มี GPU แยกต่างหาก การ parse ตั้งแต่ตอนป้อนข้อมูลน่าจะทำให้รันได้เร็วขึ้นด้วย
เว็บทำออกมาได้ประณีตมาก แต่ฉันไม่เห็นด้วยกับเป้าหมายทั้งหมด เป็น IDE ที่น่าประทับใจทีเดียว แต่รู้สึกว่าน่าจะโฟกัสที่ subset ของ Python มากกว่าการสร้างภาษาใหม่
ไม่อย่างนั้นอาจถูกเมินได้ เพราะ Scratch สอนง่ายกว่า ส่วน Python ก็มีประโยชน์กว่าในการเรียนรู้ แบบแรกใช้กับโรงเรียนที่มีครูซึ่งเป็นนักพัฒนา ส่วนแบบหลังใช้กับพ่อแม่โปรแกรมเมอร์ที่สอนลูก
ฉันเป็นนักพัฒนาซอฟต์แวร์และเคยช่วยภรรยาสอนวิชาการเขียนโปรแกรมในระดับประถม/อนุบาล เลยพอรู้ปัญหาในพื้นที่นี้อยู่บ้าง
บทความที่เกี่ยวข้อง:
Show HN: Pickcode – A new way to introduce programming to kids - https://news.ycombinator.com/item?id=33562193 - พฤศจิกายน 2022, 14 คอมเมนต์
Show HN: PickCode – An educational coding environment for students after Scratch - https://news.ycombinator.com/item?id=32230329 - กรกฎาคม 2022, 32 คอมเมนต์
Show HN: Pickcode – A graphical code editor for education - https://news.ycombinator.com/item?id=31426331 - พฤษภาคม 2022, 4 คอมเมนต์
การโพสต์ซ้ำหลังจากผ่านไปประมาณ 1 ปีก็ถือว่าโอเค และลิงก์ไปเธรดก่อนหน้าก็มีไว้สำหรับผู้อ่านที่อยากรู้เพิ่ม
กำลังทำแนวคิดคล้ายกันในฝั่ง music programming อยู่:
https://glicol.org
คิดว่าน่าจะดีถ้ามีตัวอย่างสักสองสามอย่างอยู่บนหน้า landing page เลย
พอลองทำบทเรียนก็ไปต่อไม่ถูก แม้จะมีคำใบ้อยู่ด้านขวาแต่ก็ไม่ได้เด่นมากนัก น่าจะลองจัดใหม่แบบ Svelte Tutorial(https://learn.svelte.dev/tutorial/welcome-to-svelte) ได้
ยังไม่ค่อยมั่นใจกับไวยากรณ์นัก สงสัยว่าเคยคิดจะใช้ LOGO ไหม