今年の1月から、午後はずっとperlかJavaのプログラミングが主な仕事になっています。純粋に開発者としての仕事をするのは、ここ数年で久々かもしれません。
そこで、開発者として、集中力を最大に高まった状態にもっていくためにどのようにしたらよいか、自分を実験台にいろいろ試してきた結果、最近、狙って集中力を高めることができるようになってきたので、メモ代わりに残しておこうと思います。
■集中力の高まり方
集中力は一気に最大になるのではなく、最初はなだらかに、そして徐々に加速して、高まっていくものと思っています。これを意識しながら開発作業を進めます。
■今、試している方法
(1)マシンを立ち上げる
(2)届いているメールを読む。返信できるものは返信する。
(3)日報を書き始める
具体的な開発作業よりも先に日報を書き始めます。メーラーを立ち上げ、メールを新規作成。前日分をコピーし、今日の分の日報に貼り付ける。「次営業日の作業」から「本日の作業」に転記する。その他、書けるところは書く。
(4)開発時に使うソフトを全てを立ち上げ、資料、参考書などを全て所定の場所におく
今はperlがメインなので、SSH端末、SCP、Eclipse、ブラウザを使用します。SSH端末としては以下のものを用意し、テキストファイルに記述された順でたちあげ、ディレクトリも移動しておきます。
・Apache、起動/停止用
・ログ参照用
・テンプレートコンパイル用
・MySQL用端末
・perlの簡単な動作確認など自由に移動するための端末
また、SCPクライアントも、perlソース用、テンプレート用、データアクセスperl用と3つ起動し、ディレクトリを移動します。最後に、CVS用にEclipseも起動します。
また、perl独特の書き方(配列やハッシュ、$とか#とか->とかの組み合わせ)をすぐ忘れてしまうので、それをまとめたテキストファイルもすぐ参照できるよう用意しています。これが、結構活躍しています。
(5)手帳を開く
プログラミングをしてると、「あれを勉強したい」「あの本を読みたい」「こんな知識が必要だ」「こんな風に将来なりたい」など、いろいろ向上心がわいてくるので、これを書き留めるようにしています。
(6)プログラミング開始
環境を全て整えて、プログラミング開始です。
情報へのアクセスが自分にとって最適されているので、思考が途切れることなくプログラミングすればするほど集中力は高まっていきます。その高まりを実感しながら仕事をすると良いでしょう。
また、メールを頻繁にみると集中力が切れるので、毎時0分、30分しか見ないようにしています。(あまりほったらかしにするのもプロジェクトでの他の人との関係上、よくありません)
■日報を先に書き始める効果
日報の「本日の作業」には、「XXX機能実装・テスト」という粒度よりも
さらに具体的に、XXXテーブルデータ更新、XXXチェック処理など必要な作業を、細かくブレークダウンしていきます。
私は、この時間が作業の効率に、大きな影響を持っていると考えています。
作業を始める前の計画、想像力がいかに大事か、ということに関連する言葉で知っているものをあげてみます。
「あらゆるものは2度作り出される。はじめは知的な創造。第2は物的な創造である。」(第8の習慣より)
「木を1本切るのに、8時間もらえるのなら、私は最初の6時間は斧を研ぐのに費やす」エイブラハム・リンカーン
「アイディアを生み出すサイクルと、処理するサイクルを一緒にしてはいけない」(ストレスフリーの仕事術より)
「2度測って、1度切る」(大工職人の格言)
完成したプログラムは、後で読み返してみると意外に短いものです。手を動かしあれこれと考えながらプログラミングするよりも、ペンを持って、しっかりと考え、情報をまとめながら、プログラミングした方が、1度でしとめる事ができ、効率が良いというのが僕の長年の実感です。考えることに投資した分の見返りは十分にあります。
上の言葉の「はじめの知的な創造」が終わった時点で、半分は終わったとみなしても良いと私は思っています。
また、日報に今日の予定を先に書いてしまえば、1日の終わりには、詳細な日報を送信することができるので、仕事の基本の「報・連・相」の「報」ができる人間となるので一石二鳥と言えるでしょう。
■プログラミングに必要な環境を全て用意してしまう効果
私は、コーディング中に使用するものは、すべて、テキストファイルに作業手順書として記述してあり、頭であれこれ考えず、ひたすら立ち上げ、起動します。
私はこの作業の途中で、なにやら集中力が高まってくるのを実感します。
これは、単純作業を繰り返す中で、高まってくる集中力と思われます。
この時に、あれこれと必要なものは何かと考えながら、たちあげていたら、集中力はあがらないと思います。
これは上であげた「アイディアを生み出すサイクルと、処理するサイクルを一緒にしてはいけない」という法則にも関係します。
また、作業を手順化しているため、漏れがなく、常に決まった順でコンソールが立ち上がっています。これにより、何番目がどのコンソールかを把握できているので、必要な時に、情報にすばやくアクセスでき、思考が途切れる時間を最低限にでき、集中力も途切れにくいという効果を生んでいます。
プログラミング時は、コーディングでキーボードを叩いている以外の時間をいかに短くするかが勝負です。そのために情報へのアクセス時間は最短にできるようにあらかじめ環境を用意する必要があります。
■まとめてコーディングする
僕だけかも知れませんが、perlで開発している時に、少し書いては動作を試し、少し書いては動作を試しとやるよりも、まとめてコーディングし、その後で動作確認をしたほうが、作業の進みは速いようです。
以上、簡単に書こうと思ったら結構長くなりました。
他にもいろいろ実践してることはあるのですが、書ききれないので、また別のエントリーで。