『世界一流エンジニアの思考法』を読んで理解したこと
はじめに
タイトルの通り、世界一流エンジニアの思考法を読んでの読書メモです。
第一章 世界一流のエンジニアは何が違うのだろう?
メモ
-
真実(データ)を見つける→いくつかの仮説を立てる→検証するための行動をとる
の思考法- 試行錯誤は悪である
- ログを見て、仮説を立てて、検証する。
- コーディングするときは、小さなドキュメントを書くことが、仮説することになる。
- どんな人も理解をするには時間がかかる
- 「早くできるように頑張る」ことは生産性を下げること
- 理解とは?
- 構造を把握して説明できること
- いつでもどこでも即座に取り出せること
- 知見を踏まえて応用すること
- 基礎を徹底的に理解する
- プログラミングにおいて、著者が実践したこと
- 誰でも知っているやり方で、プログラミングの基礎を学ぶ
- C#の言語仕様を学ぶ
- プログラミングにおいて、著者が実践したこと
- 手を動かす前に理解する方法
- 小さなドキュメントを書く
- メンタルモデルを頭の中で構築する
- 自分なりのイメージや理論を頭の中で構築する
- 偉大なプログラマではなく、偉大な習慣を身に着けたプログラマだ
言語化
事象をもとに、仮説を立てて、検証することが鉄則の考え方。
このサイクルのスピードをあげるためには、理解する、ことがとても大事。ただし、理解することは時間がかかることを認識しておく。
理解するとは、説明できる、即座に取り出せる、応用できること。理解を助けるために、自分の頭の中にメンタルモデルを作っていく。
事象→仮説→検証→振り返りのサイクルは、どんなことにも当てはまる。たとえば、習慣化がうまくできないという事象に対して仮説を立ててアクションする。
それが改善できたかどうか、が振り返りになる。さらにまた次のアクションにつなげることができる。
どのようなアクションに活かすのか
- daily, weekly, monthlyの振り返りと目標設定時に、事象→仮説→検証→振り返りのサイクルが回せるように整備する。
- 実装をする前に作成する小さなドキュメントのテンプレを作る。
- 今日から基礎の理解としてなにをするかを決める。
- メンタルモデルについての知識をinputする。
第二章 アメリカで見つけたマインドセット
メモ
- 「Be Lazy」(怠惰であれ) = 「より少ない時間で価値を最大化するという考え方」
- 望んでいる結果をだすために、最小限の努力をする
- 不必要なものや付加価値のない仕事(過剰準備)をなくす
- 簡潔さを目指す
- 優先順位をつける = 最初の一つだけピックアップする、それ以外はやらない
- 時間や費やした努力より、アウトプットや生産性に重点を置く
- 長時間労働しないように推奨する
- 会議は会議の時間内で効率的かつ生産的に価値を提供する
- どのようにしてやるべきことを減らすか?
- 一つだけピックアップする
- 時間は固定して、その中で価値を最大化する
- 準備、持ち帰りをやめて、その場で解決する
- 物理的にやることを減らす
- 「Fail First」= 成功しようが失敗しまいが、まずはやってみて、早くフィードバックを受けて、早く間違いを修正していく
- 「結果を出す」から「バリューを出す」へ
- 「結果を出す」は、期限内での目標の達成が必達。
- 「バリューを出す」は、目標達成に向けて全力を尽くすが、達成が難しくなった場合は、最も優先度の高い1ステップに注力する。
言語化
怠惰であるためにも理解、基礎が大事。目的に対して最短の経路を導き出せるので、結果的に短時間で成果を上げることができる。
理解、仮説を立てるところまでは時間かけて良い、検証→振り返りのフェーズはできるだけ早く回せるようにすることが大事。
どのようなアクションに活かすのか
- 今やりたいこと、やらないといけないことの優先順位をつけて、一つだけピックアップする。
第三章 脳に余裕を生む情報整理・思考術
メモ
- コードリーディングのコツは極力ソースコードを読まないこと
- interface, classの役割、パラメータを読めばOK
- それらの構造をグラフなりで整理して、メンタルモデルを作っていく
- 技術を徹底的に理解し、理解した情報を整理して、すぐに取り出せる状態にしてこそ、長期的な生産性があがる
- 王道を愚直に実行し、ゆっくりと基礎を理解すること
- 「WIP:1」= 今つけている仕事を1つにする
- 自分がやったことをクリアに説明できるよう時間をかけて言語化してみる
- メンタルモデルを作った構造的な把握が必要
- 記憶の定着にもつながる
- 人に説明可能なものにするための訓練→文章を書く
- 思い出そうと頑張ることが記憶につながる
- コーネルメソッド
- ノート
- 自分が学んだことを思い出しながら要点を書く
- キュー
- 自分が学んだことにつながる質問を書く
- サマリー
- 後日振り返ったときに要約を書く
- ノート
- 理解→記憶→反復
言語化
頭の中のメンタルモデルを作る。システムの構造全体においても、ソースコードの構造についても同じ。できるだけ読む量を減らして、脳の負担を減らす。
そのために、ひとつのことを実行したら、思い出して、ノートとキューを書く。1日の振り返りで、キューに対して思い出す。1週間の振り返りで、サマリーを書くことで定着に繋げられそう。
どのようなアクションに活かすのか
- 一つ一つの作業の終わり、振り返り時にコーネルメソッドが使えるように整備する
第四章 コミュニケーションの極意
メモ
- 情報は最小限にしてコミュニケーションする
- 日頃から人に伝えることを前提とした準備をしておく
- 自分にとって理解しがたい意見も尊重する。そんな新しい視点をしることができて楽しい!
- 相手を否定しない、相手のアイデアを否定しない、自分の考えとして意見を言う
- お互いが知識をシェアして高め合うことを助け合い、エンジョイすることに集中する
言語化
チームで共通う認識が取れていることは大事だが、個人で認識を改めるだけでも効果はありそう。
自分の意見では、を口癖にする。意見をシェアする考え方を持って、理解を助ける場として捉える。
理解できていないことは恥ずかしいことではなく、新しい視点を得るチャンスとして楽しむ。
どのようなアクションに活かすのか
- 意見を言うときに、自分の意見では、を口癖にできているか振り返りのチェックポイントにいれる。
第五章 生産性を高めるチームビルディング
メモ
- いかにメンバーが幸せに働けるかに高い関心を寄せ、エンパワーする
- 自分が一番大切で、自分の幸せを第一に考えている
- 未知のことに取り組んでいるから失敗はつきもの。良いフィードバックをもらえたことにポジティブに捉える。
第六章 仕事と人生の質を高める生活習慣術
メモ
- 生産性を上げたければ定時に上がって学習する
- タイムボックス制を使う
- 時間になったら強制終了する
- 朝型に生活リズムを変えて、朝起きてから就業前までの時間を学習の時間にあてる
- 自分がなんとなくでしか理解していなかった言語の教育コースの受講
- LeetCodeでプログラミングの学習
- 新しい技術、自分が知らない技術の習得
- コード品質向上の本を読む
- 時間を記録する。完了を目指すのではなく、区切られた時間内で集中することを目指す。
- 脳の酷使をやめる工夫
- 瞑想する
- ディスプレイから意識的に離れる
- しっかり睡眠時間をとる
- リフレッシュは違うことをすること
- 発送のブレイクスルーは違うことをしているときに起こる
- 1日一つのことに集中できるのは4時間。4時間過ぎて疲れたら、休むのではなく、違うことをすると良い。
- 休息するのは、何もしないことではなく、いつもと違うことをすること
- 運動を高プライオリティにすること、テストステロンを増やすこと
- 筋トレ
- 1日10分の高強度インターバルトレーニング
- 毎日30分の有酸素運動
- 歩いてもOK
- これを最優先に行う
言語化
運動、早起き、学習を継続してコツコツ続けることが成果を上げる近道。とにかく習慣化することが大事。
時間内でやり切れたか、の成果ではなく、時間内で集中してバリューを出せたかにフォーカスする。
どのようなアクションに活かすのか
- 定時にアラームが鳴るようにする
- 朝起きる、運動、学習、瞑想の習慣化ができるように整備する
- 運動でなにをするか決める
第七章 AI時代をどう生き残るか
メモ
- 時流に流されず、専門性をを追求する姿勢こそが一番強い
- 誰もやったことのないことに取り組んでいる専門家は原理的にAIに取って代わられない
- コントリビュートと感謝のループ
- どうしたら貢献できるか、貢献にたいして感謝のFB
- ポジティブなFBを行う
- 常に自分が幸せになる方向に人生の選択をする
- 自分がやりたくないことは一切やらないし、嫌になったらいつでも辞めて良い
言語化
貢献できるかを常に意識する。感謝のFBを返す。自分の意見としては、人生のゴールは自分が納得できれば良い。つまり、自分が幸せだと思う選択をし続けていると自分が思えれば納得した人生につながる。
常に、自分を幸せにする選択を選び続け、自分を肯定していく。
どのようなアクションに活かすのか
- まずは、週に1回、ポジティブなFBをすること
- 自分を幸せにする選択を選び続けられているか、振り返る
Discussion