งานสร้างบ้านกับงานสร้างซอฟต์แวร์ — ความเหมือนในกระบวนการ
Explain How Software Is Developed Using Simple Concept of House Construction
มีเพื่อนคนนึงเคยขอให้ผมอธิบายให้ฟังเรื่องกระบวนการสร้างซอฟต์แวร์ เพื่อนคนนี้ไม่ได้มีพื้นฐานเรื่องพวกนี้มาก่อน ผมจึงอธิบายให้เค้าฟังด้วยการเปรียบเทียบกับการสร้างบ้านแบบนี้
Requirement
เริ่มต้นจากลูกค้าบอกมาว่าอยากได้อะไร … บ้านเดี่ยวสองชั้น สามห้องน้ำ สามห้องน้ำ มีห้องรับแขก ห้องครัว ห้องใต้บันได ห้องใต้หลังคา โรงจอดรด น้ำพุหน้าบ้าน
ซอฟต์แวร์ก็เหมือนกัน … อยากได้ระบบ Membership ของร้านค้า มีการจัดการเพิ่มชื่อลูกค้า มีระบบเก็บสะสมแต้ม มีระบบส่งโปรโมชั่น มีระบบตรวจสอบและเก็บประวัติการซื้อของลูกค้า มีระบบรายงานหลายๆแบบ
Design
คนเป็นสถาปนิกก็เริ่มออกแบบรูปร่างหน้าตาและแปลนของบ้านตามที่ลูกค้าระบุสเปคมา ผลลัพธ์ที่ได้ก็จะเป็นภาพวาดบนกระดาษ เป็นพิมพ์เขียวที่ลูกค้าดูแล้วอาจจะไม่เก็ต สถาปนิกเลยลงทุนเพิ่มเติมอีกด้วยการออกแบบบ้านในโปรแกรมสามมิติแบบ SketchUp ให้เห็นหน้าเห็นตาชัดเจนขึ้น แต่ถ้าลูกค้ายังไม่เก็ต ยังไม่พอใจ คุณสถาปนิกก็จะลงทุนอย่างสูงสุดด้วยการนั่งทำโมเดลบ้านกระดาษให้ดูซะเลย แบบนี้
นอกจากความสวยงามแค่รูปร่างหน้าตาแล้ว สถาปนิกที่ดีส่วนใหญ่ต้องคิดถึงความสะดวกและเหมาะสมในการใช้งานและอยู่อาศัยของลูกค้าด้วย เช่น ทิศทางการวางตัวของบ้านเพื่อหนีแดดและรับลม การวางตำแหน่งของห้องนอน ปริมาณแสงธรรมชาติที่เข้าถึงตัวบ้าน และอาจจะรวมไปถึงความถูกต้องตามหลักความเชื่ออย่างฮวงจุ้ยด้วย (ว่าไปนั่น)
เมื่อได้แบบบ้านมาแล้ว คุณวิศวกรก็จะเข้ามาช่วยในการออกแบบเชิงโครงสร้าง ความปลอดภัยและรายละเอียดกับปริมาณของวัสดุที่จะใช้ ถึงตอนนี้เราก็จะได้แบบบ้านที่สมบูรณ์พร้อมสร้างแล้ว
ซอฟต์แวร์ก็มีกระบวนการออกแบบคล้ายๆกัน คนที่เป็นดีไซเนอร์ฝั่งฟร้อนเอนท์ก็ขึ้นโครงสร้างของหน้าเวปไซต์มาเลยว่าจะให้มีเลย์เอ้าท์แบบไหน มีกี่เมนู มีกี่ปุ่ม ด้วยการทำงานร่วมกับคนที่มีความเชี่ยวชาญเรื่องการศึกษาพฤติกรรมผู้ใช้ (User Research) และออกแบบการใช้งานเวปไซต์ (Interaction Design) พวกเค้าจะสามารถเขียนโครงสร้างของเวปไซต์ที่เรียกว่า Wireframe ออกมาได้คร่าวๆ แบบนี้
เห็นแล้วลูกค้าก็คงงงว่ามันคืออะไร ว่าแล้วทีมดีไซเนอร์ก็จะเพิ่มขั้นตอนที่ทำให้เวปไซต์ต้นแบบของเราดูสวยขึ้น (Visual Design) ด้วยการกำหนดว่าธีมจะสีอะไร ฟ้อนท์ขนาดเท่าไร ก่อนเอามาลงโปรแกรมอย่างโฟโต้ชอปเพื่อใส่สีสันและความสมจริงหรือบางคนก็เอารูปพวกนั้นมาต่อๆกันให้คลิ๊กได้เหมือนจริงที่เรียกกันว่า Interactive Prototype ก็ยิ่งจะทำให้ลูกค้าเห็นภาพเวปไซต์ได้ชัดเจนขึ้น (เหมือนที่สถาปนิกนั่งทำโมเดลบ้านจากกระดาษ)
ได้หน้าตาสวยงามออกมาแล้ว ขั้นตอนต่อมาก็คือการออกแบบในเชิงระบบภายในรวมถึงเทคโนโลยีและเทคนิคที่จะต้องใช้ในการสร้างเวปไซต์นี้ขึ้นมา เรียกว่า Architectural and System Design ก็เปรียบได้กับงานของวิศวกรในการออกแบบบ้าน
และเมื่อผ่านการรีวิวและแก้ไขเรียบร้อยแล้ว … ต้นแบบเหล่านี้ก็จะถูกนำไปเข้ากระบวนการสร้างอย่างจริงจัง
Building
การสร้างบ้านก็เป็นเรื่องที่ตรงไปตรงมา ปรับพื้น ตอกเสาเข็ม วางคาน ตั้งเสา เทพื้น ก่อกำแพง เดินระบบท่อ ขึ้นโครงหลังคา … ทุกคนเข้าใจดีว่าต้องทำอะไรบ้าง ระหว่างการสร้างบ้านเราจึงเห็นพี่น้องคนงานมากมายมามะรุมมะตุ้มทำงานกัน สิ่งดีของมันคือลูกค้าจะเห็นความคืบหน้า (หรือไม่คืบหน้า) ของงานอย่างชัดเจนมาก แบบนี้
ส่วนงานสร้างซอฟต์แวร์ก็จะเป็นอะไรที่ลึกลับนิดนึง ทุกอย่างเป็นแค่ตัวอักษรภาษาอังกฤษสิ่งที่จับต้องไม่ได้ ลูกค้าเห็นแล้วก็ไม่เข้าใจว่ามันคืออะไร ถึงแม้จะเห็นว่ามีนักพัฒนาซอฟต์แวร์ทำงานกันหามรุ่งหามค่ำแต่สิ่งที่โลกภายนอกจะเห็นก็มีแค่
ผ่านไปหกเดือนบ้านเสร็จพร้อมอยู่ ผ่านไปหกเดือนซอฟต์แวร์เสร็จพร้อมใช้ (สาธุ)
Testing
ก่อนจะเข้าอยู่ เจ้าของบ้านต้องขอตรวจสอบความเรียบร้อยซะหน่อย ใช่ๆ สร้างบ้านก็มี Testing Phase เหมือนกัน มีเช็คลิสต์ด้วยนะ
ซอฟต์แวร์ก็เหมือนกันสร้างเสร็จไม่ได้แปลว่าทำงานถูกต้อง 100% มันก็ต้องมีการตรวจสอบและทดสอบปิดท้าย
เพื่อนผมคนนี้ก็มีความเข้าใจมากขึ้นว่าโดยกระบวนการแล้วการพัฒนาซอฟต์แวร์ก็ไม่ได้ต่างจากการสร้างบ้านเท่าไร การยกตัวอย่างเปรียบเทียบกับสิ่งที่เห็นอยู่ในชีวิตประจำวันจะช่วยให้การอธิบายเรื่องที่ (ดูเหมือน) ยากให้ง่ายขึ้น
บทความนี้เล่าว่าสร้างบ้านกับสร้างซอฟต์แวร์เหมือนกันตรงไหน พรุ่งนี้จะเล่าให้ฟังว่ามันต่างกันยังไงซึ่งเป็นเรื่องที่น่าสนใจอยู่เหมือนกันครับ
ผมเขียนบทความนี้เพราะอยากเปลี่ยนแปลงสิ่งที่เป็นอยู่ในอุตสาหกรรมการผลิตซอฟท์แวร์ให้ดีขึ้นตามความเชื่อและประสบการณ์ของผม ถ้าเพื่อนๆเชื่อในแนวทางเดียวกัน เรามาช่วยกันคนละไม้คนละมือทำให้สังคมของเราดีขึ้นครับ จะแชร์บทความนี้ผ่าน Social Network หรือจะแบ่งปันเรื่องราวนี้ให้คนที่นั่งข้างๆฟังบ้างก็ได้
The Future Has Arrived — It’s Just Not Evenly Distributed Yet, William Gibson
อนาคตอยู่ตรงนี้แล้ว เรามีหน้าที่ต้องถ่ายทอดมันออกไปให้คนอื่นได้สัมผัสสิ่งดีๆร่วมกันครับ