プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

集中する時間を作ろう


よいプログラムを書くにはじっくり腰を据えて実装する時間が大切です。それだけに集中していられる時間は多くありませんが、必要な時は集中する時間を取りたいものです。

時間配分の難しさ


生産的になろう(Aaron Swartz のブログから

もうひとつの神話は、たったひとつの問題にのみ取り組んでいるときに、人はより多くを成し遂げるというやつだ。


どんな職業でもそうかもしれませんが(ひょっとして私だけかも)プログラミングに熱中していると、時間のたつのを忘れて没頭してしまいます。仕事がそれだけなら問題ないかもしれませんが、会社にいるといろいろな仕事がやってきます。プログラム作りばかりしているわけにはいきません。


「そんなのうまく時間配分すればいいじゃないか」と言われるかもしれません。それはたしかにその通りなのですが、どうも私はプログラミング作業に多くの時間をかけてしまいがちなようです。


もちろん世の中には短い時間ですごい量のコードを書ける人もいます。そういう人には無用の悩みだと思いますが、私はそんな能力がないので、なかなか悩むところです。

集中する時間を見つけよう


プログラミングでは集中する時間が必要だと私は信じています。ある機能を実現するためのアルゴリズムを考え、それを頭の中でプログラムコードに変換しながら書き、コンパイル・実行する。その一連のプロセスを中断しながら行うと、どこかに抜けが発生する可能性が高くなります。よいコードを書くには、思考を妨げないようにしないといけません。


でも、このような作業を集中していられる時間はそんなに長くありません。時間が経過するほど、集中力はどんどん低下していきます。ずっと集中しているつもりでも、途中で別のことをしていたりしてはいないでしょうか!?


大事なこ2とは、自分が集中していられる時間を見極めて、メリハリのある作業をすることだと思います。

集中する時間を作るには


仕事を効率的に行うという意味では前述のサイトに多くのことが書いてあります。そこで私はプログラミング作業という観点から効率的に行う方法について考えて見ることにします。


もちろん誰にでも当てはまるわけではないと思うので、こんな考えもあるよ、ぐらいの気持ちで読んでいただくのがよいかもしれません。前述のサイトにあるものと似ているものもありますが、どうかご勘弁。:)

本当に必要な機能だけを実装する


特に忙しい時は、それが本当に必要な機能かどうか考え、最も重要な機能だけを実装します。


プログラムの機能拡張は際限がありません。「これもあった方がいいな」「あれもあると便利だな」設計フェーズに限らず、アイデアはどんどん浮かんできます。こうしてプログラムはどんどん肥大化していき、コーディングやテストにかかる時間は増大していく。


忙しい時だからこそ、作業を見つめ直し、本当に必要なことかどうか見極める作業が必要なのではないでしょうか。後でムダになってしまった作業って、意外と忙しくて余裕のなかった時こそ多いような気がします。

作業を細分化する


前述のサイトにも書いてありますが、作業をなるべく細かくすることで、集中していられる時間を確保しましょう。


作業時間が多くなるほど、集中力は落ちてしまいます。自分がどれだけ集中していられるかを把握し、できるだけその時間内で終われるように作業を分けると、よいコードが書けるでしょう。


どうしても長大なコードを書かなければならない場合もあります。そういう場合は後でコードを見直す時間があるとよいですね。

コードに落とす時にこそ集中


アルゴリズムを考え、コードに落とす時には、なるべく別のことをしないようにしましょう。


テストや机上デバッグなどでバグは出せますが、多くのバグは最初にコードを書く時に入り込んでいるのだと思います。プログラミングは本来の機能を実現するだけでなく、無意識に多くのことに気を使いながら書いています。エラーチェックは必要ないか、APIの使い方は正しいか、数値の範囲は適切か、スレッドセーフか、等々。使う言語や環境によって観点は変わりますが、それらには多くの神経を使うものです。


もちろん多くのテストや早く機能を実装することも大切です。でも、プログラムの品質は最初にどれだけ気をつけて作ることができたかにかかっているのではないかと思います。

じっくり書く時間を作ろう


「現場はそんなこと言ってられる余裕なんかないよ」そんな声が聞こえてきそうです。かくいう私も要領がいい方じゃないので、これらをちゃんと実行できているとは言いがたいです。集中していられる時間もあまり長くないような気がするし。


一人だけでプログラムが書けるケースは少ないですけれど、実際に動く最後の部分はプログラマが作っています。時間がないからと言って中途半端な設計や実装をすると、かえって後で時間がかかることになります。


よいコードを書くためにも、じっくり実装する時間を作りたいものですね。