集中力の正体
昨日は20時半頃にお仕事を終えて帰った。スーパーで買いものして、家に帰って晩ご飯を作って食べて、休んだらオフィスへ戻るつもりがそのまま寝てしまった。
メッセージ作成⌗
年一ゲストとして出演している terapyon channel の 100回記念公開収録 があった。いつもお世話になっているので私は参加できないがカンパ枠で応援していた。昨日てらださんから音声メッセージを作ってほしいと依頼され、本当は昨日の夜に作ろうと思っていたものの、疲れて寝てしまったので朝起きてから慌ててオフィスへ行って作成した。ubuntu の apt でインストールできるツールとして audacity を使って録音した。簡単に使えた。お祝いのメッセージを文章に書き出して、マイクテストも含めて最終的には7回撮り直した。文章を書いてから、話してみると、流れが悪かったり、語呂が悪かったり、途中で詰まったり、かんでしまったりと、なにか気になるところをみつけて、文章を推敲して録音しながら1時間ほどやってた。録音して聞き直すと、いかに自分の話し方が下手であるかがよくわかる。話し方を練習しないとうまくならないのだろうな。
みなとのもりの運動⌗
前回の所感 。14時頃に作業を終えてストレッチまで1時間ほど時間が空いた。ふと運動してからストレッチへ行くとよさそうだと思い立ってジョギングと縄跳びをしてきた。前回が7月24日なので1ヶ月半ほど運動していなかった。1kmほどジョギングしてから縄跳びを15分間した。以前と比較したら軽めに流したにも関わらず、久しぶりに運動したら体力が落ちていてかなりバテた。習慣的に運動していないとすぐに衰える。久しぶりに運動できたので、また再開するきっかけになるかもしれない。
ストレッチ⌗
今日の開脚幅も開始前148cmで、ストレッチ後152cmとあまり数値は出なかった。直前に運動して行ったのでよく伸びるかな?と予測したものの、測ってみるとそうでもなかった。それでも運動した後にストレッチを受けるのはカラダによさそうにも思える。ここ1ヶ月半ほど運動できていないものの、体重は67kg台を維持していて体脂肪率や筋肉量はあまり変わっていない。トレーナーさんとそういう話をしていたら、筋肉は落ちにくくつきにくいから1ヶ月ではそんなもんとのこと。
プログラミングの集中力と生産性への考察⌗
ストレッチを受けているときにトレーナーさんと話していて思うことがあったのでまとめておく。いまの開発フェーズは開発者としてプロジェクトに参加している。平均すると1日10時間ぐらいお仕事していて、早く帰る日もあるから遅い日は日付が変わるぐらいまではコードを書いていることがある。家に帰ると休んでしまうからオフィスで晩ご飯を食べることも多い。なぜプログラミングに集中していると運動ができないのか?を考察してみた。
- 他の余分なことを排除すると集中力が増す
いまやっている開発のお仕事は1日で完了するような簡単な開発ではない。1年半開発しているので残っている課題は厄介で複雑な問題への対応であることが多い。新規機能を追加するときも既存機能や仕様や依存関係を考慮しないといけない。そうすると2-3日かけて課題を解決することが多い。そのときに他の余分なことを排除した方が脳のリソースを課題解決に割り当てられる。通勤しているときも、寝ているときも、ご飯を食べているときも取り組んでいる課題のことを四六時中考えている。他のことに脳のリソースを割くと課題解決の品質が下がる可能性が高い。ずっと考え続けることが複雑な問題の課題解決に重要となる。
- システム開発とはタイムアタック競技である
システム開発のプロジェクトマネジメントにおいてもっとも重要な概念はタイムボックスだと私は考えている。適度な期間 (うちは2週間) を設け、モノゴトに取り組む最初と最後を作ること。認知心理学の研究からも記憶の仕組みからも期間の最初と最後がもっとも学習効果が高いことを示唆している。このことは私の経験則においてもシステム開発で当てはまる。作業期間が適切でないと人間はだらだらしてしまう (パーキンソンの法則) 。プログラミングにおいて動くのは当たり前で、動いた上でいかに品質をあげられるかが腕の見せ所になる。エラー処理を適切に制御できているか、他人がコードを読んでも理解しやすく保守しやすいか、将来の拡張性を考慮して設計されているか、など品質をよくするための取り組みには答えがない。仕事ができる・できないを分ける行動の1つとして、答えのない問いにどれだけ準備できるか、考え続けられるかと言い換えられるかもしれない。答えがないからいくらでも品質をあげるための施策がある。しかし、現実の業務には期限があるため、期限内に最善の品質を目指すことになる。そのため、タイムボックスでシステム開発をマネジメントする限り、いつもタイムアタック競技をしているのと同義になるから時間が足りない。
プログラミングはいつも妥協を強いられる。完璧で最高のシステムなどありえない。その時々で開発途中における最善の動くものをスナップショットとしてバージョン管理しているに過ぎない。この妥協するレベルが私にとってはマネージャーと開発者という役割で大きく異なるのだろうと思う。マネージャーとしての遊撃なら先送りできても、開発者としては多少の負荷があっても解決してしまう。自身の基準を満たす働き方に違いがあるのではないかと思う。言語化してみると、この考え方はプログラミングに限らず、そのときに取り組む対象によって何にでも応用できそうに思う。