「数学を学べば頭が良くなる」という話について思うこと
2014.5.15
最近コンピュータサイエンスの独習に身を入れるようになって感じたのが、巷で溢れている「数学を学べば頭が良くなる」っていう論は、抽象を扱えるようになる・抽象を組み合わせて更なる抽象をつくり複雑系に立ち向かえるようになる上で、数学という学問が最適だからなんじゃないかなあということ。
( 「仮説を立てる力」とか他にもいろいろな要素があるけれど、今回は「抽象」という話題にフォーカスして考えたい )
「抽象」を理解する上で数学が最適だと思う理由
「抽象化されたモデルを扱うこと」や「抽象化されたモデルを組み合わせて新たな抽象をつくること」を学ぶ上で、特定のドメイン固有の問題によるノイズを極力減らし、問題の本質と向き合うことができるからだと思う。
例えば「オブジェクト指向」という概念について考えたい。僕たちはオブジェクト指向の概念に基づいて 抽象やその組み合わせによる抽象を構築する。ただし、「オブジェクト指向」で抽象を考える際、同時にプログラミング言語による実装のことも考慮しなければいけない。
すなわち、「プログラミング言語」という特定のドメインが持つ複雑さと同時に立ち向かわなければいけない。これは純粋に「抽象化」を学ぶという目的の上では効率的ではない。
数学は他のものに比べてこうしたノイズが少ないため、抽象を扱う上での本質的な問題に集中できるので、抽象を学ぶ上では効率的なんじゃないかなと個人的には考えている。
「抽象」は何の役に立っているか
・より複雑な問題を理解する、あるいは問題の全体像を把握する
抽象と抽象を組み合わせてより上位の抽象を生み出す。
下位の抽象をブラックボックス化し、上位の抽象へと変換していくことによって、
具体的な問題からより抽象的で複雑な問題を理解できるようになる。
・アイデアを生み出す
抽象化されたモデルというのは、単に具体的な問題を解決する手段のみにとどまらず、それが抽象化されているがゆえに新しい具体を生み出す可能性を秘めている。
例えば「サイクロン式掃除機」のようなアイデアは、流体力学の抽象化モデルを新しい形で具体化したものの一つであると思う。
このように抽象は それを新しい種類の具体化されたものに変換できる可能性を無限に秘めている。
・既存の問題を既に存在する抽象のモデルを基に考えることで良い仮説を立てる
プログラミング言語をいじっていると、「それが何から派生した問題なのか」当たりをつけられるようになってくる というのはプログラミング言語を学習してきた人なら経験があるかもしれない。
プログラミングを学び始めた最初の頃なんて UTF-8のファイルを処理をした際にBOMに悩まされて泣いたものだけど、同じような問題が発生したときに「BOMがついていないか」という発想が自然と出るようになるのは、「プログラミング言語でファイル処理をする際に一般的に発生しうる問題」が抽象化されて、そのモデルを基に仮説を立てられるようになるからだと思う。
良質な問題解決の鍵の一つはどれだけ上手に抽象モデルを構築できて、それを自然に扱えるかによるものだと思う。
まとめ
数学を学ぶということは、「抽象」を理解する、それを組み合わせて新しい抽象を生み出す、また下位の抽象をブラックボックス化してより高次で複雑な問題を扱う といったことを学ぶ上で役に立っていて、そういう学習を重ねることによって現実問題でより良質な抽象モデルを立てられる事が「数学を学べば頭が良くなる」っていう話に繋がってくるんじゃないかなと思った。
Written by Nisei Kimura ( 木村 仁星 )