97 きのこ!

プログラマが知るべき97のこと

プログラマが知るべき97のこと

通称 97 きのこ本を、監修者の id:t-wada (和田さん) から頂きました。ありがとうございます!
この本は、81 人のプログラマによるエッセイ集です*1。一つ一つのエッセイはほとんどが 2 ページに収まっており、気軽に読むことができます。
この中から、気になったものをピックアップして紹介します。

カプセル化について言及しているエッセイ

  • 15 コードの論理的検証
  • 31 状態だけでなく「ふるまい」もカプセル化する
  • (61 プリミティブ型よりドメイン固有の型を)

カプセル化に関しては以前調べたことがありますが、結局バラバラでみんな好きに使えばいいんじゃないか、という結論でした。
この本でのプログラマたちはオブジェクト指向のこころなどと同じような使い方をしています。

例外について言及しているエッセイ

  • 21 技術的例外とビジネス例外を明確に区別する
  • 93 エラーを無視するな

この 21 番目のエッセイは必読です。
例外は例外らしく使いたいものです。


93 番目に関しては、Error モナドにも触れてほしかったような。

プログラミング言語について言及しているエッセイ

これはこのブログでも何回か取り上げている話題ですね。文化重要。


43 番目のエッセイでは「C++ を使っていた人が Haskell を学ぶことや、(略) 言語の性質が大きく違っているために困難を伴うでしょう」という某闇の軍団がよろこびそうな色めき立ちそうな表現が・・・
付け加えておくと、エッセイの内容自体は非常に素晴らしいですよ。

個人的に微妙なエッセイ

中には微妙なエッセイもあります。


65 番目のエッセイは、バージョン管理システムを有効に使えと言っているのにもかかわらず、「ビルドを壊すようなコードは絶対にコミットしないこと」としています。
うーん、個人的にはここもシステム側で弾く仕組みを構築して、それを有効に使うべきだと思うんですよね。


70 番目のは、全てのシングルトンを排除せよ、と言っているような気がします。
変更可能な状態を持たないようなシングルトンは、それほど忌避するものじゃないと思うんですよね。
ただ、シングルトンの濫用は (他のパターンの濫用よりも) ひどいことになりやすいので、誘惑に負けないのは重要だと思います。


91 番目のエッセイはこの一文で色々と台無しにしてる感じを受けるんですよね。
「コードの正しさを確実に証明できるテストも書く」
あー、うー、あー。

一番考えさせられたエッセイ

最後に、一番考えさせられたエッセイです。
それは、96 番目の「テストは正確に、具体的に」です。


このエッセイでは例に出している「ソートのテスト」ですが、これを見て
「テストケースとしては別でも、確認する内容が同じテストってどうすればいいんだろう」
という疑問を持ちました。
例えば NUnit では基本的にメソッド名をテストケース名として扱うのですが、本エッセイの例では

  • 結果としてできるシーケンスがソートされたものになっている
  • シーケンスが、ソート前と同じ値で構成されている

という 2 つのテストケースを
「[3 1 4 1 5 9] をソートした結果、[1 1 3 4 5 9] になる、とテストして、それ以外を全て正しくないとみなす」
というひとつのテストで 2 つのテストケースに対応しているわけです。


これ、テストケースとして 2 つをまとめて 1 つにしてしまった、と見れば 1 テストメソッド 1 テストケースの関係が保てます。
が、これどう考えるべきなんでしょうね・・・
なんだか 1 テストメソッド n テストケースを前提として、ちょっと見直してみるのもいいような気がしてきています(NUnit の TestCase 属性などはすでに 1 テストメソッド n テストケースですし)。


こんな感じで、いくつものエッセイがあるのでいくつかは「ハッ」とさせられることでしょう。
軽く読める本なので、どんな人にでもおすすめできる本です。
みなさんきのこ読みましょう!きのこ!

*1:原著では 73 人 97 エッセイだけど、日本語版では日本人プログラマ 8 人によるエッセイ 10 本が追加されており、合わせてエッセイ 107 本!