世界一流エンジニアの思考法

# この記事はなに？
- [世界一流エンジニアの思考法](https://www.amazon.co.jp/%E4%B8%96%E7%95%8C%E4%B8%80%E6%B5%81%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E6%80%9D%E8%80%83%E6%B3%95-%E7%89%9B%E5%B0%BE-%E5%89%9B/dp/4163917683/ref=sr_1_1?adgrpid=158312900361&dib=eyJ2IjoiMSJ9.PGhvQXdERJW26F4qA7TZS2aMNdHZ2rV_dFVB6DJxWMaq-l5DepGITTPgAOWLMoQl0_FtfKdhlJSBnvphgjate8bSk2awb1TNVuDxtL7URC-quFX7WlRwgRzPKJx6GIOQeYwJqnGzk9JBns5AuKyc47cpxAORK34aidgnduRoOI71DiP8rMbf7uz5UP8PI7RHahxPQoKno9BiB49Vo8wiE3Mq6KRLhlMm-Quz6UUsU16qbGQZUFTXVQSn2oiYF8J-ESiyuyU9KuB6U40K63YAjOLz_TlN5-V9oR_ePHg55_o.YFb-VPNIdZUuF9bRq2752Hk9efRGDvtsLZ6JMfKhMTk&dib_tag=se&gad_source=1&hvadid=678960091422&hvdev=c&hvlocphy=9198340&hvnetw=g&hvqmt=e&hvrand=4024785095327875289&hvtargid=kwd-2260433045664&hydadcr=1797_13657020&jp-ad-ap=0&keywords=%E4%B8%96%E7%95%8C%E4%B8%80%E6%B5%81%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2+%E3%81%AE+%E6%80%9D%E8%80%83%E6%B3%95&qid=1719973093&sr=8-1)という本を読んだ感想とまとめを書いている
# 感想

生産性を向上させたいと考えるすべての人に(この記事だけでなく)、実際に手に取って読んでいただきたい。
特に、MicroSoftで働くエンジニアと自分は脳に積まれているエンジンが違うので参考にならないと思っている人に読んでほしい。
- 本書を読むまでのMicroSoftで働くエンジニアの印象
    - 仕事がめちゃくちゃ多いのにそれを捌き切る
    - 自分とは脳のエンジンが違いすぎる
    - ある技術のドキュメントを斜め読みしただけで本質を理解し、使いこなしてしまう
- 本書を読んでからは、MSで働く人々に対する印象がかなり変わった
    - 仕事の量を減らしてそれに集中している
    - エンジンが人によって違いすぎるということはない (そしてそのことをよく理解していそう)
    - 理解には時間をかける

MicroSoftで働くエンジニアはどのように生産性を向上させているのだろうか？
以下にまとめていこうと思う。
# 生産性の向上のためには
仕事をする際には、自分一人の作業の生産性を向上させることと組織の生産性を向上させることが考えられる。

自分一人の作業としては
- 技術のキャッチアップ
- 資料の作成

組織でおこなうことの代表としてはコミュニケーションが挙げられる。

生産性の向上のために、選択と集中が非常に大事にされている。言い換えると、
- 時間をかけるもの
- 時間をかけないもの

これらに分けて実行するだけである。では、MSのエンジニアはなにに時間をかけて、なにには時間をかけないのだろうか？？

# 時間をかけないもの
彼らが時間をかけないものは例えば以下がある

- 会議前の準備
- コードリーディング
- 問題の解決
- 一回の検証
- 優先順位が一位以外

どれも時間をかけないということができたらどれほど嬉しいだろうか。。。
どのように時間をかけないかを理解する上で大切なマインドとして、**Be Lazy**というものがある。
Be Lazyをモノにできれば、生産性の向上に大きく近づくことができるはずである。

# Be Lazyとは
直訳すると、「怠惰であれ」となる。つまり、「より少ない時間で価値を最大化する」という考え方を指している。
この考えが根底にあるため、前述のことに時間をかけないのである。
- 会議前の準備
    - 簡潔に話すことが決まっていれば、特に困らない (過剰な準備をしない)
    - 会議中のFBをその場で資料に反映するなどを行えば、会議後に時間を使わなくて済む(内職ではないことに注意)
- コードリーディング
    - 詳細に理解する必要がない箇所も多いはずである、そこに時間をかけてなにが生まれるのか？？
    - ざっくりとインタフェースの役割やパラメータの理解に時間をかけたほうがいい
- 問題の解決
    - わからないことは専門家に聞いたほうが早い (サーベイの時間もったいない)
    - エラーに取り組む時も、このエラーが出るということは、、と仮説を立ててから取り組むと早い
- 一回の検証
    - 所詮は人なので、一回で完璧になることはない
    - 早く検証を回して早く失敗するほうがいい
- 優先順位が一位以外
    - 雑多なことに取り組んだところで効果が薄いことが多い
    - 20%の仕事が80%の利益を生み出すという話もある

とはいえ、実際のところ優先順位が一位以外のものや会議前の準備に時間を使わないというのは難しい。
なので、**なるべく時間を使わないためにはどうすればいいのか**ということを考えて日々の業務を少しずつ改善していくことが重要であると私は思う。
その際、一気に全てを改善しようとするのではなく、少しずつやれることから試してみることをお勧めする。一回の検証に多く時間を使わないことである。

# 時間をかけるもの
ここまでは時間をかけないことに焦点を当ててきた。このままでは、ただ怠惰なだけである。サボったことで生まれた時間をなにに使うのかについても考えていこう。
- 優先順位が一位のもの
    - 自分がなにをするべきなのかを考えてその達成に時間を惜しまない
- 理解
    - 技術などを一瞬で理解できる人はそういないので、しっかりと時間をかける
    - バカにせず基礎に取り組む

つまり、MSのエンジニアたちは雑多なことを減らして本質的な事象に時間をじゃぶじゃぶ使っているわけである。

# Be Lazyはなぜ生まれたのか(感想なので読み飛ばしてください)
Be Lazyの背景には、脳のエンジンが人によって違いすぎることはないという考えがあるのではないか、と私は思った。
つまり、以下のようなスーパーマンは、MSのようなビッグテックであっても(多くは)存在しないのである。
- 大量の仕事をそれぞれの細部まで完璧にこなすことができる
- 同時並行でさまざまな仕事をできる
- あらゆる事象を詳細にかつ瞬時に理解できる

なので、生産性を向上させるには、いかにやらないことを増やし(怠惰を目指す)、本質的な物事に時間をかけるかが重要だということになる。

# 本書で参考になるもの
ここでは、個人的に参考になると感じたことをまとめておく。
全てを紹介しているわけではないので、詳細が気になる場合は実際に手に取って読んでいただきたい。

- どう理解するか、定着させるか
    - 少しいじる
        - サンプルコードをそのまま使うだけではなく、一部を改変してみることでそのうち自由に使いこなせるようになる
    - 書く
        - 誰かに教えるつもりで整理すると、理解できていなかった点が明確になり、より理解が深まる
        - しかも、教えてほしいと言われた時に共有するだけでいいので書くだけで時間短縮になる
            - 自分が深い理解をする時間 + 書く時間 = 自分が深い理解をする時間 + n * (他人がサーベイする時間 + 他人に教える時間)
- 組織の作り方
    - サーバントリーダーシップ (理解できていないが、概念に出会えたのがいい)
        - ビジョンと目標のみを共有し、それを達成する手段はチームが選択する
        - メンバーが考え、マネージャーは障害を取り除くのが主な仕事
        - 新人もできるものとして接することでそのうちできてくる
    - コミュニケーション
        - 失敗も歓迎する
        - 気軽に質問、相談ができる
        - 意見の対立は「意見」の対立であって、人格否定ではない
            - 間違ったらどうしよう、恥ずかしい、とかもないのでディスカッションできるようになる

# おわりに
世界一流エンジニアの思考法では、生産性を向上させる方法について著者の経験ベースで数多く紹介されている。
非常に読みやすくわかりやすい流れになっているのであまり時間をかけずに読めるのが良かった。
紹介されていた方法を参考にし、自分と自分のチームの生産性を向上させることができると期待したい。
次はサーバントリーダーシップ(マネジメント系)、ドキュメンテーション、優先順位の付け方のどれかに関連するものを読めたら嬉しいなぁ。