学ぶことへの突破口

実のところ自分は中学高校と数学は得意ではなく、お世辞にも良い成績ではなかった。
おまけに大学にも行っていないので、学校での数学教育は高校卒業と同時に終わってしまっていた。

中学高校で何を習ったかの項目は覚えてはいるが、それらの詳細がどんなものであったのかを理解したのは学校を出て月日が経過し、自力でそのあたりを学び直してからである。それ以降、数学以上にあらゆることの役に立つ道具とは出会えていない。つまり現時点に至るまで、数学は公私ともに役に立ち続けているということ。


正直この「学び直し」は二度手間であったと感じているので、
現役の中高生には「学校で学べるうちにそれらを理解しておいた方が良い」と言うし、
残念ながら理解しないまま大人になってしまった人には「大丈夫、今からでもそれは取り戻せる、現に俺は取り戻した」と言う。
大学にさえ行っていない俺でも中学高校で習った中で覚えている幾ばくかだけを最初の足掛かりとして、現在の程度までは取り戻せる、というのは自身の経験が証明している。


とはいっても理由も興味もないまま学び直すのを徒労に感じるのはわかる。しかし、それはそれで問題が明確であるので、その問題を解決してしまえばよい。つまり「数学がわからなければ先に進めない興味の対象」を持てば良いのだ。


自分の場合はSFを書きたくなり、そこに登場させるロケットの数値に「実際に飛ぶ筈である数値的根拠を与えたくて買った本」の内容を理解したいと思った。

何より重要なのは、自分にとってこれは無駄知識であり、理解することを勝利条件としたゲームなのだ、という点である。

自身の力でロケットを設計、製作して現実に飛ばすことなど当時の自分にはあり得なかった。これが仕事で必要なのでやむなく、とかの動機であれば「やらされている」感が尋常ではなかっただろう。学ぶことに義務感や使命感は致命的だ。重要なのは伊達と酔狂を動機とすることなのだ。伊達と酔狂でやる限り人間は無限に学んでいける。それで学んだことの余禄を仕事にでも応用して飯の種にできればさらに良い。

とにかく「この本を一定以上理解すること」という目標が突破口になった。


それで実際に何をやったかといえば、読んでいく中で登場する数式について前提条件をつぶさに読み、その上で数式を読み解いて、理解が及んでいないと感じた箇所についてとにかく調べた。調べた中で不明点があればそこから再帰的に調べて掘り進んだ。

この「再帰的に調べる」というのが重要。
自分が今読んでいるのは応用であり、その応用を自身は理解したいのだ、という認識を持つ。
応用は基礎ができていなければ理解不能であるから、応用を説明されてわからないところこそが一段下の基礎である。
それを調べてわからない箇所があれば、それがさらに一段下の基礎である…という感じで、
「応用の側からわかるところにたどり着くまで基礎の側に掘り進んでいく」方法をとった。
理解の上で呼び出し元に戻ってくるころには基礎も出来上がっている。

これを繰り返すと、回を重ねるごとに掘り進む深度が浅くて済むようになる。
一度掘り進んだ基礎については既に理解しているので、
同じ基礎に立脚するものであれば理解が済んでいる階層にたどり着いたらそれ以上掘る必要がなくなるからだ。


また「自分に理解可能な形で理解する」というのも大事。

たとえば「Σ」という記号が出てきたら「このΣはどう取り扱う記号なのか」といったところから調べた。
この場合調べた結果の理解は「for文的にループで足し算する」みたいな感じだった。つまり、

x=\sum_{n=0}^{N-1}V_{n}

であれば

int sum_func(int V[], int N)
{
	int n;
	int x = 0;
	for(n = 0; n < N; n++) {
		x += V[n];
	}
	return x;
}

のようなコードになる、というふうに。


プログラムを理解できる、というスキルに数式表現の理解で助けられた点は大きい。数式においてそれぞれの記号が表す値の扱いを、プログラムコードという表現で理解できるわけで、これは下手に日本語で説明されるより確実性の高い方法だ。プログラムが多少なりとも理解できるというだけで、数学を学ぶ上での強力な武器を手にしているのだ、とも言えると思う。


「現時点でわからない」というだけで「自分には理解できない」という結論に至るのは明らかな飛躍であるし、突破口が開ければ学んでいける道もある。そして突破口を作ることは現実に可能だ。「わからないまま」は勿体ない。