ภาพรวมคอร์ส
ภาพรวมคอร์ส
ภาพรวมคอร์ส
ผมออกแบบคอร์สนี้ไว้เผื่อคนที่คุ้นกับ Java แล้วอยากค่อย ๆ ขยับมาคิดแบบ Ruby ให้มาก ขึ้น ผมไม่ได้อยากสอน Ruby แบบแยกเป็นกอง ๆ ของกฎไวยากรณ์ แต่ผมอยากให้คุณเห็นว่า ทำไมโค้ด Ruby ที่ดีจึงมักสั้นลง กระชับขึ้น และพูดเรื่องการทำงานของมันได้ตรงกว่าเดิม
ในเวลาเดียวกัน ผมก็ไม่อยากให้ชื่อคอร์สนี้กันคนอื่นออกไป ถ้าคุณมาจากภาษาอื่น คุณก็ยัง เรียนคอร์สนี้ได้ดี การยก Java มาเทียบมีไว้เพื่อช่วยอธิบาย Ruby ให้ชัดขึ้น ไม่ได้แปลว่า คุณต้องรู้ Java ก่อนเสมอไป
repo นี้มี 15 หัวข้อและ 2 ภาคผนวก ส่วนใน /th ตอนนี้ ผมแปลเอกสาร Markdown ครบ ทั้งคอร์สแล้ว เพื่อให้คุณอ่านภาพรวม คู่มือ และโน้ตประกอบได้ต่อเนื่องเป็นภาษาไทย แม้ ไฟล์ Ruby ที่รันได้จริงยังคงอยู่ฝั่ง en/ ก็ตาม
สิ่งที่ผมอยากให้คอร์สนี้ทำได้
เมื่อเรียนจบ ผมอยากให้คุณทำสิ่งต่อไปนี้ได้:
ผมพยายามสร้างทั้งคำศัพท์และสายตาในการตัดสินใจไปพร้อมกัน แค่รู้ว่า blocks, keyword arguments, mixins และ Enumerable มีอยู่ ยังไม่พอ ผมอยากให้คุณเห็น ด้วยว่าเมื่อไรเครื่องมือเหล่านี้ช่วยให้โค้ดดีขึ้น และเมื่อไรกลับทำให้มันอ่านยากขึ้น
ผมประกอบแต่ละหัวข้ออย่างไร
แต่ละหัวข้อใช้ชิ้นส่วนการสอนชุดเล็ก ๆ คล้ายกัน:
จังหวะการเรียนที่ผมตั้งใจไว้ค่อนข้างตรงไปตรงมา:
แม้แต่ class เล็ก ๆ ก็เริ่มน่าสนใจทันที เมื่อคุณต้องตั้งชื่อมัน เขียนชุดทดสอบให้มัน และ ตัดสินใจว่าพฤติกรรมควรอยู่ตรงไหน
คอร์สนี้ค่อย ๆ พาไปอย่างไร
ผมชอบมอง 15 หัวข้อเป็น 4 ช่วง
หัวข้อ 1 ถึง 5 ครอบคลุมเรื่องเหล่านี้:
นี่คือช่วงที่นิสัยแบบ Java จะโผล่มาชัดที่สุด หลายคนยังเขียน Ruby เหมือนมี compiler ยืนคุมอยู่ข้างหลัง ในช่วงนี้ ผมอยากให้คุณเลิกถามว่า "จะแปลจาก Java ยังไง" แล้วเริ่มถาม ว่า "ถ้าเป็น Ruby จริง ๆ อะไรจะทำให้เจตนาชัดขึ้น"
หัวข้อ 6 ถึง 9 พาไปสู่เรื่องต่อไปนี้:
ช่วงนี้ผมไม่ได้ถามอีกแล้วว่า Ruby ทำอะไรได้บ้าง แต่ถามว่าพฤติกรรมควรอยู่ตรงไหน objects ควรร่วมมือกันอย่างไร และการขยับการออกแบบเพียงเล็กน้อยเปลี่ยนความรู้สึกของ โค้ดได้แค่ไหน
หัวข้อ 10 ถึง 12 เอา Ruby ไปชนกับงานที่ใช้งานได้จริง:
ผมให้ความสำคัญกับช่วงนี้มาก เพราะมันบังคับให้ภาษาไปเจอกับ state, files, persistence และรูปแบบข้อมูลนำเข้า แรงกดดันด้านการออกแบบจึงเริ่มคล้ายงานจริงมากขึ้น
หัวข้อ 13 ถึง 15 พาไปสู่ปัญหาที่นามธรรมขึ้น:
เมื่อถึงปลายคอร์ส ผมอยากให้คุณขยับจากการ "จำหน้าได้" ไปสู่การ "หยิบใช้ได้เป็น" คุณควร อ่าน transformation หนึ่งออกว่าไม่เพียงแต่มันทำอะไร แต่ยังเข้าใจด้วยว่าทำไมจึงเลือก รูปแบบนี้