สอน OOP ด้วยแซนด์วิช: ปลดล็อกความคิดเชิงระบบก่อนเขียนโค้ด
เจาะลึกทดลองสอนเขียนโปรแกรมแบบใหม่โดยให้เด็กฝึกงานประกอบแซนด์วิชและจำลองบัญชีธนาคารเพื่อทำความเข้าใจ OOP และ C# โดยไม่ต้องแตะโค้ด

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- สอนเขียนโปรแกรมโดยให้เด็กฝึกงานประกอบแซนด์วิชก่อนเขียน C# จริง
- แก้ปัญหาเด็กติดหล่ม Tutorial Hell ด้วยการแยกส่วนประกอบและคำกริยาให้ชัดเจน
- ค้นพบหลักการ Command-Query Separation จากการทดลองจำลองบัญชีธนาคาร
- เข้าใจความสัมพันธ์ระหว่าง Class และ Object ผ่านโจทย์จำลองการแข่งรถ 100 คัน
นักพัฒนาหน้าใหม่อมยิ้มให้ไฟล์ .cs ที่ว่างเปล่าแล้วเริ่มพิมพ์โค้ดจนกว่าเส้นหยักสีแดงจะหายไป ในขณะที่วิศวกรซอฟต์แวร์ตัวจริงจะออกแบบระบบให้เสร็จก่อนสัมผัสคอมไพเลอร์ บทเรียนเขียนโปรแกรมส่วนใหญ่รีบพุ่งเป้าไปที่ไวยากรณ์ทันทีจนทำให้ผู้เริ่มต้นติดหล่ม Tutorial Hell เมื่อเจอหน้าจอโล่งๆ สมองก็หยุดคิดเพราะรู้คำสั่งแต่ไม่รู้วิธีแตกย่อยปัญหา
ในโครงการพี่เลี้ยงวิศวกรรมซอฟต์แวร์ จึงได้ทดลองกับเด็กฝึกงานชื่อจอห์น ด้วยการสร้างรากฐานแนวคิด Object-Oriented Programming (OOP) ทั้งหมดโดยไม่เขียนโค้ดภาษา C# แม้แต่บรรทัดเดียว นี่คือรายละเอียดทีละขั้นตอนที่ช่วยลับคมทักษะการแก้ปัญหา
ความท้าทายแรกคือการสั่งหุ่นยนต์ไร้สติปัญญาที่มี ขนมปัง, เนย, มีด, จาน และชีส ให้เขียนอัลกอริทึมประกอบแซนด์วิชชีส โดยขั้นตอนแรกเริ่มจากการกำหนดตัวแปร A เป็นขนมปัง B เป็นเนย C เป็นมีด D เป็นจาน E เป็นชีส วาง A บน D ใช้ C ตัก B เป็น F แล้ววาง F บน A วาง E บน F ได้ผลรวม G แล้วนำ G มารวมกับจาน D กลายเป็นแซนด์วิช

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
เมื่อนำมาตรวจทานแบบวิศวกรอาวุโส พบข้อผิดพลาดหลัก 3 ประการ ได้แก่ ข้อแรก คำกริยาที่ไม่ชัดเจนอย่างคำว่าตัก หุ่นยนต์ไม่รู้ว่าต้องปาด แทง หรือใช้มุมไหน ข้อที่สอง ความเข้าใจผิดเรื่องการสลับที่ A+B+E=G ในทางคณิตศาสตร์สลับที่ได้ แต่ในโลกกายภาพถ้าเอาเนยไว้ใต้ขนมปังจะเละเทะ ข้อที่สาม การปะปนระหว่างตัวข้อมูลและสภาพแวดล้อมรันไทม์เปรียบเสมือนการกินจานเข้าไปด้วย
การสอนในรูปแบบนี้นำแนวคิดการแยกแยะปัญหาทางวิศวกรรมมาประยุกต์ใช้ โดยเน้นย้ำว่าการเขียนโปรแกรมไม่ใช่แค่เรื่องของ syntax แต่เป็นการทำความเข้าใจตรรกะทางกายภาพและกระบวนการทำงานที่คอมพิวเตอร์ไร้ซึ่งสามัญสำนึก การฝึกจำลองสิ่งรอบตัวก่อนเขียนโค้ดช่วยลดความซับซ้อนและป้องกันบั๊กเชิงตรรกะในระบบจริงได้ดีเยี่ยม
ในการพยายามครั้งที่สอง เด็กฝึกงานได้แยกแยะวัตถุดิบ เครื่องมือ และภาชนะออกจากกันอย่างเด็ดขาด สถานะคือเงื่อนไขของเอนทิตีในขณะนั้น และการกระทำจะทริกเกอร์การเปลี่ยนสถานะ ต่อมาได้ทดสอบผ่านบัญชีธนาคารที่มีเงิน 5,000 ดอลลาร์และสถานะใช้งานอยู่ โดยทำ 4 การดำเนินการ ได้แก่ DEPOSIT, WITHDRAW, CHECK_BALANCE และ CLOSE_ACCOUNT ซึ่งทำให้ค้นพบหลักการ Command-Query Separation (CQS) โดยบังเอิญ
ความท้าทายสุดท้ายคือโจทย์การจำลองการแข่งรถที่ต้องมีรถ 100 คันบนสนาม โดยไม่ต้องเขียนฟังก์ชันเร่งความเร็ว 100 ครั้ง เด็กฝึกงานตอบว่าต้องสร้างเทมเพลตรถหนึ่งคันที่กำหนดว่ารถทุกคันมีอะไรและทำอะไรได้บ้าง แล้วปั๊มรถออกมา 100 คัน ซึ่งเป็นการนิยามความสัมพันธ์ระหว่าง Class และ Object Instance ได้อย่างถูกต้องโดยไม่ต้องเปิดตำรา
"You create a single car template. The template defines what every car HAS and what every car DOES. Then you stamp out 100 individual cars from that template, each holding its own numbers."
John
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น