นักพัฒนาโต้เถียงเรื่องคุณภาพของบทเรียน "Build Your Own Lisp" ยอดนิยม

ทีมชุมชน BigGo
นักพัฒนาโต้เถียงเรื่องคุณภาพของบทเรียน "Build Your Own Lisp" ยอดนิยม

ชุมชนโปรแกรมเมอร์กำลังมีส่วนร่วมในการอภิปรายอย่างเข้มข้นเกี่ยวกับบทเรียนการสอนภาษาโปรแกรมมิ่งที่ได้รับความนิยมมากที่สุดแห่งหนึ่งบนอินเทอร์เน็ต 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