#201 試行錯誤は悪
こんにちは。ITベンチャーエンジニアのこへいです。
仕事を作ることが重要と述べました。
価値を提供するには与えられたことを作業としてこなすのではなく、自ら考えて価値を生む仕事を作り出すことが重要であると。
そして、価値を追求するためには、試行錯誤を繰り返すことも当然必要と考えていました。
しかし、マイクロソフトのシニアエンジニアの牛尾剛さんの著書「世界一流エンジニアの思考法」で、は試行錯誤は悪と述べられています。
なぜ試行錯誤は悪なのか、価値を生み出すには試行錯誤をしてはいけないのか、について考えます。
◯なぜ試行錯誤が悪なのか
本書ではシステムのバグ調査の様子から試行錯誤をするべきでないと述べられています。
牛尾さんがシステムのバグ調査をした際の試行錯誤の様子がこちらです。
私自身システムのバグ調査では、牛尾さんのようにあたりをつけて進めることがあるため、この状況がものすごくわかります。
そして、牛尾さんの同僚の天才エンジニアのポールの調査の様子がこちらです。
天才エンジニアは、いきなり手を動かさない。まずは、事実(データ)を一つ見つける→いくつかの仮説を立てる→その仮説を証明するための行動をとるということです。
この時ポールは1回の仮説検証で正解にたどり着いたのです。
やみくもに試行錯誤を繰り返すことでも問題は解決できます。しかし、多くの時間を溶かすことになります。しかも振り返ってみれば、「何も成長していない」のです。
単に思いつきでいろいろなパターンを試して正解を探しているだけなので、とても時間がかかる上、新しい知識を何も学んでいない。
そのため試行錯誤は悪なのです。
◯試行錯誤ではなく仮説検証をせよ
試行錯誤ではなく仮説を立てて検証するために、簡単なログであってもじっくりと見て、まずは事実を集めよと説いています。
そして、やみくもに手を動かすのではなく集めた事実をもとに仮説を立て、その仮説を検証するために手を動かすのです。
この時に、ポールのような天才エンジニアはシステムのアーキテクチャを詳細に理解しているため、筋の良い仮説が立てられるのです。
複雑なシステムのアーキテクチャを理解するのは難易度が高く、天才だからすぐに理解出来るのだと思ってしまいがちですが、実はそうではないのです。
天才達は、複雑なシステムのアーキテクチャを何度も何度も繰り返し学び、時間をかけているから理解しているのだと。
システムの基本を理解するために時間をかけ、やみくもに手を動かすのではなく、仮説を立てて素早く問題を解決するのが天才のアプローチということです。
◯理解が浅いからやみくもに手を動かして時間を溶かす
私もバク調査で、やみくもにあたりをつけて調査をして時間を溶かしたことが何度もあります。
しかし、あるバク調査では、一旦落ち着いて仮説を立て、答えにたどり着くことができました。
この時は、システムのアーキテクチャを理解していたために、調査で把握した事実から適切な仮説を立てることが出来ました。
しかし、システムの理解が浅い状態では、わかりそうなことから手を出してしまいたくなる気持ちはよくわかります。
スーパーエンジニア達はとにかく仕事が速いです。彼らを見ていると速さへの憧れが生まれ、システムアーキテクチャの理解などの基本に時間をかけるのが一見遠回りに見えてしまいます。
速さへの誘惑を断ち切り、基本を固めることに時間をかけるように時間配分を変えることが天才エンジニアへ近づく第一歩です。
後輩の中にもやみくもに手を動かして時間を溶かしている人がチラホラといるため、この考え方を共有していこうと思います。
ということで、今回は「世界一流エンジニアの思考法」から、試行錯誤は悪である理由について紹介しました。
最後までお読みいただきありがとうございました。