川村渇真の「知性の泉」

幅広いスキルアップに必要な経験とは


異なる3職場を経験すると幅広い能力が身に付きやすい

 本格的なシステム開発を理解している人なら分かると思うが、システム開発には幅広い能力が要求される。きちんとしたプログラミング能力はもちろん、データベースやネットワークなどの専門知識だけでなく、システムの内部構造、エラー処理、ユーザーインターフェース、運用などに関する設計術が必要だ。さらには、プロジェクト管理、ニーズ分析、レビューやテスト技法、仕様書の書き方に加え、システム化の対象となる分野の知識も持っていなければならない。以上のような専門分野の能力に加えて、より一般的なコミュニケーションやプレゼンテーションなどの能力も求められる。
 ざっと挙げてみただけでも、非常に多くの能力が含まれるのが分かるだろう。では、以上のような能力を、どのようにして身に付ければよいのだろうか。本を読んで勉強するだけで身に付くのだろうか。そうでないとしたら、どのような経験をすればよいのだろうか。この疑問を解消する意味で、このような幅広い能力の習得方法について、ざっとまとめてみた。
 なお、主な対象となるのは、企業などで幅広く利用される情報システムである。組み込みのようなシステムでは、経験すべき組織や中身も違ってくる。情報システム以外では、ここでの説明を参考にして求めてみればよいだろう。
 対象が情報システムの構築だと、3つの職場を経験するのが有効である。経験の順序も重要なので、その順に並べると、企業の情報システム部門、ソフトウェア開発会社、システム・コンサルティング会社となる。こられで何を習得すべき、順番に解説しよう。

情報システム部門で稼働現場や保守を学ぶ

 システム開発の中でも一番難しいのは、人間の関わる部分が多いシステムである。人間が行っていた作業をシステム化すると、様々な例外をサポートしなければならないし、時間とともに変換する業務内容にも対応する必要がある。運用と保守が重要で、システムを使える状態に保つことの難しさを感じさせる。また、実際のユーザーと打合せしながらニーズを分析し、現実にシステムを構築した後で、その使われ方を見る機会も必要だ。
 こうした経験ができる良い場所は、企業の情報システム部門である。あまり小さいと本格的な開発を行わないので、ある程度以上の規模が必須となる。また、その部門のレベルが低すぎると、貴重な経験とならない可能性が高い。加えて、プログラミングなどの製作工程をすべて外注化していると、実装レベルの能力が身に付かない(一部の外注化ならよい)。その意味で、“レベルが高く”て“開発の全行程を自分で行える”情報システム部門に限られる。そうした部門に入ると、以下のようなことが経験できる。

企業の情報システム部門で経験できること(本論編)
・システム開発の頭からオシリまで見れる
・既存システムの運用(上手な運用に必要な視点)
・既存システムの改良(システム改良の大変さ)
・システムの利用状況を見れる
・ユーザーのニーズを調べて、システムに反映する
・数多くの要望の中から、本当に必要なものを選ぶ
・システムの効果やコストを常に意識する

 このように、単に作って終わるだけでなく、作った後でどのように使われるのか、システム部門がどのように運用するのかまで見れる。また、ユーザーの要望を聞きながら、本当のニーズを分析する作業も体験できる。システム開発の頭からオシリまで経験できるわけだ。
 システム開発では、そのシステムが実際に稼働して使われる状況までイメージできると、設計の質が格段に向上する。考慮する視点がかなり多くなって、運用しやすく使いやすいシステムに仕上がる可能性が高まるからだ。その意味で、絶対に経験すべき部門である。
 実際に試してみると、ユーザーに関する以下のような面白い点も分かる。全ユーザーに当てはまるわけではないが、一部の項目に該当する人はかなり多い。これも貴重な経験となり、システム設計に役立つはずだ。

企業の情報システム部門で経験できること(問題編)
・矛盾したり実現不可能な要望を出す
・思い付きで要望を出すため、その内容がコロコロ変わる
・本当のコストを考えず、効果だけしか頭にない
・自分の部門または部署の利益しか考えてない
・業務上の例外をほとんど考えていない
・(以下は省略)

 システム的な思考を持っていない人は、自分の意見が矛盾するかどうか細かくはチェックしない。また、自分の部門の利益だけ考えたり、目先の仕事が楽になることだけを重視する。こういった要望を適切に評価し、組織全体として重要なものだけに対処する能力も身に付けなければならない。
 情報システム部門の経験では、その部門の質が非常に重要である。質の高い組織は少ないので、十分に注意しながら選ぶことが大切だ。企業の本業が優れているからといって、情報システムも質が高いとは限らない点が、選択を難しくしている。
 現時点での1つの評価基準としては、部門としてプロセス改善に取り組んでいるかが役立つと思う。プロセス改善の道具となるCMM(Capability Maturity Model)やISO9001などを導入しているか尋ね、導入または計画があれば良いと判断する。それが見付からない場合は、システムの総合的な品質(ニーズとの一致、信頼性、柔軟性、使いやすさなど)を向上するために何をやっているのか尋ねる。多くの候補でこうした点を比べて選択すれば、レベルの低い組織へ入る失敗を少しは防げる。
 プログラミングからシステム設計までを、質の高い情報システム部門で経験すると、システム設計の幅広い知識や能力が身に付く。短い期間だと習得は無理なので、ある程度まで長く勤めなければならない。それが何年なのかは、経験できるスピードと本人の適性で決まり、一概には言えない。

ソフトウェア開発会社で様々な技術を学ぶ

 情報システム構築の頭からオシリまで経験できたら、技術面を充実する段階に入る。ネットワーク技術、開発ツール、本格的なテストなど、自分が持っていない面を重視しながら補強すべき箇所を決める。こういった目的に最適なのが、ソフトウェア開発会社だ。コンピューターメーカー系の開発専門会社でも構わない。
 単に技術を学ぶだけでなく、それを用いて実際に開発するため、本当に役立つ知識と能力が身に付けられる。この点が、ソフトウェア開発会社を選択する最大の理由である。実際の開発に参加できなければ、経験する意味はあまりない。
 プロジェクト管理、各種設計、仕様書作成、プログラミング、テストといった開発の中心的な作業も、習得の対象となる。ただし、最初に経験した情報システム部門が優秀なら、改めて習得するほどの経験にはならない。通常はどちらかが優秀なので、比べてみるのも面白い。
 ここでも、難しいのは企業選びだ。顧客をだまして金儲けだけ考えるとか、社員の能力向上など無視する企業も、かなり多いからだ。また、例外はあるものの、技術レベルの高い仕事を受注するには、企業の規模が小さすぎては難しい。失敗の確率を減らすためには、絶対とは言えないが、中規模以上の開発会社から選んだほうがよいだろう。
 良い企業を見分ける方法としては、まずは品質管理の実施方法を尋ねる。他に、仕様書をきちんと書いているか、どのような形でレビューしているのか、テストをどのように実施しているか、プロジェクト管理はどうやっているかなども、判断材料になり得る。前述のプロセス改善を導入していれば、現在ではベストの部類に入るだろう。
 良い開発会社には、いろいろな技術を持った人がいる。その人たちと交流することで、技術の幅がかなり広がる。ダメな人のほうが多いので、付き合う相手は慎重に選ぶ必要もある。細かな技術だけでなく、その分野の総括的で体系的な知識を得るように心掛けたい。
 もう1つ重要なのは、経験する期間である。習得すべき技術が多い場合には長くいても構わないが、そうでないときは短い期間で終わらせる。経験前の時点である程度の能力を身に付けていれば、一般の社員としてではなく、契約社員として働くことも検討したほうがよい。当然、社員なら余計にかかる費用分も報酬として要求しよう。きちんとした能力を身に付けていれば、契約が終わっても別な仕事がすぐに見付かるだろう。

コンサルティング会社で提案や管理技術を学ぶ

 システム開発をいろいろと経験したら、コンサルティングの道に進んでみる。この種の会社だと、中途採用に関してはプロとしてのレベルを求められるため、実力がないと入社は難しい。本当に役立つ能力を身に付けてから、チャレンジすればよいだろう。
 コンサルティング会社には、新卒として入社する方法もある。しかし、高い能力を身に付けるのが目的ならば、良い方法とはいえない。一般企業の情報システム部門のように、システムが使われる現場を細かく見れる機会があまりないからだ。実際に使われる状況を知らないと、良いシステムを設計するのは非常に難しい。やはり、3番目に経験するのがベストだ。
 コンサルティング会社にもいろいろなレベルがあり、高くなければ経験する価値はない。レベルの高いコンサルティング会社では、以下のような内容が経験できる。

コンサルティング会社で経験できること
・本格的なシステム開発方法論を知る
・質の高いシステム提案書を生で見る(たいていは英語)
・実用的なプロジェクト管理方法を習得する
・顧客との良い関係を保つ方法
・レベルの高いプロ意識(非常に重要)

 良いコンサルティング会社のプロジェクト管理は、管理する項目が少ないにも関わらず、的確な管理を実現できている。こんな点も勉強になるだろう。プロ意識の高さも要求され、それが本人の成長を促す。これも貴重な部分だ。
 コンサルティング会社も、質を見極めて選ばなければならない。基本的な条件としては、システム開発方法論を持ち、質の高いシステム提案書を書けることが必須である。また、できるだけ国際的に活躍している企業を選んだほうがよい。それを満たすとなると、外資系の有名コンサルティング会社に絞られてしまう。
 入社の際には、最初の段階で自分の希望を明確に伝えることも大切である。外資系のコンサルティング会社では、本人の希望がかなう可能性が高いからだ。ただし、自分で希望したからには、ある程度の成果をあげないとならないため、より大きなプレッシャーがかかる。その点だけは覚悟しておこう。
 コンサルティング会社にもいろいろな人がいる。一般企業と比べて平均すると質は高いが、非常に優秀なのはごく一部だけだ。また、役に立っていそうもない人までいる。付き合う相手を慎重に選び、一緒にレベルアップするのが賢い過ごし方といえる。
 システム設計の能力が高まると、最終的にどんな形で活動するかを決めなければならない。コンサルティングというのが1つの大きな選択枝になり、そのコンサルティング会社に勤め続けるとか、コンサルティング会社を渡り歩くなどの方法がある。それ以外で、自分で会社を興す人もいる。数は非常に少ないが、研究の道を選ぶことも可能だ。どの道に進むかは、本人が何を目指すかで決まる。この段階になると、何をしたいかがある程度は見えているだろう。

他に使いやすさの視点などは独自に学ぶ

 以上が3つの経験だが、それだけでは不足する部分もある。たとえば、ユーザーインターフェースの設計で、使いやすいシステムに仕上げるために重要な要素である。広く考えるといろいろあるが、代表的な項目を挙げると以下になる。

上記3つの経験で得られないものの代表例
・使いやすいユーザーインターフェースの設計術
・レビュー可能な資料の作り方
・適切な評価方法の設計術
・難しい問題での意思決定方法
・仕様という形式での設計術
・組織、役割分担、運営ルールなどの設計術
・建設的な結論を導くための議論手法

 これらの内容は、今のところ、誰かが教えてくれる仕組みができていないため、自分で勉強して習得するしかない。ユーザーインターフェースに関しては、使いやすいと言われるOSやソフトを実際に使用してみた後で、ユーザーインターフェースのガイドラインを読むとよい。こうした努力によって、設計能力が高まるはずだ。
 より一般的な能力に関しては、関係する本を読んで実際に試すのが、現実的な方法だろう。本サイトで扱っている能力に関しては、市販の本よりは質の高い内容が書いてあるので、それを参考にしよう。実際に試すことが重要で、それを続けながら努力するしかない。
 上記に含まれない能力に関しても、経験を重ねるうちに必要だと思うようになる。自分が本当に必要だと感じた能力を、優先して身に付けるのが、もっとも良い方法である。この段階になると、他人の意見よりは、自分の価値観を尊重した方が、良い結果を得やすい。

学ぶ意識ではなく、良いシステムを構築する意識で

 こうした経験では重要な注意点があるので、それも説明しておこう。経験の中で一番大切なものは、“良いシステムを構築する”という“強い意識”である。狭い意味のプログラミングに興味を持つのではなく、本当に役立つシステムを構築して、使う人の喜んでもらうことが重要なのだ。
 ここでは「学ぶ」と表現しているが、それが一番の目的ではない。良いシステムを構築するのが目的であって、それを“成功させる過程”で高い能力が身に付く。この点を絶対に忘れてはならない。
 ただし、質の高いシステムを構築するには、開発者の高い能力が必要となる。能力の向上はときどき意識しないと高まらないので、仕事を選ぶ際に深く考えるべきだ。自分が習得すべき能力の一覧表を作って参照しながら、レベルアップが達成できる仕事を選択する。そして選んだ後は、システムの構築に中心を移して、成功させるために最大限の努力をする。この意識が、良い結果を生む条件だと思う。
 こうした意識を持った人なら、たとえ知識や能力の習得が目的であっても、優秀な企業であれば一緒に仕事したいと考えるはずだ。その意味で企業側も、こうした人材から見た魅力を増すように、定期的に能力を向上できる仕事を用意するとか、何らかの工夫が必要であろう。
 ここで紹介した方法を実践するとなると、最低でも2回は会社を変わらなければならない。現実には、入社してガッカリする場合もあるだろう。その分を2回加えると合計で4回も変わり、全部で5社を経験することになる。残念なことだが、会社の経験数が増えると、雇いたがらない企業は意外に多い。そんな現実まで考慮すると、経歴が5社になっても構わない人にしかお勧めできない方法である。覚悟できた人だけ試してみよう。
 もう1つ重要なのは、システム設計に対する適性があるかどうかだ。この仕事は基本的に難しく、論理的な思考能力がある程度高くないと、きちんとした成果をあげられない。適性が低いと、いろいろな知識や能力委の習得にも苦労する。論理的な思考が不得意なら、別に道に進んだほうがほうがよい。
 もし3つのうちのどれか1つだけと尋ねられたら、企業の情報システム部門を迷わず挙げる。自分にとっても、その経験が一番役立っているからだ。ただし、質の高い部門で経験しないと、高い能力は身に付かない点だけは、十分に理解しておきたい。自分の場合は、質の低い情報システム部門だったが、中途入社に優秀な人が何人かいて、きちんとした方法を教えてもらえた。こういった形でも構わないので、良い方法や状態を知ることが大切だ。

システム設計のノウハウを幅広く活用する

 3つの職場を経験し、それ以外の能力の一部まで身に付けられると、システム構築に必要な幅広い能力を得たことになる。それらの中には、問題点やニーズの分析、仕事の管理、レビューなどによる評価、作業品質の検査と向上、解決方法の論理的な設計、設計や評価の内容をきちんと記述して残すといった能力が含まれる。
 挙げた能力を冷静に分析すると、ソフトウェアを用いたシステム以外にも適用できると分かってくる。その代表的な例が、本サイトである。教育システム、議論システム、社会システムなど、すべてシステムとして捉えれば、習得した能力を利用して設計できるのである。
 システム設計というのは、もともとコンピュータに依存するわけではない。世の中のすべての事柄がシステムとして捉えられる。つまり、どんな対象であっても、システムとして設計できるわけだ。システム設計の本質的な能力が身に付けば、何でも設計できるようになる。システム開発の能力向上における1つの目標は、このレベルであろう。
 いろいろなシステムを設計できるようになると、システム設計が非常に面白く感じる。システム設計とは、対象分野を総合的に検討し、現在よりも良い状態にするための仕組みを構築することである。質の高い解決策を得られたときの喜びは、何物にも代え難い。
 世の中の多く事柄は、きちんと設計された結果ではない。そのため、システム設計を試すだけで、現在よりも良い仕組みが得られる。ただし、コンピュータを用いたシステム構築と同様に、対象となる分野の調査や分析が必要で、それには時間がかかる。
 もう1つ面白いのは、どんな分野の専門家でも、ほとんどの人がシステム設計を知らないため、設計したと言えるレベルの解決案を出せないでいる点だ。こんな現状なので、本質的なシステム設計能力を身に付けると、その道の専門家よりも良い解決案を出せてしまう。この辺が面白い部分でもあるのだが、世の中のレベルがそれほど高くないという証拠でもある。
 本質的なシステム設計の能力を身に付けた人が増え、世の中の様々な仕組みを設計しなおせば、かなり良い解決方法を提案できるだろう。そう考えると、こうした人材が増えることは、世の中にとって非常に重要なことといえる。

 以上のように、システム設計の能力を高めるための3つの経験を紹介した。実はこの内容、順序まで含めて自分の実体験である。最初から意識したわけではなく、気付いたらそうなっていた。終わってから分析すると、良い経験順序だったと思う。単純に運が良かっただけではなく、その時点で面白そうだと感じる職場を求めたら、こういう形になった。その意味で、自然な流れだったのかもしれない。
 最後に大切な点を1つ述べておこう。ここまで読んで、この道を目指したいと思った人が少しはいるだろう。その人に言いたいのは次の点だ。基本的に“高いハードル”であり、相当な努力も要する。また、論理的な思考能力が得意でないと、かなり難しい。最低10年は相当に苦労する覚悟が真剣に持てて、適性の高い人であれば、目指してみたらいかがだろうか。もし成功すれば、いろいろな世界で通用する視点や能力が身に付くはずだ。そして本当に身に付けば.....分析すること、思考すること、設計することが最高に面白くなる!

(2000年6月18日)


下の飾り