Eyes, JAPAN Blog > 拙速を尊ばない

拙速を尊ばない

beko

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

プログラミングは非常に専門的な作業であるため、社内の人間であってもその内容を正確に理解・評価するのことは容易ではありません。
そのため、プログラマに対する評価はその成果物、すなわち完成したプログラムの動作や、それができるまでの期間といったものを基準に行われることが多くなります。
そうなると必然的に、指定された要件を満たして「とにかく動くプログラム」を「短い期間」で納品できるプログラマが高い評価を受けることになります。

しかし、動作が同じだからといって、プログラムの「質」が同じだと考えるのは大きな誤り。
何故なら、プログラムの質の良し悪しは、動いているときではなく、何らかの理由でそれが動かなくなったときにこそ問われるものだからです。

動けばよいのか

ソフトウェアの動作はそれ単独で完結するわけではなく、それが使用するライブラリ, データベース, ネットワーク, ファイルシステムといった周辺要素からなる環境に依存しています。
「短期間で」「とにかく動く」ことを目的として作られたソフトウェアを注意深く観察すると、こうした環境が変化しないことを前提として設計されているものが多いことに気付きます。
例えば、

  • 使用するデータベースは PostgreSQL で固定
  • 入力ファイル中の改行はCRLFであるものとする
  • 使用できる画像ファイルはJPEGだけ

といった仮定のもとに作られたプログラムを目にすることは少なくありません。
このような設計に基いて実装されたプログラムは、その前提のどれか一つが崩れるだけで、正常に稼動をすることができなくなってしまいます。

一方、優れた開発者は、環境の変化による影響を最小限にとどまるようにプログラムを設計します。

  • 使用するデータベースの種類が変わっても、設定ファイルを書き換えれば動くように
  • 代表的な改行コードは (LF/CR/CRLF) に対応
  • 特定の機能に不具合が生じても、他の機能は引き続き利用できるように。

もちろん、そのようなプログラムの開発は、設計・実装により長い期間を要します。
しかし、環境の変化は、それが予定されたものしても突発的なものにしても、いつかは必ず、そして一定の頻度で訪れるもの。
そうした状況におけるサービス停止の延長による損失や改修にかかるコストを考えれば、設計開発の時間を長めにとることは決して損とはならないでしょう。

最悪の事態を予想する

このような環境の変改に強いソフトウェアを設計する上で重要なのは、起こり得る環境の変化をできるだけ悲観的に予測すること。
確率的に低いと考えられる事柄であっても、実際に発生した場合にとることのできる対応を頭の中でシミュレートしておくだけで、設計のクオリティは向上します。

未来に対して備える場合、「もし○○だったら、どうするのか?」と考える。
これは当然のことだ。
いろいろなケースを想定し、そのそれぞれの場合に自分はどう対処するのか、という判断をしておき、場合によっては実際に準備もすることになる。
ところが、そういう考え方がそもそもできない人がいる。
スバル氏がそうだ。
「もし○○だったら」と想像してごらん、と話すと、「どうしたら○○なんて事態になるのか」「本当に○○になるだろうか」「○○になるなんておかしいではないか」という方向へ考えが向かうようだ。
そうではなく、それがあったとき、「自分がどうするのか」を考えてほしいのだが……。

MORI LOG ACADEMY: 未来予測のすすめ

逆に、そうした考え方・対応ができない人はソフトウェアの設計・開発といった業務に携わらないようにした方が、本人も周囲も幸せなのかもしれません。

成田 (石橋クラッシャ)

Comments are closed.