เขียน code โดยไม่ทำการวางแผน

ในการจะเขียนอะไรที่มีคุณภาพสักอย่างขึ้นมานั้น
มันไม่ใช่เรื่องง่ายเลย
เนื่องจากต้องผ่านกระบวนการคิด ค้นคว้า การวิเคราะห์ มากมาย
ซึ่ง code ก็เช่นเดียวกัน ไม่มีข้อยกเว้น

แต่โชคไม่ดีที่นักพัฒนา
มักจะลงมือเขียน code โดยขาดการยั้งคิด ไม่ค้นคว้าหรือวางแผนก่อน
จะลงมือเขียนกันไปเรื่อย ๆ
มีปัญหาก็ค้นหาไปเรื่อย ๆ
หรือไม่ก็ถามไปเรื่อย ๆ
ซึ่งมันเหมาะสมกับระบบงานเล็ก ๆ
แต่เมื่อระบบมีขนาดใหญ่ขึ้น จะเห็นผลกระทบในทางลบเยอะมาก ๆ

ดังนั้นสิ่งที่พึงกระทำสำหรับการเขียน code คือ
การคิด ค้นคว้า วางแผน ลงมือเขียน ตรวจสอบ แก้ไข และวนไป
อย่าลืมว่า
การเขียน code มันคือการสื่อสารอย่างหนึ่งนะ
คิดก่อนทำเสมอ
ถ้าต้องการแก้ไข code หรือ refactor code คิดให้มาก
ถ้าต้องการแก้ไข code ที่ไม่มีชุดการทดสอบ ต้องคิดให้มาก ๆๆๆๆๆ ขึ้นไปอีก

แต่การวางแผนหรือคิดมากไปก็ใช่จะเป็นสิ่งที่ดี !!

การวางแผนเป็นสิ่งที่ดี
แต่การแผนที่มากไปหรือใช้เวลานานเกินไปกลับเป็นสิ่งที่แย่
เหมือนกับการกินน้ำ กินมากไปมันก็จุก วิ่งหรือเดินไม่ไหว

เราไม่ได้ต้องการแผนงานที่สมบูรณ์แบบ
แต่ต้องการแผนที่พอเพียงให้เริ่มต้นเดินทางได้
เนื่องจากนั้นแผนงานต่าง ๆ ต้องมีการเปลี่ยนแปลงเสมออยู่แล้ว
ดังนั้น plan อย่านิ่งนะ ต้อง plan กันบ่อย ๆ

วางแผนมากหรือน้อยไปก็ไม่ดีนะ
เช่นวางแผนทีเดียวทั้ง project/product ไม่น่าจะดี
ลองวางแผนเป็นส่วน ๆ ดีไหม
เช่นวางแผนของ feature ที่จะทำต่อไปดีไหม

ชอบใช้ solution หรือวิธีการแก้ไขแรกที่ทำได้ หรือ คิดได้

บ่อยครั้งพบว่า วิธีการแก้ไขปัญหาแรก ๆ
มักจะเป็นวิธีการชั่วคราว ไม่ดี แต่ทำงานได้
แต่เรามักจะเลือกใช้
ทั้ง ๆ ที่อาจจะมีวิธีการอื่น ๆ อีก

ดังนั้น สิ่งที่ควรต้องทำคือ ลองหาวิธีการอื่น ๆ บ้าง
เพื่อทำให้เห็นข้อดีและเสีย
เพื่อทำให้เข้าใจปัญหา
จากนั้นจึงทำให้เราเลือกวิธีการที่ดีกว่าได้

สิ่งที่นักพัฒนาทำนั้น
ไม่ใช่หาวิธีการแก้ไขปัญหาเท่านั้น
แต่วิธีการเหล่านั้นต้องแก้ไขปัญหาได้ดี มีประสิทธิภาพที่ดี
รวมไปถึงง่ายต่อการอ่าน ทำความเข้าใจและดูแลรักษา

ยังไม่พอนะ !!
เมื่อต้องมาแก้ไข code ที่ทำไว้แล้ว
พบว่า code เหล่านั้นมันไม่ดี มีวิธีการที่ดีกว่า
สิ่งที่ทำคือ การพยายามแก้ไข code เหล่านั้นให้ทำงานได้ตามที่ต้องการ
แต่ไม่ได้ทำให้ code นั้นดีขึ้น !!
หรือไม่ยอมเขียน code ด้วยวิธีการใหม่ ๆ
ทั้ง ๆ ที่ใช้งาน version control ด้วยนะ
แปลกดีนะ !!

อีกอย่างที่สำคัญ
ปัญหาที่เราเจอนั้น เชื่อเถอะว่าคนอื่น ๆ น่าจะเจอแล้วและแก้ไขแล้ว
ดังนั้นลองค้นหาดูสิ
แต่ต้องระมัดระวังให้มาก
เพราะว่า สำหรับมือใหม่ชอบ copy and paste มาใช้โดยที่ไม่เข้าใจเลย
แต่มันทำงานได้ตามที่ต้องการเท่านั้นเอง

ปัญหาที่หนักมาก ๆ คือ Data Structure ที่ใช้มักจะผิดหรือไม่เหมาะสม

เนื่องจากบางครั้งสนใจ algorithm มากจนเกินไป
จนหลงลืมเรื่องของ data structure ที่เหมาะสมกับปัญหา
ทำให้มักจะเลือกใช้งานผิดบ่อยมาก ๆ

มักเขียน code แย่ ๆ ขึ้นอย่างต่อเนื่อง

เมื่อต้องเพิ่ม code ใหม่ ๆ เข้าไปใน code เดิม
สิ่งที่ทำคือ ใส่ code แย่ ๆ เข้าไป
ทั้ง code ที่ซ้ำซ้อน
ทั้งการ hard code สิ่งต่าง ๆ
ทั้งการสร้างตัวแปรที่สิ้นเปลือง
ทั้ง condition ที่ไม่จำเป็น
บ่อยกว่านั้นชอบเขียน comment ที่ไม่มีประโยชน์ใน code

สิ่งที่ต้องทำคือ
อย่าทำให้ code มันแย่ลงหรือยุ่งเหยิง
code ที่สร้างหรือแก้ไขหรือสิ่งที่เกี่ยวข้องต้องดีขึ้นกว่าเดิม

ที่เจอมาก ๆ คือ ไม่เขียน test !!

ชอบถามหา Best Practice !!

สิ่งที่แปลกคือ ถ้ามี Best Practice จริง ๆ
ทำไมมันออกมาบ่อยเหลือเกิน
ดังนั้นสิ่งเหล่านี้ไม่น่าจะมีนะ
มันมีแต่สิ่งที่ดีสำหรับวันนี้ ตอนนี้
ซึ่งอาจจะแย่ในพรุ่งนี้ก็เป็นไปได้

ดังนั้นสิ่งที่ควรทำคือ
พยายามหาวิธีการที่ดีกว่าอยู่อย่างเสมอ
อย่ายึดติดกับวิธีการเดิม ๆ
เพื่อทำให้สิ่งที่คุณทำนั้นมันดีที่สุด

ยังไม่พอนะ ชอบใช้ Shared หรือ Global State มากจนเกินไป

ทำให้เกิดปัญหา หรือ side-effect ตามมาเยอะมาก
แถมหา root cause ไม่เจออีกด้วย
เพราะว่าทำการ shared state ทั้งระบบกันไปเลย
ไม่รู้ว่ามีใคร ตรงไหน มาทำการแก้ไขหรือเปลี่ยนแปลง

ดังนั้น ลด ละ เลิก กันนะ
หรือใช้แต่พองาม

มีอะไรอีกละ เยอะจริง ๆ อีกเรื่องคือ ไม่ยอมพัก

ชอบทำกันยาว ๆ ไป
ทั้งวันทั้งคือ
ถามว่าเคยทำไหม
ตอบได้เลยว่า เคย
มันช่วยอะไรไหม
ตอบเลยช่วยให้เสร็จนะ แต่ไม่ดีเลย
เขียนหรือสร้างอะไรมาก็ไม่รู้
แถมทำให้ร่างกายแย่ลงไปอีกด้วย

ดังนั้นต้องรู้จักการแบ่งเวลา การพักเพื่อผ่อนคลายและพักผ่อนบ้าง
ลุกออกไปเดินบ้าง
อย่าไปแก้ไขที่ปลายเหตุ เช่นต้องหาเก้าอี้ดี ๆ มาใช้ เป็นต้น

ขอให้สนุกกับการ coding นะครับ