こんにちは、エンジニアの高橋です。
最近様々なエンジニアの方とお話をする中で、 「エンジニアが足りない。いいエンジニアが欲しい」 という趣旨のことをよく聞きます。 そこに対しての個人的に思うところの話です。
エンジニアが足りない
「IT人材白書2016 概要」によれば、日本のIT人材は国全体で110万人ほどいるようです。
それでもなお、IT人材は不足していると言われています。
なおIT企業が求める人材像という点に目を向けると、特に求められるのは大きく3つの要素ではないでしょうか。
1. 技術力
2. ビジネスアイデア構想力
3. 事業全体の技術を俯瞰し、全体を設計する能力
端的にいうと、「技術もわかるしビジネスもわかる人材」になります。
開発上がりのプロダクトマネージャーなどが、これに該当するのではないでしょうか。
Cluexのようなシードステージやアーリーステージのスタートアップでは、「プロダクトマネージャー」という役職がないことは珍しくありません。エンジニアが、プロダクトマネージャ的な要素を含めてサービスのグロースやマーケティングなどの事業戦略を考慮に入れつつ、開発に携わることもあると思います。
IT人材というと多少わかりにくい表現ですが、何はともあれ「エンジニアが足りない」ということです。
なぜ足りないのか
1. そもそも母数が少ない
これは上にあるままの内容です。先に挙げている「IT人材白書2016 概要」の企業アンケートを見ると、有効回答のうち90%以上の企業が「エンジニアが不足している」と感じているようです。110万人というエンジニアの供給に対して、企業側の需要がどれぐらいあるのかを具体的に知りたいところです。
母数が少ないという問題に対しては、未経験からエンジニアに転身したい方を社内で教育することによって、ある程度は母数を増やすことができそうです。
2. エンジニアの守備範囲がめっちゃ増える
個人的に思うエンジニアが足りない理由ですが、こちらの方が結構深刻な気がしています。単にエンジニアの数を増やすだけでは対応できない問題を抱えていると思っています。
エンジニアの守備範囲がめっちゃ増える問題
開発だけに絞って考えても、私が初めてプログラミングを覚えた頃にはフロントエンドならHTML/CSS/JavaScriptとjQueryくらいに考えておけば良かったものが、現在ではかなり細分化されています。Web Componentや仮装DOMという概念が出てきたり、JavaScriptに絞ってもNode.jsやAngular.jsを始め、React.jsやVue.js、Webpack、GulpやPackerなどが出てきたり、ライブラリも、技術的にできることも勢いよく増えてきました。そして、技術トレンドは1年経てばガラッと変わったりします。
特にIT系のエンジニアは、コードを書く以外の部分でも、多岐に渡るスキルを求められるようになってきていると感じています。インフラを含めたアプリケーション全体のアーキテクチャ設計をしたり、UIやUXの最適化をしたり、クラウドサービスの増加によってミドルウェアを外部のマネージドサービスを使うのか自社で組み込むのかなどなど、様々なレイヤーと様々な粒度で考えることがあると思います。
例えばインフラをクラウドサービス上に構築するにしても、Microsoft AzureやGoogle Cloud Platform、Amazon Web Serviceがあって、ぱっと見似たり寄ったりだけれど、どこにインフラを構築するのが最適なのかといった判断が必要になります。 クラウドサービスでサーバーを構築するのであれば、AWSならEC2を使うのか、ECSでDockerを使うのか、そもそもコンテナを使うのであればGCPのkubernetesでDockerコンテナ管理するのかなどなど。
IT人材の不足は、単なるIT人材の増加で解決しない
どこの開発現場でもよくあることだと思いますが、「10人月の工数の開発案件にエンジニア10人をアサインすれば1ヶ月で開発が終わる」というような計算は、全然あてにならないと思っています。半年とか1年とか、開発に必要な工数が多くなればなるほど、単純計算で工数をはじき出してエンジニアをアサインしてしまうと、火を放った瞬間にプロジェクトが勢いよく燃えてしまいます。
上記の話は、開発の工数の見積もりに人月計算は合わないという趣旨でよく出てくると思いますが、別の側面として、できるエンジニアが一人いれば、普通のエンジニア10人を束ねるよりも生産性が上がるということも示していると思います。
IT人材の不足という問題の背景には、技術がより複雑に高度化し、このような単なる頭数の問題では対応できないということが往々にしてあり、だからこそ「フルスタック」なエンジニアは重宝されるわけです。少数精鋭のメンバーでチーム開発をすれば、それだけコミュニケーションコストもかからないですし。 一人当たりの全体に対するカバー率が上がるので、より全体最適なアーキテクチャを考えることにも繋がります。
こういう背景を踏まえてエンジニア個人のキャリア戦略を考えると、必然的に横断的な開発スキルを持ち合わせる方向に行くと個人的には考えています。 スペシャリストでもなく、ゼネラリストでもなく、スペシャリティを持ったゼネラリストといったところでしょうか。
なかなかハードルが高そうです。
個人のキャリア戦略としてどう捉えるか
「エンジニアの守備範囲がめっちゃ増える問題」は、既存のエンジニアにとっては「うまく使えば」追い風になると思っています。
例えばフロントエンド開発を生業としているエンジニアにとっては、デザインの領域に足を踏み入れていくことがキャリアアップかもしれませんし、あるいはバックエンド開発へと領域を広げていくことが、その人にとってのキャリアアップになるかもしれません。
ネイティブアプリのエンジニアであればiOSとAndroidの両方をカバーしたり、あるいはバックエンドの開発へ領域を広げれば、APIを含めて全部自分で作れるので重宝されると個人的には思っています。
いずれにしても、エンジニア自身にとっても会社にとっても、そういったWebサービスやネイティブアプリをサービス展開していく上では、フロントエンド/バックエンド/インフラ/ネイティブアプリなど横断的にスキルを持ち合わせる人材が重宝されるようになっていくのではないかと思うところです。
私たちと一緒に挑戦しませんか?
ずっと同じ分野を触っていて技術的な向上が見込めない。挑戦してみたい分野があるけど社内でやろうと思ってもできない。もっとコードが書きたい。所属する会社によって、環境も技術に対する考え方も様々です。より技術志向な会社で色々なことに挑戦していきたいと考えている方、ぜひお話しましょう。