はじめに
はじめに

SE、即ちシステムエンジニア(System Engineer)と言う言葉の響きは、どことなくカッコ良く感じられます。本人はまだまだ駆け出しひよっこのつもりでも、世間一般にはSE=コンピュータのプロフェッショナルを連想します。パソコンの疎い人には何となく尊敬のまなざしで見られることもあるわけです。
『 自分がコンピュータのプロフェッショナルなんて、とんでもない!』 と思っている方も少なくないかもしれません。でも、最初は誰でも初心者です。

この際、SEの定義を正しく理解して "出来る技術者" に一歩近づきましょう。まずは意識改革からです。10年後の売れっ子スーパーSEを夢見て、少しづつ若い今から身につけましょう。

システムエンジニアになるためには
システムエンジニアになるためには

この業界は技術革新が激しくて、自分の技術がいつまで通用するのか不安になりがちです。正直に言えば筆者もその一人でした。「でした」と過去形にしたのは、立場的に技術者と言うより経営の方に重点を置くようになったためです。

本当に、この技術の移り変わりの激しさは半端ではありません。でも決して落胆する必要はないようです。例え売れっ子スーパーSEの方でも、「果たして、自分はいつまでこの仕事を続けられるか?」と不安を抱くと言われています。 ましてや私を含めた普通の技術者であれば、日々そんな気持ちになっても少しも不思議ではありません。焦らず少しづつ前進していきましょう。 かと言って、あまりゆっくり前進していると技術の進歩に置いていかれますぞ。

まずは、とにかくコンピュータに関する基本を押さえましょう。 プログラム言語の一つは完全マスターしたいところです。『 SEにプログラム経験は必要ない 』と言う意見も聞きます。 確かに一理あります。
しかし、個人的にシステムを正しく理解するには、やはり若い頃にプログラム言語の一つは完全マスターしてコンピュータの動きを把握しておくべきです。 このプログラム経験が必ず役に立つ時がきます。

業務系SEであるなら経理の知識は必要です。とかく技術者は経理事務を毛嫌いするものですが、簿記の基礎は理解しておきたいものです。何故なら、企業活動って儲かってナンボの世界ですから、上級SEを目指すなら経理知識は必須です。最低でも簿記3級の知識は欲しいかな。
コンサルタントまで目指すのであれば、経理だけでなく財務に関する広い知識も視野に入れておかなければいけません。

私は偉そうに語れる高い知識はありませんが、今迄の経験論を踏まえて「 あの時はこうすべきだった 」の反省論を含めて記述することは出来ます。きっと反省論ばかりになるかもしれませんが。

それでは、これから登場するSEをとりまく人たちを図にしてみましょう。

システムエンジニアとは
システムエンジニアとは

システムを分析設計して、製造、テストを行いシステムを完成まで導く人です。

規模や形態によっては、SEが直接プログラミングやテストそのものに携わらない場合も少なくありませんが、全ての工程においてシステムを完成まで導く役割を担います。単にシステムを完成に導くだけでなく、システム提案・コンサルティング・システムマネジメントなど総合的な役割が期待されます。

ここで、情報処理技術者試験のサイトのテクニカルエンジニアの定義(注)を見てみましょう。情報処理技術者試験のサイトの定義に合わせて考えるなら、SEと呼べるものには、次の3つが考えられます。

  • ・システムアナリスト
  • ・プロジェクトマネージャ
  • ・アプリケーションエンジニア

情報処理技術者試験のサイトを読めば分かることですが、どうやらシステムアナリスト・プロジェクトマネージャは、次のステップとして考えた方がよさそうです。ちょっとサイトのアプリケーションエンジニアの定義をそのまま引用してみます。

(注) 情報処理技術者試験の定義は頻繁に変わっています。記事内容と変わっている可能性は十分にあります。コロコロ変わる制度は本当に良くないことだと思います。


【アプリケーションエンジニア】 Application Systems Enginee

対象者像:
情報システム開発プロジェクトにおいて、プロジェクト計画に基づいて、業務要件分析からシステム設計、プログラム開発、テストまでの一連のプロセスを担当する者。
役割と業務:
情報システム開発プロジェクトにおいて、業務要件を分析し、システムとして実現する業務に従事し、次の役割を果たす。
  • 利用者側の業務要件を分析し、要求仕様をまとめる。
  • 要求仕様に基づいて、新規開発・パッケージ導入などのシステム実現方法、システム構成、システム移行・運用などについて検討し、システム設計を行う。
  • プログラム開発要員を指導して、プログラム開発を実施させる。
  • 総合テストを計画し、実施する。また、システム移行及び運用テストを支援する。
  • 個別のハードウェア技術、ソフトウェア技術、ネットワーク構成、データベース構成、システム運用などについては、必要に応じて専門家の支援を受ける。
期待する技術水準:
情報システム開発の中核技術者として業務要件を分析し、システムとして実現するため、次の幅広い知識・経験・実践能力が要求される。
  • 経理、生産管理などの業務知識を有し、利用者側の業務要件を分析し、要求仕様書を作成できる。
  • 新規開発、パッケージ導入などのシステム実現方法の評価・選択ができる。
  • ハードウェア、ソフトウェア、ネットワーク、データベースなど情報技術に関する全般的な知識を有し、必要に応じて特定分野の情報技術の専門家から支援を受け、要求仕様に合った情報システムが設計できる。
  • 要求仕様書に基づいて、標準的な記法によって、外部設計書・内部設計書を作成できる。
  • プログラム開発、単体・結合テストに際し、プログラム開発要員を指導できる。
  • 総合テストの計画と管理が行え、また、システム移行及び運用テストで利用者側の要員を支援できる。
  • 計画された品質・工程の実行管理ができる。

これらは言うは易しですが、実行するとなると何年もの実務経験が必要となってきます。

改めて読んでみると、まさにシステムエンジニアとは業務分析・システム設計は勿論のこと、システム提案・コンサルティング・システムマネジメントなど総合的な役割がこなせる人になるようです。
対応すべき範囲は非常に広いので、当然SEによって得意分野や専門分野があります。証券システムを携わってきたSEと建設業や製造業のシステムを携わってきたSEを単純に比較することは出来ません。

そうであっても一つだけ言えることは、システム構築におけるSEとして行うべき作業はどれも一緒となります。

プロジェクトマネージャとシステムアナリストとは
プロジェクトマネージャとシステムアナリストとは

この機会に、情報処理技術者試験のサイトのシステムアナリストとプロジェクトマネージャの定義も引用します。


【プロジェクトマネージャ】 Project Manager

情報システム開発プロジェクトの責任者として、プロジェクト計画の作成、要員などプロジェクト遂行に必要な資源の調達、プロジェクト体制の確立及び予算・納期・品質などの管理を行い、プロジェクトを円滑に運営する者。


【システムアナリスト】 Systems Analyst

経営戦略に基づく情報戦略の立案、システム化全体計画及び個別システム化計画の策定を行うとともに、計画立案者の立場から情報システム開発プロジェクトを支援し、その結果を評価する者。


定義を読んで分かるように、これらはSEと同じか、もしくは更に上流を担当する人と判断出来そうです。
しかし、このレベルになると「どちらの作業が上位に属するのか?」などと論議することは、もはや意味がありません。

いずれ上級SEになれば、多かれ少なかれこれらに近い仕事をするものです。即ち、プロジェクトマネージャはSEの経験がなければ務まらないでしょう。同様にシステムアナリストもSEの経験がなければ厳しいでしょう。

プログラマーとは
プログラマーとは

プログラマーは文字通り設計書を基にプログラミング作業を行う人を指します。

システムに開発おいて、外部設計書を基に内部設計書・プログラム設計書を作成し、プログラミングを行い、単体テスト、結合テストまでの一連のプロセスを担当 します。但し最近は、この工程に従わない開発手法(プロセスモデル)も少なくありません。むしろその方が多くなりつつあるようです。

プログラミングするには、その開発言語を熟知しなければいけません。システム開発を行うに当たって対象となる言語は1種類だけとは限りません。主たる開発言語の他、場合によってはもう複数の言語、簡易言語や各種ツールを利用して開発するのが一般的です。

昨今のシステムの殆どは、ネットワークとデータベースと密接な連携を必要とします。必然的にネットワークとデータベースの基礎知識は必要です。高度な知識はここでは必要としません。
開発言語を自由に操作しネットワークとデータベースが使いこなせる人であれば、大抵はコンピュータに関する深い知識を持っているものです。そして、そんな優秀なプログラマーの多くは、規模の大小は別として、それなりにシステム設計ができるものです。即ち、プログラマーからSEにステップアップすることが可能となります。

私が思うには、このソフトウェア業界におけるプログラマーは、どうも正当に評価されていない気がしてなりません。どうしてもプログラマーがSEより2つも3つも格下に見られている気がしてならないのです。
何故こんな印象を受けるのかと言うと、その類のプログラマーがあまりに多いからです。これは、駆け出しのプログラマーをあたかもキャリアを積んだプログラ マーとして送り出してきた企業に問題があったと思います。これでは頼りないプログラマーを送り込まれた企業も困ってしまいます。自然と業界におけるプログ ラマの評価が下がったのは、こんなことが影響していると私は思います。
但し、最近はシステムを依頼する企業の目も厳しくなり、この手の話しがめっきり少なくなりました。

個人的意見ですが、最初からプログラミング技術だけで勝負する、例えばゲーム業界のプログラマーの方が確固たる信念と技術があるように感じられます。

データベースエンジニアとは
データベースエンジニアとは

システムエンジニアと同様なポジションにテクニカルエンジニアがあります。このエンジニアは、ある特定範囲の技術を深く持つ技術者を指します。「 システムエンジニアと何が違うの?」と感じるかもしれませんが、根本的に意味合いが異なります。
再び、情報処理技術者試験のサイトのテクニカルエンジニアの定義を見てみましょう。下記の4つが定義されています。

  • データベース
  • ネットワーク
  • システム管理
  • エンベデッドシステム

それでは、情報処理技術者試験のサイトのデータベースエンジニアの定義を引用してみましょう。


【データベースエンジニア】 Database Systems Engineer

対象者像:
情報システム基盤(業務システム共有のシステム資源)の構築・運用において中心的役割を果たすとともに、個別の情報システム開発プロジェクトにおいて、固有技術の専門家として開発・導入を支援する者。具体的には、データベースに関する固有技術とする。
役割と業務:
情報資源及びデータベースを計画・設計・構築・運用・管理する業務に従事し、次の役割を果たす。
  • データ管理者として、情報システム全体のデータ資源を管理する。
  • データベース管理者として、基幹データベースの構築と維持を行う。
  • 個別システム開発の各工程(計画・分析・設計・運用・保守)において、データベース関連の技術支援を行う。
期待する技術水準:
基幹業務の効率化と情報活用の高度化の両面において、データベースは重要な役割をもつ。高品質なデータベースを構築・維持するため、次の幅広い知識・経験・実践能力が要求される。
  • 情報資源管理の目的と技法を理解し、データ部品の標準化、リポジトリシステムの設計・構築・運用・保守ができる。
  • データモデル化技法を理解し、ユーザ要求に基づいてデータ分析を行い、正確な概念データモデルを作成できる。
  • データベース管理システムの特性を理解し、高品質な基幹データベース及びデータウェアハウスの設計・構築・運用・保守ができる。

この内容で理解できることは、データベースに関する総合的なスキルを要求しています。
試験に受かればこれだけの技術が保有している指標になる訳ですね。まあ、言うは易いですが。 さきほど述べた、システムエンジニアと根本的に異なる部分がこの特定分野の技術なのです。

データベースエンジニアはデータベースに関する深い知識が必要です。
しかし、SEが本来兼ね備うべき業務分析・システム設計(ここでは業務システム)、システム提案・コンサルティング・システムマネジメントなどを要求していません。
ここが大きな相違点ですね。

ネットワークエンジニアとは
ネットワークエンジニアとは

ネットワークエンジニアとは、文字通りネットワークに関する分析設計から運用管理まで行える人を指します。
同様に、情報処理技術者試験のサイトのネットワークエンジニアの期待する技術水準を引用してみましょう。


期待する技術水準:
ネットワークは情報システム基盤であり、個別のアプリケーションシステムの構成要素ともなる。また、マルチメディアへの展開も含め、ネットワークに要求される機能要件は急速に進展している。そのため、次の幅広い知識・経験・実践能力が要求される。
  • ネットワーク技術・制度の動向を広く見通し、目的に応じて適用可能な技術を選択できる。
  • 企業・組織全体又は個別アプリケーションのネットワークへの要求を的確に理解し、ネットワーク要求仕様を作成できる。
  • 要求仕様に関連するネットワーク設計技法、プロトコル技術、信頼性設計、セキュリティ技術、通信サービス・料金などを選択して、最適な論理設計・物理設計ができる。
  • ネットワーク関連企業(通信事業者、ベンダ、工事業者など)を活用して、ネットワークの効率的な構築・運用ができる。
システム管理エンジニアとエンベデッドエンジニアとは
システム管理エンジニアとエンベデッドエンジニアとは

システム管理は、システムの管理・障害・セキュリティ・移行・運用管理などシステム全般を行える人を指します。
同様に、情報処理技術者試験のサイトのシステム管理エンジニアの期待する技術水準を引用してみましょう。


期待する技術水準:
複雑多様化している情報システムのシステム管理業務に関し、他の専門家と適切に協力しながら、自ら管理技術を適用して総合的にシステム管理を行うため、次の幅広い知識・経験・実践能力が要求される。
  • 情報システム基盤を安全かつ安定的に運用し管理するための知識を有し、ハードウェア、ソフトウェア、ネットワーク、施設・設備などの構成を管理し、システム資源の維持と拡張に対応できる。
  • 稼働システムのサービスレベル・業務処理量・資源・コストを勘案した性能管理を行うとともに、性能評価及び運用評価ができる。
  • 障害の監視・究明・回復・防止に必要な技術を有し、システムの障害管理ができる。
  • 実効性の高いセキュリティ対策を実施するための知識・技能を有し、セキュリティ管理ができる。
  • システムの利用状況を把握し、適切な課金管理ができる。
  • 稼働中及び稼働予定のシステム運用品質の管理水準を設定し、必要な改善ができる。
  • 新規システム受入れに伴う運用テストとシステム移行を計画し、実施できる。
  • システム利用者に対して、システム利用及び運用に関する教育計画を立案し、実施できる。

情報処理技術者試験のエンベデッドシステムは、旧マイコン応用システムエンジニアを見直し発展させたものです。(ちょっと時代が古いかな)
同様に、情報処理技術者試験のサイトのエンベデッドシステムエンジニアの期待する技術水準を引用してみましょう。


期待する技術水準:
要求された性能、品質、信頼性などをソフトウェアとハードウェアの適切な組合せによってエンベデッドシステムとして実現するため、次の幅広い知識・経験・実践能力が要求される。
  • マイクロプロセッサやシステムLSIなどを組み込む立場から、ソフトウェア開発の要求仕様をまとめることができる。
  • 要求仕様書を分析し、ハードウェアとソフトウェアの適切な組合せによって、エンベデッドシステム開発工程の計画及び管理ができる。
  • 機能設計、詳細設計、システムの実現、ハードウェアとソフトウェアを結合した総合テストなどの一連の作業を実施できる。
  • 情報技術及び制御技術などに関する基礎から先端までの知識を有し、要求されたエンベデッドシステムを開発する当該分野の知識を速やかに獲得でき、当該分野の専門家と技術上の打合せができる。

さて、この他のエンジニアについてもご紹介しましょう。
これらはシステム開発において直接関係のないエンジニアに思われがちですが、決して無関係ではありません。それぞれの定義を知っておいても損はないでしょう。

セールスエンジニアとは
セールスエンジニアとは

単にエンジニアの知識を持った営業職を指す場合も多いのですが、通常は営業と技術を兼ね備えた人を指します。

営業と技術のどちらかに分けろと言われれば、営業になるでしょう。

どんな業界でも技術的な知識もなく顧客に提案は出来ません。
特にこの業界の場合は、技術が語れなければ提案もままなりません。
即ち、システム開発専門の技術者とは別に顧客に技術を説明できる営業が必要になります。

情報収集、カウンセリング、プロモーション、場合にはプレゼンテーションを行い、顧客との各種交渉を行います。
但し、これらは企業によって、活動内容にかなりの格差があります。

フィールドエンジニアとは
フィールドエンジニアとは

システム構築に伴う、システム機器の設置から設定保守・修理を行います。
主に自社内で作業するのではなく、客先で保守・修理作業を行います。客先に出向くことが多いのでフィールドエンジニアと呼ばれる訳ですね。このほかにもサービスエンジニアやカスタマーエンジニア、カスタマーサービスエンジニアと称されることもあります。

通信機器のメーカーであれば、ハードウェアの設置から機器の点検、修理を行い、通信障害が発生したら原因箇所を調査し復旧作業まで対応します。昨今のシステムは、さまざまなハードとソフトが組み合わされてシステムが構成されています。このため、障害が発生した場合の原因特定が難しく、専門的な知識を 持つフィールドエンジニアの存在は欠かせないものとなっています。

フィールドエンジニアは前述した、通信機器メーカーをはじめ医療機器メーカーなど、より専門的なフィールドを扱う場合が多いようです。これに対して、この業界のより狭い定義で考えれば、サービスエンジニアはパソコンのソフト・ハードに関する全般的な知識を持つ技術者を指し、システム機器の設置・設定・保守・修理を主な作業とするようです。カスタマーエンジニア はサービスエンジニアと同義で、まさに顧客先に出向いて保守作業をすることが多いが故にカスタマーエンジニアと称されるようです。

結局、これら定義は企業によって曖昧に使用されているため、フィールドエンジニア、サービスエンジニア、カスタマーエンジニアはどれも同じと意味と考えて良いかと思います。明確な違いはありません。

サポートエンジニアとは
サポートエンジニアとは

当業界に関して言えば、導入したソフトウェアの技術的な対応を行う顧客サポートを指します。
昨今のコンピュータはソフトウェアの使い方を含めて非常に複雑になっているため、使い方そのものも簡単に分からない場合が少なくありません。これら問い合 わせの窓口となるヘルプデスク、ユーザーサポート、カスタマーサポートを始め、技術的な問い合わせ窓口となるテクニカルサポートなど呼び方はさまざまで すが、どれも同じような作業を行います。
一般的に最初は、ヘルプデスクと称して優しい声の女性が窓口対応を行うようですね。質問内容が簡単であればそれで済むのですが、技術的な込み入った内容になるとテクニカルサポートの担当者に代わるケースが多いようです。
但し、ヘルプデスク、ユーザーサポート、カスタマーサポート、テクニカルサポートが今まで紹介してきたエンジニアと同じようなエンジニアと呼べるかどうかは微妙なところです。

パソコンを購入した時のソフトウェアやインターネットの使い方に関する質問をされたことがあれば、ヘルプデスクなどの仕事内容は理解出来ると思います。
サポートエンジニアと称しても、企業によっては障害時に原因を調査して復旧まで対応する専門的な部隊もあります。やはり、企業によってまちまちなので、これらの定義を一つに決めつけないようにして下さい。
この他、システム運用を各種行うオペレータも忘れてはいけません。

結論 再びシステムエンジニアとは
結論 再びシステムエンジニアとは

以上、いろいろなエンジニアを挙げてきました。
SEはセールスエンジニア、テクニカルエンジニア、プログラマーなどと密に連携を取ってシステム構築を行います。
テクニカルエンジニアであるデータベースエンジニアやネットワークエンジニアに専門部分を任せるにしても、全体のシステム構築の全工程を掌握する開発の要となる人物です。
前述したようにシステム分析・設計以外に、システム提案、コンサルティング、マネジメント、コスト管理など総合的な知識と経験が必要です。

プログラマーに設計仕様を渡すにもそれに関する知識が必要です。セールスエンジニアと顧客獲得のため同行し営業まがいの交渉を行うことも無いとは言えません。
SEはシステム開発における中心となる技術者なのです。
かなり大袈裟な表現になってしまいましたが、言わんとする内容は理解して頂けると思います。
お疲れ様でした。(読むほうも大変だけど、書く方も大変だったのだ)