Making CHANGE possible

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

เริ่มต้นด้วยวันนี้จะมาพูดถึงเรื่องนึง ซึ่ง test มีส่วนเกี่ยวข้องด้วย คือ ทำให้เรากล้าและพร้อมรับการเปลี่ยนแปลง

mindset เรื่องการยอมรับความเปลี่ยนแปลง เป็นเรื่องที่ผมรู้สึกว่า ขาด อยู่ในโลกการพัฒนา software ในปัจจุบัน เป็นสาเหตุสำคัญที่ทำให้ชีวิตนักพัฒนา software มัน เศร้า กันอย่างที่เป็นอยู่

ผมจะบอกคุณว่า ถ้าคุณมี mindset เรื่องยอมรับการเปลี่ยนแปลง ชีวิตการพัฒนา software ของคุณจะไม่เหมือนเดิมอีกต่อไป

ผมจะยกตัวอย่างวงจรอุบาตนึงให้ฟัง

กลัวการเปลี่ยนแปลง -> Design อย่างละเอียด จะได้ไม่ต้องแก้ -> ลงมือ code -> งานเสร็จ ไปส่วนหนึ่ง -> แก้ เพราะมี requirement เพิ่ม, design ผิด ทำไม่ได้จริง -> เหนื่อย, เปลืองพลังงาน, เปลืองเวลา(ทั้งตอน design และตอนแก้), งานเลท -> ไม่อยากแก้แล้ว -> กลัวการเปลี่ยนแปลง -> …

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

ชอบการเปลี่ยนแปลง -> Design น้อยๆ พอที่จำเป็น -> ลงมือ code พร้อมเขียน test -> แก้เพราะมี requirement เพิ่ม, ทำเพิ่ม -> test พัง -> แก้ code และแก้ test -> รัน test ผ่านหมด นอนหลับฝันดี -> ชอบการเปลี่ยนแปลง -> …

เรื่องนี้มีประเด็นหนึ่งที่น่าสนใจ คือ ยิ่งคุณเป็นคนที่ design เก่งเท่าไหร่ คุณจะยิ่งเกลียดความเปลี่ยนแปลงเท่านั้น เพราะคุณจะเจอความเปลี่ยนแปลงน้อยกว่าคนอื่น แต่เมื่อมันมาถึงทุกอย่างจะเป็นเรื่องใหญ่โต และคุณจะโทษ design ของคุณ หรือโทษความเปลี่ยนแปลง ที่ทำให้ชีวิตคุณมีปัญหา ความจริงแล้ว ไม่ใช่เลย ความเปลี่ยนแปลง เป็นเรื่องธรรมชาติ ถ้าใครนับถือศาสนาพุทธคงทราบดี เราต้องยอมรับว่ามันมีจริง และหาทางรับมือกับมัน ไม่ใช่พยายามหลีกเลี่ยง

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

คุณรู้หรือไม่ว่าการ design ที่มากเกินไป อาจจะหยุดยั้ง innovation ในโปรเจ็คของคุณ!!! 

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

  • ความรู้ในเรื่อง design, abstraction และเทคนิคการเขียน code เพื่อให้เกิดสิ่งเหล่านี้ คุณไม่ควร design เป็นจำนวนมากในครั้งเดียว แต่คุณต้องรู้ว่า design ที่ดีเป็นอย่างไร เพื่อที่คุณจะได้ evolve software ของคุณไปได้ถูกทาง
  • Incremental dev & just enough design ทำทีละส่วนเล็กๆ ให้สำเร็จขึ้นมา คิดในส่วนที่กำลังจะทำให้มากๆ ส่วนที่ยังไม่ทำ ไม่ต้องคิด ไม่ต้องทำเผื่อ เพราะเมื่อถึงวันที่เราจะทำทุกอย่างมันเปลี่ยนไปแล้ว ไว้ค่อยมาคิดกันใหม่
  • test & refactoring หลังจากที่คุณทำที่ละส่วนเล็กๆ แล้ว เมื่อคุณจะทำเพิ่ม แน่นอนคุณต้องแก้ของเก่า เพราะคุณไม่ได้คิดเผื่อไว้ คุณต้องมี test เพื่อตรวจจับของเก่าที่พัง และ refactor code หลังจากที่ทำเสร็จ เพื่อให้มันคงความแก้ง่าย เอาไว้
  • clean code ทำให้คุณและเพื่อนร่วมทีมแก้ code ได้ง่ายขึ้น

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

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

Advertisements

2 thoughts on “Making CHANGE possible

  1. Pingback: ย้อนกลับไปมองความคิดในเรื่องการพัฒนาซอฟแวร์ | Tap

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s