ทีดีดี
ปกติเวลาพัฒนาโปรแกรม ตามประสาคนใจร้อนปนขี้เกียจ อยากจะเห็นผลไวๆ ผมมักจะเขียนโปรแกรมในส่วนของ business logic กับ UI ไปพร้อมๆกันเลย (เรียกให้ดูดีไปงั้น จริงๆคือลากคอนโทรลมาแปะบนฟอร์มแล้วก็เขียนโค้ดไปพร้อมกันเลยนั่นแหละ) ซึ่งพอทำไปซักพัก ก็จะเริ่มทำ refactoring ไปเรื่อยๆ (จริงๆคือ ค่อยๆตัดโค้ดออกมาเป็นโมดูล)
ปัญหาคือ พอทำไปซักพักโค้ดจะเริ่มมั่ว และมีโครงสร้างแปลกๆ ที่ทำให้ทำความสะอาดมันยากขึ้นทุกที สุดท้ายก็ช่างหัวมัน ทำยังไงก็ได้ให้มันทำงานได้เป็นพอ แล้วก็เริ่ม เขียนโค้ด คอมไพล์ รันทดสอบ แล้วก็แก้โค้ด วนไปเรื่อยๆจนมันเสร็จ โค้ดจะเละยังไงก็ไม่สน เรียกว่า programming by coincidence
ซึ่งถ้าเกิดคุณโชคร้าย อีกไม่กี่เดือนให้หลัง ต้องกลับมาแก้งานเก่า บอกได้แค่ว่า มันน่าสยดสยองมาก
ตอนนี้กำลังทำเว็บแอ็ปอยู่ตัวนึง โดยใช้วิธีเดิมๆนี่แหละครับในการทำงาน ทำไปได้ไม่กี่หน้าก็ทนความมั่วไม่ไหว เลยตัดสินใจรื้อมันซะ แล้วก็เริ่มจากโมเดลเลย เขียนโค้ดแล้วเขียนเทสต์ประกบไปเรื่อยๆ ใช้ MBUnit เป็น unit testing framework ทำไปได้ซักพัก ตอนนี้ดูดีขึ้นมาก จะแก้อะไรทีก็ไม่ต้องกลัว เพราะเรามีเทสต์ประกบ ไฟแดงขึ้นที่ไหน ก็ตามไปแก้ให้เขียว คุณภาพชีวิตดีขึ้น
และอีกสาเหตุนึงคือโปรเจคนี้ เป็น pet project และใช้แค่ภายในไม่รีบด่วน ก็เลยมี Spring + Spring.Web + String.Data.HNibernate (ใช้นิดเดียว Spring ก็ใช้แค่ IoC กับส่วนอื่นนิดหน่อย) สองตัวหลังยังไม่ stable แถมเอกสารก็ยังไม่ค่อยมี พยายามใช้ของจาวาแก้ขัดไปก่อน ก็ …นะ
ไม่งั้นก็นั่งแกะโค้ดไปทำไป โปรเจคก็เลยลงนรกเร็วกว่าปกติ
เป็นบทเรียนให้จำไว้ว่าต่อไปอย่ามักง่าย ถึงโค้ดบางจุดจะดูง่ายๆ ดูเหมือนใช้เวลาแก้ไม่กี่นาที ไม่ต้องเขียน test case ก็ได้ แต่อาจไป break โค้ดส่วนอื่น จนต้องใช้เวลาอีกครึ่งวันเพื่อที่จะต้อง check out โค้ดเก่าออกมา แล้วตั้งต้นใหม่อีกทีด้วยการเขียน test ทำไปตั้งแต่แรกเลยดีกว่า