廣義與狹義技能組合:軟件工程技能揭秘
已發表: 2022-03-11每個軟件工程師都有一套由他們獲得的不同技能組成的技能。 如果您掌握一到兩項技能而其他技能很少,那麼技能組合就是“深而窄”的; 如果你不是任何領域的專家就可以做任何事情,那就是“寬泛而膚淺”。
我們中的大多數人都處於中間狀態,有一些強項,一些普通的,還有很多差距。 在本文中,我想討論廣泛的深度範圍,並認為更接近廣泛的範圍將使大多數程序員受益。
當然,廣度和深度是相對的。 例如,您可能是 Web 開發方面的專家,或者只是客戶端 Web 開發方面的專家,或者只是 JavaScript 方面的專家。 所有這些在某種意義上都是“深而窄”的技能,但最後一個比第一個窄得多。
此外,“深而廣”和“淺而窄”的技能組合都是可能的:第一個意味著每個人都想僱用你,第二個意味著你還沒有學到任何有意義的東西。 由於它們不是很常見,因此也不值得詳細討論。
軟件工程師技能和技能組的類型
深而窄
擁有深厚的技能意味著您至少是一個領域的專家。
以 SQL 為例:假設您了解關係數據庫理論的一切; MySQL、PostgreSQL、Oracle 和 SQLite 的優缺點; 如何優化查詢; 何時以及如何對數據庫進行非規範化等。尋求此特定技能的客戶會希望盡快僱用您,並且有充分的理由。 您將像其他人一樣迅速起步並提供價值。
但是,如果項目擴展或發生重大變化,您將被具有您所缺乏技能的程序員取代或補充。 即使沒有重大更改,您能否建議架構更改? 客戶端使用 NoSQL 數據庫或根本沒有數據庫可能會更好,但您狹隘的專業知識可能會使您對這些不熟悉的選項產生偏見。
廣而淺
另一方面,如果您是通才而不是領域專家,您將需要一些時間來加速新項目,然後才能達到最高生產力。
舉個例子,也許你需要做一個 Python 項目,而你以前從未使用過那種語言。 不過,您可能已經聽說過一些關於它的事情(動態的、解釋的、多範式的),並且您對其他語言的經驗將使過渡變得更加容易。
您最初編寫的代碼可能不是 Pythonic(帶有元組、推導式或生成器),但您會知道從哪裡開始。 您將取得穩步進展,並且您精心設計的模塊以後將很容易改進。 您對技術的廣闊視野將為您提供其他人可能會錯過的想法。
當項目發生變化時,您將成為團隊的資產而不是負債。
現實世界中的技能
在地理上,狹隘的技能組合看起來像高山,而廣泛的技能組合就像高原。 使用這個類比,典型的技能組合可能包括幾座山脈、各處的小山以及許多平原。
隨機程序員可能擅長 SQL 和 Python,擅長 Web 編程和算法,並且對大多數其他事情非常擔心,例如核心轉儲、OAuth 服務器或本機應用程序。 這樣的程序員應該繼續開發他們的專業領域,同時尋找和填補知識空白。
多年來,這種策略可能會為他們提供最好的服務。
為什麼程序員需要多樣化他們的技能
許多項目需要以不可預測的方式組合不相關的技能。 雖然廣泛熟練的工程師可以為他們中的大多數人做出有用的貢獻,但專家的技能組合將滿足少數雇主的精確要求。 這在短期內不一定是一個問題,因為您只需要一份工作來支付賬單。

然而…
過度專業化是有風險的。 如果你能比其他人更好地預測未來,那麼把雞蛋放在一個籃子裡可能會很好,但這種能力很少見,而且與技術技能無關。 考慮一下我們這一千年對 Windows 編程技能的需求。 或者問問自己:我們中的許多人能猜到十年前 Android、Flash、諾基亞或黑莓各自的發展軌跡嗎?
最後,頂級雇主高度重視多元化技能。 Facebook 不會在新員工入職後的六週內為其分配新員工。 Google 鼓勵內部調動並運行多個輪崗計劃。 即使你喜歡自由職業者,保持你的選擇開放也不會受到傷害。 如果你曾經考慮為這些公司工作,那麼你至少必須是一個多面手。
假設您確信並希望使您的技能多樣化,您將如何做到這一點?
如何多樣化和提高技術技能
你可以用金錢換技能:
- 在過渡到不熟悉的領域時接受較低的費率。 如果你的工作效率像往常一樣高出 75%,那麼暫時減薪 25% 是公平的。 你很快就會把它撞回來。
- 在申請需要這些技能的工作時,使用您想要的技能進行無償演示工作。 如果事實證明你還沒有為改變做好準備,那仍然是一個有用的教訓。
您還可以用時間換取技能:
- 為開源項目做出貢獻。 您將獲得建議和驗證,回饋社區,並可能受到潛在雇主或同事的關注。
- 為快樂、靈感和日常工作的改變做一個個人項目。 例如,我在學習 React 時克隆了智能手機前的 Snake 遊戲。
你必須尋找學習機會,但你不能經常這樣做。 在我的 Toptal 面試項目中,我使用了 Node.js 和 Backbone,這兩個我都沒有太多經驗。 這很有趣,但所需的學習速度無法維持數月。
理想情況下,當您挑戰自己學習新事物時,您會在長期穩定(具有穩定的產出和收入)和短暫的間隔之間交替。 您執行後者的頻率取決於幾個因素,例如您當前的技能、市場需求和您的個人目標。
為什麼廣度對雇主有利
就雇主而言,在某些情況下總是需要深厚的技能:
- 當雇主和僱員之間幾乎沒有信任或時間承諾時。
- 當災難性結果(如隱私或安全事件)可能發生時。
- 當需要深奧的技能時。
- 當最後期限緊迫且不可協商時。
儘管如此,許多項目都不會檢查這些框,他們的招聘經理應該考慮全面的工程師。 許多技術技能,如測試和代碼文檔,以及所有軟技能(如溝通)轉移。 即使產品沒有完全改變,彈性也很重要; 如果您為攤位僱用的部分,通才可以處理下一個最高優先級。
鑑於廣泛技能組合的重要性,我們應該鼓勵開發人員多樣化,我們應該向那些可能過於專注於各種領域和技能的“多年經驗”的雇主傳達廣泛知識的重要性。
最終目標是滿意客戶的跟踪記錄; 除了硬技能和軟技能,這證明了工程師向陌生領域過渡的能力。 這也是對自由職業者在準備好之前不要冒險進入新領域的強烈激勵。
取得正確的平衡
當廣泛的技能被低估時,一些優秀的開發人員會閒置,而一些優秀的項目則人手不足或超出預算。 要求完美的技能組合就像要求現場工作一樣,因為它使供應(合格的勞動力)與需求(獎勵工作)相匹配變得更加困難。
這些都不是反對領域專業知識的論據。 這將永遠重要並獲得豐厚的回報。 我們應該記住,廣泛的技能也比表面上更重要。