エンジニアに必要なスキルはどんなものがあるかという点に悩んだり、エンジニアになるための目標をどう設定したらよいのかわからないという方はいないでしょうか。
エンジニアの中にも種類があり、それぞれにおいて必要なスキルが異なります。プログラミングの知識だけあれば良いというわけではなく、それぞれの役割に応じたスキルが必要となります。
本記事では、2020年における代表的なエンジニアの種類ごとに、役割や仕事内容、必要なスキルを解説していきます。
チームで開発をするには、様々な種類のエンジニアが必要ですので、それらも合わせて紹介します。
また、最後には今後需要が増えると思われるエンジニアの種類についても解説します。
エンジニアの種類は、明確に定義があるわけでもなく、時代とともに仕事内容も変わってきていますので、私の経験に基づいた、2020年現在の種類ということでご理解いただければと思います。
エンジニアの種類と必要なスキル
フロントエンドエンジニア(iOSエンジニア・Androidエンジニア)
仕事内容
主にブラウザを使ったアプリケーションの画面、またはスマートフォンの画面に関するプログラミングや設計、テストを担当するエンジニアです。
UI/UXをより良いものにするために、デザイナーやマーケティング担当とデザインや構成に関する話をする場合もあります。
また、バックエンドよりデータを取得し、画面内に動きを付けるために、後述するバックエンドエンジニアと仕様の調整を行います。
必要なスキル
- HTML、CSS、JavaScript(Webブラウザ系)
- Swift、Kotlin(モバイル系)
- Vue.js、React、Angular(Webフレームワーク系)
- UI/UXやマーケティングの知識
バックエンドエンジニア(サーバーサイドエンジニア)
仕事内容
主にサーバーサイドで動くAPIに関するプログラミングや設計、テストを担当するエンジニアです。
データベースやキャッシュサーバ、メールサーバ、外部サービスが提供するAPIなど、ミドルウェアや他サービスと連携しながらビジネスロジックを実装していきます。
インフラに近い部分を担当するため、インフラエンジニアと調整して必要な環境を作ってもらったり、設定変更等を依頼します。
必要なスキル
- SQL等のデータベースに関する知識
- Node.js、Ruby on Rails、Spring Bootなどのフレームワークの知識
- REST、HTTP/HTTPS、OpenAPI等のAPIに関する知識
- AWS、GCP、Azure等のクラウドサービスに関する知識
- 各種利用するミドルウェアの知識
インフラエンジニア(ネットワークエンジニア・データベースエンジニア)
仕事内容
主にサーバの構築やミドルウェアのインストールや設定、ネットワークの構築・設計を担当するエンジニアです。
オンプレミス環境で構築する場合は、ネットワークの設計やOS、ミドルウェアのインストールを一から実施する必要がありましたが、最近ではクラウドを使うことが多くなってきたため、各クラウドのサービスや利用方法などを理解し、設計・構築する必要性が出てきました。
また、自動化や運用負荷の軽減のために、スクリプト等を使ってプログラミングを行って構築・運用するという役割も出てきました。
必要なスキル
- OS、ミドルウェアの設定・インストール・操作
- シェルスクリプト、PythonやRuby等のスクリプト
- AWS、GCP、Azure等のクラウドサービスの設計や設定
- Kubernetes、Ansible等の自動化ツール、運用ツール
- バックアップやメンテナンス等の運用スキル
アーキテクト(フルスタックエンジニア)
仕事内容
いわゆる「なんでも屋」ではありますが、全体設計を行い、フロントエンドエンジニア、バックエンドエンジニア、インフラエンジニアの間を調整するエンジニアです。
時にはプログラミングも行いまし、インフラ構築も行います。
また、後述のプロジェクトマネージャーとともに、顧客の要件を確認して仕様を決めたりすることもあります。
必要なスキル
- フロントエンドエンジニア、バックエンドエンジニア、インフラエンジニアの各スキル
- セキュリティを担保したり、可用性などの非機能要件を満たすための知識
- 要件定義や顧客との調整を行うスキル
プロジェクトマネージャー(プロジェクトリーダー)
仕事内容
主に顧客とのコミュニケーションを行ったり、内部のスケジュールやコスト管理を行います。
必ずしもエンジニアという役割ではありませんが、チームメンバーとコミュニケーションをとるために、ある程度のエンジニアに関する技術知識があることが求められます。
必要なスキル
- 顧客とのコミュニケーションスキル
- スケジュールやコスト管理
- 各エンジニアが扱う技術の知識
今後需要が増えそうな技術特化型のエンジニア
AIエンジニア(機械学習エンジニア)
AIや機械学習の領域をメインとして担当するエンジニアです。
最近ではPythonを使った機械学習プログラミングを行うことも多いため、Pythonの知識は必要となります。
また、機械学習に必要なアルゴリズムやモデルといった数学や統計学などの知識も必要で、ユースケースに合わせてどれを採用すべきかを判断する能力も必要となります。
IoTエンジニア(データ分析エンジニア)
IoTデバイスからデータを取得し、保存、分析といった一連の作業を担当するエンジニアです。
無数にあるIoTデバイスからどのようにデータを集めるのかといった設計や構築作業に関するスキルも必要です。
また、集めたデータを分析するための手法やプログラミングを行うスキルも必要です。
前述のAIエンジニアとも連携して、集めたデータを活用方法について調整することもあると思います。
ブロックチェーンエンジニア
ブロックチェーンのスマートコントラクトを作成するエンジニアです。
スマートコントラクトは、プログラミングが必要なため、ブロックチェーンがサポートする言語で作成する必要があります。
また、ブロックチェーンを使ったシステム全体の設計や構築なども役割の1つです。
まとめ
今回は代表的な種類をあげましたが、細かく種類を分けるともっとたくさんあります。
それぞれで必要なスキルはたくさんありますが、一人で全ての作業実施することはほとんどなく、基本的にはチームで活動します。
必要なスキルを身につけることも重要ですが、チーム内でお互いに助け合いながら、チーム全体でシステムやサービスを作りあげる能力こそ必要不可欠であり、最も重要なスキルであると僕は考えています。
プログラミングだけでなく、インフラやOS、ネットワークなど様々な知識が必要となるエンジニアですが、自分が目指したいエンジニア像をイメージしてもらえたら幸いです。
コメント