เคยทิ้งของไหมครับ?

คำถามนี้ทุกคนจะตอบว่าเคยทั้งนั้น ไม่มีใครไม่เคยทิ้งอะไรสักอย่างในชีวิต อย่างน้อยเราก็ทิ้งขยะทุกวันครับ

แล้วเคยทิ้งของที่ใช้ความพยายามในการสร้างขึ้นมาไหมครับ?

หลายคนอาจตอบว่าเคย หลายคนอาจตอบว่าไม่เคย

สำหรับผมแล้ว ผม "ทิ้ง" เป็นเรื่องปกติในชีวิต และบันทึกนี้ผมจะมาเล่าศิลปะในการทิ้งครับ

เวลาเราจินตนาการภาพศิลปินในสาขาต่างๆ ไม่ว่าจะเป็นวิจิตรศิลป์หรือวรรณศิลป์ เราส่วนใหญ่มักจะนึกภาพศิลปินคนนั้นทำงานอยู่ท่ามกลางข้าวของรกรุงรังซึ่งส่วนใหญ่เป็นขยะทั้งสิ้น

เมื่อนึกภาพนักวาดรูป เราจะเห็นเขาอยู่ท่ามกลางกระดาษสเก็ตที่ขยำอยู่รอบตัว หรือภาพในเฟรมที่ไม่ได้วาดต่อแล้ว ยิ่งศิลปินสีน้ำเราจะยิ่งเห็นงานที่ทำต่อไม่ได้มากกว่าศิลปินประเภทอื่น เพราะสีน้ำต้องอาศัยความ "สด" ในการวาดมากกว่าสีอย่างอื่น

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

ศิลปินทุกแขนงเป็นเช่นนี้ครับ การสร้างงานศิลปะนั้น สร้างขึ้นมาบนกองสิ่งที่ทำต่อไม่ได้หรือตัวต้นแบบ (prototypes) โดยกว่าจะได้งานแต่ละชิ้นที่งดงามที่ให้คนอื่นเสพได้นั้น มีชิ้นที่ทำแล้วทิ้งมากมายจนกว่าจะได้พบเจอสิ่งที่ "ลงตัว" ที่สุด

ความ "งาม" แห่งงานศิลป์คือความ "ลงตัว" ครับ มากเกินไปก็ไม่งาม น้อยเกินไปก็ไม่งาม แต่กว่าจะเจอจุด "ลงตัว" ได้นั้น ต้องผ่านการทดลองมากมายครับ

และคำว่า "ลงตัว" ของศิลปะแต่ละแขนงนั้นก็จะแตกต่างกัน การจะเสพความงามได้นั้นจึงต้องอาศัยการซึมซับตลอดชีวิตครับ

เรื่องเหล่านี้คนที่ทำงานศิลปะจะต้องเรียนรู้ด้วยใจครับ และเป็น requirement แรกสุดของการฝึกฝนที่จะทำงานศิลปะ

จากงานศิลปะ คราวนี้เรามามองงานวิศวกรรมกันบ้าง

ใครนึกภาพวิศวกรยืนอยู่ท่ามกลางซากตึกปรักหักพังบ้างยกมือขึ้น

นึกไม่ออกใช่ไหมครับ แต่ผมนึกออก เป็นวิศวกรที่กำลังจะเข้าคุก เพราะสร้างตึกแล้วพังครับ

ในเจตคติ (mind set) แบบวิศวกรนั้น สร้างแล้วแก้ สร้างแล้วทิ้ง สร้างแล้วต้องสร้างใหม่ ถือว่าเป็นความผิดพลาดอย่างมหันต์

เจตคติแบบศิลปินและวิศวกรนั้น ต่างกันอย่างกับฟ้ากับดินครับ หากวิศวกรใช้เจตคติแบบศิลปินในการทำงานนั้น แย่แน่ๆ และหากศิลปินใช้เจตคติแบบวิศวกรในการทำงาน ก็ย่อมไม่ได้สร้างงานที่งามแท้จริงขึ้นได้

เรื่องเหล่านี้ไม่มีปัญหาครับ เพราะโลกของวิศวกรและศิลปินนั้นเป็นคนละโลกอยู่แล้ว

แต่ประเด็นของเจตคติที่ต่างกันนั้นมากลายเป็นปัญหาเมื่อมาเจอกันที่สาขาวิชาที่เรียกว่า "วิศวกรรมซอฟต์แวร์" (Software Engineering)

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

เมื่อผมมาเรียนรู้การสร้างซอฟต์แวร์ ผมก็มาเรียนรู้นอกระบบในประเทศไทยอีก เมื่อผมไปเรียนรู้ในระบบที่ต่างประเทศ สิ่งที่เรียกว่า "นอกระบบ" นั้นคือสิ่งที่ได้รับการส่งเสริม

ผมจึงสร้างซอฟต์แวร์อย่างการสร้างงานศิลปะมาตลอดชีวิต ผมไม่เคยพยายามเรียกตัวเองว่า "วิศวกรซอฟต์แวร์" ถ้าไม่จำเป็น

ผมชื่นชมแนวความคิดแบบ Agile Software Engineering เพราะเห็นว่าเป็นแนวคิดที่เริ่มเข้าถึง "ศิลปะ" ของการพัฒนาซอฟต์แวร์แล้ว และผมชื่นชอบ User-Centered Software Development เพราะเป็นแนวคิดที่เริ่มกำหนดให้เห็นถึงความ "งาม" ของงานศิลปะแขนงนี้แล้ว

การเขียนซอฟต์แวร์คือการเขียนกลอน nothing more, nothing less

ความงามของซอฟต์แวร์เบ่งบานที่ผู้ใช้ nothing more, nothing less

เมื่อผมใช้เจตคติในการสร้างงานศิลปะมาสร้างซอฟต์แวร์ ผมจึงสามารถทิ้งสิ่งที่ผมเขียนได้อย่างไม่อาลัย หากสิ่งที่ผมทำนั้นไม่งาม

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

ผมไม่ได้บอกว่าผมคิดถูกหรือคิดผิด แต่นี่คือหนทางที่ผมเรียนรู้ และยังเรียนรู้ต่อไปครับ

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

แต่จะทิ้งตอนไหนล่ะ

จะทิ้งตอนไหนนี่ละครับคือ "ศิลปะแห่งการทิ้ง"

ศิลปะแห่งการทิ้งคือ ต้องทิ้งให้เร็วที่สุด ทันทีที่พบว่าต้องทิ้งแล้ว

ทิ้งเหมือนศิลปินทิ้งครับ คือ 80% ทิ้ง 20% ใช้ได้จริง

เมื่อจะทิ้งเยอะขนาดนี้ ก็ต้องทิ้งได้เร็ว

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

ดังนั้นนักพัฒนาซอฟต์แวร์ต้อง "รู้ตัว" อยู่ตลอดเวลา (อาจใช้คำว่า "สติ") ในการเขียนโปรแกรม

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

นักวิเคราะห์ก็เช่นกัน ต้องพร้อมทิ้งงานที่ตัวเองคิดได้อย่างเร็วที่สุดเมื่อพบว่า "It's a no-go!"

ผมจึงเห็นว่าแนวความคิดแบบ Iterative Software Development นั้นดีและเป็นธรรมชาติเหมาะกับงานพัฒนาซอฟต์แวร์มาก

แนวคิดการพัฒนาแบบ Prototype-Based Software Development ก็เป็นสิ่งที่ควรทำ การเริ่มต้นตั้งแต่ Low Fidelity Prototype แล้วค้นหา "ความงาม" ไปถึง High Fidelity Prototype จนกว่าจะได้ที่จึงส่งให้โปรแกรมเมอร์ทำจริงนั้นเป็นสิ่งที่ดี

แนวความคิดเหล่านี้เป็นสิ่งใหม่ในวงการพัฒนาซอฟต์แวร์ที่ยังปกคลุมด้วยเจตคติแบบวิศวกรอยู่มากในปัจจุบันนี้ ผมคิดว่าเราจะเข้าไม่ถึงแนวความคิดเหล่านี้ถ้าเราไม่ได้พยายามเข้าถึง "ใจ" ของแนวคิดเหล่านี้ครับ

ผมยืนยันอีกครั้ง "งานพัฒนาซอฟต์แวร์นั้นเป็นงานศิลปะ ต้องจับด้วยใจศิลปะ" ครับ