さて、IDEをちゃんと活用しようということで書いたEclipseからテキストエディタに戻れない10の理由 - プログラマーの脳みそだが、予想通りIDEを使っていたら成長できない的な意見が出てきた。このあたりは、よく論争になるネタなのだけど、今一度向かい合ってみよう。
高度な機能を使うには訓練がいる
ある機能を使えば何も考えずに全自動でことが済んで考える必要性が無いよ、という主張を私は全くしていない。取り上げた10の機能でより高度なプログラミングができるよ、前提が変わるよということを主張していたのだった。車の運転を覚えたら行動範囲が広がった、というような感覚である。
リファクタリング機能のファーストステップたる名前の変更を例に挙げよう。この機能を使うことで適切じゃないなと思った名前を後からでも難なくリネームすることができるようになった。では、どう名付けようか?新しい名前はリネーム機能をつかったら自動的に適切につけてくれるものではない。新しい名前にする手間を省くだけだ。
しかし、この「名付け」というのは、今までは「あー。なんか目的感が違うな、概念を修正する必要がある。補正した新しい概念にあう名前にしておくか、もっと汎用的なやつにしておこう」といったときに、「でも検索して置換だと文字列的に同名だけど、別の変数とかメソッドとかあったときに誤変換するしな。手間もかかるからこの名前のままでいいか」と費用対効果的な理由でサボることが多かった。名付けを修正するコストが劇的に下がった今、適切な名付け、つまるところ構造化をちゃんとやれてる?っていうことを考えやすくなった。*1
「前提が変わる」の一端を感じてもらえるだろうか。それxxでもできるからEclipse使わなくていいんじゃね?なんてところに留まってないで、その先を議論してほしい。別に非Eclipseを使うのでも構わない。XXにこういう機能があってプログラミングの世界が変わった、Eclipseもこの高みまで来ればいいのにって感じの前向きなdisりをお願いしたいところだ。
折りしもjava-ja忘年会でこのネタも話にあがったんだけど、「F4キーで表示される継承階層のツリーを参照する機能を気に入っている」とか挙がっていたかな。こうした機能の利便性はペアプログラミングとかやると伝播しやすいのだけど、blogという文字媒体では伝えにくいね、動画にデモしてニコ動に上げるでもしないと伝わらないんじゃないか、という話もしていた。価値を理解できないからといってIDEを使わなくてもいいっていう選択はしてほしくない。
継承階層を見る機能だってそうなのだけど、それがコストを払わずに調べれるようになったことで、思考をより高度なところに割り当てられる。オブジェクト指向をより活用するには現在のこの継承階層でいいのか?という思考をしやすくするわけだ。件のエントリは10の理由なんてタイトルにしちゃったもんだから、非常に端的に機能性を列挙しているだけになっているのは事実だ。各個の機能でどう世界が変わるかの議論が広がればいいなと思ったのだけど。
Eclipseのそれは堕落するための機能じゃない。高みに上るための機能だ。そして使えるようになるには訓練がいる。それはテキストエディタでコードの写経したら身につくようなものではない。訓練するならそんなマゾい苦行じゃなくて効率よくやろうよ。
マネージメントとしての利便性
私が挙げた機能には、プログラマというよりもプロマネ的観点で必要とされる機能性もあった。とくに4のコードフォーマットチェックなんてのは納品に際して所定の書式を求められた場合の対処に必要なだけで、個人がホビーでプログラムするなら全く必要ない。
とくに声を大にしておきたいのはヒューマンエラー対策の機能性だ。
プログラミングというのは人間による手作業が主体であるから、ヒューマンエラーの影響をもろに受ける。このリスクを低減するためにIDEの機能がつかえるなら使えということ。みんなヒューマンエラーを軽視しすぎだ。自動補完もシンタックスハイライトもヒューマンエラー対策なんだ。それは自分に対しての対策でもあるし、周囲の人のミスを早期に発見しミスによる被害を最小限に抑えるために必要なんだ。
そういう意味で、私は「5. 危険なコードの検出」で取り上げたFindbugsを非常に重視する。静的なコード解析によるバグパターンの検出がどれほどの威力か体感してみるといい。
これらは教育を行う側の立場の人間にも非常に重宝するツールだ。おかしなコードを書く人間というのは基本的におかしなコードを書こうとしておかしなコードを書いているわけじゃない。そのほとんどは無知かあるいは確信犯*2だ。Eclipseのコンパイラの警告や、Findbugsによる警告というのは「警告」してくれる。これは、無知や錯誤の気づきのきっかけになる。
ある酷いソースコードをみつけたら、書いた本人にそのコードの問題点を告げ、修正方法を教えなくてはならない。それを怠るとその酷いコードと同じようなコードが次々と書かれていくのだ。
新人には十分なスペックのマシンをあてがってEclipseにFindbugsを入れておいてやるとよい。学習効果が非常に高い。あるひとつのバグパターンについて、あるひとりの新人に対処を教えたなら、あとは新人同士で伝播させる。そういうプラットホームとしてもEclipseは優れていると思う。
*1:うまく構造化できていないメソッドというのは名前をつけにくい。適切な名付けは適切な構造化に通じるものがあると思う。君はそれに名前を付けれるかい?と問う - プログラマーの脳みそでもちょっとかいた。
*2:正しいと信じていて犯す過ち。本来の意味のほう。