คู่มือการใช้ไฟล์คำตอบ
คู่มือไฟล์คำตอบ
th/answers_guide.md
ในคอร์สฉบับหลัก แต่ละหัวข้อจะมีไฟล์คำตอบอยู่ 2 ไฟล์:
answer_basic_exercise.rbanswer_adv_exercise.rb
ผมใส่ไฟล์เหล่านี้ไว้เพราะอยากให้ทั้งคนสอนและคนเรียนมีคำตอบอ้างอิงที่กลับมาเปิดเทียบ ได้หลังจากลองทำเองแล้ว แต่ในขณะเดียวกัน ผมก็จงใจแยกมันออกจากทางเดินปกติของแบบ ฝึกหัด
เส้นแบ่งที่ผมอยากรักษาไว้
สคริปต์รันและชุดทดสอบตามปกติจะใช้ไฟล์เหล่านี้:
example.rbbasic_exercise.rbadv_exercise.rb
และจะไม่โหลดไฟล์เหล่านี้:
answer_basic_exercise.rbanswer_adv_exercise.rb
เส้นแบ่งนี้สำคัญกับผมมาก เพราะเป้าหมายของคอร์สไม่ได้มีแค่ว่าทำให้โค้ดผ่านชุดทดสอบให้ เร็วที่สุด แต่คือการฝึกวิธีคิดที่ทำให้โค้ดนั้นค่อย ๆ เกิดขึ้นต่างหาก
หลักเดียวกันนี้ใช้ทั้งกับตัวรันคอร์สเต็มและตัวรันรายหัวข้อ ผมอยากให้ไฟล์คำตอบยังคง เป็นสื่อการสอน ไม่ใช่ส่วนหนึ่งของเส้นทางปกติในการรันโค้ด
วิธีที่ผมหวังให้คนเรียนใช้ไฟล์คำตอบ
ลำดับที่ผมแนะนำคือ:
- อ่านโน้ตของหัวข้อนั้นก่อน
- ดู
example.rbแล้วรันชุดทดสอบ - ลองทำ
basic_exercise.rbและadv_exercise.rb - ค่อยเปิดไฟล์คำตอบหลังจากพยายามเองจริง
- เทียบกันที่การตัดสินใจด้านการออกแบบ ไม่ใช่ดูแค่ผลลัพธ์สุดท้าย
เวลาอ่านไฟล์คำตอบ ผมอยากให้คุณมองให้เกินกว่าคำว่า "ถูก" หรือ "ผิด" ลองถามตัวเองว่า:
- ชื่อที่ใช้ในคำตอบชัดกว่าของผมหรือไม่
- control flow เรียบกว่าเดิมหรือไม่
- คำตอบนี้เพิ่ม abstraction ที่มีประโยชน์ หรือเพิ่มเกินจำเป็น
- ถ้าผมจะเขียนของตัวเองใหม่ ผมจะหยิบอะไรจากเวอร์ชันนี้ไปใช้
- โค้ดชัดขึ้นจริง หรือแค่สั้นลง
นี่คือวิธีใช้ answer key ที่ผมคิดว่าได้ผล มันควรช่วยลับคมสายตาในการตัดสินใจ ไม่ใช่ เข้ามาแทนที่การตัดสินใจนั้น
วิธีที่คนสอนใช้ไฟล์คำตอบได้ดี
ไฟล์คำตอบเหมาะกับการใช้เพื่อ:
- เตรียม walkthrough
- เทียบวิธีแก้หลายแบบ
- คุยเรื่อง trade-offs ของ naming, control flow และ abstraction
- แสดงให้เห็นว่าคำตอบแบบ Ruby จะสั้นก็ได้ โดยไม่กลายเป็นความมักง่าย
ผมไม่ได้ตั้งใจให้ไฟล์คำตอบมาแทนแบบฝึกหัด หรือกลายเป็น dependency แอบแฝงของชุด ทดสอบ มันทำงานได้ดีที่สุดเมื่อยังถูกแยกออกจากทางเดินปกติของการเขียนโค้ดอย่างชัดเจน
ตำแหน่งของไฟล์คำตอบในคอร์สเต็ม
คอร์สฉบับเต็มมี 15 หัวข้อ แยกตามไดเรกทอรี่ และแต่ละหัวข้อจะมีไฟล์คำตอบ 2 ไฟล์วาง อยู่ข้างไฟล์แบบฝึกหัดปกติและชุดทดสอบ
ตัวอย่างจากหลายช่วงของคอร์ส:
- topic_01_ruby_basics/answer_basic_exercise.rb
- topic_01_ruby_basics/answer_adv_exercise.rb
- topic_09_mini_capstone/answer_basic_exercise.rb
- topic_09_mini_capstone/answer_adv_exercise.rb
- topic_12_sqlite_queries/answer_basic_exercise.rb
- topic_15_reduce_accumulators/answer_adv_exercise.rb
ผมอยากให้ไฟล์คำตอบรองรับการทบทวนได้ตลอดทั้งคอร์ส ตั้งแต่ไวยากรณ์ช่วงแรก ไปจนถึง หัวข้อช่วงหลังที่เป็นงานประยุกต์และการแปลงข้อมูลที่ซับซ้อนขึ้น