2016年5月18日水曜日

プログラマは高校数学を学んではいけない

このエントリーをはてなブックマークに追加
Pocket

プログラマーとして社会人になったけど高校数学を1から独学している」と言うエントリーがあがっていた。基礎を固めるべく数学を独学しているそうだ。立派だと思うが、高校数学と言うのにひっかかる。授業時間の制約などがあり、変に範囲が狭くなっているものを学習する必要があるのであろうか。実のところ難易度はそうは変わらないので、大学生向けのテキストを読むべきだと思う。

高校数学で教えている内容は、色々と歪になっている。数学Ⅰ、Ⅱ、Ⅲのような不自然な区分けがあるし、都合によりε-δ論法のように避けて通っているものがある。応用面を考えると、テイラー展開はもちろん、微分方程式も学んだ方が良いし、線形代数が無いのは良くない。複素平面と線形代数の両方を教えるつもりだったのに、予想外に時間数が削られてしまい線形代数が無くなったような風聞がある。中途半端なのは教育効果を考えたものですらないのだ。高校に行列があった頃も、2×2か3×3に制限された世界になっており、n×nになっていなかったはずで、これも良くない。

プログラマが学校システムの都合にあわせて学習する必要も無いので、高校数学と言う枠は忘れて、代わりに大学生向きのテキストを読もう。高校数学の範囲では、津波の波形もプロットできない*1。「集合や対数、数列といった知識が全くない」で大学生向きのテキストが読めるのか不安に思うかも知れないが、手元のテキストを確認した限りは、いちいち説明してくれるので大丈夫だ。高校数学を前提としている本もあるだろうが、他の本を読めば良いし、説明されていない単語がもしあったとしても高校数学の範囲であれば検索すれば解説が出てくる。

ところで、微分積分と線形代数を固めるところからはじめるべきなのは確かだと思うのだが、どこまで何を学べばいいのかがはっきりしない。常/偏微分方程式の数値解析などを学ぶと応用面が広がるなと思うのだが、「ITエンジニアとかコード書くような仕事に就こうと思ってる学生さんは、たくさん勉強しろ」と言う話もあって、確率・統計、グラフ理論、形式言語論、符号理論、プログラム意味論なども挙げられている*2。しかし、職業プログラマが全てを学ぶ体力的、精神的、時間的余裕はないであろう。知っていても業務に役立つ可能性は、慣用句や四文字熟語やアニメの知識よりも低い*3ものに、労力を割くべきとは損得勘定で考えると言いづらい。

業務以外で役立つ事はあり得る。非リア充で不審者扱いされるプログラマは多いと思うが、露出度が高すぎる妙齢の女性が周囲にいるときや、集合住宅で隣人が女性を連れ込んで騒音を立てているときに、フェルマーの小定理やガウス積分の公式などを脳内で証明すると心の平静が得られる効能はあるから、そういう目的で学習するのは有益であろう。この場合は自制心を振り切って、「数学をいかに使うか」「数学の好きな人のために」「数学で何が重要か」「数学をいかに教えるか」の内容が全て理解できるぐらいまで学習する事をお勧めしたい*4。私には無理ですけどね(´・ω・`)

*1偏微分方程式とフーリエ変換の知識がいる(関連記事:RでKdV方程式を数値解析でプロットしてみる)。

*2さらに前提知識として、伊藤清三「ルベーグ積分入門」、永田雅宜「可換体論」、松坂和夫「集合・位相入門」、松島与三「多様体入門」ぐらいは読んでおくことが要求されている気がする。

*3関係がありそうな事をしても、数学的な知識が実装に必要かと言うとそうでもなかったり。既にあるライブラリを用いれば良いと言うのはもちろんの事、抽象化/一般化した理解がそのそも要らないときがある。巡回セールスマン問題を局所探索アルゴリズムで解くコードを書くのに、グラフ理論の知識は要りそうで要らない。特に形式言語論とプログラム意味論はプログラマには要らない気がして仕方が無い。それぞれ「数の体系と超準モデル」と「圏論の歩き方」の一部を見た程度の知識しかないが。

*4これら4冊は、証明や説明なども多く含まれるが随筆であるので、挙げられているトピックについて他の教科書などで学ぶ必要がある。

0 コメント:

コメントを投稿