SE、即ちシステムエンジニア(System Engineer)と言う言葉の響きは、どことなくカッコ良く感じられます。本人はまだまだ駆け出しひよっこのつもりでも、世間一般にはSE=コンピュータのプロフェッショナルを連想します。パソコンの疎い人には何となく尊敬のまなざしで見られることもあるわけです。
『 自分がコンピュータのプロフェッショナルなんて、とんでもない!』 と思っている方も少なくないかもしれません。でも、最初は誰でも初心者です。
この際、SEの定義を正しく理解して "出来る技術者" に一歩近づきましょう。まずは意識改革からです。10年後の売れっ子スーパーSEを夢見て、少しづつ若い今から身につけましょう。
この業界は技術革新が激しくて、自分の技術がいつまで通用するのか不安になりがちです。正直に言えば筆者もその一人でした。「でした」と過去形にしたのは、立場的に技術者と言うより経営の方に重点を置くようになったためです。
本当に、この技術の移り変わりの激しさは半端ではありません。でも決して落胆する必要はないようです。例え売れっ子スーパーSEの方でも、「果たして、自分はいつまでこの仕事を続けられるか?」と不安を抱くと言われています。 ましてや私を含めた普通の技術者であれば、日々そんな気持ちになっても少しも不思議ではありません。焦らず少しづつ前進していきましょう。 かと言って、あまりゆっくり前進していると技術の進歩に置いていかれますぞ。
まずは、とにかくコンピュータに関する基本を押さえましょう。 プログラム言語の一つは完全マスターしたいところです。『 SEにプログラム言語の経験はなくても構わない 』と言う意見も聞きます。 確かに一理あります。
しかし、個人的にシステムを正しく理解するには、やはり若い頃にプログラム言語の一つは完全マスターしてコンピュータの動きを把握しておくべきです。 このプログラム経験が必ず役に立つ時がきます。
業務系SEであるなら経理の知識は必要です。とかく技術者は経理事務を毛嫌いするものですが、簿記の基礎は理解しておきたいものです。何故なら、企業活動って儲かってナンボの世界ですから、上級SEを目指すなら経理知識は必須です。最低でも簿記3級の知識は欲しいかな。
コンサルタントまで目指すのであれば、経理だけでなく財務に関する広い知識も視野に入れておかなければいけません。
私は偉そうに語れる高い知識はありませんが、今迄の経験論を踏まえて「 あの時はこうすべきだった 」の反省論を含めて記述することは出来ます。きっと反省論ばかりになるかもしれませんが。
それでは、これから登場するSEをとりまく人たちを図にしてみましょう。
システムを分析設計して、製造、テストを行いシステムを完成まで導く人です。
規模や形態によっては、SEが直接プログラミングやテストそのものに携わらない場合も少なくありませんが、全ての工程においてシステムを完成まで導く役割を担います。単にシステムを完成に導くだけでなく、システム提案・コンサルティング・システムマネジメントなど総合的な役割が期待されます。
ここで、情報処理技術者試験のサイトのテクニカルエンジニアの定義(注)を見てみましょう。情報処理技術者試験のサイトの定義に合わせて考えるなら、SEと呼べるものには、次の3つが考えられます。
情報処理技術者試験のサイトを読めば分かることですが、どうやらシステムアナリスト・プロジェクトマネージャは、次のステップとして考えた方がよさそうです。ちょっとサイトのアプリケーションエンジニアの定義をそのまま引用してみます。
(注) 情報処理技術者試験の定義は頻繁に変わっています。記事内容と変わっている可能性は十分にあります。コロコロ変わる制度は本当に良くないことだと思います。
これらは言うは易しですが、実行するとなると何年もの実務経験が必要となってきます。
改めて読んでみると、まさにシステムエンジニアとは業務分析・システム設計は勿論のこと、システム提案・コンサルティング・システムマネジメントなど総合的な役割がこなせる人になるようです。
対応すべき範囲は非常に広いので、当然SEによって得意分野や専門分野があります。証券システムを携わってきたSEと建設業や製造業のシステムを携わってきたSEを単純に比較することは出来ません。
そうであっても一つだけ言えることは、システム構築におけるSEとして行うべき作業はどれも一緒となります。
この機会に、情報処理技術者試験のサイトのシステムアナリストとプロジェクトマネージャの定義も引用します。
情報システム開発プロジェクトの責任者として、プロジェクト計画の作成、要員などプロジェクト遂行に必要な資源の調達、プロジェクト体制の確立及び予算・納期・品質などの管理を行い、プロジェクトを円滑に運営する者。
経営戦略に基づく情報戦略の立案、システム化全体計画及び個別システム化計画の策定を行うとともに、計画立案者の立場から情報システム開発プロジェクトを支援し、その結果を評価する者。
定義を読んで分かるように、これらはSEと同じか、もしくは更に上流を担当する人と判断出来そうです。
しかし、このレベルになると「どちらの作業が上位に属するのか?」などと論議することは、もはや意味がありません。
いずれ上級SEになれば、多かれ少なかれこれらに近い仕事をするものです。即ち、プロジェクトマネージャはSEの経験がなければ務まらないでしょう。同様にシステムアナリストもSEの経験がなければ厳しいでしょう。
プログラマーは文字通り設計書を基にプログラミング作業を行う人を指します。
システムに開発おいて、外部設計書を基に内部設計書・プログラム設計書を作成し、プログラミングを行い、単体テスト、結合テストまでの一連のプロセスを担当 します。但し最近は、この工程に従わない開発手法(プロセスモデル)も少なくありません。むしろその方が多くなりつつあるようです。
プログラミングするには、その開発言語を熟知しなければいけません。システム開発を行うに当たって対象となる言語は1種類だけとは限りません。主たる開発言語の他、場合によってはもう複数の言語、簡易言語や各種ツールを利用して開発するのが一般的です。
昨今のシステムの殆どは、ネットワークとデータベースと密接な連携を必要とします。必然的にネットワークとデータベースの基礎知識は必要です。高度な知識はここでは必要としません。
開発言語を自由に操作しネットワークとデータベースが使いこなせる人であれば、大抵はコンピュータに関する深い知識を持っているものです。そして、そんな優秀なプログラマーの多くは、規模の大小は別として、それなりにシステム設計ができるものです。即ち、プログラマーからSEにステップアップすることが可能となります。
私が思うには、このソフトウェア業界におけるプログラマーは、どうも正当に評価されていない気がしてなりません。どうしてもプログラマーがSEより2つも3つも格下に見られている気がしてならないのです。
何故こんな印象を受けるのかと言うと、その類のプログラマーがあまりに多いからです。これは、駆け出しのプログラマーをあたかもキャリアを積んだプログラ マーとして送り出してきた企業に問題があったと思います。これでは頼りないプログラマーを送り込まれた企業も困ってしまいます。自然と業界におけるプログ ラマの評価が下がったのは、こんなことが影響していると私は思います。
但し、最近はシステムを依頼する企業の目も厳しくなり、この手の話しがめっきり少なくなりました。
個人的意見ですが、最初からプログラミング技術だけで勝負する、例えばゲーム業界のプログラマーの方が確固たる信念と技術があるように感じられます。
システムエンジニアと同様なポジションにテクニカルエンジニアがあります。このエンジニアは、ある特定範囲の技術を深く持つ技術者を指します。「 システムエンジニアと何が違うの?」と感じるかもしれませんが、根本的に意味合いが異なります。
再び、情報処理技術者試験のサイトのテクニカルエンジニアの定義を見てみましょう。下記の4つが定義されています。
それでは、情報処理技術者試験のサイトのデータベースエンジニアの定義を引用してみましょう。
この内容で理解できることは、データベースに関する総合的なスキルを要求しています。
試験に受かればこれだけの技術が保有している指標になる訳ですね。まあ、言うは易いですが。 さきほど述べた、システムエンジニアと根本的に異なる部分がこの特定分野の技術なのです。
データベースエンジニアはデータベースに関する深い知識が必要です。
しかし、SEが本来兼ね備うべき業務分析・システム設計(ここでは業務システム)、システム提案・コンサルティング・システムマネジメントなどを要求していません。
ここが大きな相違点ですね。
ネットワークエンジニアとは、文字通りネットワークに関する分析設計から運用管理まで行える人を指します。
同様に、情報処理技術者試験のサイトのネットワークエンジニアの期待する技術水準を引用してみましょう。
システム管理は、システムの管理・障害・セキュリティ・移行・運用管理などシステム全般を行える人を指します。
同様に、情報処理技術者試験のサイトのシステム管理エンジニアの期待する技術水準を引用してみましょう。
情報処理技術者試験のエンベデッドシステムは、旧マイコン応用システムエンジニアを見直し発展させたものです。(ちょっと時代が古いかな)
同様に、情報処理技術者試験のサイトのエンベデッドシステムエンジニアの期待する技術水準を引用してみましょう。
さて、この他のエンジニアについてもご紹介しましょう。
これらはシステム開発において直接関係のないエンジニアに思われがちですが、決して無関係ではありません。それぞれの定義を知っておいても損はないでしょう。
単にエンジニアの知識を持った営業職を指す場合も多いのですが、通常は営業と技術を兼ね備えた人を指します。
営業と技術のどちらかに分けろと言われれば、営業になるでしょう。
どんな業界でも技術的な知識もなく顧客に提案は出来ません。
特にこの業界の場合は、技術が語れなければ提案もままなりません。
即ち、システム開発専門の技術者とは別に顧客に技術を説明できる営業が必要になります。
情報収集、カウンセリング、プロモーション、場合にはプレゼンテーションを行い、顧客との各種交渉を行います。
但し、これらは企業によって、活動内容にかなりの格差があります。
システム構築に伴う、システム機器の設置から設定保守・修理を行います。
主に自社内で作業するのではなく、客先で保守・修理作業を行います。客先に出向くことが多いのでフィールドエンジニアと呼ばれる訳ですね。このほかにもサービスエンジニアやカスタマーエンジニア、カスタマーサービスエンジニアと称されることもあります。
通信機器のメーカーであれば、ハードウェアの設置から機器の点検、修理を行い、通信障害が発生したら原因箇所を調査し復旧作業まで対応します。昨今のシステムは、さまざまなハードとソフトが組み合わされてシステムが構成されています。このため、障害が発生した場合の原因特定が難しく、専門的な知識を 持つフィールドエンジニアの存在は欠かせないものとなっています。
フィールドエンジニアは前述した、通信機器メーカーをはじめ医療機器メーカーなど、より専門的なフィールドを扱う場合が多いようです。これに対して、この業界のより狭い定義で考えれば、サービスエンジニアはパソコンのソフト・ハードに関する全般的な知識を持つ技術者を指し、システム機器の設置・設定・保守・修理を主な作業とするようです。カスタマーエンジニア はサービスエンジニアと同義で、まさに顧客先に出向いて保守作業をすることが多いが故にカスタマーエンジニアと称されるようです。
結局、これら定義は企業によって曖昧に使用されているため、フィールドエンジニア、サービスエンジニア、カスタマーエンジニアはどれも同じと意味と考えて良いかと思います。明確な違いはありません。
当業界に関して言えば、導入したソフトウェアの技術的な対応を行う顧客サポートを指します。
昨今のコンピュータはソフトウェアの使い方を含めて非常に複雑になっているため、使い方そのものも簡単に分からない場合が少なくありません。これら問い合 わせの窓口となるヘルプデスク、ユーザーサポート、カスタマーサポートを始め、技術的な問い合わせ窓口となるテクニカルサポートなど呼び方はさまざまで すが、どれも同じような作業を行います。
一般的に最初は、ヘルプデスクと称して優しい声の女性が窓口対応を行うようですね。質問内容が簡単であればそれで済むのですが、技術的な込み入った内容になるとテクニカルサポートの担当者に代わるケースが多いようです。
但し、ヘルプデスク、ユーザーサポート、カスタマーサポート、テクニカルサポートが今まで紹介してきたエンジニアと同じようなエンジニアと呼べるかどうかは微妙なところです。
パソコンを購入した時のソフトウェアやインターネットの使い方に関する質問をされたことがあれば、ヘルプデスクなどの仕事内容は理解出来ると思います。
サポートエンジニアと称しても、企業によっては障害時に原因を調査して復旧まで対応する専門的な部隊もあります。やはり、企業によってまちまちなので、これらの定義を一つに決めつけないようにして下さい。
この他、システム運用を各種行うオペレータも忘れてはいけません。
以上、いろいろなエンジニアを挙げてきました。
SEはセールスエンジニア、テクニカルエンジニア、プログラマーなどと密に連携を取ってシステム構築を行います。
テクニカルエンジニアであるデータベースエンジニアやネットワークエンジニアに専門部分を任せるにしても、全体のシステム構築の全工程を掌握する開発の要となる人物です。
前述したようにシステム分析・設計以外に、システム提案、コンサルティング、マネジメント、コスト管理など総合的な知識と経験が必要です。
プログラマーに設計仕様を渡すにもそれに関する知識が必要です。セールスエンジニアと顧客獲得のため同行し営業まがいの交渉を行うことも無いとは言えません。
SEはシステム開発における中心となる技術者なのです。
かなり大袈裟な表現になってしまいましたが、言わんとする内容は理解して頂けると思います。
お疲れ様でした。(読むほうも大変だけど、書く方も大変だったのだ)