川村渇真の「知性の泉」

本当の実力を書けるスキル記述方法


人材派遣業などのスキル記述方法は時代遅れ

 今から10年ほど前になるが、フリーランスでシステム開発の仕事だけをしていた時期には、仕事を探すために人材派遣企業に登録したことがある。また、就職先を見付けるために人材紹介業を利用したこともある。
 技術者が業者に登録する場合は、スキルの記入用紙に自分で記述する。驚いたのは、記入用紙を見たときだ。用意してある欄には、狭い意味の技術しかない。正確には覚えていないが、次のような内容だったと思う。開発経験を記入する一覧表があって、その中には、開発の対象となる業務、システムの動作環境(OSなど)、使用する言語、システム全体の規模、開発期間、自分の立場などが並ぶ。これらの全項目を、参加した開発の数だけ列挙する。
 これ以外にも、使いこなせる言語などを記述する欄があったと記憶している。しかし、あくまで補助的なもので、前記の経験記入欄が中心となる。どんなシステムや言語を何年経験したかが、能力を評価する際の主要情報であった。
 以上のような内容は、いろいろな人から情報を得た限りでは、今でもあまり変わっていないらしい。ごく一部の業者は少し改善しているかも知れないが、多くは以前と同じようなのだ。
 きちんとした開発ノウハウを持っている人なら分かると思うが、前述のような記述内容では、実力を評価するのにほとんど役立たない。開発組織のレベルはピンからキリまであり、レベルの低い組織では、仕事のやり方自体が遅れている。そんな組織で何年経験しても、能力が高まる可能性は低い。
 重要な点、つまり知りたいのは、本人の本当のレベルである。どの部分の能力がどの程度のレベルなのか、明らかになるような書き方でなければ価値はない。たとえば、テストがきちんとできるのか、信頼性や柔軟性を確保したプログラミングができるのか、オブジェクト指向のシステム設計ができるのか、仕様書をきちんと書けるのかといった能力が知りたいはずだ。前述の記述方法では、このような要望にはまったく応えられない。

技術と実力の2軸を用いてスキル記述用紙を作る

 では、どのような記述内容であれば、本当の能力を表明できるだろうか。非常に重要なので、ここで整理してみよう。
 スキルを一覧表にまとめる場合は、基本的に2つの軸を用いる。1つの軸は「重要な技術と知識」で、通常は縦軸に割り当てる。知識、技術、ノウハウなど、その分野に欠かせない項目を幅広く選んで列挙する。項目数が多い場合は、何種類かにグループ分けして、階層的に整理して並べる。もう1つの軸は、技能ごとの「本人の能力レベル」で、通常は横軸に割り当てる。
 縦軸の「重要な技術と知識」は後回しにして、横軸の「本人の能力レベル」を先に考えてみよう。一番下のレベルは、その技術に関してまったく知らない「素人」だ。一番上は、その技術の最先端を自分で切り開いている「先進者」になる。これらの間に4段階のレベルが入り、全体としては6段階になる。

横軸の欄:技術ごとの能力レベル(該当レベルを選ぶ)
・素人 :何をすればよいのかほとんど知らない
・初心者:詳しい人に補助してもらえればできる
・中級者:一般的なことなら自分一人でできる
・上級者:難しい内容でも何とかこなせる
・改良者:対象に最適な方法へと、自分でアレンジできる
・先進者:その技術の最先端の方法を、自分で切り開いている

通常は「上級者」までで十分と思われがちだが、凄い人も実際にいるので、その能力を記述できるように作っておくべきである。システム開発の場合は、実際の現場で開発している人によって、多くのノウハウが生み出されている。そのため、通常の開発に参加していながら、まれにだが「改良者」を見かけるし、その中には「先進者」がいる可能性もある。というわけで、「先進者」まで含めるのは必須なのだ。
 能力レベルの6段階のうち、多くの人は「素人」から「上級者」までの間に入る。たった4段階だと細かく分けられないので、それぞれの間に中間レベルを挿入する。中間レベルは全部の段階の間に入れるので、全体では11段階に広がる。記入するときは、この11段階の中から該当するレベルを選ぶ。

横軸には技術習得の能力も含める

 能力レベルの記述欄では、別のレベルも加えなければならない。それは、別な技術を習得する能力である。たとえば、特定のプログラミング言語に精通している人がいて、別な言語を習得する必要性が生じることもある。言語以外でも同様で、新しい設計手法とか管理手法を使わなければならない状況が生じる。そんなときの適応度を知るために、「新手法の習得度」の欄を用意する。その欄に記述するレベルは以下のようになる。

横軸の補助欄:新手法の習得度(該当レベルを選ぶ)
・×:苦手:新しい手法の習得はかなり苦手
・△:努力:努力すれば何とか習得できる
・○:普通:問題なく習得できる
・◎:速習:人よりも短期間で習得できる

この項目の記入方法だが、用紙の横幅に余裕がないときは、4段階なので欄に記号を書かせる方法でも構わない。
 この欄は、縦軸の全部の項目に付けるわけではない。見て分かるように、技術の種類ごとに記述するタイプなので、個々の技術の項目にではなく、項目のグループごとに付けるのが普通だ。
 以上の2つのレベルを記入させれば、それぞれの技術ごとの本人の実力レベルを、明確に記述できる。この横軸の項目は、どの分野でもほぼ共通なので、少しのアレンジは必要となるかも知れないが、システム開発以外の業界でも利用できる。
 本人が自己申告する形で書くため、ウソを書いたり、本人の認識が甘いこともあるだろう。書いた内容が本当かどうかは、面接などで直接質問して、おおまかなレベルぐらいは確認する必要がある。ただし、質問する人が該当項目の「上級者」以上でないと、実力を見抜くのは非常に難しい。ともあれ、この種の記入用紙で大切なのは、重要な技術に関する能力を表明できる形式になっているかどうかだ。

システム開発では幅広い技術を縦軸に用意する

 横軸が明らかになったので、縦軸の項目を整理してみよう。システム開発の場合は項目数が多いので、全体を大きく3つに分ける。どの開発にでも共通する技術、個々の具体的な技術、問題領域の知識の3つだ。具体的な項目を見たほうが理解しやすいだろう。項目の深さにバラツキはあるものの、ざっと挙げると以下のようになる(書き続けると大変なので、実は途中でやめてしまった)。

縦軸:システム開発で重視な技術や知識
・どの開発にでも共通する技術
 ・開発方法論
  ・(空欄に方法論の種類を追加する)
 ・プロジェクト管理
  ・(空欄に管理手法の種類を追加する)
 ・ニーズ分析
  ・分析手法
   ・(空欄に分析手法の種類を追加する)
  ・調査や質問技法
 ・データ分析
  ・(空欄に分析手法の種類を追加する)
 ・システム設計
  ・システム全体の構造設計
   ・(空欄に設計手法を追加する)
  ・ユーザーインターフェース設計
  ・データベース論理設計
  ・フレームワーク設計
  ・ライブラリ設計:クラスや関数などの集合を設計
  ・ネットワーク機能設計
  ・運用設計:ユーザー向けとシステム運用の両方
  ・高信頼性設計:信頼性を高めるための工夫
  ・エラー処理設計:エラー処理の組み込み方
  ・(その他は、空欄に項目を追加する)
 ・プログラミング
  ・信頼性:バグが発生しにくい作り方
  ・柔軟性:変更がしやすい作り方
  ・把握性:処理内容を解読しやすい作り方
 ・デバッグ
 ・テスト
  ・テストシステムの設計
  ・テストパターンの設計
  ・テストの実施と管理
  ・テストの評価
 ・システム運用:
 ・システム更新:
 ・システム監査:
 ・仕様書作成:
  ・システムの概要
  ・システムの基本構造
  ・システムの詳細部分
 ・レビュー:
・個々の具体的な技術(どの項目も空欄に項目を追加する)
 ・オペレーティングシステム:
 ・開発環境やライブラリ:
 ・データベース管理システム:
 ・プログラミング言語:
 ・開発の各種ツール:
 ・ネットワーク:
 ・仕様の表現技法
・問題領域の知識
 ・(空欄に項目を追加する)
・上記で漏れている項目を何でも
 ・(空欄に項目を追加する)

以上のように、ざっと洗い出しただけでも相当な項目数になる。網羅するのは不可能に近いので、空欄を用意して必要な項目を追加してもらう箇所も入れた。また、挙げた項目に含まれていない能力を追加できるようにと、自由追加の欄を最後に用意した。この例を見て、項目の出し方や整理方法が理解できると思う。当然のことだが、下位の項目を持つ項目は、実力レベルを記述する必要がないので、横軸の記入欄を用意しない。
 縦軸の項目の洗い出しでは、どの程度まで細かくするかを決めなければならない。たとえば「テスト」の項目で、上記のような下位の項目を入れない場合も考えられる。項目が細かいほど記入が大変になるからだ。ただし、細かくすると2つのメリットが出てくる。1つは、より細かく書けることで、本当の能力を見極めやすい点。もう1つは、書く人の認識違いを防止するのに役立つ点だ。細かい項目があることで、テストに含まれる作業内容が伝えられ、簡単なものだと思っていた人は、そうでなかったと気付きやすい。両メリットとも、能力の正しい記述に貢献する。

紹介したスキル記述用紙なら本当の実力を表明できる

 以上のスキル記述用紙を用いても、今まで書いている経歴一覧が不要になるわけではない。どのような開発に参加してきたのかも見たいので、あくまで補助的な役割になるが、一緒に用いる。能力を正確に伝えるには、記述形式は多いほうがよいからだ。
 前述の記述方法を見て、どのように感じただろうか。本人が持っている実力が正確に見えてしまうのでは、と思った人が多いのではと推測する。実際、そうなのである。今までは、スキル記述方式が悪いため、いろいろな能力を表明することができなかった。
 システム開発には幅広い技術が必要だと理解している人は、上記のような能力を以前から意識している。全部の能力を一気に身に付けるのは無理なので、自分にとって利用する可能性が高い技術を優先しながら、順番に習得している。1つにつき半年程度の勉強期間を設定し、関係する本を読むとか、知っている人に教えてもらうといった方法で学習していた。
 このようにして自分の能力を高めた人は、狭い意味のプログラミングしか知らない人と比べて、かなりの差が付いてしまう。実際の現場では、まともなプログラムを作れない人も意外に多いので、そんな人と比べれば、差は相当に大きい。経験年数の単なる多さは、あまり意味を持たないのだ。ハッキリ言ってしまうなら、スキルを計画的に向上させている人と、のほほんと仕事をしている人に大きな差が付くのは、当然の結果である。それを正しく評価しないほうがおかしい。
 ところが現実の世界では、人材派遣の単価を「一人あたり何円」といった頭数で決めてしまいがちだ。個人ごとで少しの差はあるが、各人の能力に比例してはいない。システム開発の場合は、能力の違いによる生産性の差が、他の業界よりも大きいというのに。こんなことを続けていたら、優秀な技術者はヤル気を失ってしまう。その兆候は既に現れており、上手に手を抜く技術者が出始めている。
 多くの組織で、技術者の評価に上記のスキル記述用紙を使うと、業界全体のレベルが向上する可能性が高い。幅広い能力が必要だと認識する人が増えることで、いろいろな能力を高める人が出てくるからだ。また、能力の適正な評価も期待でき、それもヤル気を高める。そうなってほしいが、現状ではあまり期待できない。

スキル記述用紙は能力向上のガイドにも使える

 ここで紹介したスキル記述方法を、自分でも記述してみよう。すると、どこが足りないのか明らかになる。自分の職種に関係する技術でレベルが低いなら、明らかに不足していると判断できる。だとしたら、その部分を延ばす必要があり、それが明確になったわけだ。つまり、良いスキル記述方法は、能力向上のガイドとしても役立つ。
 自分の能力を高めるためには、2つの点を考える。1つは、現在身に付けている技術でも、より高いレベルへと向上させること。もう1つは、明らかに欠けている技術を身に付けることだ。この両面を考慮しながら技術を習得し続けると、全体の能力は確実に上がる。3年とか5年とか努力を継続すれば、のほほんと日々の仕事をしている人に比べて、相当な差が付けられるだろう。
 どの技術を伸ばすかは、自分の将来の姿を考えて決めなければならない。どのような職種を選ぶかによって、必要となる技術が異なるからだ。まずは、自分の仕事に関係する能力を身に付け、その後で、自分が目指す職種に関係する能力を高める。それぞれ3年ぐらいの期間で達成するとよいだろう。
 このようにして能力を向上すれば、良いシステムを作る条件が整ったことになる。幅広い能力を持っているほど視野も広がるので、システムを開発する際に、より多くの視点で問題を捉えられる。それがシステムの質に反映し、良いシステムを構築できるはずだ。
 もう1つ、新しい技術の習得でも幅広い視野は役立つ。たとえば、知らないプログラミング言語を勉強するとき、言語の機能を単に覚えるだけで終わらない。システムの質を高める上で、基本的に使ってはいけない機能を洗い出したり、特定の機能の使い方を制限したり、各機能の上手な使い方を決めたり、エラー処理方法の安全な作り方を求めたり、勉強しながら活用方法を考える。その内容をまとめれば、言語のプログラミング・ガイドラインに仕上がる。学習が終わった頃には、良質のプログラムを作る準備が整うわけだ。
 必要な能力をほぼ習得し終わったら、できるだけ上流の能力を習得する段階へと移行したほうがよい。上流の能力に含まれるのは、プロジェクト管理、ニーズ分析、データ分析などだ。これらは、問題解決に必要な能力でもあり、システム開発以外の仕事にも役立てられる。システム開発の仕事が永遠に続くとは限らないので、この種の能力を高めておいたほうが安全である。

(1999年1月18日)


下の飾り