ชุมชนโปรแกรมเมอร์กำลังมีส่วนร่วมในการอภิปรายอย่างเข้มข้นเกี่ยวกับบทเรียนการสอนภาษาโปรแกรมมิ่งที่ได้รับความนิยมมากที่สุดแห่งหนึ่งบนอินเทอร์เน็ต Build Your Own Lisp สัญญาว่าจะสอนทั้งการเขียนโปรแกรม C และการสร้างภาษาโปรแกรมมิ่งในเพียง 1,000 บรรทัดของโค้ด แต่นักพัฒนาที่มีประสบการณ์กำลังแสดงความกังวลอย่างจริงจังเกี่ยวกับคุณค่าทางการศึกษาของบทเรียนนี้
บทเรียนมีการปฏิบัติการเขียนโปรแกรม C ที่ไม่ดี
นักวิจารณ์โต้แย้งว่าบทเรียนนี้สอนนิสัยการเขียนโปรแกรม C ที่ไม่ดี ซึ่งอาจเป็นอันตรายต่อผู้เรียนในระยะยาว ความกังวลหลักมุ่งเน้นไปที่คุณภาพของโค้ดและแนวปฏิบัติที่ดี นักพัฒนาบางคนกังวลว่าผู้เริ่มต้นที่ทำตามคู่มือนี้อาจเก็บเกี่ยวรูปแบบการเขียนโปรแกรมที่ไม่สามารถขยายขนาดได้นอกเหนือจากโปรเจกต์ของเล่น
การวิจารณ์ที่แหลมคมโดยเฉพาะมาจากการวิเคราะห์โดยละเอียดที่เน้นประเด็นพื้นฐานของแนวทางของบทเรียน การวิจารณ์นี้เป็นเรื่องธรรมดามากจนนักพัฒนาได้สร้างทรัพยากรเฉพาะเพื่ออธิบายว่าทำไมบทเรียนเฉพาะนี้จึงอาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับผู้เรียนจริงจัง
ขาดแนวคิดหลักของ Lisp
ประเด็นหลักอีกประการหนึ่งของการโต้เถียงเกี่ยวข้องกับสิ่งที่ทำให้เป็นภาษาโปรแกรมมิ่ง Lisp จริงๆ สมาชิกชุมชนหลายคนสังเกตว่าบทเรียนข้ามแนวคิด Lisp ที่จำเป็น เช่น การดำเนินการ CAR และ CDR ซึ่งเป็นพื้นฐานในการเข้าใจวิธีการทำงานของภาษา Lisp แบบดั้งเดิม
นี่คือมากกว่า 'Build Your Own Lisp' มาก ถึงจุดที่เกือบจะเป็นอะไรก็ได้ยกเว้น Lisp
บทเรียนใช้ไลบรารีพาร์เซอร์ที่สร้างไว้แล้วชื่อ 'mpc' แทนที่จะสอนนักเรียนวิธีสร้างส่วนประกอบหลักเหล่านี้ด้วยตนเอง แนวทางนี้แม้จะง่ายกว่า แต่อาจทำให้ผู้เรียนสูญเสียความเข้าใจที่ลึกซึ้งที่มาจากการใช้งานแนวคิดพื้นฐานเหล่านี้ตั้งแต่เริ่มต้น
แนวคิดหลักของ Lisp ที่ขาดหายไปในบทเรียน:
- การดำเนินการ CAR และ CDR (การดำเนินการพื้นฐานของลิสต์)
- การปรับปรุงประสิทธิภาพ tail-call
- Continuations และ CPS (Continuation Passing Style)
- Call/CC (Call with Current Continuation)
- การใช้งาน S-Expression ที่เหมาะสมโดยใช้ linked lists
แนะนำทางเลือกที่ดีกว่า
ชุมชนได้รวมตัวกันสนับสนุนทรัพยากรทางเลือกหลายแห่งสำหรับผู้ที่สนใจในการสร้างภาษาโปรแกรมมิ่ง MAL (Make A Lisp) ได้รับการกล่าวถึงบ่อยครั้งในฐานะแนวทางที่ครอบคลุมมากกว่า แม้ว่าจะต้องใช้ความพยายามมากกว่าจากผู้เรียน Crafting Interpreters ยังได้รับคำชมว่าเป็นทรัพยากรที่เหนือกว่าสำหรับการเข้าใจการสร้างภาษาโปรแกรมมิ่ง
สำหรับผู้ที่สนใจเฉพาะการเขียนโปรแกรม C นักพัฒนาแนะนำให้มองหาที่อื่นทั้งหมด ฉันทามติดูเหมือนจะเป็นว่าแม้บทเรียนอาจให้คุณค่าความบันเทิงบ้าง แต่ก็ไม่เพียงพอในฐานะทรัพยากรการศึกษาที่จริงจัง
แหล่งเรียนรู้ทางเลือกที่ชุมชนแนะนำ:
- MAL (Make A Lisp): แนวทางที่ครอบคลุมมากกว่าแต่ให้การช่วยเหลือน้อยกว่า
- Crafting Interpreters: ได้รับการยกย่องสูงสำหรับแนวคิดการสร้างภาษาโปรแกรม
- Writing a Lisp in OCaml: บทเรียนแบบทีละขั้นตอนที่มีพื้นฐานที่ดีกว่า
- mpc Parser Library: ตัวแยกวิเคราะห์ที่สร้างไว้แล้วที่ใช้ในบทเรียนต้นฉบับ
ขาดคุณสมบัติขั้นสูง
นักพัฒนา Lisp ที่มีประสบการณ์ชี้ให้เห็นว่าบทเรียนหยุดเพียงเมื่อสิ่งต่างๆ เริ่มน่าสนใจ แนวคิดสำคัญ เช่น การปรับปรุงการเรียกหาง (tail-call optimization) การต่อเนื่อง (continuations) และ call/cc (call with current continuation) ขาดหายไปทั้งหมด หากไม่มีคุณสมบัติเหล่านี้ ภาษาที่ได้ยังคงเป็นของเล่นมากกว่าสิ่งที่มีการใช้งานจริง
การโต้เถียงนี้เน้นให้เห็นถึงความท้าทายที่กว้างขึ้นในการศึกษาโปรแกรมมิ่ง: การสร้างสมดุลระหว่างการเข้าถึงได้กับความถูกต้องทางเทคนิค แม้ว่าบทเรียนจะประสบความสำเร็จในการทำให้การสร้างภาษาโปรแกรมมิ่งดูเข้าถึงได้ แต่อาจทำเช่นนั้นด้วยการสูญเสียการสอนเทคนิคและแนวคิดที่เหมาะสมที่นักเรียนจะต้องการสำหรับการพัฒนาในโลกแห่งความเป็นจริง
อ้างอิง: Build Your Own Lisp