プログラミング中に生じた問題を同僚や友人に相談するときのことを思い浮かべてほしい。日本語であれこれ説明してもらちがあかず,結局ソース・コードのプリント・アウトを見せたり,メールに該当部分をカット・アンド・ペーストして送ってしまった――こんな経験がある人も多いだろう。

 プログラマにとって,コンピュータが実行する処理の内容を最も正確に表現できるのは,日本語ではなくコードである。これは,プログラマとコンピュータの間だけでなく,プログラマ同士の場合も変わらない。普段意識している人は少ないかもしれないが,プログラマにとってコードとはコミュニケーションの道具もあるのだ。数学者や物理学者が議論するのに数式を使うのと同じである。

 プログラミングを始めたばかりの人なら,コードを一行ずつ追いながら,そこでどんな処理をしているかを日本語で考えているかもしれない。が,経験を積むと,こうした翻訳作業は不要になる。英語の学習で言えば,「英語で考える」ことができるようになった状態だ。こうなると,日本語で説明するよりもコードを見せたほうが手っ取り早いし意図も正確に伝わる。記者が担当する日経ソフトウエアを始め,プログラミング雑誌の多くが本文とは別にコードを掲載しているのも,これが最大の理由である。

コミュニケーションのための道具は「考えるための道具」でもある

 しかし,本当にそれでいいのか,最近少し疑問を感じている。確かに,ソース・コードはすべての情報を含んでおり,プログラムの詳細を正確に表現するには一番だ。でも,プログラムの情報を表現する手段はほかにもある。昔で言えばフロー・チャート,今ならクラス[用語解説]図などのUML[用語解説]ダイアグラムがその例だ。

 こうした図は詳細度は低いものの,より直感的に理解できるというメリットがある。例えば,ソース・コードをちょっと見ただけでアプリケーションを構成する各クラスがどのように関連しているかを見ることは難しいが,クラス図を見れば一目瞭然である。

 ここで重要なのは,コミュニケーションのための道具は多くの場合,考えるための道具でもあることだ。コーディングの前にクラス図を描くなら,クラス同士の依存性をなるべく少なくする習慣が自然と身に付くようになる。クラス間の関連を描いていく際にすぐに気が付くからだ。UMLに従ってクラス図を描くのは面倒に感じるかもしれないが,最近の開発ツールの中にはクラス図とコードの間でリアルタイムに同期をとる機能を持つものもあるので,それほど手間が増えるわけではない。

 複雑な状態遷移を伴うようなプログラムなら,状態遷移図(ステート・チャート)を描くのも有効だ。プログラムの取り得る状態と遷移条件,遷移方向を描くことで,頭の中が整理され,見落としによるバグも少なくなる。状態遷移図をコードに落とすのは機械的な作業なので,これも将来は開発環境がコードを自動生成してくれるようになるかもしれない。

図の描き方だけでも先に覚えよう

 継承や多態性といったオブジェクト指向の概念自体は理解しているのに,クラス設計ができない開発者は意外に多い。その原因の一つは,プログラミングの学習初期に「プログラミングとはコーディングのことである」といった印象を植え付けられ,とりあえずコードを書いてみる,といった習慣が身に付いてしまうことにあるのではないだろうか。

 これは,プログラミング雑誌や書籍にも責任の一端がある。設計自身を取り上げる記事を別にすると,雑誌の多くは最終的な成果物であるソース・コードを見せるだけで,設計の過程やクラス図を見せることは少ない。API[用語解説]の使い方といった技術解説をするなら十分と言えるが,結果的に初心者がクラス図などのコード以外の表現手段に触れる機会が少なくなっているのも事実である。

 もちろん,UMLを学んだだけでクラス設計ができるようになるわけではない。UMLは,設計のための道具,極論すれば,図の描き方を定めたものに過ぎない。しかし,使い方をきちんと理解していないにしても,とりあえず道具を持っている状態のほうが,ないよりははるかにましではないだろうか。

 例えば,クラス設計を学ぶためにソース・コードを読む場合にしても,漫然とコードを眺めるのでは「木を見て森を見ず」になりがちだ。対してクラス図を描きながら読むようにすれば,プログラムのより大きな構造が浮かびあがってくるようになる。加えて,コーディングの前にクラス図を描く習慣を付けることで,曲がりなりにも設計→実装という開発手順が身に付くようになる。

 プログラミング雑誌の記事や書籍,各種学校の講義では,入門者にまず文法を教え,UMLや設計はその次という順番だ。企業の新人研修でも恐らくそうだろう。でも,細かい記法や「良い設計とは何か」といった難しい理屈を抜きにして,とりあえず図の描き方だけでも教えるようにしたほうがいいのではないか。これが記者の最近の考えである。

(山本 哲史=日経ソフトウエア)