Hatena::Groupsubtech

#生存戦略 、それは

-> 06 { 10 / 26 }

thinkpad の HDD がまた壊れた

19:34 | はてなブックマーク - thinkpad の HDD がまた壊れた - #生存戦略 、それは

MJD…。もういやだ…。とりあえず仕事ができるぐらいには別マシン環境修復した。各種設定ファイルソフトウェアの一部を svn やらなんやらで管理しといてよかった、、、。

バーカバーカ

09:33 | はてなブックマーク - バーカバーカ - #生存戦略 、それは

おにおんくろわっさんうまいタマネギがとろとろに煮てあるの。

money_spec.rb

01:00 | はてなブックマーク -  money_spec.rb - #生存戦略 、それは

http://kakutani.com/images/20061016_0.png

カッケーrspec で TDD本写経なついー。ちょうど一年ぐらい前だなw。いま rspec ってこんな書き方できんだー。日本語仕様名書きたい!こういうのみると railstest も rspec に移行したい!とか思ったりもするけれど Test::Unit べったりな各種 test_helper がなぁ。

テストの話

00:51 | はてなブックマーク - テストの話 - #生存戦略 、それは

http://kakutani.com/20061024.html#p01

ハッカーTDDは要らない。ただただハックすればよい。

にはやっぱりちょっと納得がいかない、と思った。思った、んだけど優れたライブラリ/ツールを生み出してるハッカーってホントに TDD で作れるのか?(作ってるのか?)という気もする。

まず単体のライブラリに対するユニットテストを最初書くいてもインターフェイスの輪郭であって、まだぼやけてる。頭できっちりとイメージできない。これは「仕様がきっちりと固まってないのに作るなんてダメ」ということになるんだろうけど、仕様をきっちり定義できるほどしっかりしてない。

でもなんとなく書いていくうちに、こうした方が使いやすいよなー、といった発想が思い浮かんで Test 書き直して(つまるところインターフェイスの再定義)してまた別の実装にしてって、という事も割とあるような。これって TDD じゃないよね?

メソッドの引数が 0 or 1で、クラスに一つのパブリックなメソッドしか持たないような単純なクラスの場合は、そりゃもう仕様なんてかっちりすぐ決まって TDD になるんだけど、ちょっと複雑になってくると、わりと試行錯誤してるうちに優れたインターフェイスが実装中に思い浮かんだりして、結局 Test 書き直す、とか。元も子もない。

Plaggermiyagawa さんが書いているとおり、最初はいろんなフックの追加や内部的な変更など、仕様曖昧だったけど、試行錯誤していくうちに、現在の優れた様々なAPIや、きっちりとしたフック定義、それに基づいた Test が書けるようになっている。ということから、やっぱすごいハッカーは最初は TDD じゃなくて、純粋ドライブ感を楽しみながらハックしてるなー、という気がする。

アイディアが浮かんで、めっちゃはまってコードを書ときって、Test から書くんじゃなくてコードの断片書いてったらすごい楽しくなってって、ドライブしてって、って感覚があるよね?少なくとも俺はそうだなぁ。

ハッカーの人は「コードを書く前にはテストから」というよりも、ハック中は本人の感覚、感性コードテストを書く気がする。もちろんテスト環境がきっちり整っていたり、テスト書いた方が絶対良い場合はわりとテストから書くけど、感覚(ドライブ感)優先でどっちからでも!となる気がする。

というようなことを角谷さんは「ハッカー普通プログラマの違い」として云いたかったのかなー、と思った。ていうかそもそも前提条件が違うのか。角谷さんのくだりだと、ハッカー普通の受託開発ではない、好きなプログラミングが前提で、普通プログラマ仕様を顧客と話しながら進めていくようなプログラミングが前提の気がする。後者の場合はそりゃ最初に仕様を決めるべきであって TDD をしやすいが、前者の場合はそりゃハッカーのセンス任せだから TDD でもハックでもお好きなように、となる。

kakutanikakutani2006/10/26 01:51↑と、いうことが言いたかったんだと思います。ありがとう。ハッカーにとってTDDはオプションなんだけど(あったほうが良い)、私みたいなヘタレプログラマにはマストなんです。

secondlifesecondlife2006/10/26 09:21というか角谷さんはぜんぜん普通のプログラマじゃない件について!普通をつけるんなら「ふつう」だと思った!

takesakotakesako2006/10/26 19:00オードリたんは「ふつう」のプログラマ?(笑)
Pugsのような言語処理系の実装だと、巨大な言語仕様(expect)が予め決まっているケースが多いのでTDDでハックというのは十分合理的かも。

secondlifesecondlife2006/10/26 19:30仕様が明確なのだと書きやすいですよね。おーどりたんは最初からTDDだったのかなぁ。
あと haskell のなんとかなんとか(名前忘れた)の
テスト方法について詳しく知りたいお年頃です!

トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20061026