プログラミングには数学が必要ですか?[閉まっている]


117

ベテランのプログラマーに高度な数学が必要かどうか、大学時代に偶然友達と議論しました。彼はこれに激しく反論していた。彼は、プログラマーは高校や新卒の大学の数学からの基本的な数学の知識だけが必要であり、それ以上のことはできず、ほとんどすべてのプログラミングタスクは高度な数学を必要とせずに達成できると述べました。しかし、アルゴリズムは基本的であり、プログラマーにとって必須の資産であると彼は主張しました。

私のスタンスは、すべてのコンピュータサイエンスの進歩はほとんど数学の進歩にのみ依存していたため、数学に関する完全な知識があれば、プログラマーが現実世界の困難な問題に取り組んでいるときに非常に役立ちます。

私はまだどちらの論拠が正しいのか解決できません。あなた自身の経験から、あなたのスタンスを教えていただけますか?


7
私は10年後、自分のキャリア全体で上級数学を使ったことがないことを伝えるために、数学の先生に電話をかけました。ディックムーブ、わかっていますが、すばらしい質問です!一を足す。
Chris McCall、


この質問に対する最高投票数の回答をご覧ください。
Boris Stitnicky 2013年

のではなく。閉じる、これはプログラマーに移行する必要があります。
Chris Cudmore 2013年

回答:


111

提起されたままの質問に答えるには、「いいえ、プログラミングには数学は必要ありません」と言わざるを得ません。しかし、他の人がこのスレッドで示唆したように、数学を理解することと「アルゴリズム的に考える」ことができることの間には相関関係があると私は信じています。つまり、数量、プロセス、関係、証明について抽象的に考えることができるようになります。

プログラミングを始めたのは9歳の頃で、その段階までに数学をたくさん学んだと言っても過言ではありません。ただし、少しの努力で、変数、ループ、gotoステートメント(Vic 20 BASICでしたが、まだダイクストラを読んでいませんでした)と基本的な座標ジオメトリを理解して、グラフィックを画面に表示することができました。

私はついにコンピュータサイエンスのマイナーで純粋数学の優等学位を取得しました。私は主に分析に焦点を当てましたが、離散数学、数論、論理、計算可能性理論についてもかなり勉強しました。統計学、確率論、ベクトル分析、線形代数からいくつかのアイデアをプログラミングに適用できることを除いて、学部の学位の間の私のプログラミングとその後に行った商業および研究プログラミングに直接適用できる数学はほとんどありませんでした。

しかし、数学が要求する正式な思考方法(慎重な推論、反例の検索、公理的基礎の構築、概念間のつながりの発見)は、大規模で複雑なプログラミングプロジェクトに取り組んだときに非常に役立ちました。

アスリートがスポーツのためにトレーニングする方法を考えてみましょう。たとえば、サッカー選手は基本的なサッカーのスキルにトレーニング時間の多くを費やすことは間違いありません。ただし、一般的なフィットネスを向上させるために、ジムで自転車やローイングマシンで時間を過ごしたり、ウェイトをしたりすることもあります。

数学の勉強は、ウェイトトレーニングやクロストレーニングに例えられ、プログラミングの精神力とスタミナを向上させることができます。基本的なプログラミングスキルを練習することは絶対に不可欠ですが、数学を学ぶことは、コア分析能力を向上させる信じられないほどのメンタルワークアウトです。


6
数学はあなたの精神力のためのウエイトトレーニングだけでなく、新しい問題や解決策への扉も開きます。たとえば、画像処理のインターンシップでは、PDEを完全に理解せずにノイズ除去アルゴリズムを実装することはできません。結果のコードはシンプルですが、非常に正確でした。そして、数学は私たちをそこに導いたものです。さらに驚くべきことは、これらの式の美しさです。1つの小さなPDE式は、数ページのコードに変換できます。最初の式がないと、最終的にどのようになってしまうかを理解するのは困難です。
Joe

プログラミング数学なので、プログラミングに数学必要ありません。それは良い数学でも悪い数学でもかまいませんが(オランウータンの長い呼び出しがOok言語に文字変換される場合など)、プログラマーが何かのオブジェクトモデルを設計するときはいつでも、zeは(通常は無意識のうちに)数学の動作を実行しています。そのため、繰り返しになりますが、プログラミングのために数学の本を読む必要はありませんが、プログラミングが数学であることには何の変化もありません(ユークリッドが言ったように)、それへの王道はありません。
Boris Stitnicky 2013年

56

プログラミングに高度な数学は必要ない場合がありますが(高度な数学機能をプログラミングしている場合を除く)、プログラミングと数学の思考プロセスは非常に似ています。あなたは既知の事柄(公理、以前に証明された理論)のベースから始めて、新しい場所に到達しようとします。ステップをスキップすることはできません。手順をスキップする場合は、空白を埋める必要があります。それは2つを信じられないほど類似させる重要な思考プロセスです。

また、数学者とプログラマーはどちらも、抽象的に批判的に考えます。実世界のものは、オブジェクトと変数によって表されます。具象から抽象に変換する機能も2つのフィールドをリンクします。

どちらかが上手だとしたら、おそらくもう一方が上手になる可能性は非常に高いです。


そして、多くのクロスワードやスクラブルをプレイする人は、そうでない人よりもプログラミングが得意であると言えるでしょう。この関係は、厳密な依存関係ではなく、可能性についてのようです。
リアム

数学の問題を解くことの厳密さと規律は、プログラミングにつながります。問題を分解し、最初の明白な方向からアプローチし、次に両方の分野のより創造的な方向からアプローチする能力が必要です。
Bramha Ghosh、

4
私が高く評価している2人の優れたプログラマーは、コンピューターサイエンスを勉強していませんでしたが、数学者として訓練を受け、キャリアパスを変更しただけです。ちなみに、Stepanovはかつて、数学に取り組んでいるときに「公理から始めるのではなく、最終的に公理で終わる」と述べました。:D
ジョー・ピネダ

@Liam-短期的には、パターンマッチングとメモリ内の物事のジャグリングについてです。両方の活動にはそれらのスキルが必要です。
jcolebrand 2010

+1「一方が上手だとしたら、もう一方も上手になる可能性が非常に高い」
するThorbjörnRavnアンデルセン

39

コンピュータサイエンス!=プログラミング

ええ、真剣に、私は英語と心理学を専攻していたプログラマーとコンピューターサイエンスを専攻したプログラマーを知っています。私が開発者として尊敬している非常に有名な人には、CSのバックグラウンドがありませんでした。たとえば、ラリー・ウォール(パール)は言語学者でした。一方、作業しているドメインについて何かを知っていると、少なくともデータに意味があるかどうかを確認でき、顧客/ユーザーが本当に欲しいものにドリルダウンできるようになるので役立ちます。そしてはい、計算の複雑さと効率的なデータ構造とプログラムの正確さの問題があります。これはコンピュータサイエンスで学んだことであり、ほとんどすべての分野で知るのに役立ちますが、必要でも十分でもありません。


12
私が聞いた中での最高の引用は、「コンピュータサイエンスはコンピュータについての天文学よりも望遠鏡についてのもの」(Dijkstra)
tloach 08年

5
stackoverflow.comは、基本的にこのワンライナータイプの回答を克服するために作成されたと思いますが、この役に立たない回答をトップに引き上げた志を同じくする15人がいます。私はあなたと個人的なことはありませんが、私はあなたの答えを「攻撃的」としてフラグを立てました。少なくとも私にはそうです。
simsim 2008年

2
@simsim:CSの学位はなんとなくプログラミングに関するものだと人々が考えるのは不快だと思います。
08年

3
@simsim:JoelとJeffがこのWebサイトを作成したときに何を考えていたかは関係ありません。すべては、プログラマーが互いに助け合うコミュニティを作ることです。デビッドの短い答えは的を得ていると思います。+1
スコッティT

@スコッティ:「プログラマーが互いに助け合うコミュニティを作ることについてのすべて」であれば、フォーラムとメーリングリストで十分でした。多分私は私の応答で少し苛酷でした、しかしもちろん編集する前に、15人のユーザーが完全に無知な「答え」に投票するのを見るのは驚くべきことでした。:-)
simsim 2008年

29

私はあなたが数学必要だと言う最初の人になると思います。他の人が言ったように、数学は開発の特定の側面にとってそれほど重要ではありませんが、批判的思考と構造化分析の基礎は非常に重要です。

さらに、数学は、スケジューラ、最適化、並べ替え、プロトコル管理、およびコンピュータの他の多くの側面のようなものに入る多くの基本を理解する上で重要です。計算レベルに含まれる数学は複雑ではありませんが(ほとんどが高校の代数)、理論とアプリケーションは非常に複雑になる可能性があります。微積分を通じて数学をしっかり理解することは非常に有益です。

あなたはそれなしで絶対にうまくいくことができます、そしてあなたは数学の完全な知識をあなたに止めさせるべきではありません、しかしあなたがチャンスまたは傾向があれば私は可能な限り多くの数学を計算します、計算、数値理論、線形代数、組合せ論、実用的なアプリケーション、それはすべて、幅広いコンピュータサイエンスで実用的なアプリケーションと理論的なアプリケーションの両方を持っています。

私はフェンスの両側で非常に成功した人々(数学に強い焦点を当てていない人々、および物理学または数学の学校に通った人々)を知っていますが、両方のグループで数値問題を楽しみ、アルゴリズムと数学理論について学びました。


同感です。それなしでうまくいくことができますが、彼/彼女の決定を後悔するでしょうか?あなたが適度に刺激的で挑戦的な仕事をすることを期待するなら、あなたが習得したそれらの数学のスキルは確かにあなたを助けます。
Andras Vass

けっこうだ!GrayWizardxなど:自己学習者として、資料を読む上で何をお勧めしますか?私は若い頃に数学が教えられた殺意のない悪いやり方に大いに気を失いました。私は他の所で非難したくはありませんが、数学は悪質に提示されました。今こそ償還の時です。ここで概説されている数学(微積分、線形代数、離散数学など)を自分で学ぶのはどのくらい簡単ですか?このアプローチに推奨される特定の教科書はありますか?大学の学位はもうオプションではありません!
Emmel

1
@Emmel、私は実際に "The Manga guide to Math"と "The Manga guide to Calculus"をBarnesとNobleで実際に見ました、そして私は先日 "完全な白痴の線形代数ガイド"を見たことがあることを知っています。実際のリソースについては、いくつかの優れた数学のウェブサイト(学生向けなど)が使用されていましたが、まだどれだけあるかわかりません。私がたまに行うことの1つは、コミュニティカレッジに行って数学のクラスを「監査」し(合格/不合格の場合はそれを取り)、復習することです。5-6年でそれをやったことはありませんが、前回はかなり役に立ちました。
GrayWizardx

26

私は数学の学位を持っていますが、自分のキャリアの中でその数学を1回要求したことを思い出せません。これは、論理的思考のために心を訓練するという点で役立ちましたが、流体力学、量子論、またはマルコフ連鎖を使用するコードは何も記述していません。(最後に来る可能性が最も高いと思います。)

ほとんどの基幹業務開発者は、ほとんどの場合、高度な数学を必要としません。三角法を知ることは役立つ場合があり、数学的に記述されたアルゴリズムを実装するのに十分な数学を確実に理解できることが重要な場合がありますが、それを超えていますか?いや。

ほとんどのプログラマーはコンピューターサイエンスを進歩させていないことを忘れないでください-彼らはアプリケーションを構築しています。現代の車を運転するために高度なエンジニアリングを知る必要はありませんが、その車は高度なエンジニアリングによってほぼ確実に改善されています。


しかし、あなたが言ったことのほとんどに同意しますが、プログラミングの多くの側面は、一般的な数学の原理を理解することで著しく容易になるとは言えませんか?同じ値に到達するために、アルゴリズムよりプログラムの方がはるかに簡単な場合があります...その式を知っている限り
BenAlabaster

@balabaster:時々-しかし、それはそれほど頻繁には起こりません。同様に、式を使用するために事前に式を知っている必要はありません。ビーイング有能なあなたがそれらを見るときに数式を理解することができますが、めったにIMO度レベルの数学そのものを必要としないので、数学では、良いです。
Jon Skeet、

11
数学の学位?次に、それは単なる数字ではないことを知っています。私は2つの数学の学位を持っており、コンテンツを頻繁に使用しています。論理を分析/単純化するブール代数、DSL構築のオートマトン/言語理論、big-Oパフォーマンス分析の代数など
joel.neely

14

高度なロジック(離散)数学があると本当に役立つと私は主張します。セット理論と一緒に。一般的なコンピュータープログラムを扱う場合、これらの分野は非常に役立ちます。しかし、私が大学で取った他の多くの数学は微積分であり、私の知る限り、使用法は非常に限られていました。プログラミングの90%(またはそのようなもの)は非常に単純な数学を使用してビジネスアプリを実行しているので、ほとんどの場合、数学の知識はほとんどなくても問題はありません。ただし、ブール代数、論理、離散数学、集合論を十分に理解すれば、次のレベルに進むことができます。


14

ここで木目に反して「はい」と言います

私は土木工学からプログラミングに切り替えました(Concrete Sucks!)。私の数学の背景は、通常の1年目のもの、2年目および3年目の微積分(Diff EQ、ボリューム統合、シリーズ、フーリエおよびラプラス変換)および数値解析コースで構成されています。

私の数学はコンピュータプログラミングには信じられないほど欠けていることがわかりました。私が見逃している離散数学と論理の領域はすべてありますが、私は教科書、Wikipedia、Wolframの広範なライブラリーがあるために生き残ることができます。ほとんどの高度なアルゴリズムは高度な数学に基づいており、大規模な調査を行わずに高度なアルゴリズムを開発することはできません(本質的には、コースの半分に相当する作業に相当します)。巨人の肩の上に立つ数学的な基盤がない。


平均的なプログラマーは実際にいくつの基本的なアルゴリズムを書いていますか?プログラミングジョブの80%には、基本的な代数以外の数学は含まれていないと思います。
dbkk 2008年

@dbkk:平均的なプログラマーの最も一般的なタスクは、オブジェクトモデル(あるドメインの「ビジネスロジック」)の設計です。そして、そのようなプロセスは数学にほかなりませんが、タスクを実行する人には一般的に反映されません。
Boris Stitnicky 2013年

14

それはあなたが何をしているかに依存します。多くの3Dプログラミングを行う場合、3Dジオメトリの知識は確かに必要です。同意しませんか?;-) JPGなどの新しい画像形式やMP3などの新しいオーディオ形式を作成する場合、コサイン変換またはフーリエ変換を理解できないと、これらは最も非可逆圧縮が基本となるため、かなり失われます。 。数学をよく知っていれば、他の多くの問題をよりよく解決できます。

他に多くの数学を必要としないプログラミングタスクもたくさんあります。



9

ええ、市販のプログラミングをしているのであれば、既製のソフトウェアで高度な数学を行う必要はありません。

ただし、次のようなハードコアなものを扱う場合は、

  • ロボットを制御するための軌道の計算
  • 不確実性と自動推論をサポートするAIのようなアプリケーションの作成
  • 3Dモーションとグラフィックスで遊ぶ

いくつかの高度な数学の知識が役立つ場合があります。そして、それが「この世界の外」の問題であるようではありません。

私は、オフィスに必要な紙の量を「予測」しようとするソフトウェアを作成しなければなりませんでした(そして、値を概算するための最良の方法を見つけるだけでは地獄でした)。

ただし、高度なものを使用すると迷子になるので、注意が必要です。正しく表示するためだけに動的メニューの状態を保存するためにチューリングを使用した友人がいます-うーん...彼は想像力をかき立てすぎた。


ファイルを圧縮したり、MP3ファイルを編集したり、Webサイトを一緒に投げるだけでなく、実際にコンピュータの動作を理解する必要があるものを追加することもできます。
08年

4
これを行うために彼はどのようにチューリングを使用しましたか?Ouijaボードまたはseance?
Jared Updike、2011年

8

どのようなプログラミングですか?

私の商業経験では、高度な数学は必要ありませんでしたが、これはあなたがいる分野に大きく依存しています。

コンピュータグラフィックスには、高度な数学が大量に必要です。多くの学術用コンピュータプログラミングには、高度な数学が必要です。

つまり、数学が得意な人とプログラミングが得意な人の間には相関関係がある傾向があります。

私はこの希望に満ちた答えが役に立てば幸いです。


6

数学は、一部の分野の開発者には必要ですが、他の分野ではほとんど役に立ちません。

あなたがゲーム開発者であり、物理学をよく扱う必要がある場合、数学を理解することが重要です。高度なビジュアルコントロールを使用している場合-ジオメトリがなければ多くのことはできません。財務計算を計画している場合は、統計についての確かな知識があると本当に助かります。

一方、過去5年間に私は2つか3つのプロジェクトしか持っていませんでした。これらのうち、Google検索が役に立たなかったのは1件だけでした。

結局のところ、財務計算でさえ、クライアントがあなたに代わって実行する数式を提供することがよくあります。

したがって、「応用ソフトウェア」ビジネスをしている場合は、数学の学位を決して使用しないでしょう。アカデミックソフトウェアを使用している場合、数学は非常に重要です。


「ゲーム開発者」に「シミュレーション開発者」を追加します。93年に、Quaternionsがどのように機能するかを説明するのに十分なほど進んだ数学の本を見つけようと町中を運転して、デッドレコニングアルゴリズムを適切にコーディングできることを覚えています。今日はインターネットをありがとう!
TED

6

クリスに同意します。「はい」とも言います。しかし、これは上記のようにあなたの市場に依存します。基本的な「既製の」アプリケーションや日常の作業に役立つ書き込みツールを単に作成している場合は、数学はそれほど重要ではありません。

カスタムソフトウェアソリューションのエンジニアリングには、多くの問題解決と批判的思考が必要です。数学の背景が存在するときに最も確実に強化されるスキル。私はコンピューターエンジニアリングの学位を取得して数学を専攻しました。なぜ私が今日ここにいるのかについて、すべての数学志向の背景を評価しています。

それは私の2セントです。上記を読むと、多くの人が同意しないことがわかります。数学のバックグラウンドなしではこれらのスキルを身に付けることができないと言っているのではなく、スキルはそのようなバックグラウンドを持つことの副作用であり、ソフトウェアにプラスの影響を与える可能性があると述べています。


6

私の経験では、プログラミングには数学が必要ですが、それを免れることはできません。プログラミング全体は数学に基づいています。

問題は白黒ではなく、よりカラフルです。問題は、数学が必要かどうかではなく、どれだけ必要かです。より高いレベルの数学は、より多くのツールを提供し、さまざまな道にあなたの心を開きます。

たとえば、加算と減算のみがわかっている場合はプログラムできます。乗算が必要な場合、多くの加算を実行する必要があります。乗算により、繰り返し加算が簡単になります。代数を使用すると、プログラムに実装する前に数学を簡略化できます。線形代数は、画像を変換するためのツールを提供します。ブール代数は、これらすべてのifステートメントを削減するためのメカニズムを提供します。

そして、数学、ロジック、哲学の兄弟を忘れないでください。ロジックを使用すると、caseor switchステートメントを効率的に使用できます。哲学は、あなたが修正しているそのコードを書いた人の考えを理解するのに役立ちます。

はい、あなたはプログラムを書くために多くの数学を必要としません。プログラムによっては、他のプログラムよりも多くの計算が必要になる場合があります。より多くの数学の知識はあなたがより少ない理解を持っている人々よりあなたに利点を与えます。これらの時代に、人々はそれらの仕事を得るために得ることができるすべての利点を必要としています。


6

私はプロとして8年間プログラミングをしており、趣味として12歳のときからです。

数学は必要ありません、論理は必要です。数学はひどく役に立ちますが、それが必要ではないと言うことは、人を殺すために銃は必要ではなく、ナイフを使うことができると言うようなものです。まあ、それは本当ですが、その銃はそれをはるかに簡単にします。

最小限の要件がいくつかありますが、それらはすでに満たされているはずです。基本的な代数式と表記法、および一般的なコンピューターの同等機能を知っている必要があります。たとえば、指数が何であるか(3から3は27)を知る必要があり、一般的なコンピューター表現は3 ^ 3です。代数の一般的な表記法は言語によって異なりますが、それらの多くはやや統一された方法論を使用しています。その他(LISPを見て)はそうではありません。また、操作の順序も知っておく必要があります。

アルゴリズム的な考え方を理解する必要があります。最初にこれ、次にこれは、この計算で使用されるこれを生成します。おそらく、これを理解しているか理解していないかと思います。理解していない場合、ジャンプするのはかなり難しいハードルです。これはあなたが「得る」ものであり、実際に学ぶことができるものではないことがわかりました。逆に、一部の人々は芸術を「取得」しません。彼らは画家になるべきではありません。また、CSカリキュラムでは、これが機能しない理由を理解できない学生もいます。x= z + w; z = 3; y = 5; 彼らが追加を理解していないということではなく、明確な表現の要件を理解していないということです。彼らがそれを理解していれば、コンピューターもそうでしょう?上記の3行の何が問題であるかが分からない場合は、プログラマーにならないでください。

最後に、プログラミングの領域にある数学を知る必要があります。会計ソフトウェアは、基本的な代数で止まる可能性があります。物理学をプログラミングしている場合は、3次元ジオメトリ(ユークリッド)の物理学(ゆるい)と数学を知っている必要があります。アーキテクチャソフトウェアをプログラミングしている場合は、三角法を知る必要があります。

ただし、これは数学よりもさらに進んでいます。どのドメインをプログラミングする場合でも、基本をしっかりと理解する必要があります。言語分析ソフトウェアをプログラミングしている場合は、確率、統計、文法理論(複数言語)などを知る必要があります。

多くの場合、特定のドメインは、あなたが無関係であると考える知識を必要とするか、またはその恩恵を受けることができます。たとえば、オーディオソフトウェアをプログラミングしている場合、実際には、波形を処理するために三角法を知る必要があります。

マグニチュードも物事を変更します。1000項目の財務データセットを並べ替える場合、それは大きな問題ではありません。ただし、1,000万レコードの場合は、実際にベクトル演算を理解し、バイナリレベルでの並べ替えを深く理解することで大きなメリットが得られます(システムはどのようにアルファベット順に並べ替えますか?「a」が「b」よりも小さいことをどのように知るのですか? '?)

プログラマーとして、一般的な知識ベースが爆発的に増加することに気づくでしょう。なぜなら、各プロジェクトは、プログラミングの直接の領域の外でより多くの学習を必要とするからです。あなたが自己学習についてきしむか怠惰で、週に10時間以上を費やして本質的に「宿題」をするのが嫌いなら、プログラマーにならないでください。

思考演習が好き、学習が好き、電卓なしの数学やスケッチパッドなしのデザインについて考えることができる場合、人生や趣味に幅広い趣味がある場合、自己批判的で捨てることができる場合 'お気に入りのアイデア、完璧なものが好きなら、プログラマーになりましょう。この決定は数学に基づくのではなく、論理的に考えて学ぶ能力に基づいてください。これらは重要です。数学は単なる副産物です。


5

もちろん、それはあなたがどのようなプログラマーになりたいか、またはあなたの雇用主があなたにどのようなプログラマーになりたいかによります。微積分と代数は必要不可欠だと思います。統計および線形計画法は確かにブリーフケースに入れておくのに適したツールです。おそらく分析(導関数、積分、関数...)がなくても実行できます。しかし、物事がどのように機能するかを知りたい場合(たとえば、電子機器、またはいくつかの非自明なアルゴリズム)、「高度な」数学は、どこにも行かずにはいられないものです。


5

私が行ったプログラミングのほとんどは、電磁気学、量子力学、構造力学などを含む研究のための物理シミュレーションを含んでいました。問題ドメインには高度な数学が関連付けられているため、高度な数学を使用せずに問題を解決するのは難しいでしょう。

だからあなたの質問への答えは-それはあなたが何をしようとしているのかに依存します。


5

新しいプログラミング言語を作成する場合は、高度な数学の知識が不可欠です。または、独自のアルゴリズムを作成する必要があります。

ただし、ほとんどの日常のプログラミング(Webサイトから保険処理アプリケーションまで)では、基本的な計算のみが必要です。


5

数学(単なる算術ではない)または論理的背景がしっかりしている人は、アルゴリズム、変数の使用、条件付き推論、およびデータ構造にうまく対応できます。

  • 誰もがUIを設計できるわけではありません。
  • 誰もが効率的なコードを作成できるわけではありません。
  • 誰もがコメントして明確に文書化できるわけではありません。
  • 誰もが良いアルゴリズムを実行できるわけではありません

数学はあなたをある意味で助けますが、ある意味でのみ助けます。


5

高度な数学の知識が優れたプログラマーの要件であるとは思いませんが、個人的な経験に基づいて、高度な数学をよりよく理解しているプログラマーは、優れたプログラマーでもあると思います。これは単に、より論理的な考え方によるものか、数学的な問題を解決した経験によるより論理的な見通しによるものかもしれません。


5

数学の基本的な概念は、アルゴリズムの考案、理解、実装、使用です。数学ができない場合は、これらのことを実行できないためです。これらを実行できない場合は、効果的なプログラマーになることはできません。

一般的なプログラミングタスクは、特定の数学的知識を必要としない場合があります(たとえば、3Dグラフィックスや物理シミュレーションなどのタスクを実行している場合を除いて、おそらくベクトル代数や微積分は必要ありません)。一方のドメインでは、もう一方のドメインの対応する能力の欠如と一致します。


5

数学はプログラムを作成するためのツールボックスです。コーメンのアルゴリズム入門をお勧めします。より「数学的な」ものに触れます。

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

4

よりよい数学が優れたプログラマーになるための要件であるとは思わない-いつものように、それはあなたがコーディングしているものに依存する。

もちろん、3Dグラフィックプログラミングをしている場合は、行列などが必要になります。ビジネスソフトウェアの作成者として、おそらく統計計算が必要になります。

しかし、ほぼ10年間(さらに10年間のアマチュア)のプロのプログラマーである「より高い数学」は、私が定期的に必要とするものではありません。すべてのケースの約99.8%で、いくつかのインテリジェントな組み合わせにおけるプラス、マイナス、除算、乗算のみです-ほとんどの場合、それはアルゴリズムではなく、数学に関するものです。


4

ほとんどのプログラマにとって、より高い数学を学ぶことは重要です。それは、あることから別のことへと移行するために、段階的に論理的に考えるように脳を曲げるからです。

ただし、プログラミングの仕事はほとんどなく、高校の数学以上のものは必要ありません。線形代数を一度使ったことがあります。私は微積分を使ったことがありません。毎日代数を使っています。


4

数学の知識は、グラフィックデザインのスキル、パズルを解く能力、労働倫理、およびその他の多くのスキルと特性と同様に、プログラマーにとってしばしば有用です。プログラマが得意とするあらゆることを得意とするプログラマはほとんどいません。「ここに好きなプログラミング能力を挿入できない限り、あなたは本当のプログラマーではありません。 }。

しかし、私は数学をすることができなかったプログラマーを警戒するでしょう。描けなかった人よりも。


4

それは本当にあなたが何をしようとしているのかに依存すると思いますが、私見、CSとOSの理論はここでの数学よりも重要であり、実際に必要なのは数学だけです。

たとえば、最新のOSの多くのスケジューラの背後にあるスケジューリング理論と最適化のCSの背景はたくさんあります。これは、非常に複雑なものではありませんが、数学を必要とするものの例です。

しかし、正直なところ、ほとんどの場合、数学は必要ありません。必要なのは、精神的にOR / ANDする能力など、ベース2と16で考える能力を学ぶことです。たとえば、バイトがあり、そのバイト内に2つの3ビットフィールドと2つの無駄なビットがある場合、バイト値が11のような場合、どのフィールドがどのフィールドにあるかを知ると、使用するよりも少し速くなります。ペンと紙。


キューイング理論を勉強したことがありますか?メモリーマネージャーと、開発者にどちらか一方を選択させる統計モデルを研究したことがありますか?私は必ずしもあなたの答えの矢面に同意しないが、あなたの過度に単純化する。
San Jacinto

@サン:私は単純化しすぎていると確信していますが、ほとんどのシステム開発者はこのレベルでこれらのことを知る必要はないと思います。最初の2度は基本レベルで、博士号は少し深く勉強しましたが、決して得意ではなかったので、専門家に任せたいと思います。私が知っていたOSの人々は、私を驚かせた数学のスキルを持っていました。
Uri

これは非常に有効だと思います。システムプログラミングとOSプログラミングを区別する必要があると思います。しっかりと織り込まれたコンセプトですが、それでも異なります。
San Jacinto

4

代数学の前のクラスに入ったのと同じくらいにプログラミングを始めました。そのため、特定の種類のプログラミング、特に関数型には役立ちますが、数学がそれほど重要であるとは言えません。

私はまだDiscrete Mathを受講していませんが、このクラスで教えられている数学表記で書かれたプログラミングに関する理論的なものがたくさんあります。

また、任意のベース、特にベース2、8、16で何かを計算する方法を知っていることを確認してください。

また、私に本当にいくつかの概念をもたらしたクラスの1つは、この事前プログラミングクラスでした。ユニオン、インターセクション、その他すべての幸せなことを教えてもらいました。ビット単位の数学とほぼ同じです。そして、ブール論理を非常に重くカバーしました。私が最も有用だと思ったのは、複雑なブール文を削減する方法を学んだときでした。これは非常に便利でした:

(x|y) & (x|z) & (x|foo)

に簡略化できます

x | (y & z & foo)

私は以前はまったく理解していませんでした。


4

さて、あなたはいくつかの応答を生成しました、そして私はそれらすべてを読みませんでした。私はこれの真ん中です、プログラマーになるために数学を必要としないのは確かです。Linuxのアセンブラーvsデバイスドライバーは、他のものと同じくらい複雑ではなく、どちらも数学を必要としません。

形や形では決して、このために数学のクラスを取ったり渡したりする必要はありません。

プログラミングの問題解決の考え方は、数学の解法の考え方と非常によく似ているので、結果として数学は簡単に理解できると思います。逆に、数学が難しい場合、プログラミングは難しいかもしれません。クラスや学位や紙やトロフィーは必要ありません。

頭の中で、紙の上で、または計算機を使用して、16進数から2進数に10進数にすばやく変換できない場合は、苦労することになります。ネットワーキングやその他のタイミングを必要とする場合は、カーネルドライバーが実行することが多いですが、そうする必要はありません。あなたは苦労するつもりです。レートの計算、ビット/秒、バイト/秒、何かを行うために必要なメモリの容量などに苦しんでいる数学の学位やコンピューターサイエンス、工学の学位を持つ非常に長いリストを知っています。ある程度は、ある種のコツと他の人が努力しなければならないある種のコツと考えられるかもしれません。

私の要点は、意志の力を信じていることです。もしあなたができることを学びたいなら、それはそれと同じくらい簡単です。クラスを受講したり、多額の費用をかけたりする必要はありません。たとえば、linuxやqemuは、かなり長い間忙しい状態を維持できます。さまざまなasm言語など。カーネル開発や組み込みなどのクラッシュ可能な環境。 、しかし私はあなたが走り去り、あなたがそうしたくないのならどんなクラスも受ける必要があるとは信じていません。必要な場合は、eeクラス、csクラス、および数学クラスをいくつか受講してください。


これは炎の餌ではありませんが、現実です。プログラミングの観点からデジタルエレクトロニクスおよびソフトウェアエンジニアリングについて知る必要のあるすべてのことを要約することができます。0、1、または、またはではない。これらの5つは、デジタルエレクトロニクスとすべてのプログラムが動作するものです。高速のナンドゲートの大きなボックスで何でも構築できます。
old_timer

4

数学が必要です。プログラミングは数学に他なりません。理論的物理学の発見は、それらが数学的解法の観点から説明されない限り、実用的な(適用可能な)意味合いにはなりません。それらがコンピュータ、より具体的にはプログラミング言語で解釈できない場合、それらは計算で解決できません。したがって、特定の問題を解決するために異なる言語が設計されています。しかし、java、c、c ++のような汎用の幅広いプログラミング言語の場合、私たちのプログラミングタスクの多くは、データベース、テキストファイルからの値の抽出、ウィンドウ(デスクトップ、Web)への配置、操作などの同じ問題に対する反復的な(連続的な)ソリューションを含みます同じ値、時々同様のデバイスからのいくつかのデータへのアクセス(ただし、異なるブランド名、異なるポートおよび頭痛が与えられる)など、単一の方法以上のものを含まない、


3

IMO、あなたはおそらく数学の適性を必要としますが、必ずしもその分野の知識はあまり必要ありません。したがって、数学が得意になるために必要なことは、プログラミングが得意になるために必要なことと似ています。

しかし、一般に、日々のプログラミングで最後に何らかの高度な数学を使用したのを思い出せないので、違います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.