エンジニアに必要なスキルについて
これまで様々なプロジェクトに様々な立場で関わってきましたが、エンジニアに必要なスキルについて思うところがあるので記したいと思います。
よく聞かれる質問に、「どのようなスキルがあれば稼げますか」というものがあります。本当によく聞かれます。たいていの場合、「Pythonがいいよ」とか「AWSやAzureが分かった方がいいよ」といったように、具体的な要素技術を回答することが期待されていると思います。しかし、このような回答を求めている人はそもそも稼げません。なぜか。。。
これには大きく2つのシナリオがあります。まず1つ目は、あなたを採用しようとしている人が経営者あるいは事業責任者の場合です。
この場合、エンジニアに求められるのは事業の立ち上げや成功に貢献することです。どの技術に長けているかとか、どの程度のレベルであるかとかはどうでもよく、というよりもよく分かりません。どんな技術を使おうと、事業を成功に導いてくれればよいわけですし、それはあなた自身がすべて行わなくてもチームとして成し遂げられればよいわけです。
このケースで必要になってくるのは、経営者や事業責任者が達成したいことを正確に理解し具現化するためのコミュニケーション力であったり、ビジネスサイドの知識だったりします。事業である以上、収益化が求められるので、マーケティングや会計の知識も必要でしょう。特に上流と言われる工程において、エンジニアに期待されるのはコーディングや構築の"作業"ではなく、出来上がったシステムから得られる"結果"なのです。
もう1つのシナリオを考えてみましょう。あなたを採用しようとしている人がエンジニアチームの責任者あるいは管理職の場合です。
この場合、あなたは駒として採用されることになります。予め決められた事業計画や目標を達成するための"手段"としてシステムを構築することになりますが、そのための知識やスキルはさらにそのための"手段"となります。ことでポイントとなるのは、"手段"ということは代替可能であるということです。そもそもそのシステムがなくても事業目標を達成すればよいですし、そのシステムを作るにあたっても、あなたのスキルが必要とは限らないのです。つまり多段階に代替可能なのです。
代替可能なものは競合が多いので競争にさらされることになります。もしあなたが給料を増やしたいと考えているのであれば、競争は避けなければなりません。もしあなたがプロジェクトの末端でコーディングを担当するエンジニアだった場合、経営者や事業側の担当者と積極的にコミュニケーションを取り、事業の目標を正しく理解してください。そのうえで、もっとこうした方が良いのではないかというアイデアを積極的に発信し、それを実現する方法も提示してください。あなた自身がそれを実現するとよりよいでしょう。それによってあなたの付加価値は倍増します。