i – จุดเริ่มต้นของความฝัน
สมชายเป็นนักศึกษาที่เพิ่งพ้นรั้วมหาวิทยาลัยมาหมาดๆ ผลการเรียนของสมชายไม่ดีเด่นอะไรมากแค่พอไปวัดไปวาได้ เพราะเขามักใช้เวลาตอนกลางคืนอ่าน technical blog, เขียนโปรแกรมและแฮ็ค (ไม่นับ msn และ irc ที่ใช้จีบสาว) ทำให้ตื่นสายและพาลโดดเรียนเป็นประจำ
สองสามปีก่อนหน้านี้ สมชายไม่รู้อะไรเกี่ยวกับคอมพิวเตอร์มากไปกว่ามันเปิดเว็บ เล่นเกมส์ และแชตได้ – ทว่าความรู้สึกหลังการเขียนโปรแกรมครั้งแรกในชีวิต จากการบ้านที่อาจารย์สั่ง หล่อหลอมหัวใจของเขากับการพัฒนาซอฟต์แวร์อย่างช้าๆจนเขาเป็นสมชายในวันนี้ (สมชายใช้เวลาหนึ่งชั่วโมงทำตามที่หนังสือเรียนบอกให้ทำ แต่เขาเสียเวลาไปอีกทั้งคืนกับการ “เพิ่มเติม” สิ่งที่เขาอยากให้มันเป็น)
หลังจากวันนั้นเขาผันตัวเองจากผู้เสพ มาเป็น ผู้ผลิต – จินตนาการกับความอยากรู้อันไม่สิ้นสุดผลักดันให้เขา “เขียน” สิ่งที่อยากได้, open source มากมายดาหน้ามาให้เขาชำแหละ ดูกลไกการทำงาน และสานต่อสิ่งที่เขาต้องการ
สมชายสมัครเป็นวิศวกรซอฟต์แวร์ในบริษัทแห่งหนึ่ง เขาผ่านการสัมภาษณ์มาได้เพราะความ geek เตะตาผู้สัมภาษณ์ผู้เชื่อมั่นในประสบการณ์จริงมากกว่าตัวเลขสมมุติ
สามปีผ่านไป เขากลายเป็นส่วนหนึ่งของทีมผลิตซอฟต์แวร์ตัวหนึ่งซึ่งเป็นผลิตภัณฑ์หลักของบริษัท โค้ดหลักของโปรแกรมนี้ถูกเขียนอย่างต่อเนื่องมากว่าห้าปี – สมชายหัวเสียทุกครั้ง เวลาเขาต้องการจะเพิ่ม feature ตามที่ได้รับมอบหมายเข้าไป เนื่องจากเขาเสียเวลาทั้งวัน (บางครั้งหลายวัน) เพื่อทำความเข้าใจกับโค้ดเก่า (ซึ่งบางโมดูลเขาเป็นคนเขียนเองเมื่อนานมาแล้ว) – โค้ดบางส่วนเป็นการ copy&paste ไปไว้ในหลายๆโมดูลที่ไม่มีความสัมพันธ์กัน ทำให้บั๊กที่เคยแก้แล้วกลับมาหลอกหลอนซ้ำซาก
เวลาผ่านไป งานที่ได้เริ่มน้อยลงเรื่อยๆ ในขณะที่ทุกคนลงแรงมากขึ้นเรื่อยๆ – วันหนึ่งสมชายและคนอื่นในทีมตัดสินใจประชุมกับ project manager เพื่อบอกว่าพวกเขาทนต่อไปไม่ไหวแล้ว พวกเขาต้องการ design และ implement ใหม่
แน่นอนว่าตอนแรก project manager ไม่เห็นด้วย เหตุผลมากมายถูกหยิบยกขึ้นมา ทั้งเรื่อง schedule สำหรับ iteration หน้าที่ถูกแพลนไว้แล้ว ไหนจะ cost ที่เพิ่มขึ้นจากการทำใหม่ทั้งหมด – สำหรับ project manager แล้ว เขาไม่เห็นว่ามันจะต่างกันตรงไหน? โค้ดเดิมทำงานได้อยู่แล้ว
สำหรับสมชายและทีม โค้ดเดิมทำงานได้ แต่มัน maintain ไม่ได้อีกต่อไปแล้ว
project manager และผู้บริหารไฟเขียวในที่สุดเมื่อลูกค้าบ่นเรื่อง schedule ที่ยืดแล้วยืดอีก งานที่ได้ก็ไม่มีคุณภาพเหมือนปีแรกๆที่เป็นผลิตภัณฑ์ระดับ killer app ของวงการ – แต่มีข้อแม้ว่าต้องทำควบคู่ไปกับโค้ดเก่า จนกว่าโค้ดใหม่จะมี feature เทียบเท่าของเก่าจึงจะยอม switch เป็นทางการ
สมชายและคนเก่งๆในทีมอีกสามคนถูกเลือกเป็นหัวหอกในการ design&implement โค้ดใหม่ ความหวังของทุกคนเรืองรองขึ้นอีกครั้ง
สมชายและทีมไม่ทำให้ทุกคนผิดหวัง ด้วยประสบการณ์ของพวกเขาทำให้โค้ดใหม่ทำงานด้วยง่ายกว่าเดิมมาก productivity ของทีมเริ่มพุ่งขึ้นอีกครั้ง จนกระทั่งเทียบเท่าเมื่อครั้งผลิตภัณฑ์ตัวนี้ออกใหม่ๆ – แต่ก็ต้องแลกกับการทำงานหนักของพวกเขาอีกเช่นกัน
ii – ห้าปีผ่านไป
สมชายผันตัวเองมาเป็น project manager ในโครงการของผลิตภัณฑ์เดิมที่เขาเคยพัฒนา ระยะหลังมานี้โครงการมีปัญหามาก ลูกค้าเข้ามาบ่นเรื่อง schedule ที่จบไม่ลงสักที สมชายพยายามแก้ปัญหาด้วยการดึงคนจากทีมอื่นๆเข้ามาช่วย หวังว่าจะลดเวลาในการพัฒนาให้ลดลงไม่มากก็น้อย
วันหนึ่งหัวหน้าทีมพัฒนาเข้ามาคุยกับเขา…
“เราทำงานกับโค้ดเดิมต่อไปไม่ได้แล้ว ต้องมีการ design ใหม่หมด ไม่อย่างนั้นเราตายกันหมดแน่”
สมชายคิดถึงวันนั้น…
เขาให้คำตอบเดียวกันกับที่ได้รับจาก project manager คนก่อนเมื่อห้าปีที่แล้ว…
iii – นิทานเรื่องนี้สอนอะไรบ้าง?
- ทำไมโค้ดใหม่ของสมชายและคนอื่นๆในทีมถึง messy และ unmaintainable ในเวลาต่อมา?
- ทำไมสมชายถึงเป็นเกย์?
ข้อสองไม่เกี่ยวนะครับ
ตอบแบบกำปั้นทุบดินก็ต้องบอกว่า คนเขียนกับคนอ่านมันคนละคนกัน (นี่หว่า) จะให้มาเข้าใจทั้งหมดได้อย่างไร? แถมเวลาผ่านไป ไอ้คนเขียนมันก็ไม่อยู่ให้ถามแล้ว สู้เราคิดใหม่ เขียนใหม่ สบายใจกว่า
แล้ววันข้างหน้าก็จะมีคนคิดแบบเดียวกันกับงานของคุณครับ – คอนเฟิร์ม ฟันธง
programming/coding มันไม่ใช่ science หรือ art เพียวๆ มันไม่มีคำตอบตายตัวที่ใช้ได้กับทุก domain problem – สิ่งสำคัญคือ readability
คุณเคยอ่านนิยายดีๆสักเล่มไหมครับ?
เวลาตัวละครในเรื่องพูดคุยกัน หรือคนเขียนบรรยายถึงสถานที่ – ภาพจะลอยขึ้นมาในหัวเป็นฉากๆ จินตนาการได้ถึงสีหน้าของตัวละครเลยใช่ใหมครับ?
ทำไมถึงเป็นแบบนั้น?
แล้วการเขียนโปรแกรมต่างอะไรกับการเขียนนิยาย?
คำตอบอยู่ที่การเขียน “โค้ดที่สะอาด”
แล้วนิยามของโค้ดที่สะอาดเป็นอย่างไร? คนเขียนต้องอาบน้ำก่อนหรือเปล่า? – ติดตามต่อคราวหน้าครับ
Reference:
ปล. สมชายเป็นตัวละครสมมุตินะครับ ไม่ใช่ผม ^-^
ปล.2. ถ้าสนใจอยากอ่านต่อ ช่วยทิ้งคอมเม้นต์ไว้หน่อยนะครับ ถ้าไม่มีคนอ่านจะได้ไปบล๊อกไร้สาระต่อ ^0^
8 Comments
ต่่อ
(ความจริงสมชายอาจจะลาออกไปแล้วตั้งแต่ทำำไปได้สองปี)
อยากให้เล่าให้ฟังต่อครับ ขอบคุณที่แนะนำหนังสือดีๆครับ
อ่านอยู๋ครับพี่
เรื่องราวน่าสนใจ และน่าติดตามดีครับ
ขอบคุณสำหรับเรื่องราวดีๆ… จะคอยติดตามภาคต่อ นะ..
^^’
รออ่านภาค 2 อิอิ
อยากอ่าน … เช่นกัน
อยากรู้ตอนต่อไป
@smon ตอนต่อไปครับ – สมชาย ลุงบ๊อบและการเริ่มต้นครั้งใหม่กับ OOD
2 Trackbacks
[...] ปล.2. ขอบคุณทุกท่านที่มาลงชื่อรออ่านเรื่องของนายสมชาย โปรแกรมนี้เขียนเป็น case study [...]
[...] การเดินทางของโปรแกรมเมอร์ชื่อสมชา