โปรแกรมเมอร์ที่ดี ต้องมีความขี้เกียจ

https://www.teeturtle.com/products/super-lazy

เมื่อประมาณสองปีที่ผ่านมา มีเรื่องราวของโปรแกรมเมอร์รัสเซียคนนึงที่ดังขึ้นมาเพราะความขี้เกียจขั้นเทพจนได้รับการชาบูไปทั่วอินเตอร์เน็ต เรื่องมันก็มีอยู่ว่า

xxx: โปรแกรมเมอร์คนนึงเพิ่งลาออกไป หมอนี่เป็นพวกที่ใช้ชีวิตอยู่ใน terminal พอนึกออกมะ พวกที่นั่งจ้องหน้าจอดำๆตัวหนังสือเขียวๆ ทั้งวัน รัก vim ยิ่งชีพ วาดแผนผังด้วย dot และเขียน wiki ด้วย markdown … และที่สำคัญที่สุด ถ้ามีอะไรก็ตามที่ใช้เวลามากกว่า 90 วินาที หมอนี่จะเขียนสคริปท์ให้ทำงานแทน

xxx: และตอนนี้เราก็กำลังนั่งดู “ตำนาน” ที่เขาทิ้งไว้

xxx: คุณจะต้องชอบแน่ๆ

xxx: “เอาใจเมีย.sh” — ส่งข้อความว่า “วันนี้ทำงานดึกหน่อยนะจ๊ะ” ไปให้ภรรยา เลือกเหตุผลอัตโนมัติโดยสุ่มจากเหตุผลที่ใส่ไว้หลายๆอันในสคริปต์ สคริปต์อันนี้จะเช็คทุกวัน ถ้าเกิดหลังสามทุ่มแล้วบน server ยังมี username ของหมอนี่ login อยู่ จะส่งข้อความทันที

xxx: “ไอ้เวรคูมาร์.sh” — ไล่ดูอีเมล์ของเขาว่ามีอีเมล์มาจากคูมาร์ (คนดูแล database ของลูกค้า) รึเปล่า ถ้าอีเมล์มีคำว่า “ปัญหา”, “ช่วยด้วย”, “ขอโทษ” จะต่อเข้าไปที่เครื่องของลูกค้าแล้วดึงข้อมูลสำรองมาเขียนทับ database ปัจจุบัน จากนั้นก็ส่งอีเมล์บอกคูมาร์ว่า “ไม่เป็นไรเพื่อน ระวังหน่อยนะคราวหน้า”

xxx: “เมา.sh” — สคริปต์ที่ถูกสั่งให้วิ่งเฉพาะวันที่เจาะจง ส่งอีเมล์หาทีมว่า “ไม่ค่อยสบาย เดี๋ยวทำงานจากบ้าน” และเช่นกัน เลือกเหตุผลอัตโนมัติโดยสุ่มจากเหตุผลหลายๆอันที่ใส่เอาไว้ สคริปต์นี้จะทำงานถ้าหลัง 8:45 แล้วยังไม่มี username ของหมอนี่ login บน server

xxx: และรางวัลออสการ์ก็ตกเป็นของ “สัสกาแฟ.sh” — อันนี้เริ่มจากการรอ 17 วินาที (เพื่อ?) จากนั้นเปิด telnet เพื่อต่อเข้าไปยังเครื่องต้มกาแฟและสั่งให้มันทำกาแฟ (พวกเราไม่เคยรู้มาก่อนว่าไอ้เครื่องต้มกาแฟที่ออฟฟิศมันต่อ LAN มี Linux และรับคำสั่งอะไรแบบนี้ได้ด้วย!) ปรากฏว่าเครื่องกาแฟมันเริ่มทำงานจริงๆ และค่อยๆทำ ลาเต้ขนาดกลางที่มีคาเฟอีนครึ่งเดียว มันใช้เวลา 24 วินาทีจนกระทั่งเทกาแฟใส่ถ้วยเรียบร้อย เวลาทั้งหมด (17+24 วินาที) คือเวลาที่ใช้ในการเดินจากโต๊ะของหมอนี่ไปยังเครื่องต้มกาแฟพอดีเป๊ะ!

แล้วเราควรขี้เกียจในเรื่องไหนบ้าง?

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

ข้อ 1. ขี้เกียจทำอะไรซ้ำๆ

อย่าทำอะไรซ้ำๆ (Don’t repeat yourself.) อย่า copy paste code จากโปรเจคนึงไปยังอีกโปรเจคนึงบ่อยๆ ถ้าอะไรที่ใช้ซ้ำๆได้ก็แยกเป็น library ซะ อะไรที่ทำซ้ำๆก็เขียนเป็นสคริปต์แบบคุณพี่ข้างบนก็ได้ อย่าพยายามแก้ปัญหาที่มีคนแก้ไว้อย่างดีแล้ว (Don’t reinvent the wheel.) ถ้าไม่จำเป็น ให้มองว่าจะเอามาใช้และต่อยอดอย่างไรดีกว่า

ข้อ 2. ขี้เกียจทำอะไรช้าๆ

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

ข้อ 3. ขี้เกียจทำอะไรถึกๆ

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

ข้อ 4. ขี้เกียจแกะ/อธิบายว่าโค้ดทำอะไร

ใส่ใจกับการดูแลคุณภาพของ code ให้อ่านรู้เรื่อง เขียนคำอธิบายถ้าจำเป็น และกำจัดหนี้ทางเทคนิค (technical debt) อยู่เสมอ แล้วคุณจะขอบคุณตัวเองเมื่อต้องกลับมาใช้โค้ดเก่าๆที่ไม่ได้แตะมาเป็นปี คุณภาพโค้ดและ documentation ที่ดียังช่วยเวลาคุณขี้เกียจอธิบายโค้ดให้คนอื่นฟังด้วย

ข้อ 5. ขี้เกียจทำอะไรที่ไม่จำเป็น

ทุกคนมีเวลาจำกัด ต้องมองให้เป็นว่าอะไรสำคัญในการทำให้งานเสร็จ อะไรไม่จำเป็นไว้ทำทีหลังหรือไม่ต้องทำก็ได้

เอกสารอ้างอิง