เคล็ดลับของวิศวกรที่คุ้มเงินเดือน: ทักษะในการเปลี่ยน "สิ่งที่ไม่รู้ (Ambiguity)" ให้เป็น "สิ่งที่ทำได้"
(terriblesoftware.org)ประเด็นสำคัญ:
- ความแตกต่างที่ชี้ขาดระหว่างวิศวกรระดับซีเนียร์กับระดับกลาง คือความสามารถในการทำให้ปัญหาที่ไม่แน่นอนและคลุมเครือมีความเป็นรูปธรรม
- คุณค่าของวิศวกรซีเนียร์ไม่ได้มาจากทักษะการเขียนโค้ดเพียงอย่างเดียว แต่มาจากการขจัดความเสี่ยงของโปรเจกต์และเปลี่ยนมันให้เป็นแผนที่นำไปปฏิบัติได้
- แนวทางการจ้างงานในปัจจุบัน (เช่น การทดสอบอัลกอริทึม) กำลังล้มเหลวในการประเมินความสามารถนี้
- การเติบโตที่แท้จริงเริ่มต้นจากการฝึกนิยามปัญหาให้ชัดเจนก่อนลงมือเขียนโค้ด
บทนำ: ทบทวนความหมายของวิศวกรซีเนียร์
- โดยทั่วไป วิศวกรซีเนียร์มักถูกนิยามผ่านรายการทักษะหลากหลาย เช่น การออกแบบสถาปัตยกรรม การสื่อสาร และภาวะผู้นำ
- แต่เมื่อตัดเรื่องตำแหน่ง เงินเดือน และจำนวนปีประสบการณ์ออกไป ทักษะแกนกลางเพียงข้อเดียวที่แยกวิศวกรระดับซีเนียร์ขึ้นไปออกจากคนอื่นคือ "ความสามารถในการลดความคลุมเครือ"
- ความสามารถอื่นทั้งหมด (เช่น การลงมือทำเชิงเทคนิค) เป็นผลลัพธ์ที่ต่อยอดมาจากทักษะแกนกลางข้อนี้
เนื้อหา
1. ความต่างของวิธีแก้ปัญหา: ความชัดเจน vs ความคลุมเครือ
- วิศวกรระดับกลาง (Mid-level): ทำผลงานได้ยอดเยี่ยมเมื่อมีสเปกและข้อจำกัดที่ชัดเจน เป็นคนที่เก่งในการแก้ปัญหาที่นิยามไว้อย่างดี
- วิศวกรซีเนียร์: โดดเด่นเมื่อได้รับความต้องการที่ไม่ชัดเจนและเป็นนามธรรม เช่น "ต้องปรับปรุงประสิทธิภาพ", "ผู้ใช้บ่นมากขึ้น", "ต้องคำนึงถึงการขยายระบบ"
- วิศวกรซีเนียร์ไม่ได้แค่ลงมือทำกับปัญหาที่คลุมเครือ แต่จะวิเคราะห์ แยกย่อย และเปลี่ยนมันให้เป็นงานที่เป็นรูปธรรม
2. บทบาทหลักของซีเนียร์คือการลดความเสี่ยงของโปรเจกต์
-
เมื่อเผชิญกับปัญหาขนาดใหญ่และเป็นนามธรรม วิศวกรซีเนียร์จะลดความไม่แน่นอนด้วยแนวทางต่อไปนี้:
-
ตั้งคำถามแก่นสำคัญที่คนอื่นไม่ถาม
-
แยกสัญญาณสำคัญออกจากสัญญาณรบกวน (Noise)
-
จัดลำดับความสำคัญว่าอะไรต้องทำทันที และอะไรควรเลื่อนไปก่อน
-
กระบวนการนี้คือการลดความเสี่ยงของโปรเจกต์ (De-risking) และจัดระเบียบสภาพ "ยังไม่รู้ว่ามันคืออะไร" ให้กลายเป็น "โปรเจกต์ย่อยที่ลงมือทำได้และสิ่งที่ต้องตัดออก"
-
เมื่อซีเนียร์ทำสิ่งนี้ได้ดี โปรเจกต์จะเดินหน้าอย่างราบรื่นจนภายนอกดูเหมือนง่าย แต่ความจริงแล้วเป็นผลจาก "งานที่มองไม่เห็น" จำนวนมหาศาลที่ถูกทำไว้ล่วงหน้า
3. วิธีการที่เป็นรูปธรรมในการคลี่คลายความคลุมเครือ
- ก่อนเริ่มเขียนโค้ด วิศวกรซีเนียร์จะตั้งคำถามต่อไปนี้เพื่อทำให้ปัญหาชัดเจนขึ้น:
- แก่นแท้ของปัญหา: ไม่ใช่โซลูชันที่เราอยากได้ แต่ปัญหารากจริง ๆ ที่เราพยายามแก้คืออะไร?
- นิยามผู้ใช้: เรากำลังพยายามแก้ความเจ็บปวดอะไรให้ใครกันแน่? (หลีกเลี่ยงคำกว้าง ๆ อย่าง "ผู้ใช้")
- การตรวจสอบสมมติฐาน: มีสมมติฐานที่ผิดพลาดอะไรซ่อนอยู่ในแผนปัจจุบันของเราบ้าง?
- การประเมินความเสี่ยง: ถ้าการตัดสินใจของเราผิด สถานการณ์เลวร้ายที่สุดที่จะเกิดขึ้นคืออะไร?
4. ข้อจำกัดของระบบจ้างงานและการคัดเลือกซีเนียร์ที่ผิดพลาด
- บริษัทส่วนใหญ่ยังคงจ้างงานโดยมุ่งไปที่รายการ tech stack หรือความสามารถในการแก้โจทย์อัลกอริทึม (LeetCode)
- วิธีเช่นนี้ไม่สามารถตรวจสอบความสามารถในการเปลี่ยนความต้องการของผลิตภัณฑ์ที่คลุมเครือให้เป็นแผนที่นำไปปฏิบัติได้
- ผลลัพธ์คือเกิดวิศวกรประเภท "ซีเนียร์แค่ในนาม" จำนวนมาก ที่เขียนโค้ดเก่งแต่ทำอะไรไม่ได้เลยเมื่อเจอสเปกที่ไม่สมบูรณ์
บทสรุป: ข้อเสนอแนะเพื่อการเติบโต
- แม้ความสามารถด้านสถาปัตยกรรมหรือการสื่อสารจะสำคัญ แต่สิ่งเหล่านี้จะมีคุณค่าก็ต่อเมื่อ "จะสร้างอะไร" ถูกทำให้ชัดเจนแล้วเท่านั้น
- ความเป็นเลิศทางเทคนิคโดยที่ยังลดความคลุมเครือไม่ได้ ก็เป็นเพียง "การแก้ปัญหาที่ผิดอย่างสง่างาม"
- เกณฑ์ในการตัดสินว่าตนเองอยู่ในระดับซีเนียร์หรือไม่ คือเมื่อได้รับโจทย์เชิงนามธรรมแล้ว เรารอให้คนอื่นมาช่วยทำให้ชัดเจน หรือเราสามารถทำให้มันเป็นรูปธรรมจนทีมลงมือทำได้เอง
- เพราะนี่ไม่ใช่พรสวรรค์แต่เป็นเรื่องของการฝึกฝน ดังนั้นเมื่อได้รับตั๋วงานที่คลุมเครือ แทนที่จะเริ่มเขียนโค้ดทันที ควรเริ่มฝึกแปลงปัญหาให้เป็นรูปธรรมก่อน
5 ความคิดเห็น
ผมเองก็มองว่ากระบวนการตรวจสอบนักพัฒนาระดับซีเนียร์ด้วย "การทดสอบเขียนโค้ดอัลกอริทึม" ก็เป็นข้อจำกัดของระบบการจ้างงานเหมือนกันนะครับ ผมคิดว่านักพัฒนาระดับซีเนียร์ที่คู่ควรกับเงินเดือน คือคนที่เข้าใกล้แก่นแท้ของปัญหาได้ หรือเป็นคนที่สามารถเข้าใกล้มันได้ครับ
บทความนี้ทำให้เห็นว่ามุมมองของแต่ละคนแตกต่างกันไปตามมุมที่ใช้มองนะครับ สำหรับผม เกณฑ์ที่ใช้แยกระหว่างวิศวกรระดับซีเนียร์กับระดับกลางคือเรื่องของขอบเขตงานเท่านั้น
การทำให้ Ambiguity กลายเป็นสิ่งที่ชัดเจนเป็นคุณสมบัติพื้นฐานของวิศวกร และผมคิดว่าตั้งแต่วิศวกรระดับกลางขึ้นไปก็ควรทำสิ่งนี้ได้จึงจะเหมาะกับตำแหน่งวิศวกร ดังนั้นสำหรับผม บทความนี้น่าจะใช้เป็นเกณฑ์แบ่งระหว่างวิศวกรระดับกลางกับวิศวกรมือใหม่ (associate) ได้ครับ
ความเป็นเลิศทางเทคนิคในสภาวะที่ยังนิยามปัญหาให้ชัดเจนไม่ได้
ก็เป็นได้แค่การ "แก้ปัญหาที่ผิดอย่างสง่างาม" เท่านั้น
ประโยคที่ขนลุกจริง ๆ
การทดสอบโปรแกรมมิงในข้อสอบคัดเลือกนักพัฒนาระดับซีเนียร์ก็พอเข้าใจได้อยู่
แต่ถ้าออกโจทย์อัลกอริทึมมานี่น่างงมาก (ตกใจจนจำไม่ได้แล้วด้วยซ้ำ)
1. ทักษะการตั้งคำถามและทุนทางสังคม (Social Capital)
2. ความเป็นอิสระและการบริหารความเสี่ยง (Autonomy & Risk)
3. เงินเฟ้อตำแหน่งงานและความขัดแย้งเชิงโครงสร้างของการจ้างงาน
4. อายุงาน (Tenure) อย่างเดียว vs การฝึกฝนอย่างมีเจตนา
If) แต่ซีเนียร์จะตั้งสมมติฐานและเตรียมรับมือกับกรณีที่เงื่อนไขเปลี่ยนไป (What-if)5. มุมมองแบบกังขาต่อตำแหน่งซีเนียร์