書籍「テスト駆動開発」を読んで感じたこと
はじめに
「テスト駆動開発」「TDD」、もちろんキーワードとしてはずっと知っていたけど、自身のキャリアの中で真剣に学ぶタイミングを逸していた。最近勉強している「ドメイン駆動設計」の中でも「テスト駆動開発」の話は出るし、ajito.fmの古い回をちょうどよく聞いたこともあり興味が再燃。きちんと理解しようと和田さんの「テスト駆動開発」を手に取った。そこで感じたことを記しておく。
書籍の読み方
この本を読むにあたって大事なことは2つあるかなと思っている。
ひとつめは、「写経」すること。ふたつめは、「付録C:訳者解説」から読むこと。
1:「写経」すること
写経することについては、書籍のP.305にも書かれている。実際に自分が思ったことはこのページに書かれてしまっているのだけど、以下のようなことを思った。
・写経をすることで優れたプログラマーが何を考えながらコードを書いているかを追体験できる
この書籍は、試行錯誤の過程もそのまま書いているので特にオススメ。
・別の言語で写経をするとさらに学びが多い(自分はPythonで写経した)
書籍でレッドになるところがグリーンのまま進むこともあり、なぜだろうと考えると言語仕様によるものだった、ということも多々あり、言語の特徴が見えてくる。
2:「付録C:訳者解説」から読むこと
自分は残念ながら最初から読み進めてしまったけれど、これは絶対にしたほうが良い。内容が古びているわけではないのだけど、やはり初版の出版から20年近く経過していることもあり、変化がたくさんある。付録Cでは、その全体像を丁寧に解説してくれている。全体のマップができた中で、この本を読むことで、位置づけがクリアになっていくと思う。
写経の中での気づき
第Ⅰ部はJavaで書かれているけれど、これをPythonで書き直した。お恥ずかしながらソースを公開してみる。
写経をしながらメモを残していたのだけど、以下のようなことを思っていたらしい(早くも記憶が遠のいていく・・・)
・「同一性」の判定で悩んだ
Pythonだとインスタンス化した際に、別のメモリ空間に保存されるのでassertEqualsが正しく動かないことがあった。結局「__eq__」を実装して対応した。
・Pythonって動的型付けなんだなぁ
いや、まぁ、そんなのは知ってたんだけど、いざ静的型付け言語である Java から書き直してみると、違いを感じるところが多かった。意識的にやろうと型ヒント書きまくったらソースがごちゃごちゃして見にくくなったり。
テスト駆動開発の勉強という目的もだけど、Pythonの勉強にもなった。この辺の話はもうちょっと違う軸も入れて、整理して書きたいなと思う。
他に感じたこと
読み始めるきっかけのひとつになったajito.fmの回を、読み終えた後に聞きなおしてみた。結構同じようなことが話されていて、「わかるわぁ~」と思いながら聞けた。和田さんのこの本に込めた想いとか狙いも話されているので、より深く理解する手助けになるかと思う。オススメ。