プログラマが知るべき97のこと/IDEを知る
1980年代に「プログラミング環境」と言えば、ほとんどのプログラマにとって、あの素晴らしき「テキストエディタ」だけでした。どれほど恵まれているプログラマでも同じ状況でした。最近では当たり前の機能のように思われているシンタックスハイライトですら贅沢で、誰もが使えるというわけではありませんでした。コードをきれいにフォーマットする機能は外部ツールになっていたので、プログラマが逐一実行する必要がありました。コードを1ステップずつ実行するデバッガもやはり外部ツールで、使う際には、暗号のようなコマンドをたくさん打ち込まねばならなかったのです。
1990年代になると、プログラミング用のツールを売れば大きな利益につながるということを企業が認識し始めました。それで生まれたのがいわゆるIDE (Integrated Development Environment :統合開発環境)です。これは簡単に言えば、従来から広く使われていたテキストエディタに、コンパイラ、デバッガ、コードフォーマッタなどのツールの機能を組み込んだようなものです。またIDEが生まれる頃には、マウスやメニューを使うGUIが一般化していたので、暗号のようなコマンドを覚える必要もなくなりました。マウスを使ってメニューを選べば操作できるようになったのです。
21世紀には、IDEは当たり前の存在になり、他の分野でのマーケットシェアを獲得するためにIDEを無料配布する企業も増えました。最新のIDEは、驚くほど機能が豊富です。私が気に入っているのは、自動リファクタリング機能、中でも「メソッドの抽出」という機能です。これはメソッド中の一部のコードを選ぶと、その部分を新たなメソッドとして切り出してくれる機能です。どういうパラメータを渡すべきかもすべてツールが自動的に判断してくれるので、非常に簡単にコード編集を行うことができます。私が使っているIDEには、新たに作ったメソッドで置換可能な箇所が既存コードの中にないか探す機能もあります。もし見つかれば、置換するか否かをこちらに尋ねてくれます。
最新のIDEには、社内のコーディング規約を強制的に守らせる機能もあります。たとえばJavaの場合「すべてのパラメータをfinal宣言すること」というルールが定められている企業もあります。この種のルールを守るのはかなり大変で、私は個人的に時間の無駄ではないか、とも思います。IDEにルールの強制機能があれば事情は変わってきます。あらかじめ「こういうルールがある」と設定しておけば、常に気をつけている必要はなくなるからです。もしfinal宣言していないパラメータがあれば、警告を出してくれるでしょう。この機能はバグの検出にも役立ちます。たとえばオートボクシングされたオブジェクトの比較に==を使用している箇所の自動検出などは有効でしょう。プリミティブ・型の値がラッパークラスにオートボクシングされた場合、==を使うと、値が同一かではなくインスタンスが同ーかが比較されてしまうため、バグの可能性が高いのです。
幸か不幸か、今やIDEは使うのに訓練や学習をほとんど必要としないものになっています。私がはじめてUNIXマシンでCのプログラミングをした時は、viエディタを使う必要があり、その使い方を習得するのにかなりの時間を要しました。viエディタの学習曲線は、かなりの急勾配(きゅうこうばい)と言えるでしょう。いったんコツがわかると急激に理解が進むのですが、最初の段階では非常に苦労をするのです。しかし苦労して身につけた技術は、その後ずっと役立ってくれているので、苦労は十分報われたと言えます。実際この原稿を書くのにもviを使っています。反対にIDEの学習曲線は非常に緩やかです。苦労せずに使い始められるのですが、その後はなかなか上達しないことが多いのです。長い間、基本的な使い方しか知らないという状態が続いてしまいます。
私は新しいIDEについて学ぶ時は最初にキーボードショートカットを覚えるようにしています。たとえば、コーディング中、変数をインライン化する必要が生じたとします。もちろんメニュー操作でそれはできるのですが、キーボードから手を離してマウスを持つと、それで思考の流れが中断してしまいます。Ctrl+Shift+1というショートカットを覚えていれば、マウスを使う必要がなく、思考の流れを中断せずに作業が進められます。マウスをずっと使っていれば、ショートカットを覚える必要もなく楽ですが、集中力が何度も途切れる分、生産性は低下してしまいます。同様のことはタッチタイピングにも言えます。タッチタイピングは習得するのに時間もかかり、最初は大変ですが、習得することで得られる利益の大きさを考えれば、最初の苦労は何でもないでしょう。
最後に、私たちプログラマにはUNIXがあります。UNIXには、習得は容易ではないが、一度習得してしまえばコーディング作業の効率化に非常に役立つツールが多数あります。たとえば、コードレビューで「システム中に同じ名前のクラスが多数あるらしい」と気づいたとします。その場合、実際に同じ名前のクラスがどのくらいあるかは、次のようにfind 、sed、sort 、uniq 、grep といったツールを使えば簡単に確認できます。
find . -name "*.java" | sed 's/.*\///' | sort | uniq -c | grep -v "^*1" | sort -r
家に修理に来る配管工はプロートーチ(簡易型溶接機)という専門の道具を当然使えるはずです。IDEは今やプログラマにとってのプロートーチかもしれません。今後は、IDEをどう使えば生産性を上げられるか、時間をかけて学んでいくべきでしょう。