ツール選択と仕事の質

とある雑誌の特集記事に端を発する議論に参戦してみます。ただし着地点は決めてない。

経緯

Software Design誌5月号の特集記事「Vim&Emacsちゃんと使えてますか?」という記事に対して、Twitter上で「vimやEmacsを「使いこなす」なんてやっていいのは20世紀までだろ」という話題が(もちろん一部で)盛り上がった。その後の盛り上がりは「エディタでこんなにも人心が乱れるとは」に続き、現在も進行形…なのか?「乗るしかない、このビッグウェーブに!」というわけで、私なりに思うところがあるのでここに書いておく。ちなみにこの議論、過去に何度も2ちゃんねるであったよね。

主張の要旨

私のスタンスは以下のとおり。

  • 特集記事「Vim&Emacsちゃんと使えてますか?」は確かに良くないが理由は違う。
  • ツール選択なんて何でも良い。アウトプットの質さえ高ければね。
  • IDEって便利だけど人間強度は下がるよ、間違いなく。

では上記の主張を掘り下げてみよう。

まず 件の特集は間違いなく良くない。 理由は記事の目的が曖昧になってしまっているから。おそらく「プログラミングに限らずテキスト処理というのは必要だから、いろんな手法に習熟しようね」というあたりが企画意図だと推測はできるが、実際の記事は各ツールのマイナーな使い方にとどまってしまった。またタイトルもテキスト処理ではなくエディタが主体に見えてしまい、実際の内容とズレている。そして新人向けと思われてしまう時期も悪い。いろんな要素が絡みあってどうにもならない特集記事になっているが、それをもって「VimやEmacsを『使いこなす』なんてやっていいのは20世紀までだろ」という批判につながるのは、たぶん中を読んでないからだろう。

この批判の内容だが、おおよそ「プログラマの新人さんにテキストエディタ勧めるなんて時代遅れ、IDE教えろよ」ということであった。いくつか言葉が足りないと思われるが、 プログラマのアウトプット(プログラム)の質を即席で高めるならば 、確かにテキストエディタではなく IDEを教えたほうが効率は良い。 これは反論できない事実である。管理職の立場でみれば非常に合理的だ。新人が書いたコードが一定の質を持つことを機械的かつ自動的に保証できるのだから、その経済的効果はかなりのモノなのだ。新人視点でも短期的には非常に良い。ちょっと勉強すれば質の高いコードが生産でき(決して少なくないハズの)給料が保証される。

しかしこれをもってテキストエディタで生産されるコードの質が低いということにはならない。本質的に重要なのは常にアウトプットの質であり、最近ではそれを担保するためのプロセスも重要とされている。確かに テキストエディタにはアウトプットの質を保証する機能はない わけだが、それを 使う人に保証する能力が備わっている/身につけていることが期待される。 この実現には経験と共に身につけた考え方や習慣が必須であり、結果として外部ツール(これには当然IDEも含まれる)に頼るところが大きいだろう。でもそれらの習得には実に莫大な時間を要する。経験的には3~5年だろうか。管理側としては、また被管理側(新人)としても非経済的だから、嫌われてしかるべきだ。一方、仮にあなたがテキストエディタの(業務上の)愛用者であり続けるためには、アウトプットの質を担保し、かつ担保するプロセスへ積極的に関わらなければならないだろう。

ここで忘れてならないことがある。IDEはどうやってアウトプットの質を高めているのか、その魔法の正体だ。IDEにはいろんな機能があるがそれらを突き詰めるとどれも雛形強制装置だ。雛形に従った結果として一定の質が担保される、それだけのことなのだ。雛形といってもパラメータがあまりに多いため、利用者はそう感じていないかもしれない。だとしたらそれこそがIDEを使う上での問題点だ。自身がどう行動したかその本質(雛形に従った)を理解しないまま、表面上の原因(IDEを使った)と結果(質の高いコードを生産した)の誤った因果関係を学習してしまう。結果、 従うべき雛形が存在しない仕事、雛形自体を作るべき仕事 をこなせなくなる。長く続けていれば、こういう仕事に向きあうことはまず間違いなく有り、こういう仕事は経済的に美味しくかつ面白いことが多い。IDEを使う・使わせることが美味しい仕事を担う機会と能力を失わせてしまう。もちろんIDEを使いつつもそれらを得る方法(雛形を作成する方法を学ぶメタメソッド)はあるが、「とにかくIDEを使えばいいんだ」的な主張には、その方法を見出すことはできない。これは長期的な機会損失と言って良い。

テキストエディタを使っていれば雛形を作成する方法を学べるか、という問題は残る。もちろんそのままでは学べない。ただし多くの学ぶべきことの一つとして、フラットに吸収する機会は多いし、また吸収しやすいと感じている。ただそのあたりは、IDEで必要もないのにわざわざ雛形外して書くバカのように、vice versaでどちらを使っていようがダメな人はいる。

まとめ

以上をまとめてみるとこんな感じになった。

  • 使うツールはなんだって良い。アウトプットの質さえ高ければね。
  • スキルを磨く/テキストエディタ利用者向け
    • 質を担保するメソッド/プロセス(IDEを含めた外部ツール)
  • スキルを磨く/IDE利用者向け
    • 魔法の裏側/雛形の理解

最後に補足

上記では主に質について言及しているが、アウトプット速度についても同様のことが言えるだろう。