9 ระดับความเทพของคนที่เขียนโค๊ดเลี้ยงชีพ

Nine Levels of Anyone Who Calls Herself a “Software Engineer”

0.0 to 0.4: Complete Novice: นี่คือระดับของคนที่ยังเรียนการเขียนโปรแกรมอยู่ พูดให้เห็นภาพชัดเจนขึ้นคือคนกลุ่มนี้จะเจอปัญหาแค่เขียนโค๊ดให้ compile ผ่าน คนกลุ่มนี้มีข้อจำกัดทางเทคนิคทำให้การทำงานให้เสร็จโดยไม่มีคนช่วยเหลือหรือแนะนำเป็นไปไม่ได้เลย โดยทั่วไปเราจะพบคนกลุ่มนี้เยอะในคอร์สสอนเขียนโปรแกรมเบื้องต้น เทียบกับเด็กฝึกงานจากมหาวิทยาลัยส่วนใหญ่จะอยู่ที่ระดับ 0.5 หรือสูงกว่าเมื่อเธอเริ่มต้นทำงานจริง

0.5 to 0.7: Sound grasp of fundamentals: คนกลุ่มนี้สามารถเรียกตัวเองได้ว่า “Programmer” แต่ยังไม่ใช่ “Engineer” เธอสามารถสร้างระบบเล็กๆ (ประมาณ 3,000 lines of code) ได้แต่มีโอกาสสูงที่โค๊ดจะออกมาแบบยุ่งเหยิงและไม่สามารถ maintain ได้ คนระดับนี้ไม่มีปัญหากับการทำงานให้เสร็จแต่โค๊ดที่ออกมาจะไม่ค่อยมีประสิทธิภาพเท่าไร และคนกลุ่มนี้จะขาดทักษะในเรื่อง Software and System Architect (เพราะขาดประสบการณ์) โดยทั่วไปจะเป็นเด็กจบใหม่จากมหาวิทยาลัยชื่อดังก่อนที่เธอจะเริ่มงานด้านซอฟต์แวร์จริงจัง

0.8 to 0.9: Becoming an adder: คนกลุ่มนี้เริ่มมีความใส่ใจเรื่องการเขียนโค๊ดให้ดีมีประสิทธิภาพ (ในเรื่อง maintenance และความปลอดภัยตอน runtime) เธอสามารถส่งมอบงานที่มีประโยชน์และมีความเข้าใจที่ดีในเรื่อง Software Engineering คนกลุ่มนี้สามารถใช้ Google และข้อมูลออนไลน์ต่างๆในการตอบคำถามเล็กๆเกี่ยวกับงาน Development ได้ เช่น การทำ File I/O ในภาษาที่ไม่คุ้นเคย

1.0 to 1.3: Full-fledged adder: คนกลุ่มนี้จะแสดงให้เห็นถึงความสามารถในการเป็น Software Engineer อย่างสมบูรณ์และสามารถเชื่อใจได้ในการบริหารจัดการโปรเจกต์เล็กๆตั้งแต่ต้นจนจบ: ออกแบบ (design), พัฒนา (implement), ทดสอบ (testing), และเชื่อมต่อ (integration) โค๊ดที่เขียนจะมีคุณภาพในระดับที่น่าพอใจแต่เธอยังไม่พร้อมที่จะรับผิดชอบในการส่งมอบงานให้ตรงเวลาตามเส้นตาย หรือการทำ Production Support หรือการเป็นผู้นำหรือที่ปรึกษาในระดับองค์กร ทีมที่มีคนส่วนใหญ่ในระดับนี้จะสามารถสร้างงานที่ดีได้แต่องค์กรใดก็ตามที่คนที่เก่งที่สุดอยู่ในระดับนี้จะเจอความยากลำบากในการสร้างซอฟต์แวร์ที่มีคุณภาพ

1.4 to 1.6: Solid adder: เจ๋งกว่าคนทั่วไป (top 10%) เมื่อเทียบกับมาตรฐานทั่วไป แต่ถือว่ากลางๆสำหรับบริษัทระดับโลก เช่น Startups เทพๆ, Google, หรือแผนกวิจัยของ IBM คนกลุ่มนี้สามารถไว้ใจได้ในการทำงานคนเดียวให้เสร็จอย่างงดงามและสามารถ maintain ได้ เธอสามารถประเมินเวลาที่ต้องใช้ได้อย่างสมเหตุสมผลและสามารถสื่อสารภาษาธุรกิจและเทคนิคกับผู้บริหารและ Engineer คนอื่นๆได้อย่างยอดเยี่ยม เธอสามารถจัดการส่งมอบงานขนาดไม่ใหญ่ได้ตรงตามกำหนดทุกครั้ง เธอควรได้รับเชิญให้มีส่วนร่วมในการตัดสินใจเรื่อง Architecture ของซอฟต์แวร์ คนกลุ่มนี้สามารถเป็น Technical Leader ในโปรเจกต์ที่ไม่เร่งรีบได้อย่างไม่มีปัญหาเลย

1.7 to 1.9: Becoming a multiplier: top 5% คนกลุ่มนี้กำลังจะก้าวไปในระดับ “multiplier” การทำงานของเธอไม่ใช่แค่แก้ปัญหาเฉพาะหน้าแต่สามารถปรับปรุงพัฒนาโครงสร้างพื้นฐาน (Infrastructure) โดยรวมขององค์กรได้ เธอให้คำแนะนำในเรื่องการปรับปรุง Architecture และกระบวนการทำงานอย่างสม่ำเสมอ และเธอก็พร้อมแล้วที่จะเป็น Technical Leader สำหรับโปรเจกต์สำคัญ

2.0 to 2.3: Full-fledged multiplier: คนกลุ่มนี้เป็น multiplier ที่แข็งแรงมาก การทำงานของเธอสามารถช่วยเหลือทีมได้อย่างมหาศาล และเป็น Technical Leader ที่ชัดเจนมาก นี่คือ top 2–3% ของ Software Engineer ในการสร้างซอฟต์แวร์เพื่อแก้ปัญหา รวมถึงความสามารถด้าน Architecture และความเป็นผู้นำด้วย

2.4 to 2.6: Becoming a global multiplier (“Fellow”): งานและความสำเร็จที่คนกลุ่มนี้ทำนั้นกว้างขวางและน่าประหลาดใจ สิ่งที่คนกลุ่มนี้สร้างนั้นแผ่กว้างไปในระดับองค์กรทั้งหมดหรืออาจจะมากกว่านั้นด้วย (เช่น สังคม Open Source ต่างๆ) คนกลุ่มนี้คือ top 0.25% ของ Software Engineer ทั้งหมด เธอจะเป็นที่ไว้วางใจอย่างมากในการศึกษาวิจัยแบบอิสระและสามารถเป็นผู้นำในการเริ่มต้นและคิดนวัตกรรมใหม่ๆ

2.7 to 3.0: Senior fellow: คนกลุ่มนี้เป็นที่รู้จักทั้งในและนอกองค์กรในฐานะหนึ่งใน Software Engineer ที่ดีที่สุดที่ยังมีชีวิตอยู่!!! คนกลุ่มนี้คือคนที่สามารถออกแบบ Programming Language ใหม่และสร้างมันขึ้นมาได้ดีด้วย … เทพชัดๆ

หมายเหตุ1: ทั้งหมดนี้ผมไม่ได้คิดเองนะครับ ฮ่าๆ … พอดีไปอ่านเจอบทความนี้จากบล็อกของ Michael O. Church น่าสนใจมากเลยขออนุญาตคุณ Michael มาแปลเป็นไทยให้ได้อ่านกันครับ

หมายเหตุ2: หลายคนอาจจะสงสัยว่า Adder / Multiplier คืออะไร? คุณ Michael แบ่งกลุ่มคนในทีมหรือในองค์กรได้เป็นสี่กลุ่มดังนี้ครับ

  1. Divider (ตัวหาร): คือคนที่เป็นมะเร็งร้ายต่อทีมและองค์กรด้วยความสามารถในการสร้างความหายนะให้กับทุกคนได้อย่างกว้างขวาง คนเหล่านี้ต้องได้รับการปรับปรุงไม่ก็ไล่ออกไปเลย เราจะไม่พูดถึงกลุ่มคนเหล่านี้ในระดับขั้นของการพัฒนา Software Engineer ครับ
  2. Subtracter (ตัวลบ): คือคนที่ทำงานน้อยกว่าค่าตัวรวมถึงออกแนวเป็นตัวถ่วง ต้องเสียเวลาคนอื่นให้มาเป็นพี่เลี้ยง ไม่แปลกที่เราทุกคนจะเคยเป็นตัวลบในช่วงเวลาใดเวลาหนึ่งโดยเฉพาะอย่างยิ่งสัปดาห์แรกๆของการทำงานที่ใหม่ หรือการเริ่มต้นทำงานครั้งแรก คนกลุ่มนี้จะอยู่ในระดับประมาณ 0.0 — 1.0
  3. Adder (ตัวบวก): คือ Software Engineer พลังม้า เป็นคนที่สามารถทำงานจริงๆให้เสร็จได้ด้วยคุณภาพที่ดี เราจะเริ่มมองเห็นคนกลุ่มนี้ที่ระดับ 0.8 — 0.9 ขึ้นไป
  4. Multiplier (ตัวคูณ): เปรียบเสมือนโทรโข่งของคนที่เป็นตัวบวก ความสามารถและประสบการณ์ในด้าน Software Engineering, Architecture และ Infrastructure ของเธอส่งผลบวกอย่างมากต่อความสามารถทีมและองค์กร เราจะเริ่มเห็นเงาลางๆของคนกลุ่มนี้ตั้งแต่ 1.7 เป็นต้นไป

ลองสำรวจตัวเองดูว่า (1) เราอยู่ระดับไหน และ (2) เพื่อนร่วมทีมเราอยู่ระดับไหน … โชคดีครับ ฮ่าๆ ☺

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

The Future Has Arrived — It’s Just Not Evenly Distributed Yet, William Gibson

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