エンジニアリングスキルを学ぶ指針(メモ)
記事の目的
スキルを学ぶ際の学習項目・優先順位に対する考え方を整理することです。
エンジニアリングスキルを学ぶための指針
まずスキルは特定の課題を解決するためにあります。そのため自分が取り組む課題定義がまず何よりも重要です。
一方で課題が明確でない間はスキルを学ぶことで見えてくる課題や、また課題領域にかかわらず必須となるような基礎知識領域もあります。
特定の課題領域に特化した学習と特定の課題領域に縛られない汎用的な学習の両方から学習を考えていく必要があり、どのような基準でスキルを学んでいくかの基準を整理します。
学習領域の区切り方
スキルの区切り
HTML/CSS/JavaScriptなどは課題ではなくスキルで区切った考え方です。汎用的に扱えるスキルではあるものの、これらを利用して何をするかは明確ではありません。ウェブ開発をするのかもしれないですし、Andoroid開発をするのかもしれません。このスキルの区切り方で学習しても、何か具体的な課題解決とは距離があります。
業務ポジションでの区切り
フロントエンド開発、バックエンド開発などはもう少し課題領域に近くなります。フロントエンドやバックエンドといったシステムのコンポーネントを開発するという課題領域です。しかし、これらは具体的にどのようなプロダクトかまでを決定していません。また、金融システムのフロントエンド・バックエンドとコンシューマー向けゲームのフロントエンド・バックエンドでは全く必要なスキル・考え方が違ってきます。スキル区切りよりもよいものの、まだ課題解決とは距離があります。
課題領域での区切り
匿名通信を扱うエンジニア・コンシューマーゲームのエンジニア・業務アプリケーションのフロントデザイナー・金融システムのバックエンド開発者・アルゴリズムのパフォーマンスを最適化させるエンジニア etc.課題が具体的であるほど特定のユースケースに対して強い専門性と価値を発揮します。一方で、課題定義が狭くなりすぎないように注意する必要があります。その業務に特化して深めて得られた知見が他の領域の課題領域にも適用できるように考える必要があります。
例えば、金融システムのバックエンド開発者はあらゆる堅牢性が求められるシステムで通用するデータの整合性管理の技術を持っていると言えます。
扱う課題の発見・定義とスキルの組み合わせを模索するのが非常に重要となってきます。
スキルの専門性とは
スキルの専門性というと狭く深くという印象を与えますが、むしろ特定の課題領域に関係するスキルの幅広さが専門性と言えます。例えばJavaScriptとCSSだけを深く使いこなせるエンジニアはフロントエンジニアとして専門性が高いとは言いにくいですが、デザインツール・UI・UX・SPAフレームワーク・SEOやアナリティクスに詳しく幅広く扱えるエンジニアはフロントエンジニアとして専門性が高いとみなされます。専門性は扱っている課題領域との関係で相対的に決まるものです。
重要なのは自分が扱っている領域と関連する分野に対する知識の幅広さが相互に課題に対する提供価値を高めていることです。
暗号の専門家であれば特定の暗号アルゴリズムを使いこなせることよりも、暗号アルゴリズムの相互の比較を理解できていたり、暗号と業務の活用方法を理解したりすることなどが求められます。
Discussion