読書メモ:世界一流エンジニアの思考法
読んでいく
内容説明
試行錯誤は「悪」。“基礎の理解”に時間をかける、より少ない時間で価値を最大化する考え方とは?「準備」と「持ち帰り」をやめて、その場で解決する、“脳の負荷を減らす”コミュニケーションの極意、コントリビュート文化で「感謝」の好循環を生む…etc.仕事と人生を「自分の手でコントロールする」最高のスキルがここに!
目次
第1章 世界一流エンジニアは何が違うのだろう?―生産性の高さの秘密
第2章 アメリカで見つけたマインドセット―日本にいるときには気づかなかったこと
第3章 脳に余裕を生む情報整理・記憶術―ガチで才能のある同僚たちの極意
第4章 コミュニケーションの極意―伝え方・聞き方・ディスカッション
第5章 生産性を高めるチームビルディング―「サーバントリーダーシップ」「自己組織型チーム」へ
第6章 仕事と人生の質を高める生活習慣術―「タイムボックス」制から身体づくりまで
第7章 AI時代をどう生き残るか?―変化に即応する力と脱「批判文化」のすすめ
はじめに
大人になってからADHDと診断された私は、自分の不器用さや記憶力の低さ、頭の中で思考が乱れ飛んでまとまらず、くったり疲れてしまう感覚に、長年なやんでもいたのだ。
わかりみ。ちょっと似た人?期待値上昇。
いくばくか才能を発揮できる分野があることを発見した。それはすべて「誰かにやってもらう仕事」だった。ー中略ーところが、「自分が手を動かして何かをつくる仕事」はいまひとつうまくいかない。
ふむ…?明確に言語化したことがなかったことだが、言われてみれば確かにそうかもしれない。
でもこの方は自分が手を動かして何かをつくるのを諦めなかった
なぜ彼らは圧倒的に仕事ができるのか?ー中略ー主に「思考法」(マインドセット)が高い生産性を形作っている
第1章 世界一流エンジニアは何が違うのだろう?―生産性の高さの秘密
最初の一つのログだけを見て「仮説」を立て始めた。手は一切動かさない。ー中略ー
ログを見て、自分で多分こういうことが起こっていると推測して、その推測に会ったクエリを投げてそれを証明する
いや、でもそもそも内部構造の予測が全くつかないし、仮説が立てられないから困っている気がするんや…まあでもそれがあかんって言ってるんか?まずは内部構造を知ることに時間をかけるってこと?その方法すらあまりわからないのだが…
根本を理解しなきゃいけないのはわかるけど、そのやり方がわからんのよな…そういう教材あんまりなくない?そういう観点で調べてないだけか?でもそもそも根本ってなんや…フロントエンドエンジニアにとって根本とは?ブラウザについて調べる?Reactの内部実装を見る?
理解の3要素
- 説明可能
- いつでも使える
- 応用可能
私はコードを読むのが遅いので速くすることばかり考えていたが、彼はコードのロジックを読むのではなく、コードの意図とその背後のアーキテクチャを理解するために読み込んでいた。理解にしっかりと時間をかけるのを恐れないのだ。
確かに結構焦って速読しようとはするなあ…
基礎が大事ってのはわかるけど、いまいちそれが何なのかわからない。
初歩の学習を「簡単だ」と馬鹿にせず、本当に一からやり直してみた。ー中略ー
メール一つ読むのでも、英文は読み飛ばし癖がついていたが、時間をかけてゆっくり理解して読むようにしてみた。ー中略ー
従来読み飛ばしていたようなログの他の項目も見ることで、圧倒的に試行錯誤が減って問題を一直線に解決できるようになってきた
なるほど…
たしかになあ…weekly系のメルマガを読み飛ばしして満足してたのだが、意味あるんかな〜と思うことが結構ある。その時間を基礎の理解に費やした方がよい?
全員がコンピュータサイエンスの知識があることが前提になっているので、自分の頭で考えて行動し、判断していく体制だ
これさらっと書いてるが結構でかい気がする。
「彼は人生で自分があった中でもっとも賢い人だけど、それでも、自分と比べてとても追いつけないほど脳みその性能が違うわけではない」
これハーバード大生と生活した時に思った。脳みその性能はもちろん自分より良いんだけども、漫画みたいに離れてるわけじゃなくて、どちらかというと何かで日々少しずつついた差の積み重ねが巨大になっている印象を受けた
ちょっと卵が先か鶏が先か感がなくもないが、「理解は時間がかかるもの」「基礎の理解に時間をかけることを恐れない」っていうのはそうだなと思った。確かに恐れていた。
「お客さんの言っていることは聞くけど、信用せずファクトを検証していくのがいいよ」
自分でログなどを検証して問題解決をするようにしないと「思い込み」の穴に落ちてしまう
でも思い込みをしようとしてする人はおらんのよなあ…そういうメタな視点自体が経験と能力に少し依存している。でも意識で多少は変わるのか?
小さなドキュメントをコードの前に書く
小さなドキュメントがどのレベルなのかよくわからんな…サンプルが見たい(フォーマット例はあるが…)
「ドキュメントはコードを書く前に書くんだ。だって、コードを書いた後にドキュメントだけ書くなんて退屈だろ?」
とくに既存システムがある場合は、あれこれ考えて調べる前に、まず「エキスパートに頼る」というのはベストプラクティスだと思う。
日本は「ググれ、カス」という言葉があるぐらい、自分で調べてから人に聞くべきという文化だが、少なくとも私のやっているクラウドの中身をつくるような複雑なシステムの場合、どう考えても全体的効率が悪い。
日本は確かに聞かなすぎなこともあるが、ケースバイケースな気はするな…この人みたいに最先端でネット上に情報もあんまりないみたいな状況ならわかるけど、僕らのレベルの悩みなんて大抵ネットに答えが転がってるから…
理解に時間をかけるのを恐れないってのは当たり前のようでいて盲点だったなと思った。
第2章 アメリカで見つけたマインドセット―日本にいるときには気づかなかったこと
-
Be Lazy
- 臨んでいる結果を達成するために、最低限の努力をする
- 不必要なものや付加価値のない仕事(過剰準備含む)をなくす
- 完結さを目指す
- 優先順位をつける
- 時間や費やした努力より、アウトプットと生産性に充填を置く
- 長時間労働しないように推奨する
- 会議は会議の時間内で効率的かつ生産的に価値を提供する
-
「減らすこと」自体に価値があると、マインドをリセットすること
- 一つだけピックアップする
- 時間を固定して、その中で価値を最大化する
- 「すべき」から時間を計算すると間延びする
- 準備や持ち帰りをやめてその場で解決する
-
リスクや間違いを快く受け入れる
- 間違いを厳しく批判したり懲罰したりしない
- 失敗から学ぶ態度
- Fail Fast(早く失敗する)
- 実験が推奨されている
- 全員に現状維持や標準を要求せず、臨機応変が推奨される
- 避難や恐怖感のない環境
無理、断るを練習する
いわゆる2−8の法則でも、20%の仕事が80%の価値を有無のだからー中略ー20%のタスクを終えて80%の価値を出したら、残りの80%はやらずに、次の80%の価値を生む20%の新しいタスクに取り組んでいる
検討より検証
人間に未来は予測できない。ー大量に検討した資料をつくったところで精度は低いし、マニュアルに「できる」と書いてあっても、実際やってみるとできないことなんて頻繁に生じる
進捗の「実績」だけで状況判断し、「納期」を固定したまま「スコープ」を出し入れするのが現実的
これはそう。やっぱ結構実績ベースじゃなくて、このくらいできるはずだベースだったり、このくらいやらなきゃいけないベースで考えがち。(ただこの方の話で言うと自社開発だからやりやすいってのはある。受託で納期変えるのは自社開発よりはハードル高い。)
火急の依頼は「マネジメント能力の欠如」と見なされることを覚えておいてほしい。納期を割る確率が高い賭けをしているようなものだし、依頼先にも相当な負荷をかける
センテンスは入ってくるんだが、構造化するのが難しい。。「減らすこと自体に価値があると、マインドをリセットすること」あたりが刺さったか?
第3章 脳に余裕を生む情報整理・記憶術―ガチで才能のある同僚たちの極意
- コードリーディング
- 実装は極力みない。IFと構造を理解する
- WIP=1
- いま手を付けている仕事を1つに限定する
- どんなにすごい人でも時間がかかることはかかる
- 1つのことに集中。中断する時は再開する時のために記録、整理する
- タスクの残骸は消す(ブラウザのタブとか)
- いま手を付けている仕事を1つに限定する
- 記憶術
- 説明可能にする
- 書く:コーネルメソッド
- 記憶しやすくなる復習のタイミングを習慣化する
会議中他のことをしないはやっぱそうした方がいいんやろなあ…それができないってことは出る意味がないってことなんだろうけど。やっぱそういう風に持っていかないとだめなんだろうな
あとタブね…残す派なんだよな…でもやっぱよくないんやろな。参照系とか記録系とかすぐ開けるように開いときたいんよね…どうしようかなあ。まあでもこれは一旦いいか…。
1日4時間を専有的に確保し、その他の時間に、ほかの対応をする時間割とするのは非常に合理的だ。そこでGithubの課題やメールをまとめて返す時間にする。ブロックしている時間以外はレスポンシブに返すようにすれば、他のメンバーの業務が滞ることもない。
これはやりたいんよなあ…4時間の確保を業務中にやるのは結構ハードルが高い。やっぱ午前中とかにするしかないかな。でも4時間結構きついよね。定時の半分やもんね。一番情報が動く時間帯はレスポンシブでいたいし。朝2時間、夜2時間とか?確保スケジュールのサンプルほしかったな。
昼間は会議とか質問対応で仕事にならないから、夕方から来て誰にも邪魔されない時間に開発
やっぱそうなるよね…
仕事の進捗をzennとかでメモしたいよなあ…限定公開機能作って欲しい。
「その場で記憶までする」つもりで聞くと、理解しないと無理なので、明確でないことはすぐに確認するようになる。
議事を書かないはちょっと賛同しかねると思ったが、これはそう。でも議事を書かないとは言ってないか。取り方の問題?
第4章 コミュニケーションの極意―伝え方・聞き方・ディスカッション
- 情報量を減らす
- 日頃から人に伝えることを前提とした準備をしておく
- 読んだ人がどう感じるか?を意識しながらコードを書く
- クイックコールを頻繁に使うこと
たくさん情報があっても消化できないだろう?という感覚
彼らの背景にあるのは、「その場で吸収できることを最大化したい」というスタンスだ。複雑なものを一気に提供されてもその場で理解しきれないので、単純にリアルタイムに理解できる適切な情報量が好まれる
リアルタイム性は結構あるかもなあ。会話とかでちゃんと理解しようとする感じ。僕の場合は持ち帰ってあとでしっかり理解して返事しないと、とか思っちゃう時もまだある。その場、その場で処理する文化は大事かも。その場で処理できる情報量にする。メール文化から会話文化への変換。
アメリカ人はほぼ準備しない。その代わり、何が来ても対応できるように、不断から反射神経を鍛えているフシがある。
あーね。なるほど。
優先順位の高い案件を持ち帰ってしっかり練るのは決して悪いことではない
やっぱ基本はその場で。持ち帰るなら持ち帰るという決断をその場でする感じやな。
気軽に聞ける仕組みは、気軽に断れる空気とセットになっている
助けになれない場合は、すぐに「ごめん」でクールに済ませたほうが、聞く方も聞かれる方も気が楽なのだ
これはわかるけど難しいよね…そういうコンセンサスが取れている文化圏ならよいが、面倒を最後までみるべきという文化圏でこれをやれば冷たい人だと嫌われる可能性が高い。うーむ…でもそういう人だと社内で浸透すれば良いのかもだけど。
知ったかぶりをするほうがよっぽどカッコ悪いし、後でこっそり調べるのも生産性的には本当に無駄な作業
agree to disagree
「ああ、君は同意しないんだね」ということを理解する
議論はわかってる人同士がするもの→議論はわからないからするもの
この辺の意識転換はいるのかも
第5章 生産性を高めるチームビルディング―「サーバントリーダーシップ」「自己組織型チーム」へ
- サーバントリーダーシップ:メンバはステークホルダ
- コマンドアンドコントロールは時代遅れ:メンバは社員
- マネージャの主な仕事は「アンブロック」
タスクの割り振りもチームが自らやっていく。基本的にメンバ各自がやりたい仕事を「自分がやるよ」と選択していく
日本と米国という違いもあるっちゃあるかもしれないが、どちらかというと優秀な会社かそうでないかの違いという気も?日本でもすごい会社ならこんな感じでやってそう。個が優秀であればこれができるが、優秀でない状態でこれをやれば崩壊する。そしてコマンドアンドコントロールにならざるを得ないってのもありそう。でもだからってそれを続けてればジリ貧。
自分がチームリーダなら、どうするのがいいのかなあ…こういうのってそういう空気のもとでやるのはいいのかもしれないけど、そうじゃない空気を変えるのは難しい。小さく始めるのがいいだろうが…自分がいる状況をどんどんメンバに詰め込んでいくのがいいのかな。自発的に考えるための情報を詰め込んで、考えてもらう。自分がどんな風に考えるのか共有する。knowledge baseもそのための布石の一つになるか。
MSには作業上の統一プロセスはなく、基本的にチームをどう回すかもそのチーム次第だ。
だよなー…こうあるべきなんだよなたぶん。例えば会社の標準化プロセスのドキュメンテーションは、抽象度を考えないと時代遅れ&非柔軟性の押し付けになってしまう。でもこれってCSの基礎とか、そういうベースがある前提なんだよなあ。全員が基礎を理解している前提。理解してない人はサヨウナラ。そうじゃない前提でこれをやれば、開発現場がぐちゃぐちゃになる。結局は地力の差が出ちゃってるだけなのか?
サーバントリーダーシップでマネージャが重視するのは各メンバのメンタル面。「仕事をエンジョイしているか?」
仕事は楽しむものというのは激しく同意だが、それだけやってるのは無理…?程度はどうするんだろうか。
他の人の脳みそを借りて、最適なアイデアを選択しようという姿勢
第6章 仕事と人生の質を高める生活習慣術―「タイムボックス」制から身体づくりまで
- 切りの良いところまでやる→「タイムボックス制」
- どんなに作業の途中でもたとえば5時で必ず切り上げる
朝7時からやって、子供関係やって、9−16時で働いて、18時から少し復活。やっぱこんな感じになるのか。あとは土曜仕事。アメリカではそういうのやらないのかと思ったけど、やっぱやるんだね。
生産性を上げるためには学習だよ。だから、僕は仕事を定時ぐらいで切り上げる。その後で、自分のやりたいトピックを勉強したり試したりする。
やっぱこれよなあ…定時で終わるように仕事をコントロールして、勉強せなあかんのよな…でもなかなかむずいで…それが良いことだと定着してる会社ならいいが、そうでなければなんで帰るの?ってなるしな…でもちゃんとアウトプットしてチームに還元してればやることやってるってなるか?まあとりあえず今の朝勉強の形の方ができそう。
人間は週40時間労働が一番生産性が上がるという説もあるらしい。そうなんや。
多くの人は努力→成功→幸せと考えるが、幸せが人の成功の指標となる重大な結果に先行する
何かをしたら必ず完了まで一息にやる
仕事においても、整理され、検索せずにすぐ取り出せる状態になっていることーそこまでやって完了と捉える
やっぱHIITやってんのかー。HIITなー。。
第7章 AI時代をどう生き残るか?―変化に即応する力と脱「批判文化」のすすめ
誰もやったことがないものに取り組んでいる専門家は、AIが取って代わることは原理的にありえない
アメリカではみんな「専門性を高める」という蓄積に価値が置かれ、スピードは思ったより重視されない
プログラミングを低レベルの人がやることと見なして外注し始めたことが、日本の大手SIer衰退の分岐点となってしまった
これはFから転職する時めちゃめちゃ思ったなあ。
まとめ
- 少し散文的?というか、論理構造を取るのが難しいと感じることもあるが(私の頭が熱でバグってたのかもしれない)、一つ一つの文章はささるものが多い
- 新しい概念を与えてくれるというよりは、当たり前で忘れがちなことが、最先端においても結局大事なんだよねっていうことに気付かせてくれる本
- ちょっとアメリカを神格化し過ぎ(昔来てた進研ゼミの漫画みたいな感じ笑)な感じもした。。確かにすごいんだろうし、日本にそういう傾向があることもあるけど、どちらかというとMSがすごいんだろうし、うちの会社だと「日本では」ってくくられた問題はそんなに起きてないかも?ちょっと主語が大きいかもと思うことはあった(筆者の個人的な怒りもちょっと感じた笑)が、まあでもそういう人向けに書いてるんだもんな