転職した

調べた事、学んだ事、思った事、考えた事を個人的にまとめているだけなので内容は保証しないYO!

地頭力を鍛えるを読んだ

地頭力を鍛える 問題解決に活かす「フェルミ推定」

地頭力を鍛える 問題解決に活かす「フェルミ推定」

レバレッジリーディング同様、先輩に勧められたため読んだ。

「昔は知識とコミュニケーション力でなんとかなったが、今の時代、思考力(この本でいうところの地頭力)をつけねばダメだ。地頭力の構成要素はフェルミ推定で鍛えられるから、フェルミ推定で訓練しよう」という論旨の本。

地頭力というのは、知的好奇心をベースに

  • 論理思考力
  • 直観力

があり、それらの上に

がある。これらの構成要素で地頭力は成り立っているというのがこの本の定義である。

はっきりと言ってしまえば、真摯にプログラマという仕事をしていれば、どれもこれも鍛えられる力で、抽象化思考力は「プログラミング」、フレームワーク思考力は「デバッグ、ドキュメント作成」、仮説思考力は「外部ライブラリの利用、他人のコード引き継ぎ」のタイミングで力がつくと思う。

フレームワーク思考力と「デバッグ、ドキュメント作成」

抽象化思考力と「プログラミング」は説明するまでもないだろうから、省略する。

そもそも、フレームワーク思考というのがピンとこないが、「全体から考え、部分に分解する。あるいは、部分にズームインしていく。こうすることで、思い込みや自分の立場など思考の妨げとなるものを排除できる。」ということらしい。

デバッグのうまい人も全体から考えて、無関係なところを排除してバグを追求するということをするので、鍛えるにはもってこいだろう。下手な人ほど、自分が意識している所ばかり、目がいってしまう。ドキュメント作成も、全体から考えて部分を構成していくとするはずである。下手な人は、思いつきで書き連ねてしまって、「この赤い矢印と青い矢印と緑の矢印は何が違うんだ? 凡例もないし・・・」とかなりがちである。

仮説思考力と「外部ライブラリの利用、他人のコード引き継ぎ」

仮説思考というのは、「いまある情報から仮説(目標)を立て、その仮説を目指しつつ、得られた情報から仮説の精度を上げて、最終結論を出す」という考え方。

外部ライブラリ(OSSフレームワークでも、プロプライエタリなライブラリでも)もプロジェクト内の他メンバのコードも、結局内部詳細がわからないというのは同じである。 なので、限られた情報から利用、拡張方法を考え、開発着手し、途中得られた情報から方法を修正して開発完了させるというやり方となる。というわけで、仮説思考力をつける良い方法であると思う。 ただ、仮説思考で開発するというのは、行き当たりばったりで危なっかしい。この本にも書かれているが、「限られた時間で、それなりの結果を出すための考え方」なので、常にこのやり方をするのはかなりまずい。

偉そうなこと言いつつ、仮説思考はできてないなーと思う。

見積もり = フェルミ推定

この本を読んで思った事は、ソフトウェア見積もりというのはフェルミ推定を行うということに他ならないということ。「日本の電信柱の数は?」と「A社の基幹システムの工数は?」という質問に対するアプローチは全く同じである。手元にある情報を元に、部分に分解して、部分がどの程度の数値になるか概算し、積算する。追加情報を得ることはできるとはいえ、情報が増えるだけで、やることは同じだ。

フェルミ推定では、前提や推論の方法の違いによって結論にかなりの誤差を生じることもある。

フェルミ推定 - Wikipedia

こうあるように、見積もりがフェルミ推定なら、工数200%とか発生してもなーんも不思議じゃないよなぁと。

まとめ

プログラマという仕事をしている人で、仕事を上手くこなす上で必要な抽象化思考力、フレームワーク思考力、仮説思考力をつけたいという人は買ってもよいのでは。