大学時代に友人とベテランプログラマーに高度な数学が必要かどうかを議論しました。彼はそれに対して激しく議論していました。彼は、プログラマーは高校や新入生の数学からの基本的な数学的知識のみを必要とし、それ以上ではなく、ほとんどすべてのプログラミングタスクは高度な数学さえ必要とせずに達成できると言いました。しかし彼は、アルゴリズムはプログラマにとって基本的かつ必須の資産であると主張しました。
私のスタンスは、すべてのコンピューターサイエンスの進歩はほとんど数学の進歩にのみ依存しているため、数学の徹底的な知識はプログラマーが現実世界の困難な問題に取り組んでいるときに大いに役立ちます。
引数のどちら側が正しいかについてはまだ解決できません。あなた自身の経験から、あなたのスタンスを教えてください。
提起された質問に答えるには、「いいえ、プログラミングには数学は必要ありません」と言わなければなりません。ただし、他の人がこのスレッドで提案したように、数学を理解することと「アルゴリズム的に考える」ことができることとの間には相関関係があると思います。つまり、量、プロセス、関係、および証明について抽象的に考えることができるようになります。
プログラミングを始めたのは9歳くらいのときで、その段階までに多くの数学を学んだと言ってもいいでしょう。しかし、少しの努力で、変数、forループ、gotoステートメント(許してください、Vic 20 BASICで、Dijkstraをまだ読んでいませんでした)と、画面にグラフィックを配置するための基本的な座標ジオメトリを理解できました。
最終的には、コンピューターサイエンスのマイナーで純粋数学の優等学位を取得しました。私は主に分析に焦点を当てましたが、かなりの離散数学、数論、論理、計算可能性理論も勉強しました。統計、確率理論、ベクトル解析、線形代数からプログラミングにいくつかのアイデアを適用できることを除いて、学部課程で学んだプログラミングとその後に行った商業および研究プログラミングに直接適用できる数学はほとんどありませんでした。
しかし、大規模で複雑なプログラミングプロジェクトに取り組んだとき、数学が要求する正式な思考方法-慎重な推論、反例の検索、公理的基盤の構築、概念間のつながりの発見-が非常に役立つと強く信じています。
アスリートがスポーツのためにトレーニングする方法を考慮してください。たとえば、サッカー選手は間違いなく基本的なサッカースキルに多くのトレーニング時間を費やしています。ただし、一般的なフィットネスを改善するために、ジムで自転車やローイングマシンを使用したり、ウェイトトレーニングなどを行うこともあります。
数学の勉強は、プログラミングの精神力とスタミナを改善するためのウェイトトレーニングまたはクロストレーニングに例えることができます。基本的なプログラミングスキルを練習することは絶対に不可欠ですが、数学を学ぶことは、コア分析能力を向上させる信じられないほどのメンタルトレーニングです。
高度な数学はプログラミングに必要ではないかもしれませんが(高度な数学機能をプログラミングしている場合を除き)、プログラミングと数学の思考プロセスは非常に似ています。既知の事柄(公理、以前に証明された理論)の基礎から始めて、どこか新しいところに到達しようとします。手順をスキップすることはできません。手順をスキップする場合は、空白を埋める必要があります。この2つを非常に似たものにする重要な思考プロセスです。
また、数学者とプログラマはどちらも抽象的に批判的に考えます。実世界のものはオブジェクトと変数によって表されます。コンクリートから抽象に翻訳する機能も2つのフィールドをリンクします。
一方が得意であれば、おそらくもう一方が得意となる可能性が非常に高いです。
コンピュータサイエンス!=プログラミング
OK、まじめに、私は英語と心理学の専攻であり、一部はコンピューターサイエンスの専攻である善良なプログラマーと悪いプログラマーを知っています。開発者がCSのバックグラウンドを持っていなかったとして尊敬する非常に有名な人たち。たとえば、Larry Wall(Perl)は言語学者でした。一方、作業しているドメインについて何かを知ることは役立ちます。そうすれば、少なくともデータが理にかなっているかどうかを確認し、顧客/ユーザーが本当に望むものにドリルダウンできるようになります。そして、はい、計算の複雑さと効率的なデータ構造とプログラムの正確性の問題があります。これはコンピューターサイエンスで学んだことであり、ほとんどすべてのドメインで知っておくと便利ですが、必要でも十分でもありません。
私はあなたに最初にあなたと言うことになると思いますdo数学が必要です。他の人が言ったように、数学は開発の特定の側面にとってそれほど重要ではありませんが、批判的思考と構造化分析の基礎は非常に重要です。
さらに、スケジューラー、最適化、ソート、プロトコル管理、およびコンピューターの他の多くの側面のようなものに入る多くの基礎を理解する上で、数学は重要です。計算レベルからの数学は複雑ではありませんが(ほとんどが高校の代数)、理論と応用は非常に複雑になる可能性があります。
絶対にそれなしで済ますことはできますし、数学の徹底した知識をあなたに差し控えるべきではありませんが、チャンスがあれば、または傾きがあれば、できるだけ多くの数学を勉強します、微積分、数値理論、線形代数、組み合わせ論、実用的なアプリケーション、すべてのコンピューター科学の広い範囲で実用的および理論的なアプリケーションがあります。
私はフェンスの両側で非常に成功した人々(数学に強い焦点を持たない人々、物理学または数学のために学校に行った人々)を知っていましたが、両方のグループで数値の問題を楽しんでアルゴリズムと数学理論について学びました。
私は数学の学位を持っていますが、私のキャリアの中で一度だけその数学を要求したことを覚えていません。論理的思考のために心を鍛えるという点では有用でしたが、流体力学、量子理論、またはマルコフ連鎖を使用してコードを記述したことはありません。 (最後のほうが出てくる可能性が最も高いと思います。)
ほとんどの基幹業務開発者は、ほとんどの場合、高度な数学を必要としません。三角法を知ることが役立つ場合があり、数学的に記述されたアルゴリズムを実装するのに十分な数学を確実に理解できることが重要になる場合がありますが、それ以上ですか?いや.
ほとんどのプログラマーはコンピューターサイエンスを進歩させていないことを忘れないでください-彼らはアプリケーションを構築しています。現代の車を運転するために高度なエンジニアリングを知る必要はありませんが、その車はほぼ確実に改善されていますが、through高度なエンジニアリングです。
ここで穀物に逆らって「はい」と言います
私は土木工学からプログラミングに切り替えます(具体的なサック!)。私の数学の背景は、通常の1年目のもの、2年目と3年目の微積分(Diff EQ、ボリューム積分、シリーズ、フーリエ、ラプラス変換)と数値解析コースで構成されています。
コンピュータープログラミングには数学が信じられないほど不足しています。ディスクリートの数学とロジックのすべての領域が欠けていますが、テキストブック、Wikipedia、Wolframの膨大なライブラリがあるために私は生き残ります。ほとんどの高度なアルゴリズムは高度な数学に基づいており、広範な研究を行うことなく高度なアルゴリズムを開発することはできません(本質的には半コースの作業に相当します)。立つべき巨人の肩のような数学的基盤はありません。
私は、高度な論理(離散)数学を持つことが本当に役立つと主張します。それと集合論。一般的なコンピュータープログラムを扱う場合、これらの分野は非常に役立ちます。しかし、私が大学で取った他の多くの数学は微積分であり、私が見る限り、その使用は非常に限られていました。プログラミングの90%(またはそのようなもの)は非常に単純な数学でビジネスアプリを実行しているため、ほとんどの場合、数学の知識はほとんどなくても大丈夫だと思います。ただし、ブール代数、論理、離散数学、集合論をよく理解すれば、次のレベルに到達することができます。
それはあなたが何をしているかに依存します。たくさんの3Dプログラミングを行う場合、3Dジオメトリの知識は確かに必要です、あなたは同意しませんか? ;-) JPGのような新しい画像形式やMP3のような新しい音声形式を作成したい場合、コサイン変換またはフーリエ変換を理解できない場合、これらは最も損失の多い圧縮の基本であるため、かなり失われます。数学をかなりよく知っていれば、他の多くの問題をよりよく解決できます。
他にも多くのプログラミングタスクがあり、それほど多くの数学を必要としません。
これを投稿するのに十分魅力的な主題を見つけたら、ちょうど先に行き、学び始めなさい。残りは自然に来ます。
うん、高度な数学の必要はありません-あなたが商用プログラミングをしているなら-市販のソフトウェアです。
ただし、次のような筋金入りのものを扱う場合:
高度な数学の知識が役立つ場合があります。そして、それは「この世界の外」の問題ではありません。
オフィスに必要な紙の量を「予測」しようとするソフトウェアを作成する必要がありました(値を概算するための最良の方法を見つけることは地獄でした)。
ただし、高度なものを使用すると迷子になりやすいので注意する必要があります-チューリングを使用して動的メニューの状態を正しく表示するために保存するためにチューリングを使用する友人がいます-おそらく...彼は想像力を失いすぎた。
どのような種類のプログラミングですか?
私の商業的な経験では、高度な数学は必要ありませんでしたが、これはあなたがいる分野に大きく依存しています。
コンピュータグラフィックスには、高度な数学が大量に必要です。多くのアカデミックなコンピュータープログラミングには高度な数学が必要です。
したがって、数学が得意な人とプログラミングが得意な人との間には相関関係がある傾向があると言っています。
この希望に満ちた答えがお役に立てば幸いです。
私の経験では、プログラミングには数学が必要ですが、そこから逃れることはできません。プログラミング全体は数学に基づいています。
問題は白黒ではなく、よりカラフルです。問題は、数学が必要かどうかではなく、いくらですか。数学のレベルが高いほど、より多くのツールが提供され、さまざまな方法で心が開かれます。
たとえば、加算と減算のみがわかっている場合にプログラムできます。乗算が必要な場合、多くの加算を実行する必要があります。乗算は、繰り返しの追加を単純化します。代数を使用すると、数学を単純化してからプログラムに実装できます。線形代数は、画像を変換するためのツールを提供します。ブール代数は、これらすべてのif
ステートメントを削減するメカニズムを提供します。
そして、数学、論理学、哲学の兄弟を忘れないでください。ロジックは、case
またはswitch
ステートメントを効率的に使用するのに役立ちます。哲学は、あなたが修正しているコードを書いた人の考えを理解するのに役立ちます。
はい、プログラムを書くのに多くの数学は必要ありません。一部のプログラムでは、他のプログラムよりも多くの計算が必要になる場合があります。数学の知識が増えると、理解度の低い人よりも有利になります。これらの時代、人々はそれらの仕事を得るために得ることができるあらゆる利点を必要とします。
私はプロとして8年間プログラミングをしており、12歳から趣味としていました。
数学は必要ありません、ロジックが必要です。数学は恐ろしく助けになりますが、それは必要ではないと言うことは、男を殺すために、銃は必要なく、ナイフを使うことができると言うようなものです。まあ、それは本当ですが、その銃はそれをはるかに簡単にします。
最低限必要なものがいくつかありますが、すでに満たされている必要があります。基本的な代数式と表記法、および一般的なコンピューターの同等物を知っている必要があります。たとえば、指数が何であるかを知る必要があり(3から3番目は27)、一般的なコンピューター式は3 ^ 3です。代数の一般的な表記法は言語によって異なりますが、それらの多くはやや統一された方法論を使用しています。その他(LISPを見る)はそうではありません。また、操作の順序を知る必要があります。
アルゴリズムの考え方を理解する必要があります。最初にこれ、次にこれが生成され、この計算で使用されます。あなたはこれを理解するかもしれないし、理解しないかもしれません、そしてあなたがそれを理解しないなら跳ぶことはかなり難しいハードルです。これはあなたが「得る」ものであり、実際に学ぶことができるものではないことがわかりました。逆に、一部の人々はアートを「取得」しません。彼らは画家になるべきではありません。また、CSカリキュラムには、これがうまくいかない理由を理解できない学生がいます。x = z + w; z = 3; y = 5;彼らが加算を理解していないということではなく、明確な表現の要件を把握していないということです。彼らがそれを理解していれば、コンピューターもそうでしょう?上記の3行で何が悪いのかわからない場合は、プログラマーにならないでください。
最後に、プログラミングの領域にある数学を知る必要があります。会計ソフトウェアは基本的な代数で停止する可能性があります。物理学をプログラミングしている場合、物理学(ゆるく)と3次元幾何学(ユークリッド)の数学を知る必要があります。アーキテクチャソフトウェアをプログラミングしている場合は、三角法を知る必要があります。
しかし、これは数学よりも先に進みます。プログラミングするドメインが何であれ、基本をしっかりと理解する必要があります。言語分析ソフトウェアをプログラミングしている場合は、確率、統計、文法理論(複数言語)などを知る必要があります。
多くの場合、特定のドメインは、無関係であると思われる知識を必要とするか、その恩恵を受けることができます。たとえば、オーディオソフトウェアをプログラミングしている場合、実際に波形を処理するには三角法を知る必要があります。
大きさも物事を変えます。 1000項目の財務データセットを並べ替える場合、それは大したことではありません。ただし、レコードが1,000万件だった場合、実際にベクトル演算を理解し、バイナリレベルでの並べ替えを深く理解することで大きなメリットが得られます(システムがアルファベット順に並べ替えるにはどうすればよいですか? '?)
各プロジェクトはプログラミングの直接的な範囲外でより多くの学習を必要とするため、プログラマーとして、あなたの一般知識ベースが爆発することに気付くでしょう。あなたが自己学習にうんざりしている、または怠け者であり、本質的に「宿題」をしている週に10時間以上を費やすという考えが好きでないなら、プログラマにならないでください。
思考演習が好きなら、学習が好きなら、電卓なしで数学のような抽象的なことを考えたり、スケッチパッドなしでデザインしたり、人生や趣味に幅広い好みがあれば、自己批判的で捨てることができるならあなたが完璧なものを好むなら、お気に入りのアイデア、そしてプログラマーになります。この決定を数学に基づいて行うのではなく、論理的に考えて学習する能力に基づいてください。これらが重要です。数学は単なる副産物です。
クリスに同意します。私も「はい」と言います。ただし、これは上記のように市場によって異なります。基本的な「既製の」アプリケーションを作成したり、日常の作業を支援するツールを作成したりするだけの場合、数学はそれほど重要ではありません。
カスタムソフトウェアソリューションのエンジニアリングには、多くの問題解決と批判的思考が必要です。数学の背景が存在する場合に最も確実に強化されるスキル。私はコンピューター工学の学位を取得して数学を副専攻し、現在の私がなぜここにいるのかという数学指向のバックグラウンドをすべて信用しています。
それは私の2セントです。多くの人が同意しないことを上記の読みから知ることができます。私は、数学の背景がなければスキルを習得できないと言っているのではなく、スキルはそのような背景を持つことの副作用であり、ソフトウェアにプラスの影響を与える可能性があると単純に述べています。
一部の分野の開発者には数学が必要ですが、他の分野ではほとんど役に立ちません。
あなたがゲーム開発者であり、物理学を頻繁に使用する必要がある場合は、数学を理解することが重要です。高度な視覚制御を使用している場合-ジオメトリなしでは多くのことを実行できません。財務計算を行うことを計画している場合-統計についての確かな知識を持つことが本当に役立ちます。
一方、過去5年間で、私は2つか3つのプロジェクトしかありませんでした。これらのうち、Google検索が役に立たなかったのは1回だけでした。
結局のところ、財務計算でさえ、クライアントがあなたのために行い、実行する公式を与えてくれるものです。
したがって、「応用ソフトウェア」ビジネスをしているのであれば、数学の学位を決して使うことはないでしょう。アカデミックソフトウェアを使用している場合は、数学が非常に重要です。
確かな数学(単なる算術ではない)または論理的な背景を持つ人は、アルゴリズム、変数の使用、条件付き推論、およびデータ構造にうまく対処できます。
数学はポイントに役立ちますが、ポイントにのみ役立ちます。
高度な数学の知識が優れたプログラマーの要件であるとは思いませんが、個人的な経験に基づいて、高度な数学をよく理解しているプログラマーも優れたプログラマーになると思います。これは単に、より論理的な心によるものか、数学的問題を解決した経験による論理的な展望によるものかもしれません。
数学はプログラムを作成するためのツールボックスです。 Cormenのアルゴリズム入門をお勧めします。もっと「数学的な」ものに触れます。
- Greatest lowest limit (managing resources)
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)
数学の基本概念は、アルゴリズムの以下の考案、理解、実装、および使用です。もしあなたが数学をすることができないなら、それはあなたがこれらのことをすることができないからです、そして、あなたがこれらのことをすることができないなら、あなたは効果的なプログラマーになることができません。
一般的なプログラミングタスクには、特定の数学的な知識は必要ないかもしれません(たとえば、3Dグラフィックスや物理シミュレーションなどのタスクを実行しない限り、ベクトル代数や計算はおそらく必要ないでしょう)一方のドメインでは、対応する他方のドメインの能力不足と一致します。
もちろん、それはあなたがどんな種類のプログラマになりたいか、あるいは雇用主があなたになりたいどんな種類のプログラマかによります。微積分と代数は不可欠だと思います、統計と線形計画法はあなたのブリーフケースに入れるのに本当に良いツールです、多分分析(微分、積分、関数...)なしで行うことができます。しかし、物事がどのように肌の奥深くまで機能するかを知りたい場合(たとえば、電子機器、または重要なアルゴリズム)、「高度な」数学はどこにでもあります。
私が行ったプログラミングのほとんどは、電磁気学、量子力学、構造力学のようなものを含む研究のための物理シミュレーションに関係していました。問題領域には高度な数学が関連付けられているため、高度な数学を使用せずに解決することは困難です。
だからあなたの質問への答えは-それはあなたがやろうとしていることに依存します。
新しいプログラミング言語を作成する場合は、高度な数学の知識が不可欠です。または、独自のアルゴリズムを記述する必要があります。
ただし、ほとんどの日常的なプログラミング(Webサイトから保険処理アプリケーションまで)では、基本的な数学だけが必要です。
あなたは数学が必要です。プログラミングは数学に過ぎません。理論物理学の発見は、それらが数学的な解決策の観点から説明されない限り、実用的な(適用可能な)意味になりません。それらをコンピューター、より具体的にはプログラミング言語で解釈できない場合、計算的に解決することはできません。したがって、特定の問題を解決するために異なる言語が設計されています。しかし、Java、c、c ++のような汎用プログラミング言語は、データベース、テキストファイルから値を抽出し、Windows(デスクトップ、Web)に置く、操作するなど、同じ問題に対する反復(連続)ソリューションを必要とします。同じ値、時には類似のデバイス(ただし、異なるブランド名、異なるポート、頭痛)からいくつかのデータにアクセスします。ユニタリメソッド、および代数(カウンタ、何らかのロジック)、ジオメトリ(グラフィック)などを含みません。あなたが解決しようとしているものに依存します。
事前代数クラスに入学したのとほぼ同時にプログラミングを始めました。だから、数学がそれほど重要だとは言いませんが、特定の種類のプログラミング、特に機能的なプログラミングには役立ちます。
私はまだ離散数学を取り入れていませんが、このクラスで教えられている数学表記法で書かれたプログラミングに関する多くの理論的なものを見ています。
また、任意のベース、特にベース2、8、および16で何かを計算する方法を知っていることを確認してください。
また、いくつかの概念を実際に私にもたらした1つのクラスは、この事前プログラミングクラスでした。組合、交差点、その他すべての幸福なものを教えてもらいました。ビット単位の数学とほぼ同じです。そして、ブール論理を非常に多く取り上げました。私が最も有用だと考えたのは、複雑なブール文を減らす方法を学んだときでした。これは非常に便利でした:
(x|y) & (x|z) & (x|foo)
に簡略化することができます
x | (y & z & foo)
これは以前はまったく把握していませんでした。
数学的な知識は、グラフィックデザインのスキル、パズルを解く能力、仕事の倫理、その他のスキルや特徴のホストと同様に、プログラマーに役立つことがよくあります。非常に少数のプログラマーが、プログラマーが得意とする可能性のあるものすべてに長けています。 「{ここにお気に入りのプログラミング機能を挿入してください}」とできない限り、「あなたは本物のプログラマーではありません」という形式の声明には同意しません。
しかし、私は数学を行うことができなかったプログラマーに警戒するでしょう。描くことができなかった人よりもそうです。
高等数学は優れたプログラマーであるための要件だとは思わない-いつもそれはあなたがコーディングしているものに依存する。
もちろん、3Dグラフィックプログラミングを使用している場合は、マトリックスなどが必要になります。ビジネスソフトウェアの作成者として、おそらく統計計算が必要になります。
しかし、ほぼ10年間(さらに10年間はアマチュア)プロのプログラマーであることは、「高等数学」であり、定期的に必要なものではありませんでした。すべてのケースの約99.8%で、いくつかのインテリジェントな組み合わせでのプラス、マイナス、除算、乗算です。ほとんどの場合、数学ではなくアルゴリズムに関するものです。
ほとんどのプログラマーにとって、高等数学を学ぶことは重要です。というのは、あるものから別のものへと段階的に進むように論理的に考えるように脳を曲げるからです。
ただし、高校の数学以上のものを必要とするプログラミングの仕事はほとんどありません。線形代数を一度使用しました。微積分を使ったことがありません。私は毎日代数を使います。
私はそれはあなたが何をしようとしているかに本当に依存すると思いますが、私見、CSおよびOS理論はここでの数学よりも重要であり、あなたは本当に彼らが関与する数学のみが必要です。
たとえば、現代のOSの多くのスケジューラーの背後にあるスケジューリング理論と最適化の多くのCSの背景があります。これは数学を必要とするものの例ですが、非常に複雑なものではありません。
しかし、正直なところ、ほとんどの場合、数学は必要ありません。必要なのは、精神的にOR/ANDする能力など、ベース2と16で考える能力を学ぶことです。たとえば、バイトがあり、そのバイト内に2つの3ビットフィールドと2つの無駄なビットがある場合、バイト値が11のような場合にどのビットがどのフィールドにあるかを知ると、使用するよりも少し速くなりますペンと紙。
さて、あなたは多くの応答を生成しました、そして、私はそれらのすべてを読みませんでした。私はこれに関して真っ最中です。プログラマーになるために数学は必要ありません。 Linuxのアセンブラー対デバイスドライバーは、他のものより多かれ少なかれ複雑ではなく、どちらも数学を必要としません。
いずれの場合も、図形やフォームを使用して数学クラスを取得または渡す必要はありません。
プログラミングの問題解決の考え方は数学の解と非常に似ており、その結果、数学はおそらく簡単にやってくると思います。逆に、数学が難しい場合はプログラミングが難しい場合があります。クラスや学位、または紙やトロフィーは必要ありません。
頭の中、紙の上、または電卓を使用して、すぐに16進数から2進数に10進数に変換できない場合は、苦労します。ネットワークやタイミングに関係するその他のことをしたい場合、カーネルドライバーは頻繁に行うが、そうする必要はない。あなたは苦労するでしょう。私は、速度の計算、1秒あたりのビット数、1秒あたりのバイト数、何かをするために必要なメモリの量などに苦労する数学やコンピューターサイエンス、エンジニアリングの学位を持つ人々の非常に長いリストを知っています。ある程度、それはある種のコツと考えられ、他の人はそれに向けて努力しなければなりません。
私の一番下の行は、私が意志の力を信じているということです。あなたがこのようなことを学びたいのなら、それは簡単です。クラスを受講したり、多額のお金を費やす必要はありません。たとえば、linuxやqemuは、かなりの時間、さまざまなasm langaugesなどで忙しくしておくことができます。カーネル開発、組み込みなどのクラッシュ可能な環境。 、しかし、したくない場合は、実行してクラスを取る必要があるとは思わない。その後、いくつかのeeクラス、いくつかのcsクラス、およびいくつかの数学クラスを確実に取得する必要があります。
プログラミングでは、2つの科目を習得するか、少なくとも学ぶ必要があります。プログラミング自体と、プログラムの対象領域。会計ソフトウェアを作成している場合は、会計を学ぶ必要があり、ロボットの運動学をプログラミングしている場合は、順運動学と逆運動学を理解する必要があります。アカウントは基本的な数学のスキルのみを必要とし、他のドメインは他のタイプの数学を使用します。
プログラミングはコンピューターサイエンスのツールです。
プログラミングの多くの分野では、数学は後部座席にあります。クイックソートの方法がわからない場合は、モジュールをダウンロードしてください。楕円曲線を理解していないので、問題ありません。 AES 暗号化モジュールを購入してください。
今、コンピューターサイエンス。はい、より高度な数学が必要です。間違いなし。暗号化、オペレーティングシステム、コンパイラ構築、機械学習、プログラミング言語などはすべて、完全に理解するために何らかの高等数学(計算、離散、線形、複素数)を必要とします。
IMO、おそらくあなたは数学の適性を必要としますが、必ずしもその分野で多くの知識を持っているわけではありません。したがって、数学が得意であるために必要なものは、プログラミングが得意であるために必要なものに似ています。
しかし、一般的に、日常のプログラミングで高度な数学を最後に使用したことは思い出せません。
視点を保つことが重要です。数学、高度な数学、計算などを学ぶことは思考プロセスに最適であり、多くのプログラミングの立場は数学と数学の概念を期待し、利用するかもしれません。しかし、多くのプログラミングジョブは、数学をまったく使用しないか、まったく使用しません。
もちろん、コンピュータサイエンスは数学の分野であるため、多くの数学が必要です。ただし、comp sciの派生物であるプログラミングジョブはほとんどありません。 CSは非常に特殊な分野です。 ITスクールがソフトウェアエンジニアリングをCSとは別の分野として持つようになった理由があります。それらは非常に異なる分野です。
たとえば、Comp Sciは、ほとんどのWebアプリケーションの世界に十分に対応できません。また、ソフトウェアエンジニアリングでは、コンパイラの設計とカーネル開発の準備が整っていません。
いいえ、数学は必要ありません。私は卒業してから何もしておらず、おそらくとにかく私が習得した小さな微積分を忘れていました。
車のように考えてください。トラクション制御やABSブレーキなどの背後にあるのはどれくらいの数学/物理学だと思いますか?たくさん。これらのツールを使用するには、どのくらいの数学を知る必要がありますか?無し。
編集:1つ追加します。ここではおそらく産業が重要です。調査会社で働いているプログラマー、またはその自動車用の組み込み牽引制御システムを書いているプログラマーは、平均的なビジネスツールプログラマーよりも数学が必要になる可能性が高いでしょう。
私はここであなたと一緒にフェンスに座ります...賛否両論の多くの良い議論があり、それらのほとんどすべてが等しく有効です。それで正しい答えはどれですか?
両方...状況に応じて。これは、「あなたが私たちと一緒にいないなら、あなたは私たちに反対している」というケースではありません。
プログラミングの分野をはるかに簡単にする数学の多くの側面があります。幾何学、代数、三角法、線形方程式、二次方程式、微分など。実際、多くの最高性能の「アルゴリズム」はその中心に数学の原理があります。
ジョンが指摘したように、彼は数学の学位を持っていますが、プログラミングの世界ではほとんどその知識を使いません。私は、彼がおそらく考えているよりもはるかに多くの数学を使用していることを提案しますが、無意識に...大丈夫、多分量子力学ではなく、より基本的な原理です。 GUIをレイアウトするたびに、数学的な原則を使用して、審美的に楽しい方法で設計しますが、意識的にそれを行うのではなく、実際に行います。
ビジネスの世界では、私たちがソフトウェアで使用する数学について考えることはめったにありません。そして、私たちが書くソフトウェアの多くの側面では、ビジネスの世界が最新のテクノロジーに追いつくのを助けるために同じ単調なタスクを完了するための単なる標準的なアルゴリズムです利用できます。
ソフトウェアで数学を意識的に使用することなく、キャリア全体をスキップすることは非常に簡単です。ただし、数学を理解していると、プログラミングの多くの側面が簡単になります。
質問は、「プログラミングに必要なのは上級数学ですか?」そしてもちろん、that質問への答えはnoです...暗号化アルゴリズム(魅力的な主題)の作成やクラッキングを始めるか、油圧方程式をMilが指摘した、またはフロー制御システム(私は過去に持っていたように)。しかし、基本的な数学は必要なではないかもしれないが、それはあなたの人生をずっと楽にしてくれるだろうと付け加えたでしょう。
必要!=十分
みんなおいでよ!タイトルには「necessary」と書かれていますが、うまくプログラムできるのはせいぜいsufficient条件だと思います。 5年の経験、CS学位、科学的背景など、十分ではあるが必須ではない条件が十分にあるように。
詩人や英語を専攻すると、優れたAPIデザイナーになるか、アーティストがUI/Webプログラミングに長けていると主張する人もいます。
しかし、これらは明らかに保証ではありません。数学を知っているだけで良いプログラマーにならないかもしれませんが、とにかく他のC++やF#をハックすることができます...
私の反応は絶対にありません。私は25歳以上の間コンピュータープログラマーでした(現在はインドに感謝しています)。そして、私のキャリア全体で、基本的な数学のスキル以上を必要とするプログラムLOGICに出会ったことはありません。基本的な数学のスキルを超える毎日の数学で作業しない限り、高度な数学の必要はありません。企業レベルでは、複雑な数学は、プログラマーに必要な擬似コードを提供する静的担当者または数学者と呼ばれ、両方が最終製品の徹底的なテストで協力します。最終的に、ボールは数学オタクのコートにあります。あなたが数学者/統計学者/上級プログラマーでない限り、どのレベルでも、複雑で高度な数学コンピュータープログラムの期待される結果に責任を持つプログラマーを持つという考えはばかげており、非常に愚かです。
私の経験では、コンピュータサイエンスの学位を取得するための数学の要件は、単に失敗する人を排除するためのものです。 Calculus IおよびIIに合格できない場合、コンパイラ構築、データベース、またはオペレーティングシステムの理論に関する高度なコースに合格することはほとんどありません。
離散数学は非常に役立ちました。私はCalculusを使用しましたが、非常に役立つこともあったかもしれませんが、覚えていません。たとえば、 DIS インターフェイス(回転速度や座標変換などを扱う)を実装しようとしていたとき。 quaternions を説明する本を探して、町中を車で1日運転しました(これはWWW以前)。また、一部のエンジニアが n-linear補間 を暗示するための機能を作成する必要が生じたときもありました。それが何を意味するのかわからない場合は、私もそうではないと信じてください。幸いなことに、それはpost-WWWでした。
私のアドバイスは、汗をかかないことです。 1つまたは2つのプロジェクトに夢中になるかもしれませんが、最近ではそれほどひどくはありません。
コンピューターを使用して、固体力学と熱伝達の問題を解決するときに、多くの数学を使用しました。線形代数、数値法など.
リレーショナルデータベースからWebベースのユーザーインターフェイスに情報を配信するビジネスアプリケーションを作成しているので、その知識を活用することはありません。
私はまだ誰にも良い数学の背景をお勧めします。
離散数学は開発者にとって非常に役立ちます。正式なトレーニングは受けていません。
「 Programming Collective Intelligence 」で説明されているテクニックは、私がMEとして行ったものとはほど遠いもので、現在行っているビジネスアプリに分類される可能性があると思います。 Netflixは確かに素晴らしいビジネスを成し遂げました。このグループインテリジェンスは増加しているようです。
質問に答えるには:no。
数学的才能とプログラミング才能:強い相関、因果関係はほとんどない。
一方が他方の前提条件ではないことは確かであり、数学が非常に不可欠な専門分野(3Dグラフィックス、統計プログラミングなど)でプログラミングしているのでなければ、数学スキルを強化しても優れたプログラマーになることはありません。 )
それはもちろん、数学の背景は確かに傷つかず、場合によっては大いに役立ちます。そして、他の人が指摘したように、数学とプログラミングに関係する思考プロセスは非常に似ています。一方の才能があれば、おそらくもう一方の才能があることに気付くでしょう。
プログラマに数学の要件を推奨する場合、基本的な統計情報が必要です。ほぼすべてのプログラミングジョブには、何らかのレポートが必要です。
数学の必要性は、高度なものや楽しいものをもっと始めようとすると少し増えます。ゲームは非常に数学が重いので、さまざまなアルゴリズムのコストを本当に理解する必要があるパフォーマンス重視のアプリケーションです。
私は数学の学位を取得しており、それが何らかの形で私を助けたとは言えません。 (私は一般的なWebアプリを開発していますが、科学的なものはありません)。私は数学以外の学位を持つ他の開発者と仕事をするのが好きです。なぜなら、彼らは私の「数学」の枠の外で考え、同じことをするように私に強いているからです。
ロングショットでは必要ありませんが、...
些細な例として-ジオメトリを理解していなければ、正方形や長方形で多くのことを行うことはできません。 (すべてのプログラマがジオメトリを持っている/取得するので、これは単なる例です)。
三角法を使用しないと、難しいことがいくつかあります。三角法を理解せずにアナログ時計を描いてみてください-あなたはそれを行うことができますが、あなたが通過しなければならないプロセスは、本質的に三角法を再発明することです。
微積分は興味深いです。ゲームを設計しない限り、おそらくそれを必要とすることはないでしょうが、微積分学はもっと「現実の世界」に作用するものをモデル化する方法を教えてくれます。たとえば、倒れている木をモデル化しようとする場合、アーチに沿ったすべてのポイントで速度を正確にするには、おそらくかなりの計算が必要です。
一方、それは正確であることだけの問題です。微積分でできることは、おそらくループと近似でできることです。
さらに、物事をよりリアルにするには、おそらくフラクタルとより高度な数学が必要になります。
Webサイトとデータベースをプログラミングしている場合、代数101はほとんど必要ありません。
約30年前にゲームの開発を始めた独学のプログラマーとして、できるだけ多くの数学を習得する必要があると断言します。マトリックス、四元数、レイトレーシング、パーティクルシステム、物理エンジンなどのようなものには、十分なレベルの数学理解が必要です。
アーティスト、ゲームデザイナー、レベルデザイナーなどとチームを組んで、ゲームプログラマーとして働いています。
いくつかの数学を知っているチームにsomeoneを持つことは、あらゆる種類のゲームをプレイする人、ターゲットオーディエンスの代表的なメンバー、痛みを伴う制作を経験した人など。
ドメインが十分に近いため、多くの場合、ほとんどの数学を知っているのはプログラマー(場合によってはゲームデザイナー)です。しかし、日々、ゲームプログラマーは3Dジオメトリと(場合によっては)物理学を超える多くの数学を必要としません。
私が研究した数学の中で、統計が最も有用であることがわかりましたが、いくつかの概念が欠けていることがあります。
この質問(かなり多くの質問があります)は、類推で最もよく答えられると思います。
私たちの多くはウェイトを持ち上げます。どうして?私たちがプロの重量挙げ選手になるその日のために準備しているからでしょうか?仕事の要件として重量挙げに遭遇することはありますか?
もちろん違います。それは私たちの筋肉を行使するため、私たちは重量を持ち上げます。それは私たちにフィットと形を保ちます。フィット感のある人は、ハイキング、建設、ランニング、睡眠など、他の分野でパフォーマンスが向上します。
数学を学ぶことは、脳の重量挙げのようなものです。それは心を動かし、形を保ちます。あなたはあなたのキャリアで微積分を決して使うことはできませんが、あなたの脳はそれのためにより良い形になります。
2つのことが思い浮かびます。
一般的なGUIおよびWebアプリケーションでは、基本的な数学の知識のみが必要になります。
一生に一度は、微積分や線形代数を必要とする奇妙なプロジェクトになるかもしれません。
(3Dゲームプログラミングやその他の特定のプログラミング分野を行う場合、毎日それが必要になるかもしれません)
数学とは、スキルそのものに関することと同じくらい考え方です。そして、それでもいくつかのレベルにあります。他の誰かは、数学に共通する分析と抽象化のスキルはプログラミングにとって価値があり、それが一つのレベルであると述べました。また、一方から他方への正確な類似物を含む別のレベルがあることも主張します。たとえば、SQLセマンティクスによって隠されているリレーショナルデータベースの背後にある集合論などです。
非常に多くの場合、「最高の」-私が最もパフォーマンスが高く簡潔であることを意味する-ソリューションは、それらの背後にある数学を少し持っているものです。データ指向プログラミングの問題を行列操作として考え始めると、多くの場合、数学の世界から新しい解決策を見つけることができます。
プログラムするために数学の専門家である必要はなく、誰でも教えることができますが、それは持つ価値のあるスキルの1つです。
Web開発、ビジネスソフトウェアなど、あなたが何をするかによって異なります。この種のものには、数学は必要ないと思います。
コンピュータグラフィックス、オーディオ/ビデオ処理、AI、暗号化などを行う場合は、必要数学の背景、そうでない場合は単純に実行できません。
統計的機械学習技術はますます重要になっています。
これは、数学を知る必要のない良い答えです(地獄、私は基本的なThe Order of Operations:PEMDAS数学の外に出ることはありません)笑、それでも私は常に解決策に到達します。確かに1970年代の数学は、ループなどを避けるために非常に複雑な数式を使用してCPUサイクルを効率的にプログラミングしようとしたプログラマーにとって非常に重要でした。
複雑な数学を使用することを避けるために、コンピューターは100ループまでパワフルであり、長期的にはプログラムを実際に傷つけることはありませんが、もちろん、数学ハハを学習しなくてもオブザーバーとして数学スキルを習得し、効率的なプログラミング能力を向上させます。
あなたが知っているより多くの数学に直面してみましょう。プログラムをより最適化するだけでなく、このクレイジーな数学の方程式のために、不可能なことを述べている記事について読むことなく、プログラム可能なことと不可能なことを理解する可能性が高くなります。
数学を学ぶことは、実際の経験なしに物事がどのように機能するかを理解するのに役立ちます..(これは私の人生に基づいています)。
これが私の例です(圧縮に関する記事)。私はその背後にある数学を理解せずに試行錯誤を繰り返しました。少なくとも700から?欠陥のある/失敗した試行できること(これは再び失敗する可能性があります)の詳細を把握し、700の欠陥のある見方も知っています。
おそらく数学を知っていたなら、おそらくあまりにも多くの数学を知っているために、私はそれらの700の欠陥のある試みを試みることさえしないでしょう。しかし、それほど多くの数学を知らずに選んだ道は、私にとってはるかに楽しく、より教育的です。
しかし、それは私だけです..私は常に人の手です..本の虫ではありません;)
新しい数学的なブレークスルーをもたらすものもあれば、最適化されたソフトウェアの高速化につながるものもあります。
これがあなたにとっての教訓になりますように、皆さんがあなたにとって最適な方法を選択してください。
システムプログラミングはロケット科学ではありません:-)私見、good
プログラマはシステムプログラミングにアプローチできます。ただし、知る必要がある
最も求められているのは、上記の項目のいずれかで正確なコードと能力を必要に応じて詳細に記述することです。
ところで、これは私の個人的な理論、YMMVです。私はまだ自分が優秀なプログラマーだとは考えていません! :-(
あなたがしたいことをするために、あなたは数学を知る必要はありませんが、あなたはそれをたくさん好きにしなければなりません。
ビジネスプログラミング:算術、代数
エンジニアリング:数値解析
科学プログラミング:空は限界
Certianの数学は不可欠だと思います。たとえば、すべてのソフトウェアエンジニアは、 De Morganの法則 および O表記 を知って理解する必要があります。
他の種類は非常に便利です。シミュレーションでは、多くの場合、多くの物理モデリングを行う必要があります。グラフィックス作業をしている場合、座標変換アルゴリズムを書く必要があることがよくあります。私は20年のキャリアの中で、アルゴリズムに入れる定数を把握するために、同時線形方程式を書き、解く必要がある他の多くの状況を経験しました。
私の意見では、この質問にはいくつかの良い点があります。
David Nehmeがここに投稿したように、コンピューターサイエンスとプログラミングは2つの非常に異なるテーマです。
非常に基本的な高校および大学の数学のスキルを持つプログラマーが有能なプログラマーになる可能性は完全にあります。しかし、コンピューターサイエンスの卒業生についてはあまりよくわかりません。
正しく指摘したように、アルゴリズム作成プロセスは、数学の処理方法に非常に関連しています。これが単なる数学的および分析的プロセスの結果である場合でも、アルゴリズムを正しく設計するために達成する必要があります。
また、仕事の説明やスキルに依存するのではなく、あなたが何をしているのかに大きく依存していると思います。たとえば、プログラミングと数学の両方が何らかの効果を生み出すためのツールである場合、あなたは確かに両方の能力を備えている必要があります(つまり、何らかの目的でモデル化プログラムを作成しています)。ただし、プログラミングがあなたの活動の最終目的である場合、数学はほとんど必要ありません。 (つまり、Webアプリケーションを作成しています)
大学では、Knuth、Graham、Patashnikの著書「Concrete Mathematics」を読みました。これは、コンピューターサイエンスの学生向けに選択されたトピックを含む数学の本です。数年後、私は本を再度チェックし、本のすべてのトピックを少なくとも1回使用していることに気付きました(スターリング番号を除く)。
ほとんどの場合、いくつかの数学を知っていると、より少ない作業で、より洗練された問題を解決したり、より高速なソリューションを実装したりできます。また、あなたがしている仕事の種類にも依存します。つまり数学は、エンジニアリングの問題に集中するときよりも、アルゴリズムに集中するときの方が重要です。
プログラマーとしての日々の仕事で高度な数学が必要な場合は、本当にタスクに依存します。私はそれらが必要です。その理由は、配管システムの油圧計算を使用して、配管システムを構築する前にコードで評価する必要があるからです。圧力不足や過圧のため、崩壊する配管システムの近くに立ちたくない。 ;)
他の多くの種類の「現実世界のシミュレーション」では、高度な数学も必要になると思います。
あなたが大学で学ぶことができる唯一の有用なことについては理論的です。
一部のプログラミングでは、数学が最も役立つが、プログラマーではないことを想像しています。便利なダンディ計算機なしで2 + 2を追加できれば幸運です。
プログラミングタスクに依存します。 「データベースからデータを取得し、ウェブサイトに表示する」スタイルのプログラミングをそれほど多くない側に配置し、次に「ビデオゲーム」を反対側に配置します(私はゲームで働いており、ランダムな異なる毎日の数学のフレーバー、そして私がもっと知っていればおそらくより多くを使用するでしょう)。
プログラミングのために数学を学ぶ必要はありません。
しかし、数学を学ぶことはあなたに思考訓練を訓練します。したがって、数学は開発者にとって良いと考えます。
Is Programmng == Math? stackoverflowも参照してください。
プログラミングに必要だとは思いませんが、 線形代数 概念を使用して、複雑な(および時々間違っている)1。グラフィックスやジオメトリ(および一部のソルバー)が機能する場合、 マトリックス の知識とそれらの操作方法も非常に役立ちます。
高度な数学の背景がなくても十分に実行できるプログラミングタスクがたくさんあります。おそらく、利用可能なプログラミングジョブの大部分が高校レベルの数学以上のものを必要とすることはほとんどないと言っても安全でしょう。しかし、新入生の大学の代数の数学レベルをハッキングしてシャトルを宇宙に置くのに役立つソフトウェアを書くつもりはありません。そのため、高度な数学は通常多くのプログラミングタスクには不可欠ではありませんが、より難しい問題では絶対に必要になります。数学を学ぶことは、ほとんどどこでも使用できる貴重な問題解決スキルも教えます。ほとんどの場合それは必要ではないと言うことができると思いますが、それは確かにほぼ常に役立つでしょう。
あなたは多くの数学を必要としません。いくつかの組み合わせ思考は、迅速な実行のために問題を組み立てて軽減するのに役立ちます。乗算できるのは良いことです。あなたはエンジニアです。近似値は問題ありません。
あなたが説明したタスクには、それほど多くの数学は必要ないと思います。しかし、一般的に私は本当の高度なシステムプログラミングのためにあなたを思う:
数学の学位は2つあります。データベースについてもっと知りたい。
私のポイントは、多項式の根を見つけることができるか、sqrt(2)が非合理的であることを証明できることは抽象的な意味では有用ですが、必ずしもあなたがより良いプログラマーになるわけではありません。
いいえ、システムプログラミングなどのために、数学(おそらくバイナリ/ oct/hex/dec表現を除く)を知る必要はありません。
私は数学のトピックに関するいくつかのペットプロジェクトを除いて、プログラミングで高度な数学を使用したことがないことを認めています。
とはいえ、数学を理解するのに十分な明るさの人々と一緒に仕事をするのは楽しいです。複雑で難しいものをマスターすることは、複雑で難しいプログラミングの問題を解決するためにあなたの脳を形にするのに役立ちます。