アレイ人間とマップ人間

他人や自分を観察していると、人は記憶方法によって2種類に大別できる気がしています。仮に、アレイ人間とマップ人間と名付けました。

アレイ人は、決められた順に確実にタスクをこなせるという特技を持つ人たちです。アレイ人間は、ある作業があるとき、一度一通りやってみせると、何回でも再試行できます。僕から見て、この人たちは、まるでタスクを配列 (array) に格納しているように見えます。

order = new Task[4];
order[0] = 書類を開く。
order[1] = 氏名を記入する。
order[2] = 上司に確認してハンコをもらう。
order[3] = 総務の担当に電話してからメール。

この人たちは、一度 order というデータが作られると、それをミスなくイテレーション(反復: for-each)できるみたいです。すごい。経験的に、アレイ人間の方が多数派だと思います。

一方、物事をマップ (map: 連想配列) で記憶するマップ人間もいます。僕もマップ人間のひとりですが、マップ人間は物事を関連づけで覚えています。

memory["order"] = サーバAのフォルダを探して手順書を見つける。

マップ人間は、リスト形式のデータ構造を脳内に持っていないようです。そのため、マップ人は、手順を覚えると言うことが極端に苦手です。マップ人が手順を思い出して作業するときは、

memory["order"] = 最初に書類を開く。
memory["orderのために書類を開いた"] = 氏名を記入する。
memory["orderのために氏名を記入した"] = 上司に確認してハンコをもらう。
memory["orderのために上司に確認した"] = 総務の担当に電話してからメール。

このように、番号を1ずつ追いながら実行しているのではなく、物事の関連を辿って実行する感じです。明らかに向いてません。イテレーションもできないし、無理矢理すると「状況が似ているだけの無関係な作業」を思い出したりします。使えない。

代わりに、マップ人間は大局的な最適化が得意だと思います。得意であると言うより、最適化されていないと記憶できないだけかもしれません。基本的には、目標と原則からその場その場で手順を考え、例外を適用して、具体的な作業手順を復元するのです。

memory["order目標"] = 常識的なフローに従って、とにかく総務に連絡する。
memory["order例外"] = 総務には電話の前にメールすること。

このようなことしか基本的に記憶しておらず、目標から適当に手順を作り出し、例外を適用して微修正して実行します。だから途中の手順はともかく、なんとなく目標は達成できるという構造になっています。目標のために最善のフローを辿ろうとするので、最適解を容易に思いつくあたりが強みですが、いつまで経っても信頼性が向上しないのがネック。

僕はこのことに気がついてから、プログラミングにしろ仕事にしろ、配列的記憶域が必要になりそうなときはひたすらメモするようになりました。意識すると結構役立つかもしれません。