三つの心構えをしっかり持つとともに、SEの基本となるスキルも伸ばしていく必要がある。SEの基礎力には、「設計力」「要件定義力」「コミュニケーション力」の三つがある。

 設計力は、複雑な業務や要件をモデル化して定義する「モデリングスキル」、それをシステムとして実現していく「実装スキル」などから構成される(図6)。

図6●設計力にはモデリングスキルや実装スキルが必要
図6●設計力にはモデリングスキルや実装スキルが必要
[画像のクリックで拡大表示]

 モデリングスキルは、ユーザーの複雑な業務や要件を、整理してモデルとして描くスキルだ。このスキルを身に付けるには、モデルの表記方法やアプリケーション、ネットワークなどの要素技術の理解はもちろん、何より業務の理解が必要である。

 実装スキルは、抽象的に描かれたモデルを、動作するシステムへと落とし込み実現化するスキルだ。システムの構造化の技法はもちろん、各種フレームワークやライブラリの技術的な制約、システムを構成する機器の構成や設定、テスト、デプロイメントなど、幅広い技術を網羅的に習得していなければ、システムとして実装できない。

 設計力を身に付けるには、プログラミング力もあったほうがよい。SEの中には、「プログラミングは設計書通りにソースコードを書くだけの仕事だから、できなくてもよい」と考えている人がいるかもしれない。それは誤りだ。プログラミングの中で行われる、処理の構造化、アルゴリズムの作成、変数や処理への名前付けなどは、設計そのものである。こうしたスキルは、たとえプログラミングをしない立場であっても必要であり、プログラミングを経験しないと習得は難しい。

 また、ハードウエアを含めプラットフォームが動く仕組みも理解できていることが望ましい。どんなに抽象化されても、ITシステムは何かしらのハードウエアの上で動作しており、トラブルが発生したときには、下位レイヤーの知識が解決の手がかりとなる。

問題を見抜き解決策を提示する

 二つめの要件定義力は、ユーザーのニーズを聞き出す「質問スキル」や、ユーザーの抱える問題の本質を見抜く「問題定義スキル」、整理して解決方法(ソリューション)として提示する「問題解決スキル」などから構成される(図7)。

図7●要件定義力には質問スキルや問題解決スキルなどが必要
図7●要件定義力には質問スキルや問題解決スキルなどが必要
[画像のクリックで拡大表示]

 ユーザーのニーズを吸い上げることは、SEの重要な役割である。なぜなら、何が本当に欲しいのかを理解し、それを他人に分かるように説明するのは、難しいからだ。一流のSEは、そうしたユーザーの「本物のニーズは何か」を自身の業務知識や経験を総動員して導き出す質問スキルを身に付けている。

 また、SEはともすれば自分の持つ技術の押し売りをしてしまうことがある。例えば、あるパッケージ製品の経験が深い技術者は、それをどう活用できるかに注意が向きがちである。しかし、「パッケージを使うこと」がユーザーの問題を解決するとは限らない。一流のSEは、ユーザーや現場がやりたいことにソリューションを見いだす。まず、ユーザーの抱えている問題を構造化し、問題の本質を整理する。そして、問題の解決策をソリューションという形で提示するのである。

 そもそもなぜ、要件定義力が重要なのだろうか。それは、我々が構築するITシステムが、大量に同じものを作る民生品の生産とは異なり、毎回作るものが異なる「一品モノ」だからだ。業務アプリケーションは企業の中でしか位置付けが決まらない。企業規模や製品、業界でのポジション、トップの考え方、ビジネス文化により業務は異なるからである。

 しかも、先に述べたように、現在は合理化・省力化を目的とした「型にはまった」システムは不要であり、これからは経営に寄与するような独創的で戦略的なITシステムが求められている。そのため、システムに求められる機能や性能は千差万別であり、作るために必要な時間、人数、スキルセットも全く異なる。すなわち、「何を作らなければならないのか」の定義を間違えてしまうと、ITシステムの構築は必ず失敗する。