Taniyarn / posts

怠惰になるための第一歩

Feb 27, 2024

突然だが、私は生産性の高いゴリゴリマッチョなエンジニアになりたいと思っている。 そんな折に世界一流エンジニアの思考法を読んだ。 この本の中で、世界一流エンジニアのマインドセットのひとつとして「怠惰であれ」が挙げられているのだが、怠惰になるための第一歩は問題を見極めることなんじゃないかと感じた話を読書感想文の代わりにしようと思う。

プログラマ三代美徳としての怠惰

怠惰と聞いて真っ先に思い浮かぶのはプログラマ三代美徳の一つとしての怠惰だろう。 これはPerlプログラミング言語の創設者であるラリー・ウォールが提唱した教訓で、原文はここにあるのだが、怠惰についての説明をざっくり訳すと以下のような感じ。

全体効率のために努力を惜しまない姿勢。自動化プログラムを書いて時間を節約したり、ドキュメントを残して質問を聞かれる時間を節約する。

後半を額面通り受け取って、単純作業は自動化しようとか、ドキュメントはしっかり残そうとかいう教訓として受け取ってしまいそうになる。 しかしそれはあくまで具体例であり、本当に重要なのは全体効率に重きを置いている点、つまりは生産性を追求することこそが怠惰の真意なんじゃなかろうか。

生産性について考える

生産性という言葉が、具体的に何を指しているのかを考えていきたい。 ここではイシューからはじめよという本で説明されている定義を紹介しよう。 それによると生産性とは「投下した時間と労力に対してどれだけの質の高い仕事を生み出せたか」ということだという。 では、「質の高い仕事」とは何かというと、「重要性の高い問題に対してどこまで質の高い解を出せているか」である。 まとめると、生産性が高い人は、最もインパクトがある問題を見極めて、少ない時間と労力で質の高い解決策を講じることができる人だと言える。

生産性の高いエンジニア

エンジニアに当てはめたときに生産性の高さはどこに現れてくるのだろうか。 先ほどの生産性の高さを私なりに言い換えると、「重要なところは確実にやりきりつつ、一方で価値のないものや後からいくらでも対処できるようなものは削ったりいい意味で手を抜くことができること」というふうになる。 例えば、リリース時期が迫っている中で未実装な機能が複数あるケースで、優先順位をつけて不必要なものを削り、関係者と合意形成した内容で実装できる人は生産性が高いと言えるだろう。 他には、全体アーキテクチャの設計において、後から手戻りが発生したり全体が破綻してしたりしてしまうような肝心なポイントはしっかり抑えてシンプルに設計しておくことができる人も生産性が高いと言えるだろう。 そういった緩急の付け所に対する嗅覚というか選球眼の鋭さは生産性を出すための必要条件と言えそうだ。 もちろん実際に関係各所と合意を取って機能を実装したり、重要なポイントを抑えて設計をやり切ることが出来るのは、知識や経験があるからこそと思っている。 そういった知識や経験は一長一短で身につけられるようなものではないので、日々の学習を怠らないことや経験を積むことが大切だと思うし、それが足りてないうちはエキスパートやマネージャーの助けを借りて補っておけばいいだろう。 実際に問題を解ききるまでは至らなくとも、問題を見極めるところまでだと心がけでなんとかなる部分だと思うし、その心がけは今から始められる生産性の高いエンジニアになるための大切な第一歩だと考えている。

さいごに

学習を怠らないことで知識を増やし、問題を見極める過程で経験を積み、それらの相乗効果で質の高い解決策を講じることが段々とできていくのだろう。 勤勉の対義語としての怠惰にならないように怠惰を極めていこうと思う。