プログラマの三大美徳を貫くには
内山です。1ヶ月ほど続いた脇腹の痛みがようやく治りかけてきました。
今回は、プログラマの三大美徳について考えてみました。
プログラマの三大美徳とは
プログラマの三大美徳とは、以下のような気質を持つことを意味しています。
- 怠惰(Laziness)
- 短気(Impatience)
- 高慢(Hubris)
注意が必要なことは、字面どおりに「こういった性格になりましょう」という意味ではないことです。単なる嫌な人になってしまいます。
言いたいこととしては、以下の通りになるでしょうか。
- 怠惰
- 繰り返し単純作業は自動化する
- 同じようなプログラムは繰り返し書かないようにする(DRY原則)
- ドキュメントを書いて、同じ説明を繰り返さないようにする
- 短気
- 利用者の要求に対して、柔軟に応えられるプログラムを書く(修正を最小限にする)
- レスポンスが早いプログラムを書く
- 傲慢
- 自分の書いたプログラムに責任を持つ
- 改修しやすいプログラムを書く
プログラマとして働いていれば、ベストプラクティスとしてよく聞くことだと思います。
しかし、完璧にできている人や現場はあまりないのではないでしょうか。
- 「運用でカバーする」が多用されている
- 属人化している部分がある
- 手でコマンドを毎回打ち込んでいく作業がある
- サービスのシステム改修に時間がかかってしまう
などなど、よく聞く?ことかと思います。
これらはすべてプログラマの三大美徳の欠如が要因と言えます。
とはいえ、よっぽどの(本当の意味で)怠け者ではないかぎり、好んでプログラマの三大美徳に反している人はいないはずです。
プログラマの三大美徳に反してしまう瞬間
理想は簡単に言えるけど、完璧に実践するのはとても難しいです。
以下のような状況にあるとき、意図せずに反してしまうのではないでしょうか。
- 知識不足、経験不足の状態であるとき
- 締切が差し迫っている
- 手動での作業時間よりプログラムを書く時間の方が多くかかってしまう
プログラマの三大美徳を貫くには
前述した状況について、どのように考えて行動すればよいかを考えてみました。
知識不足、経験不足の状態であるとき
知識不足や経験不足によって、適切な設計ができなかったり、処理が遅いプログラムを書いてしまったりすることがあります。
多かれ少なかれ誰もがこの状態にあると言えると思います。
この問題を解消するには、以下のような行動が必要になるでしょう。
- 分からないことは分からないままにしない
- より詳しい人にレビューをしてもらう
- 取り組んでいるプロジェクトに関する事柄を勉強する
- ふりかえりをして、足りなかったことがあれば、改善する
できるかぎり情報を集めて実践すること繰り返して、適切なプログラムが書けるようになっていくのではないでしょうか。
締切が差し迫っている
仕事には締切がつきものです。締切のプレッシャーに負けて、ついつい悪いと分かっていることをしてしまう場合があります。
- コピペでコードを書いてしまう
- 変数や関数にテキトウな名前をつけてしまう
- とりあえず手作業でやってしまう
- ひとまず自分が知っていればいいので、ドキュメントを書くことを省略してしまう
これについては、締切への不安が主な要因だと思いますので、
- 担当している作業を分解して、作業時間を見積もり、締切との差をなるべく正確に把握する
- 早めに不確実性の高いところに着手しておく
といったことをやるようにして、不安をなくすと良さそうです。
手動での作業時間よりプログラムを書く時間の方が多くかかってしまう
これはよく上がる議論でもあると思います。
この状況のときにプログラムを書くことを選択すると、手段を目的化してしまっていると捉えられてしまう場合もあります。
個人的には、もし手動作業時間よりもプログラムを書く時間が同じくらいであるならば、プログラムを書くことを選択したほうが良いと考えています。
さらに言うと、締切に間に合うという前提であれば、プログラムを書く時間の方がより多くかかってしまうとしても、プログラムを書くことを選択したほうが良いです。
なぜなら、プログラムを書く時間は書く人の技術力に依存するものであり、技術力はプログラムを書いた分だけ伸びるからです。
技術力が上がれば、より早くプログラムを書くことができるようになります。
まとめ
今回は、自戒の念を込めて、プログラマの三大美徳に反してしまう要因と対策について考えてみました。
プログラマの三大美徳の徹底を目指したい方は、下記よりご応募お待ちしております。
リモートワークで自社オウンドメディアを立ち上げたいWebプロデューサー募集
フルリモートワークでチームを率いるフロントエンド領域のテックリード大募集
リモートワークでAWSなサーバーレスシステムに携わりたいエンジニア大募集
リモートワークでチームを引っ張りたい経験豊富なUI/UXデザイナー大募集