Screen Shot 2557-08-30 at 4.01.04 PM

นำรูปมาจาก blog.pluralsight.com

หลังจากที่ไปร่วมงาน Java Boot Camp แล้วพบว่า
มีการ brainstorm เกี่ยวกับ code ที่ดีควรเป็นอย่างไร
ซึ่งหลายๆ กลุ่มมักจะเขียน Clean Code เป็นข้อหนึ่งในนั้น
ดังนั้น เรามาดูกันหน่อยว่า จริงแล้ว Clean Code มันคืออะไร แล้วมันดีจริงไหม

Clean Code คืออะไร

แปลตรงๆ ว่า คือ code ที่สะอาด และเรียบง่าย ตรงไปไหม

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

ดังนั้น Clean Code มันจึงเป็นศิลปะในการอธิบายให้คนเข้าใจว่า
ถ้าจะสั่งให้เครื่องทำงาน จะต้องทำอย่างไร

โดยในหนังสือ Clean Code จะอธิบายได้ละเอียดมากๆ
แนะนำให้อ่านเลยครับ

cleancode

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

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

โดยคำถามที่มักจะเกิดขึ้นมา เช่น

  • เราต้องเสียเวลามาทำความสะอาด code  หรือเปล่า ? ตอบง่ายๆ ว่ามันแน่นอนอยู่แล้ว
  • แล้ว code ที่เราเขียนขึ้นมามันต้อง สะอาด (clean) เสมอหรือไม่ ? ตอบได้เลยว่า ไม่

แนวคิดที่จะทำให้ code ของเรามันสะอาด และ เรียบง่าย มันมีเยอะ
โดยจะขอนำแนวคิด Simple Design Rule 4 ข้อของ Kent Beck มาแนะนำ มีดังนี้
( ผมมักจะยึดแนวคิดนี้อยู่เสมอ ดังจะเห็นได้จากแต่ละ blog ผมมักจะพูดถึงตลอด )

  1. ตรงตามความต้องการ นั่นคือ test case ผ่านทั้งหมด
  2. แนวคิดในการออกแบบทั้งหมด จะถูกเขียนลงไปใน code
  3. code จะต้องไม่ซ้ำซ้อน
  4. จำนวน component ต่างๆ เช่น class, method จะต้องมีขนาดเล็ก

ถ้าทำตามแนวคิดนี้ จะทำให้ code เรา ดีขึ้น นะ ..
แค่เพียงไม่ให้ code ซ้ำซ้อน ก็ส่งผลใ้ห้ code ของคุณแบ่งออกเป็น modular ชัดเจน
และ code จะไม่ผูกมัดกันมากกันเกินไป ( loose coupling ) แล้วนะ

Clean Code ทำให้เราทำงานได้เร็วขึ้น และเจอ Bug น้อยลง ?

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

  • ต้องทำการแก้ไข code หลายจุด เพื่อแก้ไปัญหาหนึ่งๆ
  • ต้องทำการแก้ไขด้วยความระมัดระวัง เพราะว่า มันอาจจะกระทบต่อส่วนอื่นได้ เพราะว่ามันมีความซับซ้อน

ตัวอย่าง code ที่รกรุงรังจะเป็นดังรูป
โดยที่สีเหลืองคือ ส่วนของ code ที่ซ้ำซ้อน และที่ต้องทำการแก้ไข
ส่วนสีเขียนคือ เส้นทางการทำงานของ code

นำรูปมาจาก xprogramming.com

นำรูปมาจาก xprogramming.com

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

นำรูปมาจาก xprogramming.com

นำรูปมาจาก xprogramming.com

ดังนั้น code ที่ดี มันช่วยทำให้เรา

  • แก้ไขได้ง่ายขึ้น
  • ลดจำนวนความผิดพลาดลง

ซึ่งมันเป็นเรื่องที่ดีและควรทำ โดยไม่ต้องมาโต้เถียงกันอีกนะครับ

แล้ว Code มันต้องสะอาด เรียบง่ายอยู่เสมอหรือไม่

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

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

ถ้าคุณให้ความสำคัญกับ code อยู่เสมอแล้ว จะช่วยให้คุณ

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

เราต้องสูญเสียเวลาจำนวนมากไปกับการทำให้ code สะอาดใช่ไหม

ตอบได้เลยว่า ใช่แล้ว
โดยเราจะต้องตอบคำถามให้ได้ว่า สิ่งที่เรากำลังจะทำมันส่งผลต่อเราอย่างไร เช่น

  • ถ้า code มันสะอาด และ ดีแล้ว จะทำให้เราเร็วขึ้นไหม
  • ใช้เวลานานเท่าไร ในการทำให้ code มันสะอาด

นำคำตัวจากทั้งสองข้อมาพิจารณาว่าคุณจะเลือกทางไหนดูนะครับ ผมเลือกให้คุณไม่ได้หรอก

แล้ว code เรามันต้องดีเท่าไรล่ะ

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

  • การแก้ไข เปลี่ยนแปลง มันยากมากๆ
  • เมื่อแก้ไขข้อผิดพลาดต่างๆ ใน code จะหายากมาก รวมทั้งแก้ไขยากอีกด้วย

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

ดังนั้นกลับไปดูว่า คุณเจอปัญหาเหล่านี้อยู่หรือไม่

คุณเท่านั้น ที่ต้องเลือกครับ

Screen Shot 2557-08-30 at 4.04.19 PM