คำนำสำหรับ Edition ที่สอง
ย้อนกลับไปในช่วงปี 1990 เราได้ทำงานกับบริษัทที่โปรเจกต์กำลังมีปัญหา เราพบว่าตัวเองต้องคอยพูดเรื่องเดิมๆ กับทุกที่เลยว่า: คุณควรจะ Test มันก่อนจะ Ship นะ, ทำไม Code ถึง Build ได้แค่บนเครื่องของ Mary ล่ะ?, แล้วทำไมไม่มีใครไปถาม User เลย?
เพื่อที่จะประหยัดเวลาตอนไปเจอลูกค้าใหม่ๆ เราเลยเริ่มจดโน้ตสิ่งที่ควรทำเอาไว้ และไอ้เจ้าโน้ตเหล่านั้นเองที่กลายมาเป็นหนังสือ The Pragmatic Programmer. ที่น่าแปลกใจก็คือ หนังสือเล่มนี้ดูเหมือนจะโดนใจใครหลายคน และมันก็ยังคงเป็นที่นิยมมาตลอด 20 ปีที่ผ่านมา
แต่ 20 ปี สำหรับ Software นั้นเหมือนผ่านมาหลายชั่วอายุคนเลยทีเดียว ถ้าเอา Developer จากปี 1999 มาวางไว้ในทีมสมัยนี้ เขาคงจะงมไปต่อไม่ถูกในโลกใหม่ที่แปลกประหลาดนี้ ในทางกลับกัน โลกในปี 1990 ก็น่าแปลกพอกันสำหรับ Developer สมัยใหม่ ในหนังสือเล่มนี้ยังมีการอ้างถึงพวก CORBA, เครื่องมือ CASE และ Indexed Loops ซึ่งมันดูตกยุคไปแล้ว หรือไม่คนสมัยนี้ก็น่าจะงงไปเลย
แต่ในขณะเดียวกัน 20 ปีที่ผ่านมาก็ไม่ได้ทำให้ความมี Common Sense เปลี่ยนไปเลย แม้ว่า Technology จะเปลี่ยนไป แต่คนยังเหมือนเดิม แนวทางและวิธีการที่เคยเป็นความคิดที่ดีในตอนนั้น ก็ยังคงเป็นความคิดที่ดีในตอนนี้เช่นกัน ส่วนเหล่านี้ในหนังสือเลยยังคงความร่วมสมัยอยู่
ดังนั้นเมื่อถึงเวลาที่ต้องทำ 20th Anniversary Edition เราก็ต้องตัดสินใจว่า เราจะแค่อัปเดตพวก Technology ที่อ้างอิงให้มันใหม่ขึ้นแล้วก็จบงาน หรือเราควรจะกลับไปพิจารณาสมมติฐานเบื้องหลังแนวทางปฏิบัติที่เราเคยแนะนำ โดยใช้ประสบการณ์ที่เพิ่มขึ้นมาอีกสองทศวรรษดูอีกรอบ
ท้ายที่สุด เราก็ทำมันทั้งสองอย่างเลย
ผลที่ตามมาก็คือ หนังสือเล่มนี้เหมือนจะเป็น 'เรือของเธซูส' (Ship of Theseus)[1] ไปซะแล้ว ประมาณหนึ่งในสามของหัวข้อในเล่มนี้เป็นเนื้อหาใหม่แกะกล่อง ส่วนที่เหลือ ส่วนใหญ่ก็ถูกเขียนขึ้นใหม่ ทั้งแบบแก้บางส่วนหรือรื้อทำใหม่ทั้งหมด เราตั้งใจที่จะทำให้เนื้อหาชัดเจนขึ้น ตรงประเด็นขึ้น และหวังว่ามันจะอยู่เหนือกาลเวลามากขึ้นด้วย
เราต้องตัดสินใจเรื่องยากๆ บางเรื่อง อย่างการตัดส่วน Resources ในภาคผนวกทิ้งไป เพราะมันแทบจะเป็นไปไม่ได้เลยที่จะอัปเดตให้ทันสมัยอยู่ตลอด และเดี๋ยวนี้การ Search หาเอาเองก็ง่ายกว่าด้วย เราได้จัดโครงสร้างและเขียนเนื้อหาที่เกี่ยวกับ Concurrency ใหม่ทั้งหมด เพราะเดี๋ยวนี้เรามี Parallel Hardware เยอะมาก แต่กลับขาดแคลนวิธีดีๆ ในการจัดการกับมัน นอกจากนี้เรายังเพิ่มเนื้อหาเพื่อสะท้อนถึงทัศนคติและสภาพแวดล้อมที่เปลี่ยนไป ตั้งแต่เรื่อง Agile ที่เรามีส่วนร่วมในการผลักดัน ไปจนถึงการยอมรับใน Functional Programming และความจำเป็นที่ต้องใส่ใจเรื่อง Privacy และ Security มากขึ้น
สิ่งที่น่าสนใจคือ เราสองคนแทบจะไม่มีการโต้เถียงกันเกี่ยวกับเนื้อหาใน Edition นี้เลย ซึ่งต่างจากตอนเขียนเล่มแรกมาก เราทั้งคู่ต่างก็รู้สึกเหมือนกันว่า อะไรที่สำคัญนั้นมันมองเห็นได้ชัดเจนกว่าเดิม
ก็นั่นแหละครับ หนังสือเล่มนี้คือผลลัพธ์ที่ได้ หวังว่าคุณจะสนุกกับมันนะ ลองนำเอาแนวทางใหม่ๆ ไปใช้ดู หรือถ้าจะมองว่าสิ่งที่เราแนะนำบางอย่างมันผิดก็ไม่ว่ากัน ขอแค่อย่าหยุดพัฒนาฝีมือ (Craft) ของคุณ และส่ง Feedback มาหาเราบ้างนะครับ
แต่ที่สำคัญที่สุด อย่าลืมทำให้มันเป็นเรื่องสนุกด้วยล่ะ