システムエンジニアを目指していますか?システムエンジニア(SE)の方以外にとってみれば、SEの仕事内容はよくわからないことが多いようです。たしかに、プログラマー(PG)といえば、その名の通りプログラムをする人ですからわかりやすいですが、SEと言われてもピンときませんよね。
それもそのはず、”システムエンジニア”という言葉は和製英語で、日本でしか使われない用語です。そのせいか非常にあいまいな意味を持っています。それでは、システムエンジニアの仕事の実態とはいったいどのようなものなのでしょうか?
この記事では、
- プログラマーからシステムエンジニアにキャリアアップしようと考えている方
- いまからシステムエンジニアになろうと考えている方
のために、システムエンジニアとプログラマーとの違いやSEの具体的な仕事内容、SEの種類別の違いについてお伝えしていきます。ぜひご一読して、SEの仕事ぶりがどのようなものかイメージを持っておきましょう。
システムエンジニアとプログラマーはどう違う?
ソフトウェア開発プロジェクトがはじまっても、いきなりプログラミングを始めるわけではありません。当たり前ですが、まずはどんなものを作るのかを考えなくてはいけませんよね。これがいわゆる「上流工程」と呼ばれるものです。
上流工程には、要件の洗い出しや機能の選定、プログラムの設計などプログラミング前に決めておかなければならないことが含まれています。これがシステムエンジニアの主な仕事になります。そして、上流工程の後に「下流工程」が始まります。主にプログラマーによりプログラミングやテスト、リリースなどが行われます。
このように、SEは主に「上流工程」を担当し、PGは主に「下流工程」を担当することになるわけです。とはいっても、この図式は昔ながらのウォーターフォール型開発を元にしているので、スクラムやエクストリームプログラミングなどのアジャイル開発手法を取り入れている企業は上流・下流などのように明確に区分されていない(できない)場合もあります。モダンな開発手法を取り入れている企業ほどSEとPGの区別はあいまいになります。SEとPGを区別することにそれほど大きな意味がないからです。
システムエンジニアの一般的な仕事内容
徐々にモダンな開発手法が取り入れられているとはいっても、日本ではまだまだ普及が進んでいない企業もあります。どちらにしても、一般的なシステムエンジニアの仕事内容を知っておくことは有用です。ここでは、上流工程の流れの順にSEの仕事内容を紹介していきます。
要求分析
はじめに、クライアントの要求を聞き出すためにヒアリングを行います。クライアントはシステムに詳しい場合もありますが、ほとんどの場合あまりシステムのことを理解していません。そのため、クライアントの言うことを鵜呑みにせずに最善の方法を提案できるかがSEの腕の見せ所です。専門用語を多用せずにわかりやすく説明できることが求められます。
クライアントの要求はシステムの根幹をなす部分です。ここで大きな失敗してしまうと、後でどんなに頑張ったとしても大惨事はまぬがれないでしょう。とはいえ、ここで100%要件を聞き出すことはほとんど不可能です。クライアントは、できたもの見てはじめてシステムに対する具体的なイメージを持ちます。ここでどれだけ慎重になっても、後の仕様変更を食い止めることはできません。ある程度の変更があることを承知の上で進めましょう。
また、自社製品などの社内プロジェクトの場合は、このフェーズが対象ユーザーの情報収集になることもあります。たとえば、新サービスを開始するなら新サービスを利用しそうなユーザーにアンケートをとったり、競合になりそうなサービスを調査したりするなどです。
要件定義
要件定義では、得られた情報を元に要件(なにが必要か?)を具体的にまとめます。クライアントの要求から要件を導き出していくクリエイティブな作業になります。抽象的な要求から具体的な実現方法を決めていくわけですね。そのため、システムエンジニアは各種技術やプログラミング技術に精通している必要があります。実現不可能な要件を作ってしまってはSE失格です。
内容としてはシステムとしてどんな機能(機能要件)や性能(非機能要件)が必要なのかを決めていきます。また、スケジュールや費用もクライアントに提示することになるでしょう。これ以前に(超)概算の見積もりを行う場合もあります。
基本設計(外部設計)
次のフェーズは基本設計です。定義した要件(機能)をどのような技術を用いて実現するのかを決定します。具体的には、どのようなハードウェア構成にするのか、ソフトウェア全体の設計方針(アーキテクチャ)、モジュールの分割方法などです。
また、画面や帳票、データベースなどの設計も行います。運用方法や性能を出すための設計も重要な仕事です。主に外部に対する設計を行うことから「外部設計」とも呼ばれます。
詳細設計(内部設計)
詳細設計は、基本設計とプログラミングの橋渡しをする役割を担っています。外部設計よりも詳細(内部)に入っていくので「内部設計」とも呼ばれます。基本設計の概要レベルの設計をプログラミングで実装できるレベルにまで詳細化します。
つまり、クラス設計や処理の流れ、データの入出力仕様などを決めることになります。企業によっては、詳細設計をプログラマーが担当する場合もあります。
この後に下流工程が続き、プログラミングやテスト、リリースが行われることになります。途中で問題が起きることも多い(というか100%?)ので、SEは最後まで関わり続けることになるでしょう。
同じシステムエンジニアでも多種多様
最後に、システムエンジニアの種類を紹介します。一口にSEといってもいろいろなポジションがあるため、仕事内容や流れも変わってきます。ここではその一例を紹介します。
アプリケーションエンジニア
みなさんが想像する一般的なSEの種類です。先ほど説明した上流工程のようにクライアントから要求を聞き出し、要件を定義してシステムを設計していくことが主な仕事です。テストや運用まで一貫して関わり、稼働後のアフターサポートも担当します。
サーバーエンジニア
サーバーの設計や構築、運用・保守を担当するエンジニアです。ほとんどのシステムではサーバーを必要としますから、欠かすことのできない存在です。従来は社内サーバーやデーターセンターなどの物理サーバーが主流でしたが、最近ではクラウドサーバーが主流になりつつあります。当分はどちらの知識も必要とされるでしょう。
データーベースエンジニア
データベースの設計や構築、運用・保守を専門とするエンジニアです。データベースはシステムの勘所で、一度障害が起きれば大規模障害につながります。専門的な知識が必要とされる重要なポジションでしょう。また、情報流出が起きないよう、セキュリティにも細心の注意を払う必要があります。
ネットワークエンジニア
ネットワークを専門とするエンジニアです。大規模なシステムは、ネットワークで相互に接続されています。ルーターやファイヤウォール、スイッチなど多数のネットワーク機器の知識が必要な専門職です。
ほとんどの攻撃はネットワークを介して行われるため、セキュリティ対策も必要不可欠です。
社内エンジニア
社内で使用するアプリケーションの企画や設計、保守を行うエンジニアです。そのため、対象の企業の業務に関する深い知識が必要です。
パソコントラブルなどのちょっとしたサポートを行うこともあります。SEの中では、比較的楽な業務内容であることから人気があります。
まとめ
システムエンジニアの仕事がどのようなものかお分かりになりましたか?つまるところ、システムエンジニアにはプログラマー+αの知識が求められます。
自分が目指しているSEの仕事内容が理解できたら、なるために必要な勉強をはじめてみましょう。資格取得を目指すのも有効な方法です。なにか目標があったほうが学習ははかどりますからね。なにかしらの目標を持ちましょう。あなたはどんなシステムエンジニアになりたいですか?
フリーランスになるために必要な知識やスキルアップの方法等、様々なお役立ち情報を発信していきます。
(リモートワーク案件に強いフリーランスエージェント「クラウドワークス テック」を運営)