โปรแกรมเมอร์มืออาชีพ

Chokchai Phatharamalai
odds.team
Published in
2 min readFeb 13, 2023
Photo by Maskmedicare Shop on Unsplash

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

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

หรือไม่ก็เป็นภาพคนที่ถูกเพจเจอร์กระชากให้ตื่นขึ้นมากลางดึกเพราะ server มีปัญหาเลยส่ง alert มา มองดูนาฬิกาท่ามกลางแสงไฟสลัวในความมืดก็เห็นเวลาตีสาม นั่นหมายถึงเหลือเวลาอีก 5 ชั่วโมงก่อนธุรกิจวันใหม่จะเริ่มต้นขึ้น แล้วเค้าต้องแก้ปัญหาให้เสร็จ ต้องไล่ค้นดูข้อมูลมากมายจากแหล่งต่าง ๆ จะไปถามหรือปรึกษาใครก็ไม่ได้เพราะเพื่อน ๆ หลับอยู่ แล้วก็ต้องทำทุกอย่างเพื่อให้ธุรกิจดำเนินต่อไปได้ ไม่ว่าจะด้วยเล่ห์หรือด้วยกล หรือมนตร์คาถาก็ตาม

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

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

แล้วประมาณ 10 ปีก่อน มันก็เริ่มมีแนวทางปฏิบัติที่เรียกรวม ๆ ว่า good engineering practices ออกมา (ทุกวันนี้มักเป็นที่รู้จักในนาม Agile practices ตามกระแส) แนวปฏิบัติเช่น Test Driven Development, Continuous Integration, Trunk-based Development, Continuous Delivery หรือ Collective Code Ownership เป็นต้น แนวทางเหล่านี้เป็นเหมือนแสงสว่างปลายอุโมงค์ ชวนให้จินตนาการอนาคตที่ดีกว่า อนาคตที่เราจะไม่ได้ต้องมีใครมาเจอโค้ดที่อ่านออก แต่ไม่กล้าแก้ ไม่ต้องมานั่งแทรกคำสั่ง print ทีละบรรทัดเพื่อ debug ว่าระบบทำงานผิดตรงไหน พร้อมกับตอบไปมั่ว ๆ เวลามีคนถามว่าต้องใช้เวลาอีกเท่าไหร่ถึงจะเสร็จ อนาคตที่เราจะได้ทำงานกันเป็นทีม ไม่มีวิกฤตใดที่จะไปตกลงบนบ่าใครบางคนแต่เราจะได้ช่วยกันแบ่งเบาความรับผิดชอบนั้น ช่วยกันผ่านฟันอุปสรรคไปด้วยกัน แม้ว่าลำพังตัวผมเองจะทำอะไรไม่ได้มากสักเท่าไหร่ แต่ถ้าผมได้อยู่กับทีมแล้ว อุปสรรคอะไรเราก็จะฝ่าฟันมันไปด้วยกันได้

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

ตัวผม 10 ปีก่อน: เป็นไปได้ยังไง? ขนาดหมอหลังจากค้นผมว่า Black Death ไม่ใช่คำสาป และสามารถป้องกันได้ด้วยการล้างมือระหว่างการตรวจคนไข้ ก็ยังยึดมั่นวินัยในการล้างมือจนกลายเป็นมาตฐานเลย เพราะวินัยเหล่านี้ถูกคิดขึ้นมาเพื่อลดความเสี่ยงที่จะเกิดความเสียหาย หรือความเจ็บปวด แล้วทำไมสิ่งนี้ถึงไม่เกิดขึ้นในอุตสาหกรรมซอฟต์แวร์? นายเคยเจอหมอที่ไม่ล้างมือก่อนตรวจคนไข้ หรือว่าเคยสงสัยหมอคนไหนว่าเค้าอาจจะไม่ล้างมือไหม? ถ้ามีหมอสักคนที่ไม่ล้างมือก่อนตรวจคนไข้ นายคิดว่าหมอคนนั้นเป็นมืออาชีพไหม?

มืออาชีพไม่ใช่การตัดอารมณ์ออกจากงาน

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

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

มืออาชีพคือการทำงานเป็นทีม

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

มืออาชีพต้องหมั่นฝึกฝน

ถ้าคุณเจอมือกีต้าร์จับไมค์แล้วสารภาพกับผู้ฟังว่าที่เพลงเมื่อกี้กดคอร์ดเอฟบอดตลอดเลย เพราะว่ากำลังฝึกกดคอร์ดอย่างถูกวิธีอยู่ คุณคิดว่ามือกีต้าร์คนนั้นเป็นมืออาชีพไหม?

สำหรับผม มืออาชีพคือคนที่แยกแยะระหว่างการฝึกฝน (practice) และการแสดงหรือทำงานจริง perform ออกจากกัน และในวันนี้ที่ผมยังไม่สามารถ perform ได้ด้วยวิธีการที่ถูกต้อง มันเป็นหน้าที่ความรับผิดชอบของผมที่จะต้องไปแบ่งเวลาออกมาจากช่วงพักผ่อน เพื่อเอามาฝึกฝน จนกระทั่งผมมีความรู้, ทักษะ และความมั่นใจมากเพียงพอก่อน จึงเอาวิธีการใหม่ที่ดีกว่ามาใช้ในงานจริง

ในบริบทของ programmer ผมจะไม่โอดครวญว่างานที่ทำงานมันเร่งแล้วไม่เปิดโอกาสให้ผมฝึก Test Driven Development เลย แต่ผมจะเอาเวลาพักผ่อนส่วนตัวแบ่งมาฝึกจนกระทั่งผมมีความรู้, ทักษะและความมั่นใจเพียงพอที่จะไปใช้ในงานจริง แล้วหลังจากวันนั้น ทุก ๆ นาทีที่ผม perform ผมก็จะได้ practice ไปในตัวซึ่งเป็นธรรมชาติของงานสายช่างฝีมืออยู่แล้ว แต่ก่อนจะถึงวันนั้น มันเป็นหน้าที่ผมที่ต้องฝึกฝน

มืออาชีพคือคนที่สงบท่ามกลางแรงกดดัน

สำหรับผม มืออาชีพ คือคนที่เมื่ออยู่ท่ามกลางแรงกดดัน บ่อยครั้งจากคนที่ตำแหน่งสูงกว่ามาก ๆ นอกจากนี้ยังมีคำพูดกดดัน มีบรรยากาศตึงเครียด แม้จะทำให้เรากลัวจนขาสั่น มือสั่น ปากสั่น แต่ในใจมันสงบเพราะเรารู้ว่านี่คือเส้นที่เราจะไม่ข้าม นี่คือจรรยาบรรณของอาชีพเรา เราเลยตอบกลับไปว่า พี่สามารถลด scope ของงานที่ผมทำอยู่ได้ แต่ผมลดคุณภาพของงานให้ไม่ได้

ผมขอปิดท้ายบทความด้วยเรื่องเล่าจาก Robert Martin คุณลองจินตนาการว่าคุณกำลังวิญญาณหลุดออกจากร่างแล้วมีโอกาสได้มองลงมาเห็นหมอผ่าตัดหัวใจที่กำลังทำการผ่าตัดให้คุณอยู่ นี่คือคน ๆ หนึ่งที่กำลังทำงานภายใต้ deadline (สามารถแปลตรงตัวได้เลย) คุณอยากให้หมอ perform แบบไหน? ทำอย่างสงบ ยึดมั่นกับวินัยที่เข้ายึดถือทีละขั้น ทีละตอน หรือคุณอยากให้เค้าทำตัวเหมือน cowboy programmer ที่กำลัง solo code บน production?

อ้างอิง

--

--