はじめに
こんにちは、株式会社iimonでエンジニアをしている なかむら です。
「なんであの人はこんなに仕事が早いんだろう」と思ったことはありませんか?
レビュー依頼を出したらすぐに戻ってくる的確なコメント。しかも、そのコメントはすぐに実装に活かせるものばかり。さらにその人は、自分のタスクも早く終わらせていて、しかも品質が高い。同じ時間働いていたとしても、これでは差が埋まりません。では一体何が違うんでしょうか?
そんな時に、Qiitaや社内で話題に上がっていた2冊の本を読んでみました。『プログラマー脳』と『世界一流のエンジニアの思考法』という2冊です。この本を読んで、優秀なエンジニアたちがどうやって効率的にコードを読んでいるのか、そしてどんな思考法で仕事を進めているのかが少しずつ見えてきました。
今回は、この2冊を読んで私が学んだことや実践していこうと思うことを、お伝えさせていただきます。
エンジニアの間で話題の2冊:概要と魅力
まずは簡単に2冊の概要を紹介します。
1. 『プログラマー脳』
この本は、プログラミングを効率的に学び、理解するための「脳の使い方」に焦点を当てたものです。特に「長期記憶」「短期記憶」「ワーキングメモリ」を活用して、どうすればコードを効率的に読み解けるかが詳しく解説されています。
著者は、プログラミングを単なる「スキル」ではなく、「脳の使い方」として捉えています。つまり、エンジニアとしての成長のカギは、コードを書く技術だけでなく、コードを「理解する力」にあるという考え方です。認知科学の視点から、エンジニアが抱える「コードが読めない」「理解が追いつかない」という悩みにアプローチしている点が特徴的です。
2. 『世界一流のエンジニアの思考法』
こちらは、著者がMicrosoft(Azure開発)で働いた経験をもとに、トップエンジニアたちの仕事術や思考法をまとめた本です。「手を動かす前に頭を使う」「感覚ではなくファクトに基づいて判断する」といった、エンジニアとしての基本的なマインドセットから、チームビルディングや生産性向上の具体的な方法まで幅広く解説されています。
この本の魅力は、単なる技術論にとどまらず、仕事やチーム運営の「文化的な違い」や「マインドセット」にも踏み込んでいる点です。特に、日本とアメリカのエンジニア文化の違いに焦点を当てながら、どのようにして一流のエンジニアとして成長していけるのかを具体的に示してくれます。
レビューや実装が早い理由:優秀なエンジニアの「考え方」
本を読んで気づいたのは、優秀なエンジニアたちは「コードを読む力」が圧倒的に高いということ。そして、その力を支えているのが、いくつかの具体的な考え方や習慣です。
1. 認知負荷を減らす:短期記憶とワーキングメモリの活用
『プログラマー脳』では、「認知負荷」という概念が頻繁に登場します。認知負荷とは、脳が一度に処理できる情報量の限界を指します。人間の短期記憶やワーキングメモリ(作業記憶)は非常に限られており、これを意識的に管理することで、コードの理解やレビューの効率を大幅に向上させることができます。
短期記憶の限界
短期記憶は、通常2~6個の情報しか保持できないと言われています。コードを読む際に、変数名や関数の役割、ロジックの流れなど、膨大な情報を一度に覚えようとすると、短期記憶が圧迫されてしまい、理解が追いつかなくなります。
ワーキングメモリの活用
ワーキングメモリは、短期記憶を一時的に操作して問題を解決するための「作業台」のようなものです。こちらも短期記憶同様に2~6個の情報しか同時に処理はできないと言われています。ちなみに、『プログラマー脳』では、このワーキングメモリを効率的に活用するために、以下のような方法が推奨されています:
情報を整理して読む
コードを読む際には、変数や関数の役割をメモに書き出すことで、ワーキングメモリの負担を軽減します。コードを分割して理解する
一度に全体を理解しようとせず、部分的に分割して読み進めることで、認知負荷を減らします。
2. 長期記憶の重要性:エンジニアの「知識の基盤」
短期記憶とワーキングメモリに関しては個人差がほとんどなく、また後天的に伸ばすことも難しいとされています。 一方で、長期記憶には無限の可能性があり、個人の努力や工夫で伸ばすことが可能です。 長期記憶として知識をもつメリットとして、「認知負荷の軽減」があります。たとえば、「forループの使い方」や「デザインパターンの基本」が長期記憶に定着していれば、わざわざ調べたり考えたりする必要がなくなります。それに、新しいコードや技術を理解する際も既に長期記憶にあるパターンを流用することができるので作業がスムーズになります。
同じことを『世界一流のエンジニアの思考法』でも触れられていました。そちらでは仕事の難易度を以下の4つに分類して紹介していました。
レベル1:何も調べず即実装できる レベル2:調べれば実装できる レベル3:スパイクソリューション(課題把握のための大まかなプログラム)があれば何とかなる レベル4:自分では無理
つまり、どちらの本でも長期記憶に蓄積された知識を活用することで、何も調べずにすぐに実装できる「レベル1」の状態を作り出すことが重要だと主張しています。
長期記憶の鍛え方
ではどうしたら長期記憶を鍛えられるでしょうか?以下にポイントをまとめます。
1. 繰り返し学習
記憶は何度も触れられる情報を重要だと判断して、短期記憶→中期記憶→長期記憶の順番に送られます。 そのため、長期記憶に情報を定着させるためには、繰り返し学習が不可欠です。
- コードを繰り返し読む
自分が書いたコードや他人のコードを何度も読み返すことで、コードのパターンや構造を自然と覚えることができます。
2. 関連付け
新しい情報を既存の知識と関連付けることで、記憶がより強固になります。関連付けを意識することで、単なる暗記ではなく、実際に使える知識として定着させることが可能です。
具体例を考える
たとえば、設計パターンを学ぶ際には、自分が過去に書いたコードや実装経験と関連付けて考えることで、理解が深まります。コードレビューでの学びを実装に活かす
他人のコードレビューで得た知識を、すぐに自分のコードに取り入れることで、記憶に残りやすくなります。
3. アクティブリコール
単に情報を読むだけではなく、自分で積極的に思い出す練習をすることが重要です。アクティブリコールは、記憶を強化するための非常に効果的な方法です。
頭の中でコードをシミュレーションする
「この関数はどのように動くのか?」を頭の中で想像しながら、コードの動作をシミュレーションすることで、記憶が深まります。クイズ形式で復習する
自分で問題を作り、「このコードの出力は何か?」などを考える練習をすると、記憶の定着が促進されます。
4. 十分な休息と睡眠
記憶の定着には、休息と睡眠が不可欠です。睡眠中に脳が情報を整理し、短期記憶を長期記憶に転送するプロセスが行われます。
これらの方法を実践することで、長期記憶を鍛え、「レベル1」のタスクを増やしていくことが可能になります。『プログラマー脳』ではフラッシュカードを用いた学習方法がおすすめされていました。ちなみにJavaScript学習者であれば、iOS版でこんなアプリを見つけたので使ってみるのもいいかもしれません。他にも記憶曲線に基づいてリマインドしてくれる暗記アプリも見つけたので興味があれば、調べてみてください。
apps.apple.comコードを効率的に読むための具体的な方法
『世界一流のエンジニアの思考法』と『プログラマー脳』の両方で、コードを効率的に読むための具体的な方法が紹介されています。
1. 手を動かす前に頭を使う
『世界一流のエンジニアの思考法』で何度も強調されているのが、「手を動かす前に頭を使う」という姿勢です。これはコードを読むときにも当てはまります。ただ漫然とコードを追うのではなく、以下のような準備をすることで効率的に読み解いていきます。
目的を明確にする
「このコードを読む目的は何か?」を最初に考えます。バグを見つけるためなのか、新しい機能を追加するためなのか、レビューをするためなのか。目的が明確であれば、どこに注目すべきかが自然と見えてきます。全体像を把握する
いきなり細かい部分に入り込むのではなく、まずはエントリーポイント(プログラムの実行が始まる場所)や依存関係を確認し、コード全体の流れをざっくりと理解します。
2. 感覚ではなくファクトに基づく判断
『世界一流のエンジニアの思考法』では、「感覚ではなくファクトに基づいて判断する」ことが重要だとされています。コードを読む際にも同様です。
- 具体例
バグを調査する際には、まずログやデバッグツールを使って、コードが実際にどのように動作しているかを確認します。自分の思い込みや感覚に頼らず、事実に基づいてコードを理解することが重要です。
効率的な仕事術:2冊に共通するポイント
『プログラマー脳』と『世界一流エンジニアの思考法』には、効率的に仕事を進めるための共通するポイントがいくつかありました。
1. 無駄を省いて集中力を高める
両書ともに、「無駄を省く」ことの重要性を強調しています。たとえば、『世界一流エンジニアの思考法』では、「会議での準備や持ち帰りをやめ、その場で解決する」という考え方が紹介されています。これにより、タスクを先延ばしにすることなく、効率的に物事を進められるようになります。
一方、『プログラマー脳』では、脳の認知負荷を減らすことで集中力を高める方法が解説されています。たとえば、タスクを細分化し、一度に処理する情報量を減らすことで、効率的に仕事を進めることが可能です。
2. マルチタスクをやめる
1番目と被るところもありますが、『世界一流エンジニアの思考法』では、「マルチタスクは生産性を最低にする」という指摘があります。複数のタスクを同時にこなそうとすると、脳への負担が増え、結果的にどのタスクも中途半端になってしまいます。
仕事中に割り込みが発生すると、元のタスクに再集中するまでに平均で23分かかるという記事もありました。具体的な対策としてはslackで確認しないチャンネルはミュートにしたり、通知を確認する時間を決めることが考えられます。
PCやスマホからの「通知」で仕事の効率はこんなに悪化!デジタル時代の「通知疲れ」解消法 | 及川卓也のプロダクト視点 | ダイヤモンド・オンライン
3. 失敗を恐れずに挑戦する
『世界一流のエンジニアの思考法』では、「失敗に寛容な文化」がトップエンジニアを育てるとされています。失敗を恐れず、未知のことに挑戦する姿勢が、成長につながると述べられています。
『プログラマー脳』でも、学習における「試行錯誤」の重要性が語られています。失敗を経験することで、脳が新しい知識を吸収しやすくなり、長期的な成長を促すことができるのです。
4. 継続的な改善を意識する
どちらの本でも、日々の仕事や学習の中で「継続的な改善」を意識することが推奨されています。小さな改善を積み重ねることで、長期的に見て大きな成果を得ることができます。
『プログラマー脳』では、繰り返し学習やメンタルモデルの更新を通じて、記憶や理解力を高める方法が解説されています。一方、『世界一流のエンジニアの思考法』では、振り返りやフィードバックを積極的に活用し、仕事の進め方を改善することが推奨されています。
これらのポイントを実践することで、仕事の効率を向上させることができます。2冊に共通するこれらの考え方は、エンジニアとしての成長だけでなく、日々のタスク管理やチームでの活動にも役立つと感じました。
まとめ
認知負荷を減らす
脳の限界を理解し、短期記憶やワーキングメモリを効率的に使うことで、コードの理解力やレビュー速度を向上させる。長期記憶を鍛える
繰り返し学習や関連付け、アクティブリコールを活用して、知識を「レベル1:何も調べず即実装できる」の状態に定着させる。手を動かす前に考える
コードを読む際も、目的を明確にし、全体像を把握することで効率的に理解する。継続的な改善を意識する
小さな改善を積み重ね、失敗を恐れず挑戦することで、成長を続ける。
実践例
今回学んだことを実践に移すために、まずは以下のことを始めてみようと思います。
コードレビューでの記録
レビューで得た知識をメモし、個人用のslackに貼り付けて翌日にリマインダーをセットする。タスクの細分化と集中
ポモドーロ・テクニックを使い、複雑なタスクを小さな単位に分け、1つずつ集中して取り組む。 slackを確認する時間を決める。アウトプットの習慣化
学んだことをブログや社内ドキュメントで共有し、知識を整理・定着させる。
終わりに
エンジニアとして成長するためには、技術力だけでなく、学び方や考え方を改善することが必要だと感じました。 学んだことを実践して、効率的に仕事を進められるようにしたいと思います。同じように成長を目指す方々にとって、この記事が少しでも参考になれば幸いです。
現在弊社ではエンジニアを募集しています。 少しでも興味を持ってくださった方は、ぜひカジュアル面談でお話ししましょう。
iimon採用サイト / Wantedly / Green
参考
本のリンク
プログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ | フェリエンヌ・ヘルマンス, 水野貴明, 水野いずみ | 工学 | Kindleストア | Amazon
要約ブログリンク
全ITエンジニア必読書である「世界一流エンジニアの思考法」を要約してみた
「プログラマー脳」の本の感想と賛辞 〜 意味波と具象と抽象と
その他
【暗記アプリおすすめ11選】スマホで単語帳が楽々作れて資格試験や受験におすすめ | プログラミングスクールならテックキャンプ