どうもです、タドスケです。
ここ2週間ほど読み続けていた本『プログラマー脳』がとても面白く、多くの現役プログラマーの方にオススメしたい内容だったので、記事にまとめようと思います。
『プログラマー脳』ってどんな本?
『プログラマー脳』は、プログラマーが仕事をしていて感じることがある
- このコードがやたら読みにくいのはなぜ?
- 理解しやすいコードを書くにはどうすればいい?
- 自分にはかんたん過ぎるように思えるタスクなのに、この新人にできないのはなぜ?
といった疑問を、認知科学の観点から体系的に解説してくれている本です。
こんな人にオススメ!
この本は、プログラミング技術的にはさほど難しい内容は書かれていないので、少しでもプログラミングを経験した人なら読める難易度になっています。
ただ、実際に現場でプログラミング業務を経験し、自分一人で仕事がこなせるようになり、後輩に教える段階になった人が読むと、多くの学びがあるのではないかと思います。
仕事に慣れ、わかることが増えてくるほど、「わからない人の気持ち」に疎くなりがちです。
「コードを読んでもよくわからない」という新人に対して、
まだ慣れていないだけ。そのうちわかるようになるよ。
と声をかけていませんか?
そんな人にとってこの本は、
- 『わからない』とは何か
- どうやったら『わかりやすく』できるのか
を考え直すきっかけになるはずです。
内容まとめ
コードを読むために必要な3つの能力
この本の冒頭に書かれている、最も大切なことを紹介します。
コードを読むためには、以下の3つの能力が必要になります。
- 短期記憶
- 長期記憶
- ワーキングメモリ
短期記憶
電話番号をメモするためにちょっと覚えておくような、短時間・小容量しかない記憶です。
プログラミングにおいては、上で出てきた変数の意味を覚えておいたり、関数の内部を詳しく見る際に呼び出し元を覚えておいたりするのに使われます。
一度に覚えておける数は2~6個程度と言われています。
長期記憶
子どもの頃の思い出、掛け算の九九など、長期間・大容量ある記憶です。
覚えたことはすぐには長期記憶に入らず、何度も確認・使っていくうちに短期記憶→長期記憶になっていきます。
プログラミングにおいては、使い慣れたプログラミング言語の文法、昔書いたコード、「関数は短く」みたいな原則などが当てはまります。
ワーキングメモリ
短期記憶と同じ扱いをされることもありますが、この本においては「作業するのに必要な領域」として説明されています。
PCに例えると、CPUがワーキングメモリで、メモリ(RAM)が短期記憶です。
こちらも具体的な数値では示されていませんが、一度の処理できる量に限界があります。
コードが読みにくい理由と対策
「コードが読みにくい」ことを、この本では「認知的負荷が高い」と言っています。
認知的負荷は、先ほど紹介した3つの能力に分かれます。
短期記憶の負荷が高い
コードの量が多すぎて一度に頭に入り切らず、ついさっき読んだコードを忘れてしまう状態です。
複数のコードをひとまとめにする(チャンク化という)ことで、まとめたチャンクを1個として扱うことができます。
チャンク化の方法には、まとまりにコメントをつける、関数・クラス・モジュールを分割する、などの方法があります。
長期記憶の負荷が高い
文法がわからないので毎回調べる必要があり、そのたびに作業が止まってしまう状態です。
文法を覚えていれば(長期記憶化できていれば)、調べなくてもできるようになります。
また、コードのまとまりを読んだときに「あ、これは◯◯のパターンだな」とすぐに理解できるので、短期記憶やワーキングメモリを使わずに済みます。
ワーキングメモリの負荷が高い
複雑な処理を理解しきれず、頭がこんがらがっている状態です。
考えたことを文字に書き出したり、図や表で視覚化するとわかりやすくなります。
長期記憶を強化しよう!
ワーキングメモリ・短期記憶に負担をかけずにプログラミングをするには、長期記憶を強化することが大切です。
そのために有効な方法として紹介されていたのが、英単語の暗記などに使われる「フラッシュカード」です。
表面には説明文(例:1から10まで for 文で足し合わせる)を、裏面には対応するコードを書きます。
フラッシュカードはアプリのほうがプログラミングをしながらすぐに使えるので便利です。
なぜフラッシュカードが有効なのかというと、長期記憶化するには「間隔を空けて何度も思い出そうとすること」が重要だからです。
また、英単語の場合は量が多いので、全ての単語のフラッシュカードを作り切ることは難しいですが、プログラミング言語の文法であればそこまで多くはないため、自力で作ることができます。(コードはコピペも使える!)
そうして、「別に毎回調べればいいし」と思っていたことを「調べなくてもできる」ようにしていくことで、少しずつプログラミングを楽にできるようになっていきます。
チーム作業に応用する
これまでの内容は個人だけでなく、他の人と一緒にプログラミングをする場合にも同じことが言えます。
新人教育でやりがちな間違い
特に新しくチームに入った人(=新人さん)に仕事を覚えてもらう際には、「その人にとって認知的負荷が高くなっていないか」を常に意識してあげる必要があります。
なぜなら、新人さんはチーム内のコードについての知識が全くないため、長期記憶の助けを借りることができないからです。
これは、仕事に慣れてくればくるほど見落としがちなことなので、注意しなければいけません。
新人さんの物覚えが悪いのは能力のせいではなく、一度に覚えきれない量の仕事を投げてしまっているせいかもしれません……。
新人の記憶をサポートする
本書では、新人さんが無理なく学習できるための方法として、以下のような例が挙げられていました。
- 長期記憶:関連情報を説明する
- 短期記憶:小さくて1つのことだけに特化したタスクを用意する
- ワーキングメモリ:クラス図、フローチャートなどの図を描く
私的感想
僕にとってこの本が「グッときた」のは、日ごろ仕事をする中で「読みにくいコード」に触れ、自分で読みやすいようにリファクタリングをしていく中で、「こうなんじゃないかな?」と感じていたことが、理論として説明されていたことでした。
これまでは職場の方々に、
新人さんにはもっと小さなタスクを渡した方が良いのでは?
と話しても、
質問しながら慣れてもらえればいい。
という返答が来るばかりでした。
そこで前の職場で新人教育をした際には、実装タスクをいきなり渡す代わりに、開発環境のセットアップマニュアルの改修や、僕が書いたコードのリファクタリングをお願いしていました。
いま思えば、「小さくて1つのことだけに特化したタスクを用意する」という点で、この本の内容に沿ったやり方ができていたのかもしれません。
今後コードの書き方や新人教育ついて職場で話し合う機会があれば、今回学んだ内容を活かしたいと思います。
この本には他にもたくさんのテクニックが書かれていましたので、もっと詳しい情報に興味が出た方は、ぜひご一読されることをオススメします!
コメント
コメント一覧 (1件)
[…] […]