ชุดทักษะแบบกว้างและแบบแคบ: ทักษะด้านวิศวกรรมซอฟต์แวร์ที่เข้าใจยาก

เผยแพร่แล้ว: 2022-03-11

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

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

ทักษะวิศวกรซอฟต์แวร์: การแสดงกราฟิกของชุดทักษะ

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

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

ประเภทของทักษะและชุดทักษะวิศวกรซอฟต์แวร์

ลึกและแคบ

การมีชุดทักษะที่ลึกซึ้งหมายความว่าคุณเป็นผู้เชี่ยวชาญอย่างน้อยหนึ่งสาขา

ใช้ SQL: สมมติว่าคุณรู้ทุกอย่างเกี่ยวกับทฤษฎีฐานข้อมูลเชิงสัมพันธ์ ข้อดีและข้อเสียของ MySQL, PostgreSQL, Oracle และ SQLite; วิธีเพิ่มประสิทธิภาพการสืบค้นข้อมูล เมื่อใดและอย่างไรที่จะทำให้ฐานข้อมูลเป็นปกติ ฯลฯ ลูกค้าที่กำลังมองหาทักษะเฉพาะนี้จะต้องการจ้างงานคุณโดยเร็วที่สุด และด้วยเหตุผลที่ดี คุณจะเริ่มวิ่งและส่งมอบคุณค่าอย่างที่คนอื่นทำได้

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

กว้างและตื้น

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

ตัวอย่างเช่น คุณอาจต้องทำโครงการ Python และคุณไม่เคยใช้ภาษานั้นมาก่อน ถึงกระนั้น คุณอาจเคยได้ยินบางสิ่งเกี่ยวกับเรื่องนี้ (ไดนามิก ตีความ หลายกระบวนทัศน์) และประสบการณ์ของคุณกับภาษาอื่นๆ จะทำให้การเปลี่ยนแปลงง่ายขึ้นมาก

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

เมื่อโครงการเปลี่ยนแปลง คุณจะเป็นทรัพย์สินของทีมมากกว่าที่จะเป็นหนี้สิน

ชุดทักษะในโลกแห่งความเป็นจริง

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

การแสดงภาพกราฟิกของภูเขา เนินเขา และที่ราบ

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

กลยุทธ์นี้น่าจะให้บริการพวกเขาได้ดีที่สุดในช่วงหลายปีที่ผ่านมา

เหตุใดโปรแกรมเมอร์จึงต้องกระจายชุดทักษะของตน

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

อย่างไรก็ตาม…

ความเชี่ยวชาญมากเกินไปมีความเสี่ยง การวางไข่ไว้ในตะกร้าใบเดียวอาจจะดีหากคุณสามารถทำนายอนาคตได้ดีกว่าใครๆ แต่ความสามารถนั้นหายากและไม่เกี่ยวข้องกับทักษะทางเทคโนโลยี พิจารณาความต้องการทักษะการเขียนโปรแกรม Windows ในสหัสวรรษของเรา หรือถามตัวเองว่า: พวกเราหลายคนสามารถเดาเส้นทางของ Android, Flash, Nokia หรือ Blackberry เมื่อ 10 ปีที่แล้วได้หรือไม่?

สุดท้ายนี้ นายจ้างชั้นนำให้ความสำคัญกับทักษะที่หลากหลาย Facebook จะไม่มอบหมายงานใหม่ให้กับทีมจนกว่าจะเริ่มงานได้ 6 สัปดาห์ Google สนับสนุนการถ่ายโอนภายในและเรียกใช้โปรแกรมหมุนเวียนหลายโปรแกรม แม้ว่าคุณจะชอบทำงานอิสระ แต่การเปิดตัวเลือกไว้ก็ไม่เสียหาย หากคุณเคยคิดที่จะทำงานให้กับบริษัทเหล่านั้น อย่างน้อยคุณจะต้องเป็นผู้เชี่ยวชาญทั่วไปบ้าง

สมมติว่าคุณมั่นใจและต้องการกระจายทักษะของคุณ คุณจะทำอย่างนั้นได้อย่างไร?

วิธีกระจายและปรับปรุงทักษะทางเทคนิค

คุณสามารถแลกเปลี่ยนเงินเพื่อทักษะ:

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

คุณยังสามารถแลกเปลี่ยนเวลากับทักษะ:

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

คุณต้องมองหาโอกาสในการเรียนรู้ แต่คุณไม่สามารถทำอย่างนั้นได้ตลอดเวลา สำหรับโครงการสัมภาษณ์ Toptal ของฉัน ฉันใช้ Node.js และ Backbone ซึ่งฉันไม่เคยมีประสบการณ์มาก่อน เป็นเรื่องสนุก แต่ความเร็วการเรียนรู้ที่จำเป็นไม่สามารถคงอยู่ได้นานหลายเดือน

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

ทำไมความกว้างจึงดีสำหรับนายจ้าง

เท่าที่นายจ้างมีความกังวล ทักษะเชิงลึกจำเป็นเสมอในบางสถานการณ์:

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

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

การแสดงภาพกราฟิกของนายจ้างที่เลือกนักพัฒนาที่มีชุดทักษะที่กว้างและตื้น แทนที่จะเป็นชุดทักษะที่ลึกและแคบ

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

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

สร้างสมดุลที่เหมาะสม

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

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