私は独学のプログラマーです。私は正直数学が苦手です。数学のスキルを向上させて、仲間のプログラマの周りをそれほど不安にさせないようにするために、どのようなアドバイスをすることができますか?数学のスキルを向上させるために推奨できる手順またはガイドラインは何ですか?
プログラマにとって数学のベストプラクティス、設計方法、およびその他の役立つ情報を説明するための事実上の標準である本はありますか?その本はどうして特別なのですか?
うーん、あなたが言うことから、あなたは非常に基本的なものから始めたいようです。それについて悪いことは何もない、私は同じことをした。私の数学はほとんど高校レベルで、その多くは忘れられていました。
カーンアカデミー で開始し、練習セクションに移動して、どれだけの距離を達成できるかを確認します。これにより、何ができるのか、どこから学習を始めるのかがわかります。
わざわざ動画を見てはいけません。少なくとも私にとって、ビデオは学ぶのが遅い方法であり、カーンは退屈です。基本的な数学を学ぶためのリソースは他にもたくさんあります。 WikiBooks または ck-12 の一部と同様
質問は Math.StackExchange で頻繁に議論され、「無料のリソース」または「無料の本」を検索すると、多くの情報と資料が得られます。 「開始」や「初心者」などの検索用語についても同様です。または、そこで質問してください。これは、redditの / r/math サブセクションでも機能します。そこでは、例えば数学を学ぶためのより多くのサブレディットを見つけるでしょう。
たくさん練習してください。概念を理解し、次に進むだけでは十分ではありません。あなたはそれを適用するために快適に感じる必要があります。 (例として)除算と乗算に慣れていない場合は、パーセンテージを理解できません。それはより高い概念にも当てはまります。私にとってカーンの練習セクションはビデオよりもはるかに価値があるのはそのためです。
プログラミングと同様に、コミュニティと連絡を取り続けることで、やる気が持続します。たまにフォーラムにログインして、人々が話していることを読んでください。
コンクリート数学:コンピュータサイエンスの基礎(第2版) は、数学のさまざまな領域をカバーする優れた数学の本と、役に立つかもしれない本へのユーモアを持つ私の選択です。
ラマー大学からのポールのオンラインノート は、PDF形式で提供されます。これは、すばやく参照するのに非常に適しています。すべてのページに例があります。トピックをつかんだりつかんだりすると、このサイトに戻ってくる傾向があります。
これがセットです:
計算I(数学2413):に分割
Calculus II(Math 2414)Full Notes
Calculus III(Math 2415)Full Notes
残りのトピックリストについては、サイトを確認してください。
これは本ではないことに気づきましたが、数学についてのあなたの考えを広げる良い方法かもしれません。 Project Eulerの問題に取り組みます 。
たとえば、 最初のものは です。
3または5の倍数である10未満の自然数をすべてリストすると、3、5、6、9になります。これらの倍数の合計は23です。
1000未満の3または5のすべての倍数の合計を求めます。
私は常にKenneth Rosenの 離散数学とその応用 をお勧めします。それは、理論と応用のバランスの良い多くの異なるトピックをカバーします(どんな優れた離散数学の本でもそうです)。また、カバーされた概念の元となった数学者やコンピューター科学者に関する興味深いサイドバーが多数あります。
1000の離散数学の本を読むことは良い解決策ですが、時間が制約である場合は最適な道ではないかもしれません。深く行くことなくどのくらいの数学が必要かについては、(コーメン)アルゴリズムブックの導入の付録Aをご覧ください:- http://www.acmsolver.org/books/Introduction%20to%20Algorithms,%202nd%20Ed%20-%20Thomas%20H.%20Cormen.pdf
付録を読んだところ、どの数学のトピックをさらに検討すればよいかがよくわかりました。何が期待できるかがわかったら、次を見てください。
私の意見では、証明方法を(特に帰納法によって)学習することは、分析アルゴリズムを理解する上での基礎となります。残念ながら、ほとんどのアルゴリズムとCS数学コースでさえ、証明にあまり重点を置いていません。彼らはすでにあなたがその上で有能であると想定しているので、彼らは数ページを超えません。数学の本への旅は非常に小さく、読みやすいです。 CSの問題とその数学的側面も使用します。 matrixmath、probability、counting、およびグラフ理論。
他の2つの人気のある大きな教科書:Discrete MathとそのEPP(私のお気に入り)からのアプリケーション、およびもう1つはRosenからのテキスト。
「コンクリート数学」というタイトルの教科書を読む喜びはありませんが、いつも良いことを聞いていました。
CSの数学を適切に研究している場合は、数学的論理や集合論などを調べています。これらには、それらをサポートするかなり複雑な数学があります。したがって、数学の基本レベルが少し不安定な場合は、より多くのCS関連の領域に進む前に、基礎から始めるのが最善です。
したがって、まず K.A。ストラウドの工学数学 から始めることをお勧めします。よく書かれていて、理解しやすく、基本だけでなく、より高度なものもカバーしています。
率直に言って、数学の根本的に非常に強い知識がなくても、多くの分野で完全に適切なプログラマーになることができます。ゲームエンジンやネットワークルーティングの最適化に関しては、あまり能力がないかもしれませんが、実のところ、多くのビジネスアプリケーションはかなり単純です。ただし、希望を生かし、まだ数学をあきらめないようにしてください。
低いレベルで行う数学と、高いレベルで行う数学には、違いの世界があります。あなたが微積分学が苦手であると言うこと(私は初めて私がCalc Iに失敗したことがある)を言うのは、グラフ理論が苦手であると言うこととは非常に異なります。数学を進めるにあたり、焦点は、かなり退屈で繰り返しの多い単純な問題解決ではなく、グラフ計算機で行うこともできます。代わりに、焦点は論理的思考スキルにあります。証明を構築することは、率直に言って、ソフトウェアを書くことによく似ています。
これまでで最高の数学クラスは、私が最初の「実際の」数学クラスと考えていたものでした。基本的には、グラフ理論から数論までの範囲の領域をカバーする証明クラスの紹介です。私たちが使ったテキストは素晴らしかったです( 数学的な思考:問題解決と証明(ダンジェロとウェストによる )。)その本を読み進めるだけで、証拠を攻撃するアイデアを得るのに役立つかもしれません。
全体として、私は大学で取った数学を本当に必要としましたか?いいえ、おそらく違います。しかし、正式な背景を持つことで、より優れた批判的思考スキル、より良い想像力(通常、問題を解決するには多くの方法があり、時には良い場合も悪い場合もありますが、独自のアイデアが役立つ場合があります)と問題解決の自信が得られました。
ほら、数学は得意ですが、プログラミングにはまったく使用していません。私のアドバイスは単に十分に知らないことに慣れ、誰かにあなたのために数学をやってもらうことです。
知っておくべきことがたくさんありますが、どれもうまくいくとは期待できませんが、特に数学はあまり役に立ちません。
もちろん、あなたのプログラムは科学的なものなので、それが必要になるかもしれません。
ESSLLIの「Logic&Computation」セクションの(初心者向け)コースの一部のコースノート(例として、次の2011プログラムまたは 2010プログラム 、詳細を検索)は興味深いかもしれません。プログラミングに関連する分野の現在の理論的発展についての印象を与えます。次に、それらのコースで触れた特定のサブフィールドの基礎をより深く学ぶことを決定できます。
(それ以外の場合、質問に答えるのは難しいです。非常に多くの「数学」があり、実際には必要ないか、興味がないかもしれません。ESSLLIコースが興味深いと思われる理由の1つは、研究なので、特定のパズルを解くことについてであり、特定のパズルを解くことは、理論を実際に理解し、その背後にある興味深いことを理解するプロセスにおいて重要な要素です。