Murayama blog.

プログラミング教育なブログ

理想のプログラム

プログラムの話です。仕事でやるJavaとかの話。
プログラム書いてる人は、自分のプログラムにこだわりがあるもんだと思います。


例えば

if (i > 100) {
}

と書く人がいれば、

if(i > 100){
}

と書く人もいる。
何が違うのかというと、ifの後に半角スペースを入れるかどうか。
こんな細かいところもこだわる人はこだわるのがプログラムの世界です。
Javaの標準的な作法とかあるのかも知れないけど、僕はどっちでも良い派の0型の人間です。


で、ここまでは、本題とは関係ないのですが、
最近になってようやくわかったんだけど、
僕の思っていた、理想のプログラムは間違ってた。というお話です。


今までの僕の理想のプログラムってのは、

  • 名前重要。クラス名、メソッド名、変数名などはこだわるべき。
  • メソッドは短くあるべき。長くとも1画面に収まるべき。
  • わかりにくい条件式はメソッド化する。
  • デザインパターンは使うべきところで使うべき。なんでもかんでも使用しない。


と、細かいことあげればキリがないのですが、
今までの僕の理想のプログラムは、
「プログラムを書く」という視点でのこだわりでした。
いかに自分の納得のいくビューティフルなコードを書くかというこだわりでした。


でも、ここで当たり前のことを言っちゃうと、
良いプログラムっていうのは、
読んでて感動するような美しいプログラムてわけではなくて、
正しく動くプログラムなんですね。つまり、バグのないプログラム。


で、ようやく気づいた僕の理想のプログラムなんだけが、
プログラムにおいて重要なのは
「テストしやすいかどうか」という1点に尽きるということです。*1
言い換えれば、
「テスタビリティの高いコード」
を書くべきだと気づきました。


良いプログラムの条件を、正しく動くプログラムだとすると、
エディタ上で見えるプログラムの美しさは大事ではなくて、
実際に動かすときに見える振る舞いこそこだわるべき、だということです。*2
つまり、プログラムの静的な側面ではなく、動的な側面に着目する。
そんな感覚を持つようになりました。


もう少し具体的に言うと、
JUnitに代表される自動テストツール*3をいかに上手く使うか、
という点にこだわりを持つようになりました。
そうなるとプログラム本体の設計にも変化が出てきて、
テストしやすいクラス設計、メソッド設計とはなんだろうか、と興味を持つようになりました。


で、オススメされた本がこれ。

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

  • 作者: マイケル・C・フェザーズ,ウルシステムズ株式会社,平澤章,越智典子,稲葉信之,田村友彦,小堀真義
  • 出版社/メーカー: 翔泳社
  • 発売日: 2009/07/14
  • メディア: 大型本
  • 購入: 44人 クリック: 640回
  • この商品を含むブログ (133件) を見る

テストがないコードはレガシーコードだ!

ほんと、そのとおりだ。
まだ読み始めて半分くらいだけど、勉強になります。


てことで、これからはテストしやすいプログラムってのを考えていこうと思います。

*1:ここでいうテストとは厳密にいうとユニットテストのことです

*2:ここはうまいこと言ったと思う

*3:カッコよく言うとテストハーネス