川村渇真の「知性の泉」

新しい技術のハイレベルな習得方法


分析しながら学習することが大切

 コンピュータの世界では、新しい技術が次々と登場する。開発に携わる人は、自分が必要な技術を学習し続けなければならない。また、世の中の最新技術でなくても、自分にとって新しい技術を習得する機会はよくある。技術革新が激しいだけに、習得にかかる時間を短くすることが求められている。
 知らない技術を学ぶときには、自分が持っている既存の知識を最大限に利用すべきだ。そうすれば、学習の効率が向上するだけでなく、習得技術を高いレベルで生かせる基礎ができあがる。深く考えずに勉強したのでは、とりあえず使えるレベルにしかならず、それでは設計の質を向上できない。
 学習の際に考えるべきなのは、その技術を用いてシステムを作るとき、どのような設計ルールを当てはめたら良いかだ。システム全体での“把握性、柔軟性、信頼性”を向上させるために必要な、設計ガイドラインの規定を最終目的とする。このような目的があると、学習での集中力はかなり高まる。また、できあがったガイドラインは、実際に設計するときに役立し、学習が終わったらすぐに利用し始められる。反対に、技術を単に覚えるだけではダメである。その技術が持つ機能を分析し、どのように設計すべきなのか考えながら学習したほうがよい。
 学習の教材として、技術の開発元が提供している資料を用いることが多い。その中身だが、技術の仕様を記述したものから、使い方を説明したものまである。ここで注意したいのは、使い方を説明した資料の内容が、良い設計にほど遠いものばかりな点だ。紹介されているサンプルでは、システムの“把握性、柔軟性、信頼性”など、まったく考えていない。理解するための例であって、設計の例ではない点を認識しておこう。設計としては悪い例がほとんどなので参考にせず、自分で良い設計を求める必要がある。有名な大手メーカーだからといって、資料が良いことはまずない。期待するのは禁物だ。

把握性などを考慮して設計ガイドラインを導く

 ここまでの話だと、かなり抽象的すぎて理解してもらえないと思う。簡単な例を挙げて説明しよう。多くの人に関わりのある対象が良いので、新しいプログラミング言語の習得を考える。プログラミング言語であっても、考慮すべき中心は“把握性、柔軟性、信頼性”の3つ。これらの総合点が高まるように、設計ガイドラインを規定しなければならない。
 まずは最初の「把握性」で、ソースコードを見ただけで処理内容が分かるようにする。まず思い浮かぶのは、こまめにコメントを付けることだろう。しかし、コメントを詳しく付けるだけでは不十分であり、効果は小さい。処理内容や制御の流れが分かるようにプログラミングすることが大切だ。たとえば、中心となる制御構造を示すようにメインルーチンを作る、というルールだ。含まれる分岐部分では、どの値が関係しているのかを明確に示す。同様に、サブルーチンの制御構造も分かりやすく作る。やってはいけないのが、ルーチンを呼ぶ階層を深くすること。何重にも呼ばれると、処理を把握しづらくなるからだ。加えて、複数ある分岐命令の中から、もっとも見やすいものを選ぶ。
 変数やルーチンの命名ルールを、把握しやすいように規定することも役立つ。たとえば、関数やメソッドなどの名前は「処理+目的語:動詞+名詞」で、変数やオブジェクトの名前は「目的語:名詞」とするとかだ。目的語には、複数の単語を組み合わせることもあるので、語の並び順も決めておく。把握性を向上する工夫はまだまだあるが、この辺で止めておこう。
 2番目の「柔軟性」では、機能の変更ができるだけしやすいように考慮する。もっとも大切なのは、機能的な区切りでルーチンを分けることだ。そのうえで、お互いへの影響が最小限になるように、変数の受け渡し方などを規定する。プログラム中の変更しそうな値は、ルーチンの外に出して定義し、詳しいコメントを付けることが大切。値の意味だけでなく、適正な範囲なども記述するように、ルールを決める。
 3番目の「信頼性」では、バグが出にくく作ることと、シビアな環境での安定性を向上させることの2点を考慮する。バグを少なくするには、まず「把握性」が非常に重要だ。たとえば、グローバル変数の名前なら、絶対に重複しないような命名ルールを規定する。他に、問題が起こりにくい制御構造の作り方、使ってはいけない命令や表記方法なども規定する。シビアな環境への考慮では、メモリー不足などへの処理方法を、あらかじめ決めることで対応する。考えられる状況は今までの経験から思いつくので、まず全部を挙げてみる。その中で重要なものを選び、具体的なプログラミング方法を規定すればよい。
 以上のようにして集めたルールを整理し、最終的なガイドラインとして統合する。場合によっては、一部のルールが互いに矛盾することもあるだろう。その際には、第1に「信頼性」を、次に「把握性」を重視して選ぶ。ただし、どれを重視すべきかは、対象となる技術によっても異なるので、自分で判断して構わない。

設計ガイドラインを仕様としてまとめる

 ガイドラインの中身が決まったら、利用しやすいように仕様としてまとめることが大切だ。項目ごとに分類してルールを並べる。ガイドラインを適用したサンプルを、何個か添付することも忘れずに。もし余裕があるなら、設計の際に呼び出して使うテンプレートも作成したい。目的ごとに最適な形で用意することで、かなりの効率化を実現できる。
 ガイドラインをまとめてしまえば、その技術を利用するのがラクになるし、すぐに実践で使い始められる。学習の開始から応用までの時間は、もっとも短くなるはずだ。テンプレートを上手に作ると、細かいことを覚えてなくても、その技術が使える。逆に言うなら、それが可能になるようにテンプレートを作るべきだ。技術革新が速い状況では、暗記することを最小限に抑えることも重要といえる。
 ガイドラインを最初に作るのは、かなり大変である。しかし、似たような技術であれば、前のガイドラインを利用できるので、それほど面倒ではない。たとえば、1つのプログラミング言語のガイドラインがあれば、別の言語のガイドラインを作るのが容易になる。財産だと思って作ると良いだろう。

 以上が、知らない技術のハイレベルな習得方法である。このような方法は、今まで持っている技術力を利用するため、それがある程度ないと難しい。しかし、あまり持っていない人でも、このような考え方で勉強することは大切だ。また、ガイドラインを作った人は、それを仲間に公開したい。みんなが利用することで、設計の質を全体として向上できるからだ。

(1997年12月28日)


下の飾り