見出し画像

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

牛尾剛さん著の世界一流エンジニアの思考法を読みました。
その中で「新しいものを学んだらブログを書く」というものがあったので内容をまとめて投稿してみます。

理解に時間をかける

目先のアウトプットに意識が向いていると、理解はそこそこに動くものを作って「はい、おしまい」となりがち。
しかし、十分な理解なしで作業を終了していると、いざ問題が発生した時に原因を探すことができずかえって時間がかかってしまう。
また、似たような作業が発生した時にも調べる時間が必要となり、生産性が上がっていかない。
わからないものを理解するのには時間がかかるが、それは頭が良い人でも同じ。
理解するのには時間がかかるということを念頭に置いて、将来的な生産性向上を目指して徹底的に理解する習慣を身につけるべき。

手を動かす前に仮説を立てる

作業の効率アップを図ろうとしたときに、手当たり次第に可能性を潰すように作業を行なっていると思いつきでパターンを試して正解を探しているだけなので時間がかかるし、新しい学びも少ない。
まずはログなどから事実(データ)を得て、そこからいくつかの仮説を立てて、その仮説を証明していくように作業を行なっていくことで、問題解決能力も向上していく。

BeLazyという考え方

「より少ない時間で価値を最大化しよう」という考え方。
実際の作業の中でも、同じ時間がかかる作業がもたらすインパクトは、その作業内容により大きく異なる。
「作業量」が少なく「価値」が高い作業を優先した方がインパクトは大きくなる。
そのために「すべきこと」より「実際のキャパ」に重きを置いて必要な機能と不要な機能の見極めが必要。

必要な機能を見極める手順
1. 一番重要な1つだけをピックアップする
2. 時間は固定してその中でできることを最大化する
3. 「準備」「持ち帰り」をせずにその場で解決する
4. 物理的にやることを減らす

リスクや間違いを受け入れる

検討ばかり行って結局「やらない」ことはノーバリューとなり無駄になる。
FailFastの考え方で、成否に関わらずまずやってみる。
やってみればフィードバックが返ってくるのでそれをもとに問題を修正する。
失敗した場合でも失敗から学ぶことができる。

不確実性を受け入れる

ソフトウェアのような先通しの見えない分野で完璧に計画を立てて計画通り完了するのはほぼ不可能。
QCD+Sはトレードオフの関係にあるため、アジャイル的な考え方でスピーディーに軌道修正をかけていく必要がある。
(進捗の「実績」だけで状況判断し「納期」はそのままで「スコープ」を出し入れするのが現実的)

不確実性を受け入れるための実践例
1. 「楽に達成できる」計画で仕事をする
  ・その人の能力的な日数+数日を納期とする(バッファを用意する)
2. 無理なものは無理なので断る
3. 作業量を実力の範囲内にして、実際にやってみてのフィードバックと
  改善ポイントやベストプラクティスを重視する

脳に余裕を生み出す

作業効率を向上させるには脳の余裕が必要不可欠のため以下のことを実践する。

コードリーディング:実装は極力見ずに、図や関係性のグラフを作成して、インタフェースと構造を理解するようにする

理解:技術を徹底的に理解し、理解した情報の整理をしてググらずに実装を行えるレベルにしておく
自分が行ったことでも理解しているとは限らないため、
「できた」ではなく「説明可能か?」というセルフチェックを行う。
ブログの作成やコーネルメソッドにより理解・記憶・反復を実践する。

マルチタスク:1つのタスクをやっているときは他のことを一切せず集中して「WIP=1」を厳守する。
タスクを中断する場合は、再開する時にすぐ元の状態に戻れるように記録を整理しておく。
ブラウザのタブも用が終わったら削除する

頭の中のみで整理する:人の話を聞くときは他の人に説明することを想定して聞きながら頭の中で整理する
文章を書き出して考えるのではなく頭の中で完全に文にしてから書き出す

意見が対立しても「否定」しない

コミュニケーションにおいては相手を尊重し否定しないことが重要。言っていることが正しくてもマナーが伴わない言葉では建設的な相互理解にには結びつかない。

否定をしないための鉄則

  1. 相手を否定しない

  2. 相手のアイデアを否定しない

  3. 自分の考えとして意見を言う

情報の伝え方

コミュニケーションにおいては情報量が多すぎても理解が追いつかないため、負荷情報は会話の中で提供し、情報量を減らすコミュニケーションを意識する。

メモの取り方

メモを取るときは常に他の人が欲しい情報をわかりやすい形式で整理しておく。
日頃から人に聞かれた時を想定して準備をしておくことで質問された時の口数を削減することができ、自身の理解度向上にも役立つ。

ディスカッション

ディスカッションは自分の考えを自分なりに深めるための行為のため、間違えたら恥ずかしいという気持ちは一切捨てて積極的に会話に参加する。

ディスカッションのコツ

  1. 間違えても良い考える

  2. ガンガン会話に参加する

  3. 相手を尊重し感謝を忘れない

  4. 意見の切り出し方は「自分の意見では〜」にする

仕事と人生の質を高める生活習慣術

整理整頓
普段から整理整頓を行う。
周囲が散らかっている状態はタスクを「完了」させていないから生じている
未完了のタスクがあることで脳のメモリが使用され続ける
物理的に「整理する」のには時間がかかるが、頭の中も整理され、コーディングの際のオプション設定など「細かいこと」への目配りが効くようになり「理解に時間をかけること」にもつながる。

情報の整理整頓という観点で
新しいことを学んだらブログに書くことによって頭の中が整理され記憶に残りやすくなる。

休息
1日に1つのことに集中できる時間は4時間が限界
4時間を過ぎたら単に休むのではなく「違うこと」をするのが良い
休息するのは何もしないのではなく、いつもと違うことをするのが重要

感想

全体的に身につまされる内容が多く、とてもためになる本でした。
私自身駆け出しプログラマーで、初めてのアジャイル案件に参画した時に、目先のチケットをなんとか消化することにばかり意識が向いていて、本質的な理解ができていないまま他の実装箇所をコピーしてなんとなく修正してチケットを完了させていました。
結果、理解が薄いので自身の作業にモヤモヤが残り、コントロールをしている感覚を得られず、ストレスが溜まる日々を送っていました。
この本を読んでから振り返ってみると、最初に「理解する」というプロセスを踏んでいなかったことが生産性の低さと仕事を楽しめないという問題を引き起こしていたように感じます。
今後はアウトプットに意識を向けるより「理解する」ことに重きを置いて生産性を向上させられるよう精進して行きます。

お値段以上の価値がある良書でした。
私の拙い文章力ではこの本の魅力や学びを伝えきることはできないので、
興味を持っていただけた方は是非お手に取って読んでみてください。


この記事が気に入ったらサポートをしてみませんか?