プロダクティブ・プログラマ

プロダクティブ・プログラマ -プログラマのための生産性向上術プロダクティブ・プログラマ -プログラマのための生産性向上術
島田 浩二 (監訳) 夏目 大

オライリージャパン 2009-04-27
売り上げランキング : 7235

Amazonで詳しく見る
by G-Tools

もちろん、プログラマは究極のパワーユーザであるべきなので、どれも覚えておくべきものです。

プログラマの生産性を上げるためのテクニック集。ただそれだけの本ではあるが、俺の初心に戻らせてくれた。

本書は、重厚な技術書と、オライリーお得意のなんとかHacksの中間に位置するぐらいの本である。大きく2部にわかれていて、1部は『技法編』と題してTips的な内容を、2部は『実践編』としてよりプログラミングに関する哲学やテクニックに関する事柄に触れている。

実際のところ、初心者向けの内容だと思う。例えば、検索には正規表現を使いましょう、ランチャー使いましょう、自動化万歳、コードの凝集度を下げて再利用性を上げましょう、などなど。初心者の多くはあまり「うまいやり方」を熱心に探求してこなかっただろうから、そういう人々には目から鱗が落ちる経験を味わわせてくれる良書といえる。

しかし、すでに初心者の域を脱している人からすれば「知ってるよ、そんなこと」といった内容が多い、ということになる。それではそういう人々にとっては価値の無い本なのか?

それは個人差もあるのでわからない。ただ個人的には、次の一文を読めただけで読んでよかったな、と思っている。

単純な手作業の繰り返しは、人間から知力と集中力を奪ってしまいます。知力と集中力は、生産的活動にとって最も重要な資産ですから、それが奪われることは何より重大な損失なのです。

逆に、同じ作業をするのでも、少しでも賢い方法を探そうとすることや、少しでも自動化しようとすることは、知力の向上につながります。その過程で必ず何かを学ぶことになるからです。

この文は、次のあたりまえのことを思い出させてくれた。

  • 効率化の目的は目先の時間短縮ではない
  • 学習はレバレッジが効く

効率化の目的は目先の時間短縮ではない

本書の導入で、FirefoxのショートカットキーCtrl+Enter(MacはCommand+Enter)についての話がある。これは、ロケーションバーに書いたテキストに"www."と".com"を自動補完する機能であるが…。

このショートカットを知っていた人は20%もいませんでした。アンケートの対象になった人はいずれも相当な「エキスパート」であるにもかかわらず、これほど簡単な生産性向上テクニックさえ使っていなかったのです。このままではいけない、何とかしなくては、と強く感じています。

読んだとき、「何を大げさな」と思った。Githubにアクセスするのに、マウスでロケーションバーを選択して"github.com"と入力してReturnするのと、Command+L -> "github" -> Command+Returnするのとでどれだけの差があるのか。時間にして数秒程度でしかない。そんなものでプログラマの生産性が大きく変わるとは思えない。

しかし、重要なのは何秒早くなるか、ではなかった。"人間から知力と集中力を奪ってしまいます。"という状況を脱出することが重要なのだ。

例えば、「上書き保存」をCtrl+Sでするのと、メニューバーの"ファイル" -> "上書き保存"を選択するのとでは、時間にして大した差はない。しかし、キーボードからマウスに持ちかえ、メニューバーの中から"ファイル"と書かれている部分を見つけて、そこにマウスカーソルを合わせて…といった込み入った作業をしていれば、それまでの思考の流れがせき止められてしまう。止まった流れを元に戻すのは時間がかかるし、頻発すればイライラして集中力も無くなるだろう。細かいことを考えなくても、今自分からCtrl+Sが取り上げられたらと想像して欲しい。ゾッとしないだろうか。

操作時間を短縮するための小手先の技巧は、プログラマの生産性に直接的には貢献しない。しかし、思考の流れを止めないという効果によって、間接的に生産性の向上を促し、結果として時間短縮を実現するのだ。

だから、目先の作業時間の違いだけでやるやらないを判断してはいけない。秒単位の差しかでなくても、より効率的は手法を覚え、使いこなすべきなのだ。

学習はレバレッジが効く

もちろん、最初は不慣れな操作を行うことになるから、余計に時間を使う。思考の流れも従来までのやり方以上にブツブツ切られる。しかし、それでもやるべきだ。操作に慣れるのはあっという間であり、慣れてしまえばより生産性の高い世界に行ける。それに、そうして努力したことが自分の力になる。

俺もRubyを覚え立てのころはちょっとしたスクリプトを書くのにも苦労した。余計に時間を使ったし、それを後ろで眺めていた上司から「こういうときはむしろ手でやっちゃったほうが早く片付いたりするんだよねぇ…」とか嫌みったらしくつぶやかれたりもした。しかしそれでもスクリプトを書くことにこだわった結果、今ではかなり自由に使いこなせるようになっており、特にRakeと併用することで大抵の自動化作業を高速で行えるようになっている。しかも、マルチプラットフォームで、だ。俺があのとき手作業をしたり手慣れたシェルスクリプトに逃げるような人間であったら、今の力は持ち得なかっただろう。

一時的に時間を多くつかってしまうが、それはかまわないのだ。後になって、時簡短縮と自分の能力向上という二つのボーナスが返ってくる。そのことを信じて、一時の不利益を受け入れるべきなのだ。*1


本書を読んで、先日からちょっとしたストレッチをしている。Dockからアプリケーションを取り除いてQuickSilverからしか起動しないようにしたり、Firefoxをはじめとした日常的に使っているツールは全てショートカットキーを覚え直している*2。最初はイライラもしたが、おかげで徐々に操作に慣れつつあり、いろんな操作がスムーズに進むようになってきている。また、ショートカットキーを調べようとヘルプを読んでいるうちに知らなかった機能を発見して*3、それがまたスピードアップにつながりもしている。これはちょっとした快感である。かつてviを苦戦しながら覚えて、日が経つにつれて手足のように使えるようになり、ついには手放せなくなっていった過程をまたなぞっているようだ。

かつて夢中になって取り組み、いつしか重要なことではないと切り捨てていた"小手先の技の習得"を今再び始めてみようと思うのだ。また、所詮自分の趣味にすぎず時間の無駄にしかならないのではと最近懸念し始めていた、ちょっとしたスクリプトの作成を積極的に行っていこうと思うのだ。それらは楽しいことだし、自分の成長も感じられるし、この積み重ねが高い生産性を持つ自分を作ると信じられるから。

*1:もっとも、やり過ぎもいけないので、これが難しいところではある。

*2:もちろん、Githubに行くときはCommand+LとCommand+Enterを使っているとも!

*3:RTMの複数編集モードなど