📝

頭の混乱した人間が何とか構築してきた学び方

2023/12/31に公開

もし正多面体が何種類あるかを決定した人が称賛されるとしたらーーこれは黙考する楽しみを除けば有用性は特にない。あるいは、コンコイドやソシイドなどの曲線や他のめったに使われない図形のエレガントな性質を見出すことが数学的才能の行使だと考えられているとしたら、それよりは人間の理性的推論の際に働いている数学的法則を見出す方がーーこれこそが私たちにとって最も素晴らしく有用なものであるーーずっといいのではないだろうか

「万能コンピュータ ライプニッツからチューリングへの道すじ」より、ライプニッツの言葉

なぜこの記事を書いたか?

自分は昔から学習が苦手。

  • 記憶力がダメ。
  • ワーキングメモリークソ雑魚。
  • 集中力もない。
  • かと思えば過集中をする。
  • そもそも机の椅子に座っているのが苦痛。

しかし、プログラミングをしようと思うと、学習という営みは避け得難いもの。

過去の勉強のやり方がわからずに立ち往生して何もできなかった自分宛に、あるいは、当時・現在の自分と同じような状態で、学習がうまくいってない人に何か参考になればいいなという思いで書いた。
なので、大半の人には参考にならないかもしれない。

全てやってきたこと、考察してきた考え方を全て放流しているとキリがないので、以下の点に絞って記事を書いている。

  • プログラミングをするときに作業ログを取ること
  • どうやって記憶を保っていくのか。
  • 学習を進める上での考え方のTips。

この記事について

記事作成者は、頭が混乱している人物です。
まともに頭から記事を書いていくというのではなく、思いつくところから書き、書いている途中に他のトピックを書き、また思いついたところにトピックを追加し...という、恐ろしく変な書き方をしたものに、後で編集を加えることでなんとか体裁を保たせています。
なので、記事の間に連環がうまくいっていない部分があっても見逃してください。
そういった人間が、同じような人間にだけ刺さる記事として書いています。
なので、合わないと思ったら記事を閉じてください。


学習を進める上での考え方Tips

雑多に、学習において自分が使っている考え方を書きます。
これらのが考え方が渾然一体となって、あるときは使われ、あるときは使われない、という形で自分の学習を助けています。
しかし、これを記事としてまとめて一本の縦糸を通すのは難しかったので、Tipsとしておいておきます。

精神論なんかいらねーよ!って人は飛ばして、学習法についての記事あたりから読んでもらえれば。

不完全を恐れない

以上の話をまとめていえば、次のとおりである。科学がいろいろと自然の実態を見ていくうちに、ある法則を新しく見つけたとする。その方が、従来の法則よりも、もっと広い範囲にわたって、現象の説明に役立ち、また新しい研究の緒口を与えてくれれば、それはすぐれた法則である。しかし従来のものが、にせものだと分って、今度はほんものが出てきたというのではない。もしそういうものだとすれば、今はほんものだと思っているものも、また次に新しい発見があれば、これもまたにせものだったということになる。ほんものがにせものに変るのはおかしい。これは、ほんものとかにせものとかの話ではないのである。自然現象は非常に複雑なもので、われわれはその実態を決して知ることができない。ただ、その中から、われわれが自分の生活――これは広い意味の生活で、知識を広めるという精神的な面まで入れた広い意味での生活であるが、その中に利用し得るような知識を抜き出していくのである。利用というと語弊があるが、これは実用という意味ではない。われわれの精神生活にマッチするような面を、自然の中から抜き出して、一つ一つ見ていく。その時、科学の場合ならば、科学の眼を通じて見ていくのである。それであっちから見たり、こっちから見たりすることが、実相なのである。

中谷 宇吉郎 「科学の方法 」より

科学の営みも、100%に漸近していくが100%には達しないという試みである。という記述を何かで見た(出典見つかりませんでした。すみません)。

孔子ほどの人も、70歳になってようやく矩をこえず、という。

完全に到達せず、不完全であるのは当然のことなので、自分の理想に達しないことは気にしない。不完全でも歩んでいけば、それは力になるし、何かに使える武器になるはず。

というより、完全を目指して目指してやることで自分は失敗してきたので、あえて愚かであるという戦略をとっているとも言えるかも。(能力のなさかもしれないけども)

完全でないからと尻込みをして動かないくらいなら、不完全であると開き直って愚かに亀の速度で歩んでいく方がマシである、という考えでやっていくのが良い。

確率で考える

昔は、目の前のことができた。できない。という2つの軸で考えていた。
そうすると、難しいことができないということになる。
なぜなら、難しいことを成し遂げるには時間がかかる。
そして、時間がかかるその途中の過程は全てできていないのだから失敗となる。
この考え方だと、モチベーションを保つのが難しい。
できた、という実感があってこそ、前進したくなるのであって、できなかった、という実感しか得られないとすれば、それは「その行為をすることが無意味である」と学習することになる。

参考:学習性無気力という概念がこれに近いだろうか。学習性無気力はストレスに関する実験である、ということから違うということなら申し訳ない。
学習性無力感 - Wikipedia

昔はそのような二極で捉えていた。
「自分は0か100かしか考えられない人間だ」と。

こういった思考には確率的に考えることが効いた。

先ほどの例を引いていうと、何か作業をして、ろくに進まなかったりすることがあった場合、「どのくらいの割合進んだか」を考える。

「うん、100%ではないが10%くらいは進んだ」
「うん、100%ではないが、1%でも進んでいるな」

割合で考えることで、モチベーションが少しだけ保てる。

他にも、二極で考えているようなことがあれば、間に中間的な部分があるということを思い出すと良い。

ニーバーの祈り

神よ、天にまします父よ、
私たちに変えられないものを受け入れる心の平穏を与えて下さい。変えることのできるものを変える勇気を与えて下さい。そして、変えることのできるものとできないものを見分ける賢さを与えて下さい。われらの主、イエス・キリスト。アーメン。

ニーバーの祈り - Wikipedia

祈りそのものについての詳細は、wikipediaの記事を読んでほしい。

自分はこの祈りの言葉は以下のような意味だと解釈した。

  • 変えられないものはしょうがないと受け入れる
  • 変えることのできることに集中すること

問う。なぜこの考え方がいるのか?

変えられないところに無駄な労力を使わず、また、変えられないところに対して嘆くことを減らすため

これを念頭に、本記事においての(学ぶことについての)考え方を構築している。

勉強においては、

  • 変えられないもの:自分の持って生まれた能力(ワーキングメモリーの大きさ、人間であること、多動性や過集中などの性質)
  • 変えることのできるもの:勉強のやり方や取り組み方(勉強法、勉強するにあたっての考え方、道具の助けを借りる)
    といったところ。

この考えを念頭において、無理なところは無理ときっぱり諦めをつけて、メンタルを病まないようにするのが大事。

「なぜ自分の頭が2つないのか」「なぜ空が飛べるような羽がないのか」なんて、昔は本気で嘆いていたものだが、それはそういう性質だという諦観を持ってあたることで、余計な考えに悩まされることが減った。

配られたカードで戦う

上のニーバーの祈りと重複する内容となる。

自分は麻雀がとても好き。
麻雀とは、端的にいうと、最初に配られた手配を駆使しながら、上がったり振り込まなかったりを工夫して戦うゲーム。
(以下、麻雀を例にして説明するが、「手札があり、山札から引いてきて戦っていく」という本質は他のトランプゲームやカードゲームなどと変わりがないはずなので、適宜置き換えて読んでほしい)

最初の手が悪ければ、うまく伸びる方に手を寄せ、ツモに賭けてだんだん手札を強くする。
手が良ければ、それを最大限活かすように手を伸ばす。
他人が強そうな手を張りそうなら、ブラフで下ろしたり、早じかけをしてとっとと流す。

といったように、手持ちの牌に縛られるが、しかし、それを最大限活かして戦うことに魅力を感じた。
と同時に、これは人生そのものだなぁと思った。

なので、これを人生に見立てて、

いわゆる才能とか、生まれとか、そういう基本的な性質というのは配られたカードと捉える。(あるいは配牌)
これは泣いても騒いでも変わらないもの。

そして配られたものは「変えられないもの」なので、その弱みやあるいは強みを活かしていく。
そして、変えられないからこそ、これは自分にとってのスタンダードだと思うこと。
そのスタンダードの上で、戦う。スタンダードに立脚して、自分の能力を伸ばしていくこと。

そうすることで、「才能がない」「生まれが〜」云々の悩みで止まることをやめる。

淡々と、手元のカードの勝つ確率を少しずつ上げていく。
そんなイメージで人生を運用していくと、メンタル病まずにうまくやっていけている。

1日に一つだけ強くなる

仕事や家のことで忙しいと、何もできないこともある。
そんな時は、プロゲーマーの梅原大吾さんの言葉を思い浮かべて、何か小さいこと一つだけをやるようにしている。

とりたてて難しいことをするわけではない。シンプルに「今日1日を思い返してみて、何か気づいたことはないか」と自分に問いかけ、思いついたことをメモする。大きな発見だけではなく、小さなことでかまわない。いや、むしろ小さなことのほうが大切くらいの気持ちがいい。何事もレベルが低い間は発見も多く、成果が目に見えて分かるのでモチベーションが保てる。

大切なのはハードルを下げること。僕がやっているメモを例にとると「1日1個」という成果を自分の中でルールを決める。1日1個であれば続けやすい。

小さな成果は、誰も評価してくれない。だから、自分のやっていることは誰よりも自分が評価しなくてはならない。

「1日ひとつだけ、強くなる。」より
Amazon.co.jp: 1日ひとつだけ、強くなる。 eBook : 梅原 大吾: Kindleストア

「何も自分は成長していない」となることもあるが、そんな時は小さいことを一つだけやって、今日はヨシ!とする。
そうすることで、モチベーションもメンタルも保てていける。

ウサギとカメ

イソップ童話にウサギとカメという話がある。

ウサギとカメ - Wikipedia

別に、ウサギに勝ちたいとか勝とうということではない。
(というか、それを実際に目指すと無間地獄に陥るのでやめたほうが良い。世の中の実際のウサギはより速い速度で、休まず歩いているのだから、追いつきようがない。閑話休題)

ただ、カメの速度でもゆっくりでも、ゴールには到達するということ。
目標としたところに到達することはできるということ。
能力が低くとも、やっているうちに遠くまで行けるということを、基本的な考え方として置いておくようにする。

どっちかというとこちらの方が考えに近いかも?

大切なのは「真実に向かおうとする意志」だと思っている
向かおうとする意志さえあれば、たとえ今回は犯人が逃げたとしても、いつかはたどり着くだろう?
向かっているわけだからな......違うかい?

「ジョジョの奇妙な冒険」より


学習法について

脳みそのメモリは意外と小さい

先に考え方から。

これは経験的なものだが、以下の記事にあるように、読む量を減らした方が脳に余裕が生まれる。余裕が生まれると、本当に集中しないといけないことに集中できる。

コードリーディングのコツは極力コードを読まないこと|牛尾 剛

次に彼が言ったのは、「実装は極力見ないようにして、インターフェイスと構造を理解するようにするんです。ダイヤグラムや、関係のグラフを書いたりして。実装はちゃんと出来ていると信じて、読んでいるメソッドやクラスのインターフェイスの役割やパラメータをしっかり理解するようにするんです。そっちの方が、実装を見るよりずっと楽ですよね。」そして、「もちろん、必要があるときは実装を観ますが、極力見ません。Javadocとかあるじゃないですか?あれをしっかり理解する感じ」

あああああ、、、と自分は思った。自分は理解するために端から端まで実装を読んでいたが、それをすると脳みそのCPUを消費しちゃうんだ、そして、本来理解しないといけない構造やインターフェイスと、実装の両方に資源を使うので、疲れる割に頭に入らないんだ、、、。

今回の学びは、「自分にとって難しすぎるもの」と感じるものには2つのケースがある。一つは、自分の基礎的な学力が足りていないもの。これは1つ1つ積み上げるしかない。例えば私は証明書の実装を自分で書くとなると、証明書のRFPの勉強から始めないといけないだろう。でも、こんなケースはプロダクトチームでも少ないし、CSを出てない自分の場合手を出さなければ良いだけだろう。

だが、2つめのケースは、自分が無理をしているケース。私の長年にわたるコードリーディングの思い込みがこのケースで、「自分に何かが足りない、才能が足りないから、こんな大変」と思い込んでいるケース。大抵は自分にとって難しすぎることは、何かが間違っているのだ。

この記事はコードリーディング関してのコツだが、これは読書、コーディングとしていくときなど、いろいろ応用が効きそうに思える。脳みその負荷の話なので。

とにかく、脳みその計算量を減らすことを心がける。

本当に発揮しないといけない時にその力を使うこと。

学習のレベルを4つに分ける

学習においてどこに目標を置いていくか、といったときの羅針盤として。
0か100かの極端思考をやめるというのもにも通ずる考え方。

「物事を知った」といったときにはレベルがあると常々感じる。
それを、自分なりに4つのレベルにまとめて使っているのが以下のもの。

  1. 見聞きしたレベル。問われても思い出せないが、対象を見たらわかる。
  2. なんとなく思い出せる。問われたら、あれだ、というのはわかるが、説明はできない。
  3. それなりに思い出せる。問われたら、あれだ、大体こういうことだ、と説明できる。
  4. 完全に理解した。

これを軸にして学習の段階をどこに置くかを考えていくのが重要。この指標が重要ということではなく、何らかの指標を以って、自分の理解のレベルを客観的に扱えるようになることが重要。(もっと最適な指標があれば欲しいくらい)

記憶について、理想を言えばレベル3〜4まで持っていくことだが、そこまで学習するにはコストがかかる(これを論じると長くなりすぎるので省略するが、かなり時間がかかる)。
なので、とりあえず2を目標にする。大半の知識はここで良い。
深めていく対象の知識だけ、省察(これは後に項を改めて述べる)の段階で3にしていくようにする。

「使える脳の鍛え方」より

以下の書籍より、使えると思って使っている考え方を2つ。
Amazon.co.jp: 使える脳の鍛え方 eBook : ピーター・ブラウン, ヘンリー・ローディガー, マーク・マクダニエル, 依田卓巳: 本

テスト効果

─学習効果の改善でまっさきに取り組むべき課題は、忘れるプロセスを止める方法を見つけることだ。
学習ツールとしての「想起」の効果は、認知心理学では「テスト効果」と呼ばれる。もっとも一般的なテストは、学校で習熟度の測定と評価に用いられているが、記憶から知識を呼び出す行為に、あとで思い出すのを容易にする効果があることは、はるか昔から知られていた。記憶に関するアリストテレスの小論にも、「くり返しひとつのことを思い出す練習をすれば、記憶が強化される」とあり、哲学者フランシス・ベーコンや心理学者ウィリアム・ジェイムズも同様のことを書いている。今日では実証研究によって、もとの学習教材を見直すより、過去に学んだことを記憶から呼び出す想起練習をするほうが、はるかに記憶が定着しやすいことがわかっている。これが「テスト効果」または「想起練習効果」と呼ばれるものだ。

最大の効果を得るには、時間の間隔をあけて何度もくり返し思い出すことが大切だ。そうすればたんなる暗唱ではなく、認知的努力をともなった想起になる。くり返し思い出すことによって、記憶が脳のなかで統合され、固定化されて、あとで知識を呼び出すときの神経経路が増強される。ここ数十年の研究で、脳神経外科医マイク・エバーソールドやベテランのクォーターバック、航空機パイロット、携帯電話のメールを打つのが速い一〇代の若者が、みな経験上知っていることが裏づけられた──くり返し想起すれば、知識と技術が記憶に深く根づき、反射的に呼び出せるものになって、考えるまえに脳が反応する。

基礎知識を学ぶことと、創造的な思考力を発達させることを対立させてはならない。両方を伸ばす必要があるのだ。目のまえのことに関する知識が豊かであればあるほど、新しい問題に取り組むときに創造力を発揮できる。創意工夫がなければ知識が無用の長物になるように、知識という盤石な土台の欠けた創造力は、ぐらつく不安定な家しか建てられない。

「使える脳の鍛え方」より

テスト効果とは何か?
ある単語や概念を覚えているかテストを行うことで、「想起」しようと頑張る。
それによってより強く記憶が形成される、というもの。
端的にいうと、テストをすることを学習ツールとして使うということ。
もっと具体的にいうと、単に「思い出してみる」ことをいう。

テストを、成績をつけるものとしてではなく、今の自分の理解度を確認する・強化するものとして使う、という勉強法。
実際、試験の教科書で勉強してもさっぱり頭に残らないが、過去問を繰り返してやると不思議と頭に残ってる、という経験があったが、おそらくこの効果が出ていたものと思われる。

具体的にどう使うのか?

  1. 試験を利用する
    資格のあるもの分野の勉強は、資格を取ることを一つの目標にする。あるいは、資格は取らなくても過去問などの本を利用して勉強する。
  2. 単に思い出す
    本を読んだ時、あるいは学習した時、学んだ概念に対して思い出すことをする。「今学んだ〜〜っていう概念ってなんだっけ?」という風に。もし思い出せないなら、もう一度読んで、説明のための概念化を行うという作業をする。

特に、2番の方法はどこでもできるし、応用性が高いのでいつも使っている。

注意事項

ところで、これを実践してきて思ったのが、テスト効果をやる時はある程度で切り上げて脳みそのメモリをフリーにするのを心がけた方が良い。
(あるいは普通の人はガベージコレクションが働いて、これらのメモリを自動開放してくれるのかもしれないが、記事作成者の場合はこれを明示的にやらないとやってくれないのでこういう方法をとっている、というのを書く)

そうしないと、思い出そう、思い出そうとするプロセスが頭でずっと働き、一日中頭が痛いような、頭に力が入っているような状態になっていた。

なので、以下を心がけることで、これを回避するようにした。

  • テスト効果で2度くらい問う。
  • あとは忘れて、その項目については考えないこと。

「そんなんで、記憶に残るの? 大丈夫?」という不安があるかもしれない(というかあった)。
記憶については別項を立てて説明したが、記憶は睡眠時の脳の働きに任せてほっぽらかすことがコツ。
そうでないとワーキングメモリーを、今のプロセスが一つ占有し、生活に支障をきたす。きたしました。

もし、当日のうちに同じ概念に出会った場合はどうする?

勉強した内容にその日のうちに当たることもあると思う。
例としてTLBという概念があるが、これを本で学んだとき、TLBが別のところに書いてあるのに行き合うことがあると思う。(当たり前か)
その場合は、「この概念は勉強したところだから飛ばそう」ということで、その日は無視あるいは省略する。

復習のルーティンに登っているものが、そのうち記憶として醸成されるのを待つ。

そうでないと、同じ概念がわからない、わからないと、同じ部分で立ち止まることを一日中繰り返して、前に進めない。

また、これが「脳みそのメモリは意外と小さい」ところで書いた内容の実践でもある。

省察

マイク・エバーソールドはそれを次のように語った。
手術中にはよくむずかしい判断を迫られる。私の場合、夜、帰宅すると、手術中の出来事を反芻して何かできることはなかったか考える。たとえば、縫合を改善する方法だ。針を通す間隔をもっと大きくするか、小さくするか、もっときつく縫い合わせるべきか、こうしてはどうだろう、それとも別のやり方だろうかというふうに。そして翌日、うまくいくか試してみる。翌日でなかったとしても、ずっと頭の隅に置いておく。そうすることで、講習やほかの医師の手術の観察で学んだことを再確認できるだけでなく、学び損ねていたことに自分の経験を加えて補強できるんだ。
「省察」とは、記憶から知識と過去の訓練を引き出し、それを新しい経験と結びつけ、次に試すちがったやり方を可視化し、頭のなかでリハーサルすることだ。そこには、学習を強化する認知活動がいくつも含まれている。
マイク・エバーソールドが後頭部の静脈洞を修復するために試した新しい技術も、もとはこの「省察」から始まっている。頭のなかや手術室で練習していた技術が、一分間に二〇〇ccの出血という危険な状況で頼りになる反射的な処置につながった。
彼は指摘する。「新しく学んだことを必要なときにすぐ実践できるようにするには、ある状況で考慮すべきことを、A、B、C、Dというふうに段階に分けて憶えておくことだ」。そして練習しておけば、切迫してもはや順序立てて考える余裕がなくなったときでも、反射的に正しい行動がとれる。「ただ、実践する内容を何度も振り返っていないと、反射的に行動には移せない。厳しい局面に置かれたカーレーサーや、タックルを避けるクォーターバックみたいに、考えるまえに行動に移さなきゃならない。何度もくり返し思い出しては練習を重ねる。それがとても大切なんだ」

ピーター・ブラウン ヘンリー・ローディガー マーク・マクダニエル 「使える脳の鍛え方 」

これについては誤読かもしれないが、自分は省察とはこういうことだと思っている。

  • 知っている個別の知識を、他の知識と繋げて配線し直すこと。

日本語下手くそか!

どういうことですかね?

例えば、ReactのuseStateについて

useState – React

useState は、コンポーネントに state 変数 を追加するための React フックです。

以上のものは辞書的定義。
さらに、実際にどういった場面でこれを使うか。と言ったざっくりした理解が普通の理解だろうと思う。

省察をするとさらに、

  • もし通常に見られない特殊なケースで使うことがあったとして、それはどう言った場面か
  • どう言ったメカニズムで動いているか
  • なぜstateという名前なのか
  • なぜフックがいるのか。これでなければならない必然性はなんだろうか?

と言ったように、知識の網を広げていく。
多様なケースに引っ掛かるように神経接続を伸ばしておく。

こういった行為が省察だと思っている。

「復習」が個別の知識のレベルを上げていくのが縦糸の行為だとすれば、「省察」は個別の知識を繋げていく横糸の行為。


記憶をどう保つか

これには2つの柱がある。

  • ログを取る
  • 復習の方法論を確立する

ログを取るということ

昨日必死に勉強したことも、次の日になってみるともはや記憶の彼方。何も覚えていないということが日常茶飯事。
なので、ログを取る。

記憶の性質上、今覚えたこともどんどん忘れていく。
参考としてエビングハウスの忘却曲線では、1日後には学んだことの70%近く失われるとのこと。
エビングハウスの忘却曲線が記憶における一般法則であるかは賛否あると思うが、一旦それは置いておく。
失われるパーセンテージの当否はともかく、人間が物事を忘れていく生き物である、という一般的な傾向は見受けられると思う。
(経験からいったら25%も覚えてないよ...)

例)今日必死で勉強したDockerの立ち上げ方も、今日必死で勉強したC++のコンパイルの通し方、今日必死で勉強したデザインパターンの知識、etcetc...

こういったものが次の日目覚めると、全く記憶にない。昨日どうやっていたかがわからない、ということを数多く経験してきた。
でも、それは人間の性質なので嘆かない(変えれないこと)。
嘆かず、変えられるところに集中する。

忘れていくといっても、記憶に残すことはとても大事なことではないですか?

うん、必要です。

必要なので、外部のものを頼ろう。

以下の本に次のような記述がある。
Amazon.co.jp: 現代病「集中できない」を知力に変える 読む力 最新スキル大全―脳が超スピード化し、しかもクリエイティブに動き出す! eBook : 佐々木 俊尚: 本

コンピューターは記憶力は抜群だが、「物語」を編み、体系にするような思考能力はない。そういう能力は人間の頭にしかない。
人間の頭は「概念」を作るのは得意だが、記憶力は弱い。

これに従って、人間は概念化に集中し、正確な記憶・記録はコンピューター(あるいはノートなどの外部のもの)に任せるようにする。
そして、この正確な記録のために、ノートか何かに作業のログを取るようにする。

ログを取るということ

ログ(あるいは記録)の取り方は昔から色々悩んできた。

  • メモ帳を使う -> 書いたものをなくす。読み返さない。
  • ノートを使う -> 管理が大変。整理ができない。相変わらず読み返さない。

他にも色々なサービス(NotionとかEvernote)を利用してきたが、どれもうまくはまらなかった。

現在は、Obsidianを使っている
Obsidianを選んだ個人的な理由。

  • vimバインドが使える。超重要。
  • ローカルに保存なので、ネットのないところでも使える。
  • 記事のリンクができる
  • メモを個別、かつ、タグで管理できる
  • コードハイライトが効く

Obsidianでどのようにやっているのか

運用ルールとしてはシンプルにしている。

  • 専用の記事を作り、そこにリンクした記事を個別に作成する。

Obsidianの機能だと、リンクをつけたページを作成するのが簡単にできる。
図のような感じで、[[]]で囲った中に記事の名前を書き、それをクリック(キーボードでも作成ができる)すると、新しい記事ができて自動でリンクが貼られる。

なので、目次を作る感覚で、必要になった都度ページを作り、そこに詳細なログをとっていくようにすうr。

例えば、Dockerについて

  • MySQLについての作業ログ
  • Reactコンテナについての作業ログ

と言った感じで、個別の作業ログをページを作成する。

そして、そのログページの中に、詳細にやっていったことを残していくようにする。

例)以下はDockerでMySQLのコンテナを立ち上げについて学習していた時のログ

ログの実際の取り方

ログの取り方については簡単。
やった作業について全部残すこと。

最初は全部やったことを残すようにするといいと思う。
やっていくうちに、足りないもの、あるいは過剰にやっているものに気づくので、そうなったときに方法論をチューニングしていけばいい。

なぜこんなめんどくさいことをする必要があるのか?

新しいことを学ぶとき、

  • やった段階で以前やったことを忘れてしまう
  • 何かバグが起きた時に、バグが起きる前の状況がわからない

ということがよく起きていた。

そして、わからなくなって、結局一から作り直す羽目になるという無駄を踏むことが多かった。

なので、ログを取ることにしている。
ログをとっていると、ある場所でバグが起きても、どこで発生したかについて、ログからある程度読み取れる。
なので復帰がしやすい。
(復帰の確率を上げるだけなので、もちろん無理な時もある。あるが、何もないよりはカバーがしやすい)

また、別の利点として、後々同じ作業をするときに、ログを見ればある程度再現が可能ということもある。

  • DockerでDB付きのコンテナを立ち上げる必要ができたので、過去のログをみよう。
  • zigの文法忘れたけど、そういえば前にzigで作ったプロジェクトをログとして残していたな。見てみよう。

復習における方法論

復習に関しての方法論は以下の2つ

  • 単語カードを作るということ
  • カードの復習サイクルを作るということ

復習における考え方

さて、復習においての考え方を説明する。

この動画を参考にした。
【要約】脳にまかせる勉強法【池田義博】 - YouTube

自分は昔から、この種の方法論をちゃんと導入することができない。
何をすればいいかを考えて、具体的な方策を考えている間に、日を跨いで興味を失うことを繰り返してきたので、満足に実践できた試しがない。
なので、そのとき理解できた一部のみを借りて持っていくことにしている。

この動画から持ってきたもの

  • 記憶するのは脳に任せる
  • 前日に学習したことを、朝に復習する

記憶するのは脳に任せる

今までは朝から晩まで、思い出そうとする(テスト効果の項で書いた想起)をやっていた。
うんうん唸って、思い出そう思い出そうとするのだが、これがかなり疲れる。
疲れるし、できてないうちは他の学習をしない(できない)ので、学習自体も止まっていた。
疲れるし、持続する学習にならない、という悪循環。

なので、記憶を脳に任せるという考えを取り入れた。
日中は学習・前日までの復習を行うという作業に集中。
記憶自体は睡眠時の脳みそに任せてしまう。
こうすることで、気も楽になったし、実際に脳のメモリも解放された感じがあった。
(関連:脳みそのメモリは意外と小さい)

前日に学習したことを朝に復習する

復習の習慣をどう作るか、ということは長年悩んで実行できていなかったので、思い切ってやってみるかということで取り入れた。
しかし、動画で言っているように時間を1分には絞らなかった。
時間を縛ると、「1分で終わらせないと」といった考えがワーキングメモリーを占有し、結果として頭が「わーっ!」となってパニックになるので、作業すること自体が嫌になっていた。そして、作業が嫌になるからそのうちやめてしまう。といった悪循環に陥る。
そういった悪循環を避けたいと思ったので、時間に制限は設けなかった。
やっているうちにはやり方を思いついて、何か工夫するだろうしね。

単語カードの作り方

これは色々方法があると思うが、自分は以下のようにやっている。

  • 読みたい本の章から、単語を抜き出す。
  • 抜き出した単語について、chatGPTに聞く。
  • 返ってきた答えを単語カードとして作成する。(Obsidianの機能で別ページをリンクつきで作成)

やり方について補足はいらないと思うが、読みたい本から抜き出す目的について少し。

なぜ読みたい本から単語を抜き出して単語カードにするのか?

これは、新しい本を読むときの負荷を減らしたいから。
自分は本を読むのが苦手である。
わからない単語などに行き合うと、目が文字を上滑りして、本の内容が頭に入ってこない。
なぜそんなことが起こっているかを観察すると、どうやら知らない単語、概念を前提にして話が進むので、わからないことの上ににわからないことが積み重なっていき、読むのが辛くなっていくというのが原因じゃないか? と思った。

なので、本を読むときの負荷を減らすために、本を読むのに先んじて、本で使われる概念(単語)を学ぶという方法をとった。

これは「省察」の実践とも言えるかもしれない。
個別の単語や概念の知識の神経接続を、あらかじめ頭に作っておく。
それから、実際に本を読むことで、それらの概念がどのように使われているか、という視点から知識をつなげていく。

知っている知識に新しい知識を積み上げていくのが、新しい神経接続を作るよりも効率が良い(自分はそう信じている)。

実際、これをやるようになってからは本を読むのが楽になったし、単語を知って終わり、という読書から脱却できた気がしている。

復習におけるObsidianの運用方法

復習においてもObsidianを活用して管理している。
(これは同じようなことができるツールなら何使ってもいいと思う)

では、実際にObsidianでどのように運用しているか。
一つの実例として、自分の例を示す。

以下の画像のように運用している。

これはObsidianのDailyNoteとDataviewという機能を使って実現している。
(Dataviewの詳細は別記事を参照してください)
【Obsidian】Dataviewプラグインをおさらいする | ほしぱそ。

dataviewを使って、その日が作成日である記事と、その日が更新日である記事を、その日のデイリーノートに自動で表示するようにしている。

実際のコード例としては以下のようになる

TABLE 
	dateformat(file.cday, "yyyy-MM-dd") as "作成日",
	dateformat(file.mday, "yyyy-MM-dd") as "更新日"
WHERE 
	dateformat(file.cday, "yyyy-MM-dd") = this.file.name
 OR
	dateformat(file.mday, "yyyy-MM-dd") = this.file.name

ファイル名が日付の形になっているので、それと一致する作成日、更新日のものを書いているというもの

これをインデックスとして使い、

  • 思い出せるかやってみる(想起)
  • 思い出せなかったら、該当の記事を読んで知識を補強する。
  • 思い出せた場合も、該当の記事を読んで、抜けとかないかを確認する。

という形で復習を行う。

そのやり方で、

  • 1日前
  • 3日前
  • 7日前

の記事を、毎日復習をするというサイクルで行っている。

この復習は朝起きてから行うように習慣化した。

復習においてどこまでのレベル感で終わらせるのか?

学んだ知識は、レベル4のところまで知識を持っていくのが理想である。
しかし、それを全ての知識に対してやっていくと、とてもではないが時間が足りない。

なぜか?
レベル4を実際に使っているものでいうと、日本語とか、ブラインドタッチでキーボードの位置を全く考えずに叩けるのと同じようなレベル感。
なので、日本語やブラインドタッチを覚えた時と同じ時間がかかると考えれば、全ての知識に対して同じレベルにするわけにはいかない。
(もちろん、職業として使うような知識はそのレベルにする必要があるかもしれないが)

なので、ある程度のレベル感だけで満足し、あとは作ったログや検索を駆使して、その都度補って行けば良い。

復習で持っていくレベル感の目安については以下に箇条書きしておく。

  • 大抵の知識はレベル2までで良いということ。
    • レベル2+ログorノートor検索で対処する。
    • 人間は概念を作り、概念を頭に覚えることに集中する。
    • 正確な知識や記録はノートやそれ系のツールに残す。
    • 道具+人間で完結させること。
  • 自分が使いたい、極めたい言語の知識はレベル3くらいまで持っていく。
    • ただ、これは先に書いたレベル2までの運用を行って、やっていくうちにレベルが上がっていくので、放っておいてもいいのかもしれない。

分野ごとの復習

これは腹案として考えていて実際に運用はしていないが、うまく活かせる人もいるかもしれないので書いておく。

Obisianではタグを使って記事を管理できる。
さらに、このタグをDataviewを用いることで自動でリスト化ができる。
なので、タグごとのインデックス用の記事を作成し、そこにリストを残しておけば、「その分野に関して何を勉強したかが一覧できる」

これを使って、自分がやってきた勉強内容の復習・総覧が可能になる。

例えばphpの例。

まず、インデックス用に「00_php」というファイルを作成する。
それからそこに以下のようなdataviewを書き込む。

LIST
FROM "00_Folders/php"

すると、図のように記事の一覧が出てくる。

これを使って、時期を決めてその言語・分野に関して復習をするといいなと考えている。
腹案であり、未だ実践はしていない。

以上の方法論について

あくまで、自分はそうやっているという方法を書いたので、もし使うのであればアレンジして使って欲しい。
自分で使いなれたメモツールなどもあると思う。
自分ですでに構築している勉強のルーティンがあると思う。
そう言ったものに、何か活かせそうなものだけを取り入れてもらえればと思う。
あくまでこの記事は、自分の性質にあった方法にチューニングされているものなので。


終わりにあたって

なぜこんなに復習に偏重した記事を書いてるのか?

答え。自分の記憶力がダメダメなので。
昨日勉強した内容が、朝起きたら、その分野への興味とともに深淵にポイ捨てされてアクセスできないということが常だったので。

また、別の視点から説明すると、学ぶということを学習と復習という2つの軸で考えたとき、明らかに復習の方が付き合う時間が長い。
学習は最初の一回だけだが、復習はその後も続く。
さらに、復習のなかに、その知識そのものへのアクセスの容易さという縦軸、既存の他の知識との結びつきという横軸があり、復習は奥深い概念であるからというのも理由(学習が奥深くないというわけではない。念の為)。
また、学習してる時に大して学べなくても、復習している間に記憶が形成されて、学習の時では学びきれなかったことを再度学ぶことができる、というのを経験しているから。

復習をして、頭に記憶として作ったもの(レベル2でも)は、それ自体が曖昧な知識でも武器になり、足がかりになるので、ここから始めると学習も進みやすいと知ったから。

学習を土台にして復習を重ねるのではなく、復習で土台を作って学習を進める方が楽。

松葉杖としての「学び」

例えば何らかの不幸な事故で、足の骨を折ったとする。
なにも支えがない素の人間だけでは歩けない。
しかし、身体でない、外部の道具である松葉杖の力を借りることで、歩くことができる。

あるいは、視力が弱い人はメガネがなければ物が見えにくく、生活に支障をきたす。
メガネがない時代はかなり生きづらかったのではないかと推察するが、メガネがあることで、普通の人のように生活ができる。

学ぶということを、人生あまりうまくいかない人間が、自分の足で歩いていくための支えとして、松葉杖として。

ルートウィヒ・ウィトゲンシュタインは、二十世紀哲学の記念碑的著作『論理哲学論考』(TLP)を書き上げた後、小学校の教師になると宣言した。一九一九年、彼が三十歳のときだ。
若き日の彼は、ケンブリッジ大学で稀代の論理学者・哲学者バートランド・ラッセルに認められ、ほかにも錚々たる学者たちと交流を深めていた。その彼が大学のキャリアを捨てると聞いて、姉のヘルミーネは当初、理解ができなかった。あなたほど哲学の研鑽を積んだ人が小学校の教師になるなんて、木箱を開けるのに精密器具を使うようなものだと言った。弟はこう答えた。
……閉じた窓越しに外を見ているから、なぜ通行人が奇妙な動きをしているのか説明できない──姉さんの話から連想するのはそういう状況だね。そこからだと、外でどんな嵐が吹き荒れているか分からないし、嵐のなかで通行人はただ必死に立っているだけかもしれない、ということも分からないんだよ。
姉はこの比喩を聞いて、弟ルートウィヒの心境が理解できたという。

古田 徹也 「はじめてのウィトゲンシュタイン 」より


その他、補足等

Vivaldiのワークスペースいいぞという話

記事作成者はブラウザのタブが増えすぎると「わーっ!」ってなっていつもパニックになる。
そして、パニックになり、何をやっていたかを忘れるのでタブを一つ一つ確認していく、そしてタブの中から何をするかを選択するためにもう一度タブを一つ一つ確認していく、そしてどういったタブがあったかを忘れてまた一つ一つ確認していき......
ということをよくやらかす。
なので、Vivaldiのワークスペースを使っている。

公式の解説記事(ページ半ばくらいから)
デスクトップ版 Vivaldi 6.0:新機能「ワークスペース」で目的別にタブまとめ&カスタムアイコンで自分らしさをちょい足し | Vivaldi Browser

実際の使用例

これを使うと、作業単位でブラウザのタブを管理できるので便利。
さらに、スペースが区切られるので、その作業に集中できるのも利点。

ただし、ブラウザがクラッシュした場合、開いているタブが失われることがある点に注意(滅多に起こらないけど、一回起こったことがある)。

Obsidianの使い方などについて

これについて書き出すとキリがないので、参考書籍を上げて代わりとする。

「メモをどのようにして取るか、管理していくか」という、メモそのものについての話から説き起こしている名著。
メモをどのようにつけてきて挫折してきたか、といった著者の体験から、Obsidianをツールとして選択した経緯が書かれている。
「なぜそのツールを使うのか?」といったところから、ツールとしてObsidianをどう活用していくのかが書かれているので、納得があり、実践的。
Amazon.co.jp: Obsidianでつなげる情報管理術【完成版】 eBook : Pouhon: Kindleストア

最新のObsidianの状態を踏まえて書き直された実質のデファクトスタンダード本(と、勝手に思ってます)。
使い方のいろいろな実用例があり、読んでるだけでもワクワクする本。
Amazon.co.jp: Obsidianで“育てる”最強ノート術 —— あらゆる情報をつなげて整理しよう eBook : 増井 敏克: Kindleストア

Discussion