บันทึก “My good code is bad” ของหน่อง อนุชิต

Ball Weera
2 min readApr 26, 2019

--

วันนี้ผมไปร่วมงาน XConf Bangkok 2019 ซึ่งจัดโดย Thoughtworks ได้รับความรู้จากคนเก่งๆ ของ Thoughtworks ไม่ว่าจะเป็น Martin Fowler, Dean (Salahuddin Chalermthai), Pinnapong Silpsakulsuk, Boss (Supanat Pothivarakorn) และคนที่พูดใน session สุดท้ายที่ทำให้ผมต้องบันทึกเรื่องราวเก็บไว้ผ่านบทความนี้ ก็คือ น้องชายที่สนิทกันมากของผม หน่อง (Anuchit Prasertsang)

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

ผมจะขอแทนตัวหน่องในบทความนี้ว่า “หน่อง”

เอาล่ะครับ มาเริ่มกันเลย

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

เป็นยังไงบ้างครับ หน่องว่ามันเป็นอะไรที่โคตรเจ๋งมากๆ หน่องนั่งเปิดดูทั้งวัน ทีมนี้เค้ามีชื่อว่า Dude Perfect ทีมพวกเค้ามีกันอยู่ห้าคน สิ่งที่พวกเค้าทำคือ เวลาคนใดคนหนึ่งในทีมมีไอเดียอะไรบางอย่างที่อยากจะทำ อีกสี่คนที่เหลือจะช่วยทุกวิถีทางที่จะทำให้ไอเดียของเพื่อนสำเร็จ อย่างไอเดียที่ใช้ “ไม้จ๊วด” (ดูในวีดิโอ นาทีที่ 1.13) เนี่ยดูยังไงก็ไม่น่าจะทำได้เลย มันเจ๋งมากๆ เลยใช่มั้ยครับ

หน่องเป็นคนที่เชื่อในการใช้ใน engineering practice เพราะมันช่วยให้หน่องสร้างซอฟต์แวร์ที่มีคุณภาพ และหน่องก็เชื่อพวกเราทุกคนที่นั่งอยู่ในห้องนี้ เวลาเขียนโปรแกรมก็พยายามจะให้ source code ที่เขียนออกมานั้นดีที่สุด คงไม่มีใครในห้องนี้เขียนโปรแกรมโดยตั้งใจให้โปรแกรมมันห่วยที่สุดเท่าที่จะทำได้จริงมั้ยครับ

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

ทีนี้เวลาเพื่อนเราเขียนโปรแกรม ใช้เวลาเขียนอยู่ทั้งวันจน commit code ไปเรียบร้อย ซึ่งเพื่อนเราก็ต้องเชื่อว่าโค้ดนั้นมันโอเคแล้ว ในทีนี้หน่องขอใช้คำว่า “มันเป็นโค้ดที่เป็นที่พึงพอใจ” สำหรับเค้าแล้ว แต่พอเราลองไปอ่านโค้ดเพื่อน แล้วเราเจอว่าโค้ดที่เพื่อนเขียนนั้นไม่ดีหรือห่วย เราก็บ่นบ้าง สบถออกไปบ้าง ต่อว่าโค้ดของเพื่อนเราว่าเขียนได้แย่มาก ตรงนี้หน่องอยากให้พวกเราลองคิดว่า การบ่นนั้นสร้างอะไรขึ้นมาบ้าง มีประโยชน์อะไรบ้างมั้ย….

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

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

พอมาถึงตรงนี้หน่องอยากจะบอกอย่างนึงว่า

Quality != Valuable

เพื่ออธิบายเรื่องนี้หน่องขอยก Agile Principle ข้อแรกมาให้ดูกัน

คุณภาพกับคุณค่านั้น ไม่เหมือนกัน ถึงแม้มันจะมีความสัมพันธ์กันก็ตาม แต่มันไม่เหมือนกัน หน่องขอยกตัวอย่างให้เห็นภาพอันนึง หน่องเคยเจอโปรแกรมขายประกันตัวนึง แน่นอนว่าโปรแกรมตัวนี้ช่วยงานของคนขายประกันได้มากกว่าเครื่องคิดเลข แต่ในความรู้สึกของหน่องที่เห็นโปรแกรมตัวนี้คือมันห่วยมาก ไม่มีคุณภาพเลย หน่องคิดในใจว่า ทำไม user experience มันแย่ขนาดนั้น หน่องยังไม่แน่ใจเลยว่าถ้าเขย่ามัน มันจะ error มั้ย แต่ถามว่าคนขายประกันซื้อไปใช้มั้ย ซื้อนะครับ ถึงแม้มันจะห่วยมากในสายตาของเราก็ตาม แต่สำหรับคนขายประกันแล้ว มันมีคุณค่าต่อพวกเค้ามาก เพราะช่วยให้เค้าขายประกันได้ง่ายขึ้น ลดงานหลายอย่างที่ซับซ้อนไปได้ มันเป็นเครื่องมือที่ใช้ทำมาหากิน สร้างรายได้ให้กับพวกเค้า

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

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

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

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

ขอบคุณทุกคนที่มาร่วมงานในวันนี้ สวัสดีครับ

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

ข้าวผัดกล่องนั้นเสมอ

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

--

--

Ball Weera

Linchpin who crafts software with professional mindset | Photographer