ANS

คู่มือการใช้ไฟล์คำตอบ

คู่มือไฟล์คำตอบ

th/answers_guide.md

ในคอร์สฉบับหลัก แต่ละหัวข้อจะมีไฟล์คำตอบอยู่ 2 ไฟล์:

  • answer_basic_exercise.rb
  • answer_adv_exercise.rb

ผมใส่ไฟล์เหล่านี้ไว้เพราะอยากให้ทั้งคนสอนและคนเรียนมีคำตอบอ้างอิงที่กลับมาเปิดเทียบ ได้หลังจากลองทำเองแล้ว แต่ในขณะเดียวกัน ผมก็จงใจแยกมันออกจากทางเดินปกติของแบบ ฝึกหัด

เส้นแบ่งที่ผมอยากรักษาไว้

สคริปต์รันและชุดทดสอบตามปกติจะใช้ไฟล์เหล่านี้:

  • example.rb
  • basic_exercise.rb
  • adv_exercise.rb

และจะไม่โหลดไฟล์เหล่านี้:

  • answer_basic_exercise.rb
  • answer_adv_exercise.rb

เส้นแบ่งนี้สำคัญกับผมมาก เพราะเป้าหมายของคอร์สไม่ได้มีแค่ว่าทำให้โค้ดผ่านชุดทดสอบให้ เร็วที่สุด แต่คือการฝึกวิธีคิดที่ทำให้โค้ดนั้นค่อย ๆ เกิดขึ้นต่างหาก

หลักเดียวกันนี้ใช้ทั้งกับตัวรันคอร์สเต็มและตัวรันรายหัวข้อ ผมอยากให้ไฟล์คำตอบยังคง เป็นสื่อการสอน ไม่ใช่ส่วนหนึ่งของเส้นทางปกติในการรันโค้ด

วิธีที่ผมหวังให้คนเรียนใช้ไฟล์คำตอบ

ลำดับที่ผมแนะนำคือ:

  1. อ่านโน้ตของหัวข้อนั้นก่อน
  2. ดู example.rb แล้วรันชุดทดสอบ
  3. ลองทำ basic_exercise.rb และ adv_exercise.rb
  4. ค่อยเปิดไฟล์คำตอบหลังจากพยายามเองจริง
  5. เทียบกันที่การตัดสินใจด้านการออกแบบ ไม่ใช่ดูแค่ผลลัพธ์สุดท้าย

เวลาอ่านไฟล์คำตอบ ผมอยากให้คุณมองให้เกินกว่าคำว่า "ถูก" หรือ "ผิด" ลองถามตัวเองว่า:

  • ชื่อที่ใช้ในคำตอบชัดกว่าของผมหรือไม่
  • control flow เรียบกว่าเดิมหรือไม่
  • คำตอบนี้เพิ่ม abstraction ที่มีประโยชน์ หรือเพิ่มเกินจำเป็น
  • ถ้าผมจะเขียนของตัวเองใหม่ ผมจะหยิบอะไรจากเวอร์ชันนี้ไปใช้
  • โค้ดชัดขึ้นจริง หรือแค่สั้นลง

นี่คือวิธีใช้ answer key ที่ผมคิดว่าได้ผล มันควรช่วยลับคมสายตาในการตัดสินใจ ไม่ใช่ เข้ามาแทนที่การตัดสินใจนั้น

วิธีที่คนสอนใช้ไฟล์คำตอบได้ดี

ไฟล์คำตอบเหมาะกับการใช้เพื่อ:

  • เตรียม walkthrough
  • เทียบวิธีแก้หลายแบบ
  • คุยเรื่อง trade-offs ของ naming, control flow และ abstraction
  • แสดงให้เห็นว่าคำตอบแบบ Ruby จะสั้นก็ได้ โดยไม่กลายเป็นความมักง่าย

ผมไม่ได้ตั้งใจให้ไฟล์คำตอบมาแทนแบบฝึกหัด หรือกลายเป็น dependency แอบแฝงของชุด ทดสอบ มันทำงานได้ดีที่สุดเมื่อยังถูกแยกออกจากทางเดินปกติของการเขียนโค้ดอย่างชัดเจน

ตำแหน่งของไฟล์คำตอบในคอร์สเต็ม

คอร์สฉบับเต็มมี 15 หัวข้อ แยกตามไดเรกทอรี่ และแต่ละหัวข้อจะมีไฟล์คำตอบ 2 ไฟล์วาง อยู่ข้างไฟล์แบบฝึกหัดปกติและชุดทดสอบ

ตัวอย่างจากหลายช่วงของคอร์ส:

ผมอยากให้ไฟล์คำตอบรองรับการทบทวนได้ตลอดทั้งคอร์ส ตั้งแต่ไวยากรณ์ช่วงแรก ไปจนถึง หัวข้อช่วงหลังที่เป็นงานประยุกต์และการแปลงข้อมูลที่ซับซ้อนขึ้น