幅広いスキルセットと狭いスキルセット:ソフトウェアエンジニアリングスキルの謎を解き明かす
公開: 2022-03-11すべてのソフトウェアエンジニアは、習得したさまざまなスキルで構成されるスキルセットを持っています。 1つから2つのスキルを習得し、それ以外のスキルをほとんど習得していない場合、スキルセットは「深くて狭い」ものです。 どんな分野の専門家でなくても、すべてを少しでもできるなら、それは「広くて浅い」です。
私たちのほとんどは、いくつかの強力なスキル、いくつかの平均的なスキル、そして多くのギャップを持った中間のどこかにいます。 この記事では、広範で深遠なスペクトルについて説明し、広義に近づくことはほとんどのプログラマーに利益をもたらすと主張したいと思います。
もちろん、幅と深さは相対的です。 たとえば、Web開発の専門家、クライアント側のWeb開発の専門家、またはJavaScriptの専門家になることができます。 これらはすべて、ある意味で「深くて狭い」スキルですが、最後のスキルは最初のスキルよりもはるかに狭いです。
また、「深くて広い」スキルセットと「浅くて狭い」スキルセットの両方が可能です。1つ目は誰もがあなたを雇いたいと思っていることを意味し、2つ目はあなたがまだ意味のあることをまったく学んでいないことを意味します。 それらはあまり一般的ではないため、詳細に説明する価値もありません。
ソフトウェアエンジニアのスキルとスキルセットの種類
深くて狭い
深いスキルセットを持っているということは、少なくとも1つの分野の専門家であることを意味します。
SQLを取る:リレーショナルデータベース理論についてすべて知っているとしましょう。 MySQL、PostgreSQL、Oracle、およびSQLiteの長所と短所。 クエリを最適化する方法。 データベースを非正規化する時期と方法など。この特定のスキルを探しているクライアントは、できるだけ早く、そして正当な理由であなたを雇いたいと思うでしょう。 あなたは地に足を踏み入れ、他のほとんどの人ができないような価値を提供します。
ただし、プロジェクトが大幅に拡大または変更された場合は、不足しているスキルを持つプログラマーに置き換えられるか、補足されます。 大きな変更がなくても、アーキテクチャの変更を提案できますか? クライアントは、NoSQLデータベースを使用するか、データベースをまったく使用しない方がよい場合がありますが、専門知識が限られているため、これらのなじみのないオプションに偏る可能性があります。
広くて浅い
一方、ドメインの専門家ではないジェネラリストの場合は、生産性のピークに達する前に、新しいプロジェクトを立ち上げるのに少し時間が必要です。
例を挙げると、Pythonプロジェクトを実行する必要があり、その言語をこれまで使用したことがない場合があります。 それでも、おそらくそれについていくつかのこと(動的、解釈、マルチパラダイム)を聞いたことがあるでしょうし、他の言語での経験は移行をはるかに簡単にします。
最初に作成するコードはPythonic(タプル、内包表記、またはジェネレーターを使用)ではない可能性がありますが、どこから始めればよいかはわかります。 あなたは着実に進歩し、あなたのよく因数分解されたモジュールは後で簡単に改善されるでしょう。 テクノロジーに対するあなたの幅広い視点は、他の人が見逃すかもしれないアイデアをあなたに与えるでしょう。
プロジェクトが変更されると、あなたは責任ではなく、チームの資産になります。
実世界のスキルセット
地理的には、狭いスキルセットは高い山のように見え、広いスキルセットは高原のように見えます。 このアナロジーを使用すると、典型的なスキルセットは、いくつかの山、あちこちの丘、そしてたくさんの平野を特徴とする可能性があります。
ランダムプログラマーは、SQLとPythonに長けていて、Webプログラミングとアルゴリズムに長けていて、コアダンプ、OAuthサーバー、ネイティブアプリなどの他のほとんどのことを本当に心配しているかもしれません。 このようなプログラマーは、知識のギャップを見つけて埋めながら、専門分野を活用し続ける必要があります。
この戦略は、何年にもわたって彼らに最も役立つ可能性があります。
プログラマーがスキルセットを多様化する必要がある理由
多くのプロジェクトでは、予測できない方法で組み合わされた無関係なスキルが必要です。 広く熟練したエンジニアはそれらのほとんどに有益に貢献することができますが、専門家のスキルセットは少数の雇用者の正確な要件に一致します。 請求書の支払いに必要な仕事は1つだけなので、短期的には必ずしも問題になるとは限りません。
しかし…

過度の専門化は危険です。 将来を他の誰よりもよく予測できれば、卵を1つのバスケットに入れることは問題ないかもしれませんが、その能力はまれであり、技術スキルとは無関係です。 私たちの千年紀におけるWindowsプログラミングスキルの需要を考えてみてください。 または、自問してみてください。私たちの多くは、10年前に、Android、Flash、Nokia、Blackberryのそれぞれの軌跡を推測できたでしょうか。
最後に、トップの雇用主は多様なスキルを高く評価しています。 Facebookは、チームが開始してから6週間後まで、チームに新入社員を割り当てません。 Googleは内部転送を奨励し、いくつかのローテーションプログラムを実行しています。 あなたがフリーランスを楽しんでいても、あなたの選択肢を開いたままにしておくことは害にはなりません。 あなたがそれらの会社で働くことを考えたことがあるなら、あなたは少なくともある程度ジェネラリストでなければならないでしょう。
あなたが確信していて、あなたのスキルを多様化したいと仮定すると、あなたはそれをどのように行いますか?
技術スキルを多様化および向上させる方法
あなたはスキルとお金を交換することができます:
- なじみのないフィールドに移行する間は、より低いレートを受け入れます。 いつものように75%生産性が高い場合、25%の一時的な減額は公正です。 すぐに元に戻します。
- それらを必要とする仕事に応募している間、あなたが望むスキルで無給のデモ作業をしてください。 変更の準備ができていないことが判明した場合でも、それは学ぶのに役立つ教訓です。
時間をスキルと交換することもできます。
- オープンソースプロジェクトに貢献します。 アドバイスや検証を受け、コミュニティに還元し、潜在的な雇用主や同僚から注目されるかもしれません。
- 喜び、インスピレーション、そして日常業務からの変化のために個人的なプロジェクトを行います。 たとえば、Reactを学びながら、スマートフォン以前のヘビゲームのクローンを作成しました。
あなたは学習の機会を探す必要がありますが、それを常に行うことはできません。 Toptalのインタビュープロジェクトでは、Node.jsとBackboneを使用しましたが、どちらもあまり経験がありませんでした。 楽しかったですが、必要な学習ペースを何ヶ月も維持することができませんでした。
理想的には、(安定した生産量と収入で)長期間の安定と、何か新しいことを学ぶことに挑戦するときの短い間隔を交互に繰り返すでしょう。 後者を実行する頻度は、現在のスキルセット、市場の需要、個人的な目標など、いくつかの要因によって異なります。
幅が雇用者にとって良い理由
雇用主に関する限り、いくつかのシナリオでは常に深いスキルが必要になります。
- 雇用主と従業員の間に信頼や時間のコミットメントがほとんどない場合。
- 壊滅的な結果(プライバシーやセキュリティインシデントなど)が発生する可能性がある場合。
- 難解なスキルが必要な場合。
- 締め切りが緊急で交渉不可能な場合。
それでも、多くのプロジェクトはこれらのボックスのいずれもチェックしておらず、採用マネージャーはバランスの取れたエンジニアを検討する必要があります。 テストやコードドキュメントなどの多くの技術スキル、およびすべてのソフトスキル(コミュニケーションなど)の伝達。 製品が完全に変更されない場合でも、復元力は重要です。 あなたが屋台のために雇った部分なら、ジェネラリストは次に高い優先順位で働くことができます。
幅広いスキルセットの重要性を考えると、開発者に多様化を促し、さまざまな分野やスキルの「長年の経験」に集中しすぎる可能性のある雇用主に幅広い知識の重要性を伝える必要があります。
最終目標は、満足したクライアントの実績です。 ハードスキルとソフトスキルに加えて、それはエンジニアがなじみのない領域に移行する能力を証明します。 それはまた、フリーランサーが準備が整う前に新しい分野に挑戦しないことへの強いインセンティブでもあります。
適切なバランスをとる
幅広いスキルが過小評価されている場合、一部の優れた開発者はアイドル状態であり、一部の優れたプロジェクトは人員不足または予算超過です。 完全なスキルセットの一致を要求することは、供給(資格のある労働)と需要(やりがいのある作業)を一致させることが難しくなるという点で、現場での作業を要求することに似ています。
これはいずれも、ドメインの専門知識に反対する議論ではありません。 それは常に重要であり、見事に報われるでしょう。 幅広いスキルも明らか以上に重要であることを覚えておく必要があります。