効率良く脳に記憶させる方法を模索する 

この記事は [CrowdWorks Advent Calendar 2016](http://qiita.com/advent-calendar/2016/crowdworks) 22日目の記事です。

エンジニアとして長生きしていくためには情報収集をしたり、エンジニアの諸先輩方が残した素晴らしいプラクティスや概念を学び取る事が不可欠です。

エンジニアとして生きていく上で有益である全ての知識を手に入れて、常にその時の最善な方法を選択しながら開発できたなら、後々負の遺産になってしまうようなコードの生成を最小限に抑えられるだろうし、どれほど心穏やかでいられることだろうかと思いますが、現実はそうはいきません。

# 脳が記憶してくれない問題

有益な著書や日々生み出される新しい技術情報の量が膨大なので、それを一見するだけでもかなりの時間がかかります。

そして自分の場合、何よりも一番時間がかかるのが脳に記憶させる作業で、もう本当に泣けるくらい覚えてくれないです。

これはすごいプラクティスだ！次から活用するようにしよう！と息巻いても、何もしなければものの数日ないし数分で忘れてしまい、使うべき時に使えない、脳内で参照不能な情報になってしまいます。

運良く次に脳内のその情報に辿り着く事があるとすれば、似たような情報を見聞きした時にうっすら概要が出てくる、といった程度です。

エンジニアとして長生きしていくためには学びが不可欠であるのに、脳が記憶してくれないのというのは大きな問題です。

頭にコンピューターを突っ込んで、記憶すべき情報は全部そのコンピューターに管理してもらいたい所ですが、現状そうもいかないので記憶力向上の策を自分なりに試してみる事にしました。

# 脳を効率的に使い、記憶できる量を最大化する

## エビングハウスの忘却曲線を利用した学習方法

エビングハウスの忘却曲線とは記憶と忘却時間の関係を調べたというもので、時間経過による記憶の定着率をグラフ化したものです。

![エビングハウスの忘却曲線](http://www.nextglobaljungle.com/images/entry/081208_1.gif)
<sub><sup>出典: [next global jungle](http://www.nextglobaljungle.com/2008/12/post_373.php)</sub></sup>

そしてそれを活用した学習方法とは、情報の定着率を高止まりさせるために最適である間隔を空けながら反復で復習するというものです。

![エビングハウスの忘却曲線と反復復習](http://www.objectfanatics.com/img/forgettingCurve.png)
<sub><sup>出典: [Object Fanatics](http://www.objectfanatics.com/ekutan.html)</sub></sup>

## 楽に実践する

この学習方法を実践していけば記憶の改善につながるはずですが、反復期間の制御を自分でやるのは面倒なので、自分はそこを上手くやってくれる reminDO というサービスを使っています。

[![忘却曲線に基づいた記憶に残るメモ / ブックマークサービス reminDO](http://cdn-ak.f.st-hatena.com/images/fotolife/r/remindo/20160526/20160526145304.png)](http://remindo.co/)
[忘却曲線に基づいた記憶に残るメモ / ブックマークサービス reminDO](http://remindo.co/)
[忘却曲線を使った記憶に確実に残せるメモアプリ「reminDO」を公開しました！](http://remindo.hatenablog.com/entry/2016/06/20/084519)

使い方はシンプルなので特に説明はしませんが、覚えたい情報があったらとりあえず reminDO に登録し、あとは出てくる情報を日々インプットするという単純な作業を繰り返すだけ。

自分で何かを管理したりする事がないので非常に助かっています。

忘却曲線を活用した学習法を活用し出してからは、泣けるくらい覚えの悪かった自分の脳も、結構記憶してくれるようになりました。

# それでも難しいものを記憶するのはつらい

結構記憶してくれるようになった脳ですが、覚えられるのはシンプルなもの中心で、難しい概念やプラクティスはあまり記憶してくれません。概念やプラクティスというのは、ただ覚えるというよりも理解すべきものなので、忘却曲線を活用した学習法をそのまま使っただけではまだ足りないのです。

やっぱり覚えたい対象を自分で咀嚼して、自分の経験と紐付けて感覚的にも捉え、エディタのショートカットキーを扱うが如く、習うより慣れていく必要があります。

## 難しいものを記憶する時に意識してやっている事

そんな中1つだけ、難しいものを脳に記憶させるためにやっている事として、覚えたい対象を自分自身でシンプルな1文になるくらいまで要約したり、シンプルに表現している1文を見つけて、それを覚える事に注力する、という事は行っています。

さして新しいやり方ではないですが、自分の言葉で文章にするだけでも理解が進むし、シンプルに表現している1文を見つけるだけでも、覚えやすいものを手に入れられた事になるので、忘却曲線を活用した学習のサイクルに取り込んで復習するのも容易になり、結構上手く学習が進みます。

ただし、そもそも情報の量が膨大で一見する事に時間がかかっている、という前提のもとに記憶力向上を図っているので、全ての情報を要約していたら更に時間が掛かってしまい本末転倒です。やはり何よりも脳に覚えさせる情報の取捨選択は重要です。

## 例えばオブジェクト指向の3大要素のシンプルな表現

オブジェクト指向の3大要素については、様々な著書やWeb上の記事で説明されていますが、例えば自分はどんな感じで覚えているかを参考程度に書いてみようと思います。

ちなみにオブジェクト指向の考え方については [オブジェクト指向でなぜつくるのか](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%A7%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%8F%E3%82%8B%E3%81%AE%E3%81%8B-%E7%AC%AC2%E7%89%88-%E5%B9%B3%E6%BE%A4-%E7%AB%A0/dp/4822284654) という著書から素晴らしい表現を授かったと記憶していますが、情報のソースが脳内で参照不能になりかけているので、ソースを明言できない事をお許し下さい。

### カプセル化

> カプセル化とは、データとそれらを操作する手続き群とをひとまとめにしてパッケージとしたもの

### ポリモーフィズム

> ポリモーフィズムとは、サブルーチンを呼び出す側のロジックを1本化する仕組み、すなわち「共通メインルーチン」を作る仕組み

### 継承

> 継承とは、クラス定義の共通部分を別クラスにまとめて、コードの重複を排除する仕組み

これくらいの文章なら定期的にサクッと復習しようとした時に最適ではないでしょうか。

しかし、もちろん各概念を表現する1文として的を射ているものはこれ以外にも存在します。

例えば [オブジェクト指向と10年戦ってわかったこと](http://qiita.com/tutinoco/items/6952b01e5fc38914ec4e) という記事にある「**ポリモーフィズムの本質は、インターフェイス(抽象)に対してプログラムするということ**」や「**継承の本質は、インターフェイス**」というシンプルな表現は、感銘を受けるほどに素晴らしいものです。

大事なのは自分の腑に落ちるシンプルな表現を手に入れて、そこから概念を理解したり記憶する糸口をつかむ事です。

## 最後に

自分が実践しているやり方以外にも世の中にはいろんな記憶法があります。
イメージと紐付けて覚える方法なんかは、何かしらの方法で試してみたいです。

http://mnemonic-device.info/
http://logmi.jp/14618

今後もエンジニアとして長生きするために効果的な記憶法を探しながら、自分の脳と上手く付き合っていきたいと思います。

明日は @suzan2go さんによる「新規事業でこそちゃんとやっときたいrailsでのモデリング」です。