JavaとPerlとTDDと回想と。

この辺りのお話で。


JavaPerlも俺の中では、かなり上位にランクインする好きな言語なんだけど、なんか両者の文化圏は妙に対立することが多いよね。
今回のは、小飼さんの「Eclipseの中」発言が全てを集約している気がする。


エンタープライズJavaな現場ってのは、経験上、窮屈なもので、だからこそJavaというアーキテクトがガチガチにプログラマを縛っていけるような言語が受け入れられたということがあると思う。
俺が、初めてJavaを本格的に業務で使ったのは、2001年ぐらいだったとおもうんだけど、まだEclipseですら、重くて使い物にならないと思われていたような時代で、その頃はSolaris上で、vi+ant+etcな環境で開発していた。CやC++な大規模開発と比べれば、「hogeを研修でやりました。それが唯一のプログラム経験です。」というような新人さんが、3割とか4割ぐらいを占める現場では、安心して業務を進めることが出来た。何てったって、ガチガチに縛ることが出来ることが強かった。
Eclipseの認知度が高まってから、ユニットテストカバレッジ系のものも安価で品質がよく、なおかつEclipseというIDEで動作する環境が整い始めてから、なおさらそういう現場では、IDE込みで縛ることによって、自分やプロジェクトの安全を買うということになっていったんだと思う。そのころには時代的にも、コストだなんだと厳しい時代に突入していきはじめていたから、いろんな意味での新人比率も増えるし、きちんとコントロール出来るような状況じゃなくって、テストファーストなんて言ってられなくて、順序はともかく、最低限カバレッジだけって風潮だったように記憶している。勿論、後付けでテストコードを書くものだから、そこで検討漏れのようなものは全く検出出来ずに大変な問題になったとかそういうことが起こったりした訳だけどね。


そういう流れで、Emacsやviな人たちだって、組織的なしがらみで、そういうIDEを使わざるを得なかった。
俺も、EclipseのようなIDEなんかはいいかと言われると、ちょっと懐疑的で、CLASSPATHとかそういったものを隠蔽しすぎて、逆に新人さんのためにも組織のためにもならないんじゃないのかなあと思っていた。vim好きってのもあったけど。


誰が最初に言い出したか忘れたけど、Javaは軍隊的だってのは、そのとおりだと思う。そういう現場を縛れる安心感が、大きくなりすぎて、結局は軍隊というか、下手すると末端はパンチャーみたいな扱いになっていった気がする。


一方で、平行するような形で、Perlの案件も幾つか経験したんだけど、これらが全て少人数開発で、この人は出来るって人しかいないようなものばっかりだった。開発スタイルも、ガチガチじゃなくって、口頭で、「こういうインタフェースで。」って決めて、ガーッとコーディング。*1
これが楽しかった。
今でもJava的なカッチリした所も好きだけど、何度か幸運な巡り合わせもあって、LLなWeb開発系の会社で働くようになって行ったのも、やっぱりその時の楽しさがあったからだと思う。


そういう今までの自分の歩んできた道を考えると、小飼さんの「Eclipse」発言のあとでの、「テストはプログラマじゃない人でも」発言はちょっとどうかと思った。ああいう縛りの強い現場でユニットテストすら他者のものになってしまったら、それはプログラマじゃなくって、パンチャーなんじゃないかなと。
俺的には、テストファーストってものは、アイデアプロセッシングだと思ってるから、そういうように思ってしまうんだけどどうなんだろう。
駆け出しの頃、テストの中に、コメントアウトされた実装出来なかった"TODO:"をたくさん書いていた人間としては、テストコードも書けないなんて、やるせないと思う。*2



もう、話が回想方向とか、それに刺激された話に行き過ぎて終着点がわからなくなってきたんだけど、個人的な印象では、TDDというものを広く捉えると、ユニットテスト的な部分は、LLというか、UnixとかOSS系なギーク文化で強い気がする。カバレッジ方面は、スーツ系が強い気がする。
まあ、どちらがって、話じゃなくって、相互に刺激し合えばいいのかなと思う。


あと、角谷さんの「ハッカーはテストいらん」的な話もアレだ。TDDってGTDみたいなもので、楽するための道具なのにとか思う。


考えてみると、TDDって考え方のおかげで、テストが楽になった。デバッカでテスト項目追っかけるより、ずっと楽になった。技術の進歩のおかげかな。Javaテストファーストがなかなか浸透しなかったのは、初期のJava屋がC/C++上がりで、gdbで追っかけてなんぼの文化があったからな気もするなあ。特に、昔のVMは本当に信用出来なかったから。


まあ、そんなこんなでうだうだ書いてしまったけど、俺的には、こういう摩擦を超えて、言語とか文化の差異を補完し合ったりした先がどうなるかが一番楽しみな感じであります。

*1:当然、ユニットテストはコーディングに入ります。

*2:いや、いまでもTODOはよくある。