業界研究
エンジニアの種類と関係性
writer: 新城
投稿日: 2024.04.04
エンジニアとは?
> エンジニアとは、開発に関するプロジェクトの進行管理や要件定義(お客様がアプリに求めている機能等をまとめること)、その設計など様々な業務を担当する人(参照:jobtag 検索結果一覧)のことを指し、かなり広い意味で使われています。個人的には「プロスポーツ選手」ぐらい広いなと思っています。「プロ野球選手」と「プロサッカー選手」では求められる技術、学ぶべきことが全然変わってきますよね?
なので、ひとえに「エンジニアになりたい!」と思っても、IT知識に乏しかったりすると何をどう目指すべきかわからないということが往々にしてありえます。。
では、実際にはどのようなエンジニアがあるのか、またそれらの関係性について現場を通じて感じた個人的な見解を話していきます。
エンジニア=プログラミング?
まず、IT業界にいない多くの人にとって「エンジニア」=「プログラミング」みたいなイメージがあると思います。
実際は、プログラミングは全体の一部で、プログラミングをあまり行わないような職種もあります。ここでは、プログラミングの頻度を基準に様々なエンジニアをグループ分けしていきます。
-
SE(システムエンジニア)
開発に関するプロジェクトの進行管理や要件定義(お客様がアプリに求めている機能等をまとめること)、その設計など様々な業務を担当するエンジニア。で、単にエンジニアというとSE を指すことが多いです。上流工程を担当しますが、場合によってはプログラミングも行います。
-
アプリケーションエンジニア
アプリケーションエンジニアはWebアプリ、業務用アプリ、スマホアプリ等のアプリケーションの開発を行うエンジニアです。
-
社内SE
自社で使用するシステム、アプリを開発、運用、保守するエンジニアです。
-
組み込みエンジニア
家電製品や、工場で使用されるロボットなどのシステムの開発、運用、保守を担当するエンジニアです。
-
サーバーサイドエンジニア
アプリやシステムの制御や、データベース関係の開発、運用、保守を担当するエンジニアです。
-
バックエンドエンジニア
Web開発におけるサーバーサイドエンジニアのことです。サーバーサイドエンジニアと同義です。
-
プログラマー
主にプログラミング業務を担当する人のことです。
-
フルスタックエンジニア
インフラ、SE、プログラミングなんでもできるエンジニアです。
-
AIエンジニア
システムで使用するAIを開発、機械学習させるエンジニアです。
-
ネットワークエンジニア
ネットワークの構築、運用、保守を担当するエンジニアです。
-
データベースエンジニア
データベースの設計、運用、保守を担当するエンジニアです。
-
セキュリティエンジニア
アプリやシステムのセキュリティ全般を担当するエンジニアです。
-
クラウドエンジニア
開発プロジェクトがクラウドを使用する場合に、クラウド環境を構築するエンジニアです。
-
インフラエンジニア
ネットワークの構築や、セキュリティなどアプリ動かすための基盤を構築するエンジニアです。
-
プロジェクトマネージャー
プロジェクト全体を進行、管理する業務です。
-
データサイエンティスト
お客様先に赴いて、ハードウェア等の設置、修理、保守を行うエンジニアです。
-
ブリッジSE
海外の企業と協力して開発を行う際に、海外の企業と自社の橋渡しが主な業務です。
-
マークアップエンジニア
主にHTML、CSSで画面構築を行う業務です。(マークアップ言語は厳密にはプログラミング言語には入りません。)
-
QAエンジニア
仕様通りにテストを行う業務です。
-
セールスエンジニア
ある程度ITに関する知識を持ってお客様に提案を行う業務です。エンジニアとついていますが、主な業務はセールスです。
-
テストエンジニア
テストの計画、実行を行うエンジニアです。
-
ITコンサルタント
クライアントの課題を特定し、ITソリューションを提供する業務です。
プログラミング―「毎日行う」
プログラミング―「時々行う」
プログラミング―「ほとんど行わない」
成果物によって異なるエンジニアの呼ばれ方
エンジニアは業務内容が同じだったとしても、最終的に何を作るかによっても、呼び方が異なってきます。
例えば、アプリケーションエンジニア、システムエンジニア、組み込みエンジニアは業務の工程自体は要件定義、設計、製造、テスト…と同じ工程で作業を行っていきます。しかし、最終的にアプリケーションができるのか、より広範なシステムができるのか、はたまたハード製品ができるのかによって違いが生じてきます。
業務によって異なるエンジニアの呼ばれ方
もちろん、業務によってもエンジニアの呼び方は変わってきます。コンピュータ上でシステムが稼働するには、通常、そのシステムに合った環境を整備する必要があります。そういった環境を作る業務に特化するとインフラエンジニアと呼ばれます。その環境インフラ自体も現在は非常に高度になっているので、その中でも、ネットワーク環境の構築が得意なエンジニアをネットワークエンジニアと言ったりします。最近では、クラウド上(インターネット上)にインフラを構築するのが主流になってきており、クラウド上の環境構築に特化したクラウドエンジニアといった職種も誕生しています。
こうして領域ごとに専門化した職種が誕生していく一方で、セキュリティエンジニアはインフラ上ではファイヤーウォールの設定、システム上ではクロスサイトスクリプティングの対策など、領域を横断するような職種もあります。同様にテストエンジニアも各領域でテストを行っていく必要があります。
開発工程によって異なるエンジニアの呼ばれ方
システムの開発には決まった流れがありますが、その工程によってもエンジニアの呼び方は変わってきます。開発の流れは大まかに5つに分かれます。
- 要件定義―お客様がアプリに求めている機能等をまとめること
- 基本・詳細設計―お客様が求めていることをどのように実現するかを決める
- 開発―動作するシステムを開発
- テスト―開発したものが想定通りの動作をするかチェック
- 運用・保守―セキュリティや、リリースしてからのサポート
各フェーズに関わるエンジニアは大体、以下のように分けられます。
ひとつひとつの細かい解説はここでは割愛させてもらいますが、要件定義フェーズにおけるITコンサルタントは、システムエンジニア(この場合、一般的にベンダーと言われます。)がお客様の要望に対して予算と工数を見て現実的な提案をするのに対し、できるだけお客様の要望が通るようにエンジニアとの間で熱い駆け引きを行ったりします。
ほんとにそこまで分かれているの?
ここまで、各エンジニアがどのように異なるのかを説明してきました。そのため、プログラマー、フロントエンドエンジニア、SEなどの違いがわかったと思います。
では、実際それらの棲み分けが行われているかというと、結論、行われていません。
プログラマーはプログラミングだけを行うと説明しましたが、自分が作成したものが思った通りの動作を行うかテストをする必要がありますし、設計の会議に参加しない場合も、それらについて理解がないと、意図をくみ取ったプログラミングは行えません。そのため、プログラミングだけできれば良いという訳にはいきません。また、プログラマーとは言いつつも、定義上はフロントエンドエンジニア、 サーバーサイドエンジニアの領域の業務を担当してもらうことも多々あると思います。開発現場では、誰が「何エンジニア」なのかの棲み分けは重要ではありません。自分が「何エンジニア」なのか聞かれても困る方は多いかもしれません。
例えばプログラマーからフロントエンドエンジニアを目指した場合、ある日を境に、業務範囲ががらりと変わるわけではなく、自身が開発に携わるなかで、画面の動的な処理やレイアウト修正を徐々に任されていき、他の人から見ればフロントエンドエンジニアになっているというイメージだと思います。このように、近い領域の業務については担当することがあるため棲み分けは行われていませんし、重要ではありません。
まとめ
ここまで、各エンジニアがどのように異なるのかを説明してきました。そのため、プログラマー、フロントエンドエンジニア、SEなどの違いがわかったと思います。
インターネットに乱立するエンジニアの職種について色々調査した結果を解説しました。結果として、エンジニアは成果物や業務内容、担当する開発工程によって職種が変わることがわかりました。とはいえ、実際の業務ではあまりはっきりと職種のように分けられていないことが殆どです。まずは共通する基礎知識をしっかり身につけて、その上で自分自身の進む方向を決めていくことが大事だと思います。
参考サイト