すべてのソフトウェアエンジニアは、習得したさまざまなスキルで構成されるスキルセットを持っています。 1つから2つのスキルを習得し、それ以外のスキルをほとんど習得していない場合、スキルセットは「深くて狭い」ものです。どの分野の専門家でなくても、すべてを少しでもできるのであれば、それは「広くて浅い」です。
SpringBootトークンベースの認証
私たちのほとんどは、いくつかの強力なスキル、いくつかの平均的なスキル、そして多くのギャップを持った中間のどこかにいます。この記事では、広範で深い範囲について説明し、広義に近づくことはほとんどのプログラマーに利益をもたらすと主張したいと思います。
もちろん、幅と深さは相対的です。たとえば、あなたは 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は内部転送を奨励し、いくつかのローテーションプログラムを実行しています。フリーランスを楽しんでいても、選択肢を開いたままにしておいても問題はありません。これらの会社で働くことを検討したことがある場合は、少なくともある程度ジェネラリストである必要があります。
あなたが確信していてスキルを多様化したいとしたら、どうしますか?
あなたはスキルとお金を交換することができます:
時間をスキルと交換することもできます。
学習の機会を探す必要がありますが、それを常に行うことはできません。 ApeeScapeのインタビュープロジェクトでは、Node.jsとBackboneを使用しましたが、どちらもあまり経験がありませんでした。楽しかったですが、必要な学習ペースを何ヶ月も維持できませんでした。
理想的には、長期間の安定性(安定した生産量と収入)と、何か新しいことを学ぶことに挑戦するときの短い間隔を交互に繰り返します。後者を行う頻度は、現在のスキルセット、市場の需要、個人的な目標など、いくつかの要因によって異なります。
雇用主に関する限り、いくつかのシナリオでは常に深いスキルが必要になります。
それでも、多くのプロジェクトはこれらのボックスのいずれもチェックしておらず、その採用マネージャーはバランスの取れたエンジニアを検討する必要があります。テストやコードドキュメントなどの多くの技術スキル、およびすべて ソフトスキル (通信のように)転送。製品が完全に変更されていない場合でも、復元力は重要です。あなたが屋台のために雇った部分なら、ジェネラリストは次に高い優先順位で働くことができます。
幅広いスキルセットの重要性を考えると、開発者に多様化を促し、さまざまな分野やスキルの「長年の経験」に集中しすぎる可能性のある雇用主に幅広い知識の重要性を伝える必要があります。
最終目標は、満足したクライアントの実績です。ハードスキルとソフトスキルに加えて、それはエンジニアがなじみのない領域に移行する能力を証明します。また、フリーランサーが準備が整う前に新しい分野に参入しないことに対する強力なインセンティブでもあります。
幅広いスキルが過小評価されている場合、一部の優れた開発者はアイドル状態であり、一部の優れたプロジェクトは人員不足または予算超過です。完全なスキルセットの一致を要求することは、供給(資格のある労働)と需要(やりがいのある作業)を一致させることが難しくなるという点で、現場での作業を要求することに似ています。
これはいずれも、ドメインの専門知識に反対する議論ではありません。それは常に重要であり、見事に報われるでしょう。幅広いスキルも明らか以上に重要であることを覚えておく必要があります。
これは、言語、フレームワーク、ツールなどの開発者の技術スキルのセットです。2つの一般的なタイプは、深い/狭い(専門家のスキルが少ない)と広い/浅い(多くのスキル、ドメインの専門知識がない)です。
ノードjsにはWebサーバーが必要ですか
なじみのない、頻繁に必要とされるスキルを特定します。インタープリター言語やWebフレームワークなどの一般的なスキルは、特定のテクノロジー(Python、Railsなど)よりも長期的な価値をもたらします。
新しい分野への移行中に料金を下げる、無給のデモ作業を行うなど、お金を投資することによって、またはオープンソースまたは個人的なプロジェクトのポートフォリオを構築するなどの時間を投資することによって。