การเดินทางของโปรแกรมเมอร์ชื่อสมชาย

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 – นิทานเรื่องนี้สอนอะไรบ้าง?

  1. ทำไมโค้ดใหม่ของสมชายและคนอื่นๆในทีมถึง messy และ unmaintainable ในเวลาต่อมา?
  2. ทำไมสมชายถึงเป็นเกย์?

ข้อสองไม่เกี่ยวนะครับ :)

ตอบแบบกำปั้นทุบดินก็ต้องบอกว่า คนเขียนกับคนอ่านมันคนละคนกัน (นี่หว่า) จะให้มาเข้าใจทั้งหมดได้อย่างไร? แถมเวลาผ่านไป ไอ้คนเขียนมันก็ไม่อยู่ให้ถามแล้ว สู้เราคิดใหม่ เขียนใหม่ สบายใจกว่า

แล้ววันข้างหน้าก็จะมีคนคิดแบบเดียวกันกับงานของคุณครับ – คอนเฟิร์ม ฟันธง

programming/coding มันไม่ใช่ science หรือ art เพียวๆ มันไม่มีคำตอบตายตัวที่ใช้ได้กับทุก domain problem – สิ่งสำคัญคือ readability

คุณเคยอ่านนิยายดีๆสักเล่มไหมครับ?

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

ทำไมถึงเป็นแบบนั้น?

แล้วการเขียนโปรแกรมต่างอะไรกับการเขียนนิยาย?

คำตอบอยู่ที่การเขียน “โค้ดที่สะอาด”
แล้วนิยามของโค้ดที่สะอาดเป็นอย่างไร? คนเขียนต้องอาบน้ำก่อนหรือเปล่า? – ติดตามต่อคราวหน้าครับ

Reference:

ปล. สมชายเป็นตัวละครสมมุตินะครับ ไม่ใช่ผม ^-^
ปล.2. ถ้าสนใจอยากอ่านต่อ ช่วยทิ้งคอมเม้นต์ไว้หน่อยนะครับ ถ้าไม่มีคนอ่านจะได้ไปบล๊อกไร้สาระต่อ ^0^

8 Comments

  1. SY
    Posted March 28, 2009 at 2:04 am | #

    ต่่อ
    (ความจริงสมชายอาจจะลาออกไปแล้วตั้งแต่ทำำไปได้สองปี)

  2. Posted March 30, 2009 at 1:36 am | #

    อยากให้เล่าให้ฟังต่อครับ ขอบคุณที่แนะนำหนังสือดีๆครับ :D

  3. Posted March 30, 2009 at 3:15 pm | #

    อ่านอยู๋ครับพี่

  4. Posted March 30, 2009 at 3:19 pm | #

    เรื่องราวน่าสนใจ และน่าติดตามดีครับ
    ขอบคุณสำหรับเรื่องราวดีๆ… จะคอยติดตามภาคต่อ นะ..

    ^^’

  5. Hana
    Posted March 30, 2009 at 4:40 pm | #

    รออ่านภาค 2 อิอิ

  6. j
    Posted April 7, 2009 at 1:30 pm | #

    อยากอ่าน … เช่นกัน

  7. smon
    Posted April 17, 2009 at 2:57 am | #

    อยากรู้ตอนต่อไป

  8. Posted April 17, 2009 at 10:52 am | #

2 Trackbacks

  1. [...] ปล.2. ขอบคุณทุกท่านที่มาลงชื่อรออ่านเรื่องของนายสมชาย โปรแกรมนี้เขียนเป็น case study [...]

  2. [...] การเดินทางของโปรแกรมเมอร์ชื่อสมชา

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>