システムエンジニア(SE)とは、利用者の要求を聞き、その要求を実現するためのコンピュータシステムを設計する技術者のことをいいます。
設計したプログラムを実際に構築するのはプログラマーの仕事となりますが、比較的小規模なシステムの場合には、システムエンジニアが構築まで担当することもあります。
◯本文
SE(システムエンジニア)とは
システムエンジニアとは、コンピュータやネットワークシステムを設計する技術者のことです。「System engineer」の頭文字をとって「SE」と呼ばれます。
設計するシステムは、小規模な業務システムから、銀行のオンラインシステム、交通管制システムなど大規模なものまで多岐にわたります。
具体的には、担当者と打ち合わせをして実地観察・分析したり、調査を行ってシステム設計書を作成したりします。作成されたシステム設計書は、プログラマーに引き継がれ、プログラムが構築されます。
システムが完成した後は、プログラムが問題なく稼働するか何度もテストを行い、導入後も引き続きプログラムの改善・保守・点検などを行います。
システムやプログラムの具体的な施策や実装方法の提案を行い、その設計に基づいて、フロントエンドエンジニアやプログラマーといった開発担当者が作業を行うことになります。
そのため、ネットワークやサーバといったバックグラウンド技術やシステム開発に必要なプログラム言語の知識などの幅広い知識はもちろん、発想力、表現力、マネジメントする能力などが必要となります・
SE(システムエンジニア)とプログラマーとの違い
プログラマーとは、コンピュータの情報処理の指令とも言えるプログラムを作る人です。システムエンジニアは、顧客からシステム要件をヒアリングし、プログラマーに渡すために作成した設計書を作成します。
そして、プログラマーはその設計書に基づいて、さまざまなプログラム言語を取り扱ってデータベースやWebサーバの運用面、セキュリティなど、バックエンドで動作するシステムを構築・開発します。
つまり「システムエンジニア=プログラマー」ではなく、システムエンジニアの仕事は、システムの設計で、プログラマーが作り手ということになります。
一般的には、プログラマーとして経験を積んだあとにシステムエンジニアにステップアップするケースが多くなっていますが、プログラマーとして専門スキルを極めていく道もあります。
ただ、システムエンジニアがちょっとしたプログラムを書いたりカスタマイズのためにプログラミングと似た作業を担当したりすることもありますし、運用やサポートが業務に含まれることもあります。
また、プログラマーが設計も担当していることもあり、両者の区別はつきにくくなっています。
SE(システムエンジニア)とSIerの違い
SIerとはシステムインテグレーター(System Integrator)を行う組織・会社のことをいいます。
SIerとSEを混同している人もいますが、SIerはシステム構築などを行う組織自体のことをいい、SEは個人のことをいいます。ここでは、「SIerは企業や組織のことで、SEは人のこと」と理解しておけば十分でしょう。
つまり、SIerの正しい使い方は「SIerで働くSEです。」ということになります。
SE(システムエンジニア)と社内SEの違い
SEと特に区別して「社内SE」と呼ばれるシステムエンジニアがいます。
社内SEとは、自社のシステムの企画や開発、運用などを行うシステムエンジニアです。
一般的なSEは、顧客の要求に合わせてシステム設計・開発を行いますが、社内SEは自社のシステムを設計・開発するという点で異なります。
レバテックキャリア「社内SEとSEの違い」
https://career.levtech.jp/guide/knowhow/article/329/
SE(システムエンジニア)の仕事内容
システムエンジニアの仕事は、顧客のパートナーとして、顧客の問題解決を実現するためにシステムやプログラムを設計することです。
システムの設計・開発は、一般的にシステム企画→要求分析・要件定義→基本設計→詳細設計→製造→テストというフェーズで進めていきます。
実際にはこれらのフェーズに運用、保守が加わることもありますが、ここでは、(1)要求分析・要件定義(2)基本設計(3)詳細設計(4)テストの4つのフェーズの内容についてご紹介します。
(1)要求分析・要件定義
顧客に言われるがまま仕事を進めても、いざ運用が始まると「このままでは使えない」と判断され多くの改修が必要となることがあります。
また、顧客自身が自分の本当のニーズを把握していないことも多々あります。
したがって、システムエンジニアはシステム構築のプロとして、顧客の要求を正しく分析するだけでなく業務課題の根底にある目的を把握してシステム化の目的と内容を決定する必要があります。
具体的には、顧客と何度も対話を行うことが重要ですが、会議など大勢がいる前では形式的な発言しか出てこないことが多く、会議の後でやっと率直な意見が聞けるということもあります。ざっくばらんな雑談の中で本音を聞き出したり、実際に顧客の現場を見たりして、顧客が抱えている問題の本質に迫るようにしましょう。
顧客の要求を分析したら、システム化する方内容やそれを実現すると何が良くなるのかを明らかにします。これを、「要件定義」といいます。
要件定義は、大きく「業務分析フェーズ」と「業務設計フェーズ」に分けることができます。
①業務分析フェーズ
システム化する目的と、それを実行するための課題、解決策を具体化する
方針と実施計画の立案や、問題分析と課題の設定など
②業務設計フェーズ
課題を実現するための新しい業務の仕組みとシステム化内容を具体化する
新しい業務の仕組みの設計やシステム要件の整理など
要件定義では、システムの役割や成果物についての認識が顧客の認識と合致しているかを確認する必要があります。
この認識が異なると、必要な要件が抜けてしまったり逆に不要な要件が定義されたりして、プロジェクトが大きく混乱してしまいますので注意しましょう。
(2)基本設計
システム要件や課題を洗い出したら、採用する技術の検討を行なう基本設計を行います。基本設計は外部設計と呼ばれることもあります。
一般的には表示方法や操作方法はどのような形で行うのかといった画面仕様や機能仕様などを作成します。
システムの使い勝手は、画面設計や機能設計に大きく左右するものですから、「顧客がお金を支払うだけの価値があるシステムであるか否か」は、この基本設計で決まってしまうと言っても過言ではありません。
したがって、基本設計を行ううえでは、顧客にとって最も価値のあるシステムは何か、使いやすい画面は何かを徹底的に詰めていくことが必要となります。
(3)詳細設計
詳細設計は、内部設計とも呼ばれるもので、システムの内部についてプログラムの視点で設計を行うことを指します。
基本設計(外部設計)が、外から見た挙動に着目した設計であるのに対して、詳細設計(内部設計)は、どのように作れば最も上手に作れるのか、どのようなモジュール構成で作り上げていくのかを考えていく作業が中心となります。
プログラマーがプログラミングをするために必要となる細かな設計が必要となるため、モジュール構成図(画面仕様をもとにシステム内部のモジュール構成を決定し、それぞれに名称を付与し、画面間やモジュール間でやりとりされるデータ内容を洗い出したもの)や、シーケンス図(アプリケーションの処理の流れを整理したもの)を作成しますが、最近は内部設計をコードで記述するケースも増えています。
わざわざ手間をかけて日本語で内部設計書を書くぐらいなら、最初から内部設計をコードで記述してしまった方が圧倒的に作業効率は上がるためです。
たとえばVisual Studioというアプリケーションを構築するための統合された開発環境では、ソースコードと完全に同期するクラス図(システムの構造を図式化したもの)ツールを作成することができ、ソースコードを修正するとクラス図に反映され、クラス図を修正すると、ソースコードに反映されるようになっています。
(4)開発
(5)テスト
コーディングが終わってシステムが動くようになったら、システムがきちんと設計通りの動作をするかテストするのも、システムエンジニアの担当です。
「 ISTQBテスト技術者資格制度. Advanced Level シラバス」では、テストを行う目的は以下の4つであると定義しています。
①欠陥(バグ)を見つける
②対象ソフトウェアの品質レベルが十分であることを確認する
③意思決定のための情報を示す
④欠陥(バグ)の作り込みを防ぐ
JSTQB
http://jstqb.jp/
なかでも最も重要なのは、欠陥(バグ)を見つけることです。
ひとくちにバグといっても、ソースコードに記述されたロジックのミスやシステム間のインターフェースに関するミスなど、さまざまなバグがありますので、これらを効率よく見つけるためにさまざまなテストを段階的に実施していく必要があります。テストの種類は、運用・障害テスト、ユーザビリティテスト、構成テスト、パフォーマンステストなどがあり、バグが発覚した時には、必要な修正をプログラマーに依頼します。そして、テストが済んだものを徐々につなげながら、テスト対象を広げていきます。この各段階を「テストレベル」と呼んだりします。
テストを実施する前には、「これだけの項目をパスすれば、利用するうえで不具合が起こることはない」と言えるようなテスト項目を作成し、その項目に沿ってテストを実施すると効率的です。
SE(システムエンジニア)に向いている人
システムエンジニアは、テクニカルスキルだけでなく、さまざまなスキルが必要です。確かにITのプロフェッショナルでなければなりませんが、ITに強いだけでは足りず、顧客からうまく問題点の本質を引き出すコミュニケーション能力が必要となりますし、新しい情報を得るための努力ができることも必要です。
(1)人一倍好奇心旺盛な人
システムエンジニアは、常に学び続ける必要がある職業です。そのため、次々登場する新しい技術やツールに興味を持ち、とりあえず使ってみようとする好奇心旺盛な人に適性があるといえます。
IT業界では、ほんの数年前に登場した技術がすぐに廃れて新しい技術に置き換わっていくことも多いので、常に最新の技術をキャッチアップしてビジネスを作り出すことが、顧客のニーズを先取りすることにつながります。
(2)コミュニケーション能力が高い人
システムエンジニアの仕事は、顧客の要求や課題を正確に把握して、その要求に応えて課題を解決するためのシステムを設計することです。
したがって、物事をかみ砕いて分かりやすいように相手に伝える工夫や、自分から打ち解けて顧客の本音を聞き出す努力ができることが大切です。
また、システムエンジニアは、プログラマーやディレクターなどさまざまな人との共同作業を行うことから、「上司に報告・連絡・相談ができる」「相手が何を言おうとしているのか理解できる」といった人間関係を円滑にする努力も求められます。
ただし、はじめからこのような能力がすべて備わっている必要はありません。経験がものをいう職種であるため、実務を通してこれらのスキルを習得していくことになります。
(3)体力がある人
システムの導入時や、運用中に障害が発生したりする時には、調査や修復のために休日も作業しなければならなくなることもあります。
したがって、このような事態に耐えられる体力があるかどうかも、システムエンジニアには必要なのです。
(3)完璧主義でない人
時間をかけてソースコードを洗練させるなど、技術者として完璧にこだわり過ぎると、それが原因で組織の仕事の流れがストップしてしまうこともあります。
たとえば、顧客の要求する機能は果たしているのに、時間をかけてソースコードを洗練するなど完璧さを追求することは、単に自己満足に過ぎないこともあります。
したがって、不必要に完璧さを求めず、自分の仕事の影響範囲を理解し仕事全体の流れを優先するという割り切りも、システムエンジニアには必要なのです。
(4)論理的にプロジェクトを進められる人
システムは、業務ルールを論理的に記述して動くものです。
プロジェクトの成果物を作成するために必要な作業を洗い出し、作業の前後関係を整理したり、プロジェクトの実行で必要となる資材や要員などを論理的に検討したりする管理手法は、システムエンジニアとしてキャリアアップをしていくうえで、必須のスキルといえます。
(5)時間管理ができる人
プロジェクトは納期がある以上、時間管理ができなければなりません。
時間を有効に使うためには、仕事を整理して無駄な仕事を捨てる必要があります。
仕事の優先度は、重要かどうかより緊急性で判断してしまいがちですが、重要な仕事を後回しにすると、ほとんどのケースでよい結果が生まれません。
したがって、仕事に優先順位を付けて、時間を管理する能力もシステムエンジニアに重要な能力と言えます。
SE(システムエンジニア)の働き方
システムエンジニアの働き方は、SIer、社内エンジニア、リモートワーク、フリーランスと多種多様です。
SIerで働く
システム構築などを行う企業(SIer)は、会社の数が圧倒的に多く、プログラムング経験がそこまで重視されず比較的楽に入社することができることから、まずSIerに入社して、プログラマーとしての実務経験を積むという働き方もあります。
ただ、顧客に納品するシステムは初めから要件が決まっていることが多く、プログラムを書く作業よりも、実際には工数見積もりやステップ数見積といた管理業務の方が多いという声もあります。
事業会社で働く
社内システムやWebシステムの保守運用など、自社のシステムの企画、開発、運用を行うシステムエンジニアである「社内エンジニア」という働き方もあります。
顧客がいないことから納期に融通が利く、残業がない、などの理由で人気がありますが、トラブルサポートやサーバ管理などの業務が中心となり、開発経験は積みにくいこともあります。もちろん、勤め先や担当によって業務内容はさまざまで、自分で会社にプロジェクトを提案することで、業務の幅が広がることもあります。
フリーランスとして働く
システムエンジニアとしてある程度実務経験を積んでから、フリーランスとして働くケースも増えています。以前勤めていた会社から仕事を請け負ったり、、企業とのマッチングを行うス円サービスを利用したり、案件の受注方法は人それぞれです。
フリーランスのエンジニアとなるためには、社外の人と積極的に付き合い、メンターを見つけたり、セミナーなどに積極的に参加したりして、人脈を広げる努力が必要です。
システムエンジニアの将来性と年収
システムエンジニアは、初級レベルから技能と知識を積み重ね、中級、上級とレベルが上がっていきます。その後、管理系やアーキテクト系にキャリアアップしたり、ネットワークシステムのスペシャリストのように特定の分野、あるいは財務・会計などの応用分野に特化したエキスパートに成長したりしていきます。
SE(システムエンジニア)の平均年収
経済産業省の調査によると、システムエンジニア・プログラマーの平均年収は、開発するシステムやソフトウェアの種類によって異なります。
顧客向けシステムの開発・実装を行うシステムエンジニア・プログラマーの平均年収は、593万円、組込みソフトウェアの開発・実装を行うシステムエンジニア・プログラマーの平均年収は603.9万円となっています。
スキル別でみると、スキル標準(●●●)のレベルが上がるほど給与はアップし、レベル1(新人・初級者レベル)では437.8万円の平均年収が、レベル3(独立して仕事ができる中堅人材レベル)にまで成長すれば、576.0万円までアップするという結果が出ています。さらに、レベル5(国内的に著名なレベル)になれば937.8万円、レベル6/7(国際的に著名なレベル)では、1129.9万円までアップするという結果が出ています。
引用:経済産業省「IT関連産業の給与等に関する実態調査結果」
https://www.meti.go.jp/press/2017/08/20170821001/20170821001-1.pdf
SE(システムエンジニア)の将来性
ひとくちにシステムエンジニアといっても、実際には情報システムエンジニアやフィールドエンジニア、ネットワークシステムエンジニア、クラウドエンジニアなど、さまざまな職種があります。
大半はSE・プログラマーとしてキャリアをスタートした後、キャリアアップにより、管理系やアーキテクト系に職種が変わり、それに伴い年収もアップしていきます。
キャリアアップしていくためには、最新の技術だけでなく市場を中心としたマーケティング手法を学び、日々の仕事の中で実践しく努力も必要になります。
自分自身の付加価値を高めることが、システムエンジニアの将来の選択肢を広げることになります。
SE(システムエンジニア)になるには
システムエンジニアは、プログラマーからキャリアアップするケースや、システム管理者からの転身するケースなども多く、そういう意味では門戸の広い職種といえます。
文系からSE(システムエンジニア)を目指す
システムエンジニアというと「理系」というイメージが強いと思いますが、文系からシステムエンジニアを目指すことも十分可能です。
それに、システムエンジニアは文章を書く作業が求められることが多々あります。たとえば業務運用マニュアルはユーザー部門の担当者、プログラム設計書はプログラマー、プロジェクトの進捗報告書は、顧客など、各文書を読者に合わせて作成する必要があります。「文章を書くのが好き」という文系の人には、むしろ向いている仕事であるといえるかもしれません。
未経験からSE(システムエンジニア)を目指す
システムエンジニアの仕事は、学歴不問です。未経験歓迎としている企業も数多く、入社してからの努力次第で十分カバーできる職種です。
未経験からプログラマーとして経験を積み実務量をこなしていけば、その経験の量が知識やスキルとなり、いずれは質に転換していきます。
ただ、全くの未経験からいきなりプログラマーになりたいと言っても難しいことも多く、独学でプログラミングを学んでいるなどのアピールは必要となるでしょう。
資格取得の勉強を通してスキルを身につける
ITに関連する資格は数多くありますが、資格は何の役にも立たないという人もいます。確かに資格取得のために学んだ知識がそのまま実務に生かせるという保証はありませんが、資格を取得するために行なった勉強は、確実に自分が成長するための糧となります。
また、システムエンジニアとして転職活動をする際には、評価指標として資格を取り入れていることもあります。やみくもに資格を取得すればよいというわけではありませんが、自分の目標を決めたら、その目標を達成するために身につけなければならない知識を明確にし、その目標に合った資格を選んでスキルを身につけることが大切です。
SE(システムエンジニア)のキャリアパス
管理職に就きたいのか、現場で指揮を執りたいのか、金融系のシステムエンジニアになるのか、製造系のシステムエンジニアになるのかなど、やりたい仕事や業種を明確にすれば、身につけるべき知識も明確になります。
自分のキャリアパスを考えるうえで、おすすめなのは、将来のキャリアターゲットを見つけることです。キャリアターゲットとは、「将来自分がこんな人になりたい」と思える目標となる人のことです。
キャリアターゲットが決まったら、キャリアの方向性が決まります。キャリアの選択肢をむやみに広げても、すべてを極めるのは簡単ではありません。自分の特性を自覚してキャリアターゲットを探し、目指すべきキャリアをイメージしましょう。
ネットワークエンジニア
ネットワークシステムを設計、構築するエンジニアを根とワークエンジニアといいます。上級者になると全体のアーキテクチャを担当する「ネットワークアーキテクト」となります。通信料の統計から将来の拡張計画まで構想し、計画を立案したり、予算を獲得したりなど、管理レベルのタスクが主な業務となります。
キャリアパスは、大学でネットワーク選考から初級でスタートすることもありますが、システムエンジニアからネットワーク系を極めてから進むというパターンが一般的です。他にも、ネットワーク管理者やネットワーク系技術営業から転身するケースもあります。
クラウドエンジニア
クラウドエンジニアとは、クラウドサービス会社や自前でクラウドを構築する会社のエンジニアです。開発管理システムを設計、開発、構築するという意味ではシステムエンジニアの仕事内容と同じです。ただ、GoやNodeのような最新のプログラミングに対応できることが望まれることもあります。現在は、クラウド技術を駆使するエンジニアはあまりいないので、需要も高くなっています。
CAEエンジニア
CAEエンジニアとは、Computer Aided Engineeringの略で、コンピュータで部品や製品の工学的な解析を行うエンジニアです。たとえば、橋を設計するうえでどの素材を使うとどこにどのように力がかかるのか、どこが折れやすくなるのかを解析するのもCAEの応用範囲です。
CAEソフトウェアが対象とする分野の知識が必要なほか、熱伝導率や強度など、