ソフトウェア開発における熟練技術者の育成には時間がかかります。教育の成果が現れるまでに10年は要します。コンピュータ技術、ネットワーク技術、システム技術、ソフトウェア工学、プロジェクト管理などについて、基礎から応用に到る深い知識と経験が必要となるからです。プログラミング言語やデータベース、ネットワークを使いこなせたら十分という単純な話ではありません。熟練技術者はどのようにして育成できるのでしょうか。
ソフトウェア開発の熟練技術者を育成するにはキャリヤパスを重視する必要があります。キャリヤパスは、以前に学んだ知識や経験・体験が次のステップの学習に大きく貢献するという経験則から編み出された考え方です。また、キャリヤパスを言う前に、人には向き・不向きがあることを認識しておかなければなりません。
本稿では、ソフトウェア開発技術者として必要な潜在能力、そしてキャリヤパスについて、考えるところを述べたいと思います。
1.ソフトウェア開発技術者として必要な潜在能力
ソフトウェア開発に必要な能力は多岐に亘り、沢山の事項が挙げられます。その全てに通じていなければならないということはありません。例えば、プログラミングの経験は必要ですが、プログラミングが苦手な人でも、コミュニケーション力がある人はソフトウェア開発に貢献できます。全能な個人を求めること自体に無理があります。得意領域が異なる複数の人が集まってプロジェクトを構成すれば、組織として強力な開発能力を持つことができます。
1つだけ確かなことは、論理的な思考ができない人はソフトウェア開発に向いていないということです。ソフトウェアは論理から成り立つ表現物だからです。適当につじつま合わせをする性質の人は事故の元になりますので、この領域に携わることは控えるべきです。
多くのソフトウェア開発企業では、新入社員の採用に際し、適性検査、一般教養テスト、面接を行っています。小論文を採用している企業もあります。中でも小論文は非常に有効です。
『どのようなテーマでも良いので、自分の主張をA4用紙2枚にまとめて、1週間後に提出してください』という課題を与えて見ます。このとき、1週間後にその小論文について質問すると予め伝えておきます。小論文は論理的な考え方ができるかどうかを見極めるのに役立ちます。ソフトウェア開発と論文執筆は似たところがあります。ソフトウェア開発はトップダウン手法で行います。まず、全体構成を設計し、次第に詳細化するのが一般的手法となっています。論文についても同様です。まず、論点を明らかにし、全体構成を考えて、執筆するのが一般的です。私自身、この方法を使って、適性を見極めたことがあります。論理的な文章が書けない人はソフトウェア開発に適していなかったと記憶しています。ソフトウェア開発に向いているか否かを判断するのに小論文は大変有効であると考えられます。上記はあくまでも仮説です。情報処理を教える人で、論文執筆能力とソフトウェア開発能力の相関を調べてもらえると大変あり難いのですが、そのような方はおられないでしょうか。
ソフトウェア開発では、帰納法的能力も要求されます。帰納法とは、具体的な事実から一般論を導くことですが、ソフトウェア開発では、この能力が特に重要です。ソフトウェアの設計は正にこのような思考の積み重ねで行われるからです。複数の事実をよく観察・分析し、一般化してプログラムという形に組み上げる作業がソフトウェア開発の核となる作業です。
ソフトウェア開発で要求される能力として、プログラミング能力、ドキュメンテーション能力、コミュニケーション能力などがあります。もっと即物的な能力として、JAVA言語、C言語、ORACLE、UNIX、Windows、.NET、J2EE、・・・などの知識・利用経験などがありますが、こうした能力は論理的思考能力ができる人ならば、数ヶ月でマスターできるはずです。現在知らないということが、ソフトウェア開発に向かないと判断する材料とはなりません。
2.キャリヤパス
ソフトウェア開発を一生の仕事と捉えるソフトウェア技術者を育成するためにはキャリヤパスが重要です。人は30歳前ですと、仕事の方向転換をしてもまだやり直しが利きますが、歳を重ねるに従い時間的余裕がなくなります。それまでのキャリヤを活かして熟練度を高めるのが効率的です。
それでは、ソフトウェア技術者が熟練技術者になるまでにどのようなキャリアパスを経るべきでしょうか。図1にキャリヤパスについて、私の考えを示します。最初にコンピュータや通信の原理について基礎から学習します。新しい製品開発には基礎の理解が必須です。次にその原理が使用されているソフトウェアを読解し、原理がどのように使用されているかを学びます。良いコードを沢山読むことがソフトウェア技術者の育成には大変役立ちます。図1の「プログラム読解」では、LinuxやMySQLなどのオープンソースを事例に挙げていますが、他に良いコードがあるならばそれを使うのが良いでしょう。そして、長年かかって確立されたソフトウェア設計技術について学習します。実際のソフトウェア・コードを知らずにソフトウェア設計技術書を学習しても、その本質を理解するのは難しいからです。ここまでは、ソフトウェア開発技術者育成の基礎教育です。
基礎教育が達成できているソフトウェア技術者に対して実践教育に入ります。運用中のソフトウェアに障害が検出された場合、そのソフトウェア・コードを読んで障害原因を確定し、修正する作業は、ソフトウェアの機能の理解、構造の理解、原理の理解、設計技術の理解に役立ちます。そしてリーダの指導の下で、実際のソフトウェア開発を担当します。この段階からは真剣勝負になります。
ある程度、ソフトウェア開発の経験を積むと、プロジェクト管理について学習します。一人でこなせるソフトウェア開発作業というものは殆どありません。多くの人達が協力し合って、一つのソフトウェアを完成させるのです。「ソフトウェア開発の実践」を積むと、プロジェクト管理の必要性が分るようになります。その段階になるまでは、理論を学習しても観念的な理解に留ってしまう可能性があります。プロジェクト管理についても、先達が築いた成果を活用します。プロジェクト管理については、沢山の書物や文献があるのですが、実際のプロジェクトに適用するには実践を通してでなければ無理があります。人も、組織も、ターゲットの機能も皆異なる環境で紋切り型の管理手法を適用する訳には行きません。似たケースの研究や先達の傍で彼らの行動様式、発想、取組み姿勢などを実践的に理解し、実行する中で、自分のものとする以外に良い方法はないようです。
一つのソフトウェア開発プロジェクトを任せられるようになるまでには、いくつかのソフトウェア開発プロジェクトを経験する必要があります。
図1 キャリヤパス
熟練ソフトウェア技術者を育成するには、このように多くの知識と経験を重ねる必要があります。更に、ある程度のレベルの技術者になったとしても、ソフトウェア開発の環境は変化していますので、常に研究を怠らず、研鑽を積まなければなりません。
※ 最近、気になることが起きています。それは、ソフトウェア開発のコード化・単体テスト工程を“製造工程”と称して、上流工程や詳細設計工程と分離して、単価が安い異なる技術者に行わせるという実態があることです。多くのソフトウェア開発企業では、この“製造工程”を中国に発注しているのです。
ソフトウェア開発には“製造工程”などという工程は存在しません。設計工程があるだけです。すべてのテストが完了するまでのすべての作業が“設計”なのです。“製造工程”という誤った考えを導入した理由は簡単です。コンピュータの開発が始まった黎明期において、ソフトウェアがどのようなものか理解していなかった人達がソフトウェア開発の管理者となっていたからです。ソフトウェア開発は入社して間もない若い人達が担当していましたが、管理者にはハードウェア開発出身者がアサインされたからです。ハードウェアで言う製造工程とコード化・単体テストを対応させたのです。そして、“製造工程”を、それ以前の設計工程と分離できると信じるようになったのです。
本稿の「2.キャリヤパス」の説明で分るように、コード化した経験がなければ、ソフトウェア設計技術も、プロジェクト管理手法も理解できません。ましてや実際の管理を行うには無理があります。実感がない、手探りの管理になってしまいます。
キャリヤパスからコード化・単体テスト工程を分離してしまうと人材育成は破綻します。それぞれの工程で十分な経験を積ませることが絶対に必要なのです。
現在行われている“製造工程”の中国発注を続けていると、日本国内にも、中国にもソフトウェア開発の熟練技術者が育たないことになる恐れがあります。■