僕のやってるプログラミングのメモ技術
人間って忘れやすい生き物ですよね(それがいいところでもあるのですが).一方,Webサービスに関わるエンジニアは,様々な領域の知識を知らなければいけません.こういった知識を自分の頭にただ詰め込んでいくのは苦痛ですよね... おそらく,各人が自分なりに情報をうまく整理・取り出すためのノウハウを持っているのではないでしょうか(例: 高林哲さんのUnixのメモ技術).
この業界に入って一ヶ月もたっていないペーペーですが,これまで自分があれこれ試行錯誤してきたメモ技術について紹介したいと思います.
Jankiメソッドを使う
ベースはJankiメソッドです.このメソッドはAnkiというアプリを利用しているのですが,Ankiは設定項目が多いし,あまり好きにはなれませんでした.可能なかぎりシンプルに,自分の使い勝手の良いものにするべく,自前で実装しました.
Tipsは文脈に結びついたものにする
Jankiメソッドで核となる考え方は各Tipsを文脈, コンテキストと結びついたものにすることでしょう.文脈があることで記憶を引き出すやすくなります.例えば,「野菜の名前をできるだけ挙げてください」と問われたときに,ただ野菜の名前を思い出そうとするよりもサラダを食べているシーンを思い浮かべたりするとたくさん出てきますよね.
この具合で,メモをとるときは「◯◯したいとき」,「◯◯が発生したとき」といったようにタイトルの先頭に文脈をつけるようにしています.
実現方法
具体的にどのように実現しているかを紹介します.実現するために利用しているツールには代替できるものもたくさんあると思うので,あくまで参考ということで自分なりの方法を模索してみてください.
Vimでメモを書く・取り出す
メモ自体はVimのqfixhowmでとるようにしています.qfixhowmでとったメモはメモ作成時の日時がファイル名になる形で保存されます.全文検索もできるので,プログラムを書いている途中で検索をかけて取り出すこともできます.
自前のDropboxのようなものを使ってサーバと同期
メモはローカルに保存されているので,後からメモをスマートフォンなど様々なデバイスから閲覧するためには,メモをサーバに送信して同期するようにしなければいけません.このために作ったツールがRubyとGitを使ったミニマムなDropboxクローンohajikiです.
PC・スマートフォンのブラウザで確認
とったメモは定期的に確認したいものです.エビングハウスの忘却曲線によれば,間隔を空けて復習することで記憶を短期記憶から長期記憶に移すことができます(注: メモを丸暗記するのではなく,コンテキストに対応した考え方や「こんなTipsを書いたなぁ」と再認識するためのものです).メモの作成・更新日時から,一定時間が経過したもの(2日,2週間など)を集めてWebから閲覧できるようにしています.
指定した時間が経過したものを取り出すためにRubyのActiveSupportライブラリ(便利!)とgit logコマンドのsinceオプションを利用しています.
またgfm, pygments.rbを利用することでコードサンプルをシンタックスハイライトして読みやすくしています.
課題
今までにとったメモを見返してみると,細かいTipsばかりに終始していて,元記事にある高い次元の(というとちょっと言い方がおかしいかもしれませんが)アルゴリズムであったりアーキテクチャのメモがほとんどないことです.今後はこういったメモがとれるように心がけていきたいです. あとは細かい使い勝手を自分に合わせて改良してくことですね.
まとめ
プログラミングのメモ技術ということで自分の例を紹介させていただきました.自前でこういったツールを作るのはなかなか楽しくて,帰宅時に「今日の夜はあの部分を実装しよう」とか考えていました.小学生の頃,ゲームのことばかり考えながら下校していたのと似たかんじです.こういう気持ちって大切だと思います.