Skip to content

Instantly share code, notes, and snippets.

@haruo-wakakusa
Created January 1, 2018 03:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haruo-wakakusa/da42a081bf648e053c078436038a8486 to your computer and use it in GitHub Desktop.
Save haruo-wakakusa/da42a081bf648e053c078436038a8486 to your computer and use it in GitHub Desktop.
teratailで、「システム開発に数学を使う場面はあるか?」という質問に対する回答で、脱線しまくってたのでgistに退避させた内容です。
数学は、出る何処勝負です。統計も信号解析もアルゴリズム論も暗号理論も、
案件に携わってから勉強なさるのがよいのではないでしょうか。
基礎的な素養を付けたいのでしたら、AOJと「アルゴリズムイントロダクション」の組み合わせがおすすめです。
逆に、数学科の人は、転職活動をかけまくって、自分が専攻していた分野を丁度やっている企業を調査するのが
よろしいかと思います。多くの人に、自分の職務経歴書を見てもらうのです。
そうすれば、自分が得意な分野の仕事に就くことができるかと思います。
--- 2018/1/1 10:11 追記
まあ、20代前半の人には分からないかもしれないんですけど、10代から20代の間って勉強が結構できたりするんですよ。
だけど30過ぎると、自分の得意分野で勝負をかけていくというほうがメインになっていくので、
今後どういう学習をしたらいいですか?という質問はまっとうだと思います。しかし回答は難しいですね。
容易さという点では、AOJと「アルゴリズムイントロダクション」の組み合わせが圧倒的に優位です。
数学には、「証明」と「定理の応用」の2つの観点がありますが、システム開発で求められるのは圧倒的に「定理の応用」です。
つまり、証明ができるかよりも、定理をどれだけ知っているかのほうが重要なのです。あとは現状のトレンドとかですね。
Udacityとか、AIの勉強ができておもしろいですよ。
--- 2018/1/1 10:30 追記
ここでは、もっと手厳しいことを言っておく必要があるのだった。もしあなたが数学基礎論というものに
興味をお持ちであるならば、それは危険な道であることを知っておいた方がいいです。
数学基礎論というのは数学と哲学の合流点のようなもので、応用できるかと問われれば、できないこともないのですが、
それよりもその中毒性が強いので、ある程度距離を持って接する必要があると感じます。
しあなたが、群・環・体・多様体・位相全部いけるぜイェイイェイな人間だとすると、
私からあなたにするアドバイスはありませんが、数学を一通り学ばれて、
ょっと数学きついなと感じたら、違うアプローチからやり直すことをおすすめします。
例えば、数学と呼ばれていない分野にも数学は沢山登場します。でも証明は完璧スルーだったりする訳です。
でもそこを、数学科出身の人間にとっては物凄い苦痛だと思いますが、
とにかくコードを書いて覚えるとかする方向に持っていけば、
(もしあなたが数学の才能に関して秀でていないならば)QoLは格段に向上すると思います。
--- 2018/1/1 11:02 追記
ここでは、さらに手厳しいことを言う必要があるのでした。プログラミング言語の中でLispとHaskellというものがあります。
これらは学際的な言語ではありますが、あまり実用的な言語ではありません。
だから、趣味の範囲でやる分には構わないのですが、システム開発を行う上ではあまり役に立たないということを
念頭に置いた方がいいです。たとえば、SICPという、無料で読める文献がありますが、
これは関数型プログラミングの基礎を学習することができます。ただし、分量がとても多いので大抵の人は
2,3章あたりで読むのを放棄したりします。私もSICPは最後まで読むべきではないと思います。
4章はインタプリタの実装、5章はコンパイラの実装について書いてありますが、
それは別の文献で学ばれた方がよいのではないかと思います。また、On Lispという文献も無料で読むことができます。
これは、マクロプログラミングについての指南書ですが、ぶっちゃけていうとマクロプログラミングができない言語に
対してはほとんど意味をなさないです。次に、Haskell Reportというこれもまた無料で読むことができる文献があります。
これは純粋な関数型プログラミングや、プログラムの証明(!?)といったものを学習するには優れていますが、
とても長大な資料です。私はちょっと読む気がしないです。
ただ、関数型プログラミングはマクロプログラミングに比べれば他の言語(C/C++, Java等)に応用が利くので、
多少は勉強してもいいんじゃないかと思います。とりあえずSICPの2章の終わりまで読めば万々歳だと思います。
あと、オブジェクト指向プログラミングですね。これは関数型プログラミングに比べて、とても難易度が高いです。
ただ、段階的に学ぶことができるので、軽くオブジェクト指向の入門的学び方を紹介します。
まず、AOJで自分で簡単な問題を解いた後に、JavaやC++の他の人のソースコードを見ます。
すると、継承・実装・ジェネリクス・テンプレートなどを使っているコードが散見されると思います。
そういうのを真似するのです。それで標準ライブラリのユーザーとしてのスキルを身に着けておきます。
次に、「Effective Java」という本を読みます。そうすれば、オブジェクト指向に関しては中級者になることができます。
GoF本とかバートランド・メイヤーのオブジェクト指向入門とかに手を出してはいけませんよ。あれは本当にけがをします。
軽く1年くらい人生を棒に振ってしまいます。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment