多事想論articles

ソフトウエア開発技術力の2つの軸

 IT技術革新の渦の中で、ソフトウエア開発技術者は新しい技術への対応に追われてきました。当コラムでは、技術革新の影響を最も受ける設計および実装作業におけるソフトウエア開発技術力に関して考察してみたいと思います。
 ソフトウエア開発技術は、ソフトウエア製品のユーザー要件に対応した機能を定義する機能技術の要素と機能を確実に実現するための基盤技術の要素に大きく分類できます。機能技術要素は要件を確実に理解し魅力的なユーザーインターフェースや機能を定義し実装する自由度の高い創造的な技術であるのに対し、基盤技術要素はユーザーインターフェースを実現する表示デバイスの制御手段であるとか、機能実現に必要なネットワークプロトコルの使用方法など、設計や実装時に制約となる場合が多い技術が相当します。

機能技術要素

 ソフトウエアの設計および実装作業は、システム(製品)の機能体系をソフトウエアとしての処理体系にうまく変換する作業です。それは機能を正しく理解してソフトウエアの処理を抽出し、その処理を適切に抽象化してソフトウエア構造を確立する。そして構造化された個々の処理を具体化して実装する作業だといえます。
 機能技術要素に関して言えば、それは思考プロセスであり私の知る限りこの20年間本質的にはなんら変わっていません。例えば今主流のオブジェクト指向に基づく開発手法を採用した場合でも、従来の構造化手法の考え方や設計能力が全く無意味だということにはなっていないと思います。

基盤技術要素

 過去のソフトウエア開発の技術革新を思い返すと、その多くが基盤技術要素に関するものでした。私の経験ですが、数年苦心しつつ蓄積した画像圧縮プロセッサーや画像伝送プロトコルに関する技術が、新しい装置やインフラの革新によりリセットされ価値がなくなってしまったことがありました。当時基盤技術要素の大多数が輸入品であり、革新の予測が立ち難かったこともありその変化に対応出来なかったのです。それが技術者個人の技術の陳腐化に留まるうちは許容できますが、会社や組織のソフトウエア製品の根幹に関る場合は重大な問題です。
 今多くの開発現場では、設計から実装工程を丸ごと外部委託したり、主にコスト面から若い世代が担当したりするケースが増え、結果として基盤技術要素の多くを外部もしくは若い担当者の技術力に頼らざるを得ない状況になっています。この場合、技術革新への適応や技術的なリスクへの対応をいかに上手く行うかが重要な課題となるのではないでしょうか。

組織が果たすべき役割

 近年様々な製品においてソフトウエアが果たすべき役割が増大しています。それにともないソフトウエア開発技術力をより高めたいと考える組織や個人の方は多いと思います。私の考えるソフトウエア開発技術力とは、最新の基盤技術を広くよく理解し、その用法を熟知するとともに要件に的確に応じた機能を実現する能力を言います。この定義に従えば、技術者個人が技術力を高めるためには、機能技術に関する能力を高める努力をし、基盤技術に関して必要な技術知識を識別し継続的に学習する必要があるでしょう。
 また、そういった状況を考えると組織の果たすべき役割も重要になってきます。技術者個人の技術力研鑽を支えるため、今組織は何をすべきでしょうか。それは基盤技術要素の知識保存の器の提供であり機能技術要素の能力発揮および研鑽の場の提供だと思います。例えば社内で維持すべき基盤技術に関してその利用実績が確実に集まり再利用出来るプロセスや、基盤技術の動向を管理するプロセスが必要でしょう。機能技術に関しては、思考プロセスの整理と能力向上プログラムの整備を行い、技術者が同じ土俵で切磋琢磨できる環境を用意する必要があります。この器と場の提供によって、技術者は安心して技術力向上に取り組め、結果ソフトウエア開発技術力が確実に高まって行くものと確信しています。

執筆:荒川 英俊
※コラムは執筆者の個人的見解であり、ITIDの公式見解を示すものではありません。

資料ダウンロードはこちら