エンジニアの資質「ワーキングメモリ」と「マッスルメモリ」について

エンジニアに必要な二つの記憶力についての所感。

短期記憶(ワーキングメモリ)

(理解を進めるために必要な)情報を一時的に覚えておくための領域

たとえばコードリーディングで関数Aを読み解こうとしている時、(Aの実装が手続き的に書かれているとして)Aの一行目から順番に内容を理解しなければならない。その際、以降の行は、前の行を前提として書かれているため、前の行で何をしているかを記憶しておけねばならない。

ワーキングメモリに強いと、頭の中だけで進められるためサクサクと理解していける。逆にこれが弱いと、記憶に収まるよう机上リファクタリングをしたり、その場で図やらチャートやらを書いて整理したりといったことが必要となる。

ここで「後者で良いではないか」「やり方を工夫するのは良いことだ」と思われるかもしれない。それはその通りなのだが、それだけではない。ワーキングメモリは強いに越したことはない。強いエンジニアはすぐに理解する。覚える。メキメキ成長する。逆に弱いエンジニアは要領が悪い。やり方には詳しいが実践には弱い。

エンジニアには納期があり、また理解し覚えねばならないことも多い。その上スケジュールにも余裕はない。新人だからといってチームプロダクトの仕様を理解するのに一年も設けられる、だなんてことはないのだ。もしワーキングメモリが弱いと、その間に理解しきるところまでたどり着けない可能性が高くなる。結果、残業を重ねて無理をしてでも努めるか、一人前以下の戦力として扱われてしまうことになる(大企業ならまだしもベンチャーならクビだろう)。

ナレッジワーカーであるエンジニアにとって、ワーキングメモリとは根本的な戦闘力であり死活問題なのである。

手続き記憶(マッスルメモリ)

操作や手順をスポーツ選手みたくスラスラとこなすための記憶力

エンジニアはスポーツマンではないがマッスルメモリを多用する生き物である。いや、多用せざるをえないと言うべきか。

テキストエディタ、IDE、バージョン管理やビルドシステム、OS のコマンドなど、エンジニアは多くの手続きに使用する。業務として成り立たせるためには、呼吸のようにスラスラと使いこなす必要がある。使いこなすとは、いちいち使い方をググったりメモを見返したりして使うことではない。ひとりでに、即座に操れるほどの熟練が伴っていることを指す。

一番わかりやすい例はタイピングだろう。いちいちどこに何のキーがあるかを探しながら打つのと、タッチタイピングで10打/秒以上で打てるのとでは、作業効率は断然違う。後者に至るためには、何度も何度も練習を重ねなければならない。会話にせよ、自転車にせよ、自動車にせよ、人間は膨大な練習の蓄積によって熟練を入手できる。それを可能とするのがマッスルメモリなのである。

マッスルメモリもまたエンジニアには欠かせない資質だが、ワーキングメモリほど性能的な差はない。あるのは練習量の違いだけだ。使いこなせるエンジニアは相応の練習量をこなしている。といっても、たいていは業務(定時勤務だとしても1日の1/3を費やしている)で使わざるを得ないから使っているだけなのだが、やはり 1/3 日の蓄積は大きい。それほどの練習は趣味やプライベートではそうは行えない。だから実践を続けるエンジニアはマッスルメモリが強い(使うことに躊躇がない)傾向にある。