【初心者向け🔰】今後のITエンジニアに求められるスキル。コーディング出来るだけでは厳しいって話。

## 概要
「独学でプログラミング習得中」「ITエンジニア目指して勉強中」な方が非常に増えてきている中で、コーディング（プログラミング）が出来たり、クラウドサービス触れるだけで、今後もしばらく仕事に困らないと思っている初心者もかなりいるみたいなので、「いや、それだけでは今後は厳しいっすよ」という、お話。

これは、現役のITエンジニア・プログラマの方にも言えることなので、いわゆる「ロースキル」だと思っている方・特定の技術のみに尖って（＝偏って）しまっている方もご覧ください。

...とはいえ、非技術的な記事に寄り過ぎるのは、この Qiita の本旨（技術情報共有サービス）ではないので、できるだけ技術的な記事にします。

## 現在わかっている、プログラマーの未来
[経済産業省の「IT 人材需給に関する調査」(2019年3月)](https://www.meti.go.jp/policy/it_policy/jinzai/houkokusyo.pdf) によると、**2030年には「先端技術ができるITエンジニアは45万人不足する」が「従来型ITエンジニアは22万人あまるかも」**という報告があります。

**"先端技術"**とは、「DX」「ビックデータ」「IoT」とかです。これは今後、増えたり変わったりする可能性が大いにありますが、要するにその時代における最新技術です。
対して、**"従来型ITエンジニア"**とは、「比較的、誰でもできる技術ができるエンジニア」「運用・保守だけやってるエンジニア」とかです。

要するに、「Webアプリ作れます」「アプリ開発できます」「クラウド触れます」「Webデザインできます」「〇〇って言語が触れます」「●●●っていうフレームワーク使えます」だけでは、そのうち賞味期限むかえるかもしれないよ？...というお話です。

実際、いわゆる「独学組」や「異業種転職組」のエンジニアも増えてきてますが、スムーズに仕事が取れてない人も徐々に増えてきている印象です。
今後のITエンジニアの在り方・働き方について、改めて考える必要がありそうです。

## そもそも、お仕事として考えているなら
### "ビジネス感覚 （経営者目線）" を知る
ちょっと話が飛んでる様に感じるかもしれませんが、必要なことなので記載します。

「とりあえず今はお勉強感覚」という方は気にしなくて良いですが、もし、ITエンジニアでご飯を食べる、つまり「お金をもらってお仕事すること」を想定しているなら、**「どういう人が仕事として求められるか」**を考えなければいけません。

でも、これだと月並みの表現になるので、言い方を変えます。

人事・採用職の方や、人材を扱う職の方が持つような専門知識ではなく、**「あなたがもしお金を支払う人なら、どういう人にお金を払うか」**をシンプルに考えてください。

つまり、欲しがられる人材を考えることで、将来、仕事が減るリスクを回避しましょうという事です。

### ただし「お金を払う人の要求」＝「仕事をしたい人の要求」ではない
お金を払う人と、仕事をしたい人の関係は、
「何かをつくる」「効率化する」「エラー減らす」という点では利害一致関係です。
しかし、「支払うコストを減らしたい」という点では利益相反の関係です。

つまり、「お金を払う人は、できるだけ良いものを、できるだけ安くつくりたい」（コスト：お金）「お金をもらう人は、できるだけ必要最低限の労力で、できるだけたくさん稼ぎたい」（コスト：時間・労力）という相反する気持ちがあるということです。

仕事をしたい人は、最初からお金を追いかけずに、まずは「実績」と「すぐに見せられるプロダクト（＝つまり"ポートフォリオ"）」を、最低でも３〜５つほど準備してください。お金を払う人は「あなたにお金を払う根拠」が欲しいからです。
そこで案件を獲得し、新しい実績を増やすチャンスをつかむことが最初のステップです。ちゃんと稼いで仕事が回るようになるのは、その後です。

### 得意な事を "かけ算" 表現で自己紹介ができる個性をつくる
個性とは、例えば

- 「IT × アパレル × 管理」が得意なエンジニア
- 「IT × 農業 × クラウド連携」が得意なエンジニア
- 「Web × ネイティブ × 組み込み」に精通しているエンジニア
- 「Web × 現役アイドル × SNS連携」ができる珍エンジニア

などです。（表現の一例なので、この組み合わせが良いという訳ではない）

要するに、「あの男に、連絡だ！」と ゴ●ゴ13 の様にイメージしてもらえる"仕事の相談・依頼がしたくなる"エンジニアになっておくと、単に HTML/CSS ができる、PHP・Pythonができる、React触れる、Azure/AWSが詳しい...という人よりは仕事が回って来やすいと思います。

個人的に良くないと思うのは「エンジニアとして、どれだけの短期間で、いくら稼いだか」に活動の比重を置き過ぎることです（例：「Python学習初めて３ヶ月で、30万円の開発案件獲得できました！」など）。

意識すると良いことの１つだとは思いますが、実際に採用してみて仕事できなかったら次回はお願いされないし、IT業界で仕事をすることにおいて、コレはあまり重要ではありません。
また、技術畑の人が多いこの業界では「中身の無い自己ブランディング」だと思われることさえあります。

プロジェクトは終了していないのに、短期間で契約終了（退場）になった経歴が増えれば増えるほど、エンジニアとしてマイナスに見られることもあるのでご注意を。
目先の利益よりも、長期的に「これからも相談・依頼させてください」と言われる人の方が良いでしょう。

## 今後、必要になってくる具体的なスキル
...というわけで、前置き長くなりましたが、個人的な見解ですが、具体的なスキルを挙げます。
スキルの中で具体的な技術名を複数あげている場合は、どれか１つでも良いと思います。

### （たぶん）必須となるスキル

- Xaas（ザース）に対する知識
    - 今後たくさんの「Xaas」サービスが増えるので、わからないと話にならない
    - Iaas, Baas, Saas, Iaas, Paas, Haas, MBaas など
    - Xaas にはリクエスト回数や通信量などの「使用量」に必ず制限があるので、それを考慮したコーディングができると良い
- Webサービスを一人で構築できるスキル（上位からできることが大切）
    - フロントエンド/バックエンドの実装
    - インフラ・ネットワーク関連の簡単な設定（Iaas でサーバ用意・構築）
    - DB の構築（RDBなら MariaDB(MySQL)、NoSQLなら mongoDB あたりで良いかと）
    - ER図・テーブル設計
    - サーバのログをのぞいたり、サービス再起動ができる
    - ドキュメントが残せる（１年後、自分が見てもわかるレベルが最低限）
    - 簡単なアーキテクチャを描ける
    - 簡単な保守・運用の経験（一人でできるレベルからもで良い）
    - テスト(単体/結合)をコードで残せたら更に良い
    - バックエンド側を Baas/Saas でも構築できたら更に良い
- クロスプラットフォーム対応できる言語・フレームワーク（Webだけ、ネイティブだけ、なんて融通の利かないサービスは淘汰されてきてるから）
    - Xamarin：おなじみ
    - Flutter (+ Dart)：個人的に一番注目
    - React (React Native)：そこそこ人気ある
    - Swift：iOS標準言語。今はWebアプリも作れる
    - Kotlin (Kotlin/Native)：Javaが有料になるので、Javaからのマイグレーション案件など増えそう
    - Cordova
- JavaScript系3大フレームワーク、エコシステムのどれか１つ
    - Angular
    - Vue
    - React（正確にはライブラリですが、実際は最早ライブラリの域ではなく、フレームワークと言っていい）
※ 上記に加えて、Next.js/Nuxt.js などフレームワークの併用経験も求められるかも
- 簡単なデザインができるライブラリ・フレームワークの利用
    - Bootstrap, Material Design, Wijmo などの導入
- SNS 連携を行う技術
    - Twitterなどサービスと連携する機能の実装
    - OAuth2.0
    - RESTful API に関する基礎知識
- クラウドで簡単なサービスを構築するスキル
    - AWS：Amazon のやつ
    - Azure：Microsoft のやつ
    - GCP：Google のやつ
- コミュニケーションスキル（仕事を任せるのに支障が出ないレベルが最低限）
    - 頭の中にあることを、相手にわかる様に言語化するスキル
    - 技術力あっても、会話できないと退場フラグ立つこと普通にある

### あった方が良さげなスキル・知識

- プロダクト・プロジェクトの利便性向上や自動化に使われる技術
    - Docker 等のコンテナ技術
    - Kubernetes (K8s)
    - Jenkins, CircleCI などの「CI/CDツール」
- プロジェクト工程・開発手法に関する知識
    - ウォーターフォール、アジャイル開発（スクラム, リーン等）に関する知見を増やす
    - DevOps（他に DevSecOps, SREs など）
    - Jenkins, GitHub, GitLabなどの管理機能や各機能を利用する
- Web3・ブロックチェーン技術に使える言語・フレームワーク（ブロックチェーン・エンジニア）
    - Solidity：DAapps やスマートコントラクトの定番（個人的に一番注目）
    - JavaScript：ライブラリがめっちゃ多い
    - Kotlin：産業用は Java がよく使われるが、今後こっちになりそう
    - C++：ビッドコインはコレなので、一応
    - Go：イーサリアムはコレなので、一応
- AI・機械学習に関する知見
    - Python：機械学習・ディープラーニング または Iot または 分析・解析系のライブラリ使用に関して。フレームワークも何か１つ覚えると良いかも
    - TensorFlow：機械学習・ディープラーニングやるなら知っとくべき
- XR系の技術知見
    - AR（拡張現実）
    - VR（仮想現実）
    - MR（複合現実）
- Unity (+ WebGL)：ゲーム系
- Rust：C言語に代わるとも言われる言語。IoT や組み込み系やるなら多いにアリ
- ノンコーディング系 Web サービス（IT知識なくてもWebアプリが無料で作れるサービス）
    - Wix, Jimdo, AmebaOwnd の様に、コーディング不要のホームページビルダー
    - ノンコーディング系サービスの認知・利用も増えてきたので、わざわざワードプレスとか利用する理由は減ってくると個人的に予想（WPよりもエコシステムで開発した方が融通が利く）

...とりあえずコレくらいで。
※ いきなり全部は無理なので、できることから少しずつ積み上げてください。

## まとめ

- 従来型の IT エンジニア、プログラマーは、今後人材として余る可能性がある
- 「コーディングができて Webサービスが作れる」だけでは弱い。お金を払う人が欲しくなるエンジニアになろう
- お金を払う人と、仕事したい人の要求は必ずしもイコールではない
- 先端技術に触れられる様になるために、今のうちから基本的な事を身につけよう
- 先端技術だけでなく、守備範囲の広い「話ができる」エンジニアになろう

※ あくまで個人的な見解です。