はじめに
大谷翔平のプレーを生で見たサッカー少年ははメジャーリーガーを目指した。
そんなことが今の日本で起きているのかもしれない。
僕はアマゾンを徘徊していたら『世界一流エンジニアの思考法』を見つけてしまった。(アマゾンは南米ではなくもちろん日本からアクセスできるAmazon.com)
1,700円で大谷翔平に会うことはできないが、自宅からアマゾン経由で世界一流に触れた僕のライフスタイルは変わった。
Pick Up
- トップエンジニアの衝撃的な思考法
- 障害が発生したときにいきなり手を動かして、試行錯誤することはNG
- ログをみて自分なりに何が起こっているか推測し、クエリを投げて証明する
- 事実(データ)を一つ見つける→いくつかの仮説を立てる→その仮説を証明する行動を取る
- 頭良くても理解には時間がかかる
- 何かを速くできるように急ぐ努力がかえって本質的な理解を遠ざけてしまう
- 理解に時間をかけると実践する
- 理解の三要素
- その構造を掴んで、人に説明できること
- いつでもどこでも即座に取り出して使えること
- 知見を踏まえて応用がきくこと
- イケメンエンジニアはコードのロジックを読むのではなく、コードの意図をその背景のアーキテクチャを理解するために読み込んでいた。コードの理解にしっかりと時間をかけることを恐れない
- 理解は時間がかかるものとして、急がず、徹底的に理解する週間を身につける
- 理解の三要素
- 小さなコードを書く前に
- ドキュメントはコードを書く前に書く、だって、コードを書いた後にドキュメントを書くだけなんて退屈だから
- ドキュメントを書くことで自分の頭が整理される。抜け落ちていた視点などに気づくことができる
- 考えているときに書けば、自動的にドキュメントになるので、それをシェアするだけで済む
- 頭にメンタルモデルを作る
- メンタルモデルとは、人々が世界を理解し、予測し、解釈し、新しい状況に適用するための、自己の心の中のイメージや理論のこと
- まずはエキスパートに頼る
- 一つのことで二時間以上ブロックされたなら、質問するなり相談するなりして寝かせておいて、他の仕事をしておくほうが断然生産性が高い
- Be Lazyというマインドセット
- より少ない時間で価値を最大化するという考え方
- 時間を固定して、その中で価値を最大化する
- リスクや間違いを快く受け入れる
- 成功しようがしまいが、まずはやってみて、早くフィードバックを得て、早く間違いを修正していくーーFail Fastの精神
- 結果を出すからバリューを出すへ
- 予定されたアウトプットより少なくなっていても全く気にしない
- 目標はあくまで目標であり、定例会議でも、スケジュールが計画どおりに進んでいるか、進捗状況なんて聞かれない。やってみて実際どうだったか?改善のポイントやベストプラクティスは?ということを尋ねられる。そこにこそ仕事の価値はあるということを全員が認識している
- コードリーディングのコツは、極力読まないこと。他のデベロッパーのことを信頼して、実装はちゃんと動くものとする
- アウトカム至上主義が上達を阻害する
- 技術を徹底的に理解し、理解した情報を整理をして、すぐに取り出せるレベル①の状態にしてこそ、長い目で見た際の生産性は上がる
- マルチタスクは生産性が最低なのでやらない
- WIP=1
- WIP=1とは今手をつけている仕事を一つに限定すること
- どんなにすごい人でも、時間がかかるこはかかる。焦らずに時間をかける
- 30分から一時間を割りあれたら、そのことのみに取り組む。すぐに終わらないものは、人に問い合わせるなど、物事を進めておいて、待ち状態にして、次のタスクに進む
- 一つのことをやっているときは、他のことは一切せず集中する
- 一つのタスクを中断する場合、次に再開するときに、すぐにその状態に戻れるように記録したり、整理しておいたりする
- タスクの残骸は消しておく、例えばブラウザのタブは、そのタスクが終わったら閉じて、必要なものは記録する(そうしないと気移りしてしまう)
- 頭の中のみで整理する
- 後で人に説明することを意識することだけでも、相当集中力や記憶力が向上する
- 話を聞きながらビジュアルのイメージをつくったりメンタルモデルを脳の中で可視化したりして、自分が理解できているのか確認するのが有効
- コードを読み物として扱う
- PRのレビューを減らすには読んだ人がどう感じるか?を意識しながらコードを書く必要があった
- クイックコールのすすめ
- 自分にその分野のメンタルモデルやコンテキストがなければ、すぐさまエキスパートに聞いたほうが良い。
- 相手が忙しいかどうかは考える必要はない。
- メッセージを送ってスルーされたら忙しいんだろうなと思うようにすれば良い
- クイックコールされる側にも良いことがある
- 自分が知らないときほどリプロ(ソフトウェアの問題の再現)する
- ディスカッションで鍛えられたこと
- 自分にとって理解し難い相手の意見や振る舞いも尊重して、受け入れる。正しいか間違っているのかのジャッジではなく、異なる視点から自分の考えや知識を深めることができて、楽しいよね!という感覚を育みたくなる
- 仕事を楽しんでいるか?を確認する
- マネージャーが率先してメンバーに仕事を楽しんでいるか?エンジョイしているか?を確認することで、仕事は楽しんでなんぼの心地よいムードが生まれる
- ボスの役割はサポートすること
- マネージャーの主な仕事はアンブロック
- 開発者(IC)がどこかで詰まっている状態になると、ブロックされているものを取り除いてくれる
- 同僚たちのワークライフバランス
- 残業しないだけではなく、個々人が自由に好きな時間に仕事をする。
- 成果が出ていればなんでもいい
- 人は性格も文化もみんな違うのだから
- 違うことをするのがリフレッシュに
- 水泳をするときに、息継ぎせずに泳ぐことはできない
- 発想のブレークスルーはその仕事をしていないときに発生する
- 一日に一つのことに集中できるのは4時間。4時間を過ぎて疲れたら、単に休むのではなく、違うことをするのが良い
- 休息するのは何もしないことではなく、いつもと違うことをするのが重要
- 整理の技術
- 新しいことを学んだらブログを書く
- ブログを書くときにサンプルコードそのままではなく、少し変えて試して見る
- 批判の心が開発者の心を打ち砕いてしまう
- コントリビュートと感謝のループ
- 開発者に限らず、日本のあらゆる業界・業種において、批判ではなくポジティブフィードバックで現場の心が満たされるような好循環が生まれたら、間違いなく日本の生産性は抜本的に変わるだろう
まとめ
社会人5年目にしてこれまでの働き方を振り返ると、オリジナルのスタイルで仕事をしてきたような気がする。(知らぬ間に多くの影響を受けているに違いないが)
この本との出会いは間違いなく、そのスタイルに大きな影響を与えてくれる産物だ。
本を読んでいる最中から、普段の仕事をより円滑に進めるイメージが持てた。イメージができれば実行に移すだけである。僕はイメージ先行型の人間だ。頭の中でイメージが膨らめば含まらむほどスムーズにことが進む。この本には感謝しかない。
全てに触れることはできないが、Pickupしたテキストは僕の仕事のみならずライフスタイルに大きな変化を与えてくれた。
掘り固まった日本の働き方に疑問を感じているのであれば、あなたがエンジニアか否かに限らず、本書をおすすめする。