月並なあれこれ

月並なあれこれ

日々思ったことをなんとなーく書くところ。

思考力ではなく思考法が重要だった話

2年9ヶ月ぶりの更新です。

この間にいろんなことがありました。

仕事は変わってませんが、それなりに順調にやっており、プライベートにも良い変化がありました。

 

その辺の話はさておき、最近「世界一流エンジニアの思考法」という本が発売されましたね。

books.bunshun.jp

 

この本自体を読んだわけではないですが、ネットで口コミを見る限り、とても評判が良さそうです。

 

著者の牛尾さんのnoteには(先ほど紹介した書籍にも含まれているようですが)こんな内容の記事があります。

note.com

 

その中でも下記が特に印象的でした。

 

一緒に彼と問題の解決に当たった。自分だったらいろんなログをクエリーしたり、コードを見たりとか、いろいろじたばたするところだが、彼は最初の一つのログだけを見て、「仮説」を立て始めた。手は一切動かさない。彼はしゃべりながら、アーキテクチャがこうなっていてこのログがこうなっているから、自分の推測では、こういうことが起こっていると思われる。だから、自分が調べるべきはこのテーブルといって、SQLを1つだけ実行した。それがまさに問題の原因を表していた。

   自分だったらああでもない、こうでもないといろいろクエリーしたりコード見たりするところだが、彼は手を動かしたのはその一回きりで、自分なら数時間以上かかる問題を一瞬で解いて見せた。

 恐ろしいことに、そのコードベースに関して、彼は経験がほとんどない。自分の方がずっとコンテキストを持っている。まるで神業のようだったが、一方で「人間が不可能なことをやっている」というわけでもなかった。

 

私も仕事上プログラミングをするわけですが、下記記事に出てくる"頭が切れることで有名な先輩"に教わりながら仕事していたときの光景と重なる部分が大きいのです。

monk7.hatenablog.com

 

例えば、何か問題が発生し、対処方法も分からず途方に暮れてその人に質問してみると、未来を見透かすようにピンポイントで原因を指摘してくるのです。

 

当時は、それが魔法のようで、どうなっているのか本当に不思議でたまらなかったのですが、あることを意識するようになってからは自身でも多少はできるようになっていました。

 

それは、牛尾さんのnoteにも同じことが書いてありますが、"仮説"を起点に考えるということ、です。

 

プログラミングは論理を積み上げていくものであり、それによってもたらされるアウトプットは当然ながら純度100%の論理によって構成されています。

 

もし作り上げたものが意図した動きをしないのなら、どこかに不正規な点が存在するためにその動作をしているのです。

(たま~に自分たちではどうにもならないツールのバグ等に巻き込まれ、深いダメージを負うこともあります…)

 

では、仮説起点で物事を考えるために重要なことは何か。

個人的には3点あると思う。

 

1. しっかり観察すること

どういった現象が起きているのかをじっくり正確に把握することです。

どれだけ頭の切れる人でも、何もヒントがなければ正解にはたどり着けません。

また当然ながら、そのときの情報の正確性も重要です。

情報が足りなかったり、正確に解釈できなければ、詳しい人にも聞いてみること。

 

2. 現象から逆算して考えること

"眼の前の現象を(意図的に)起こそうとした場合、どうなっていないとおかしいか"という考え方からスタートします。

意図せずおかしな動きをしているときも、論理的にそうなっているのです。

なので、まずはそこを起点とし、設計内容を飛躍なく少しずつ遡っていくことです。

 

3. あるべき姿との乖離を見つけること

逆算して考える過程で、どうなっていることが望ましいのか、すなわち、あるべき姿と比較し、乖離がないかを確かめます。

自分でやってもいいし、詳しい人がやってもいいです。

ただし、絶対に見落としてはいけません。

そのためにも、あるべき姿もまた正確に把握する必要があります。

 

これらは最初からすぐにできるものではないかもしれませんが、何度も繰り返すうちに精度が上がっていきます。

 

そしてやがて、自身のスキルとなり、問題解決能力が飛躍的に向上すると信じています。

 

私はまだまだ"頭が切れることで有名な先輩"には追いついていませんが、多少は近づけたかなと思うと同時に、以前よりも自信を持って業務に取り組めるようになったような気がします。

 

悩めるエンジニアの一助になれば幸いです。