คู่มือ Ruby TDD
คู่มือ Ruby TDD
คู่มือ Ruby TDD
ผมเขียนคู่มือนี้เผื่อคนที่ใช้ repo นี้เป็นคอร์ส โดยเฉพาะคนที่มาจาก Java แต่ผมก็ไม่ได้ อยากให้ชื่อไฟล์นี้กันคนอื่นออกไป ถ้าคุณมาจากภาษาอื่น คุณก็ยังใช้คอร์สนี้ได้ดี ผมยก Java มาเป็นจุดเทียบ เพราะมันช่วยให้ผมอธิบายบางไอเดียของ Ruby ได้ชัดขึ้น
repo ฉบับเต็มตอนนี้มี 15 หัวข้อ 2 ภาคผนวก ชุดทดสอบรายหัวข้อที่รันได้จริง และไฟล์ คำตอบที่แยกออกจากลำดับปกติของแบบฝึกหัด นั่นทำให้ผมสอน Ruby ที่นี่เป็นเส้นทางการ เรียนเต็ม ๆ ได้ แทนที่จะเป็น workshop สั้น ๆ
ฉบับภาษาไทยใน /th ตอนนี้ครอบคลุมเอกสาร Markdown ทั้งคอร์สแล้ว ส่วนไฟล์ Ruby และชุดทดสอบที่รันได้จริงยังอยู่ฝั่ง en/ เหมือนเดิม เพื่อให้การเรียนกับการรันโค้ดใช้ ฐานเดียวกันทั้ง repo
ทำไมผมจึงเขียนคู่มือนี้แบบนี้
ผมไม่ได้กำลังสอนแค่ไวยากรณ์ของ Ruby ผมกำลังชวนคุณดูว่าโค้ด Ruby ค่อย ๆ ถูกหล่อ ขึ้นมาอย่างไร ชุดทดสอบช่วยบีบให้มันชัดขึ้นอย่างไร และนิสัยเดิมของคุณอาจต้องขยับตรงไหน เมื่อปัญหาเริ่มเป็น Ruby มากขึ้น
ถ้าคุณอยากได้ภาพรวมสั้นที่สุด ให้เริ่มที่ README.md ถ้าคุณอยากเห็นแผนที่ ของคอร์ส ให้ไปที่ course_overview.md ผมเขียนคู่มือนี้ไว้ตรงกลาง ระหว่างสองไฟล์นั้น เพื่ออธิบายว่าผมอยากให้คุณเดินผ่าน repo นี้อย่างไร และการปรับวิธีคิด ช่วงไหนสำคัญที่สุดระหว่างทาง
ตอนผมเขียนคู่มือนี้ ผมตั้งสมมติฐานว่า
คู่มือนี้ไม่ได้สมมติว่าคุณเคยเขียน Ruby มาก่อน
ถ้าคุณเคยใช้ภาษาแบบ dynamic อื่นมาก่อน ไวยากรณ์บางส่วนอาจคุ้นตา แต่คำถามด้านการ ออกแบบก็ยังสำคัญอยู่ดี
ใน repo นี้มีอะไรอยู่จริงบ้าง
ไฟล์ Ruby และชุดทดสอบที่รันได้จริงของคอร์สอยู่ใต้ en/ และมี 15 หัวข้อ ส่วนเอกสาร Markdown ภาษาไทยของทั้งคอร์สอยู่ใต้ th/ :
นอกจากนี้ยังมี 2 ภาคผนวก:
แต่ละหัวข้อใช้โครงสร้างหลักชุดเดียวกัน:
ความสม่ำเสมอนี้สำคัญกับผมมาก ผมไม่อยากให้คุณเสียแรงไปกับการเดาโครงสร้างใหม่ทุก ครั้งที่เปลี่ยนหัวข้อ ผมอยากให้คุณเอาแรงนั้นไปใช้กับโค้ดแทน
วิธีรันคอร์ส
จาก en/ ให้รันคอร์สเต็มแบบนี้:
./ run_tests . sh ruby_tdd_guide_for_java_developers.md bash รันหัวข้อเดียวจากรากคอร์ส:
./ run_tests . sh topic_01_ruby_basics ruby_tdd_guide_for_java_developers.md bash หรือจะรันผ่านสคริปต์ของหัวข้อนั้นเอง:
./ topic_01_ruby_basics / run_topic_tests . sh ruby_tdd_guide_for_java_developers.md bash สคริปต์รันหลักจะตรวจ gems ที่คอร์สต้องใช้และติดตั้งให้ถ้ายังไม่มี ตอนนี้รวมถึง erb , csv , sqlite3 และ rspec
พอคุณไปถึง CSV กับ SQLite คุณจะไม่ได้กำลังเรียนแค่ฟีเจอร์ของภาษาแล้ว แต่กำลังเห็น โครงของ Ruby project ขนาดเล็กด้วย ผมจึงอยากให้เครื่องมือรอบ ๆ ง่ายพอที่คำถามด้าน การออกแบบจะยังเด่นอยู่