67

すべてのプログラミングは実際には数学のサブセットであると何度も耳にしました。オブジェクト指向はその根底にあるのは数学に基づいていると示唆する人もいますが、いくつかの明白な例を除けば、関連性がわかりません。

  • 帰納法を使用して再帰アルゴリズムを証明し、
  • 正式な正当性の証明、
  • 関数型言語、
  • ラムダ計算、
  • 漸近的な複雑さ、
  • DFA、NFA、チューリングマシン、および理論計算全般、
  • そして、箱のす​​べてがバイナリであるという事実。

プログラミングにとって数学が非常に重要であることは知っていますが、この「サブセット」ビューに苦労しています。どのようにプログラミングは数学のサブセットですか?

十分に強いつながりがある場合、エンタープライズ/OO 開発に関連する可能性のある説明を探しています。

4

29 に答える 29

83

アルゴリズムなどについての抽象的思考が必要な意味で数学です。
スケジュールの計画、成果物、テストが含まれる場合はエンジニアリングです。
最終的にどうなるかわからないのが芸術です。

于 2008-09-26T03:14:08.587 に答える
56

プログラミングは、応用数学の中でも最も難しい分野の 1 つです。貧しい数学者は純粋な数学者であり続けたほうがよい。

--EWダイクストラ

于 2008-09-26T03:27:24.187 に答える
47

全体として、数学は論理を形式的に成文化したものであり、ソフトウェアで行うことでもあることを忘れないでください。

あなたの質問のトピックのリストには、数学の問題がたくさんあります。私たちはかなり高いレベルの抽象化でプログラミングを行うことができるので、生の数学はあなたを直視しないかもしれません. たとえば、あなたは DFA について言及しました.. 数学を知らなくてもプログラムで正規表現を使用できますが、優れた正規表現エンジンを設計したい場合は、数学の必要性がさらに高くなります。

あなたは興味深い点に到達したと思います。プログラミングは芸術であり科学です。多くの「取引ツール」があり、単純にプログラムを作成するために、必ずしも腰を据えて多くの高レベルの数学を行う必要はありません。実際、プログラミングをしているとき、多くの人は数学やコンピューター サイエンスを実際にはあまり行っていません。

数学が現れるのは、コンピュータ サイエンスの難しい問題を解き始めるときです。深く行けば行くほど、それ自体が肉付けされます..多くの場合、抽象化のレベルが低くなります。

必ずしも作業する必要のないプログラミングの領域もいくつかありますが、それらにはより多くの数学が含まれます。たとえば、正式な数学がなくても言語を学習し、いくつかのアプリを作成することは確かにできますが、アルゴリズム分析では、応用数学がなければそれほど遠くまで到達することはできません.

于 2008-09-26T03:26:40.570 に答える
33

プログラミングについては言及していませんが、アイデアは依然として関連しています。

于 2009-12-08T18:07:26.400 に答える
32

OK、私は大学で数学と CS を専攻していました。セット A が Math でセット B が CS の場合、A は B と交差します。これは部分集合ではありません。

コンピュータ サイエンスの父と母の多くが、チューリングやディクストラのような数学者であることは間違いありません。インターネットの創設者のほとんどは、数学、物理学、または工学の博士号を取得していました。コンピューター サイエンスの中核となる概念のほとんどは数学に由来しますが、プログラミングの行為は実際には数学ではありません。数学は私たちの日常生活に役立ちますが、この 2 つは同じではありません。

しかし、コンピューターの背後にある最初の理由が、物事を計算することであったことに疑いの余地はありません。私たちはそこから非常に短い時間で長い道のりを歩んできました。

于 2008-09-26T03:27:35.623 に答える
24

アインシュタインは 1917 年に有名な数学者として知られていました。物理学が単なる応用数学ではないことを一般大衆が認識できるようになったのは、広島でのことでした。

人は何かを理解できないとき、それを自分が理解しているものの一種として理解しようとします。彼らは類推によって考えます。プログラミングは、数学、工学、科学、芸術、工芸、建設の分野として説明されてきました...これらのどれも完全に間違っているわけではありません。これらすべてから借りています。本当の問題は、プログラミングの分野が誕生してまだ 50 年ほどしか経っていないことです。人々はそれを精神的な分類法に統合していません。

于 2008-09-26T03:33:48.307 に答える
19

ここには多くの混乱があります。

まず第一に、「プログラミング」は (現在) 「コンピューター サイエンス」と同じではありません。Dijkstra が自分自身を「プログラマー」と呼んだとき (多かれ少なかれ、タイトルを発明した)、彼は CRUD アプリケーションを送り出すのではなく、実際には応用コンピューター サイエンスを行っていました。これで混乱しないようにしましょう。今日、ビジネス環境のほとんどのプログラマーが行っていることと、コンピューター サイエンスとの間には大きな違いがあります。

ここで、コンピューター サイエンスは数学の一分野であるという議論を行うことができます。しかし、Knuth が指摘しているように (彼の論文 "Computer Science and its Relation to Mathematics" は、彼のSelected Papers on Computer Scienceにまとめられています)、数学はコンピュータ サイエンスの一分野であると主張することもできます。

実際、Knuth はその領域をうまく説明しているので、数学とコンピューター サイエンスの関係について考えている人には、この論文を強くお勧めします。

しかし、元の質問に戻ると、実践者にとって、「エンタープライズ/OO 開発」は数学からかなり離れていますが、それは主に、操作の下位レベルで関与する深刻な数学のほとんどが (コンパイラによって) 抽象化されているためです。 、オペレーティング システム、命令セットなど)。同様に、自動車の運転には、内燃機関の物理に関する高度な知識は必要ありません。当然のことながら、より効率的な車を設計したいのであれば....

于 2008-09-26T06:50:38.553 に答える
10

数学の定義に形式論理のすべての形式が含まれており、プログラミングがコード内に存在する論理と計算によってのみ定義されている場合、プログラミングは数学 QED のサブセットです ;-)

しかしこれは、絵を描くことは単に表面に顔料を塗ることだと言っているようなものです - それは芸術、洞察、直感、創造的なプロセス全体を完全に無視しています。

同じ理由で、音楽は数学のサブセットであると主張することができます

ノーと言わざるを得ません。プログラミングは数学のサブセットではありません。プログラミング数学のサブセットを使用しますが、数学以外のスキル/才能も必要とします [作曲のように]

于 2008-09-26T03:23:35.960 に答える
6

免責事項: 私は IT コンサルタントとして働いており、主にポータルとアーキテクチャ関連の開発を行っています。私は心理学の学位を持っています。私は大学で数学を勉強したことがありません。そして、私は自分の仕事を成し遂げます。そして通常はうまくいきます。なんで?コードを書くために数学を知る必要はないと思うからです(「重い」数学のもののように)。分析的思考、問題解決スキル、高度な抽象化が必要です。しかし、数学はあなたにそれを与えません。これは、同様のスキルを必要とする別の分野にすぎません。心理学の研究は、ユーザビリティの問題やデータ ストレージに対処する日常業務にも当てはまります。言語学と記号論も役割を果たします。

でも待って、まだ私を炎上させないで。コンピュータに数学がまったく必要ないと言っているわけではありません - 明らかに、暗号化アルゴリズムやハードウェアなどを設計する際には、真の数学のスキルが必要です - しかし、多くのプログラマーとして、中/低レベルの言語 (フーリエ変換、ハフマン木、メビウス ストリップの背後にある数学的原理を実際に理解する必要はありません...他の人に処理させてください。その上に価値を構築させてください。私バカじゃないよ。線形アルゴリズムと指数アルゴリズム、データ構造などの違いは知っています。クイックソートや気の利いた新しいビデオ圧縮技術を書き直すことに興味はありません。

于 2008-09-26T08:18:55.393 に答える
5

まぁ、それはさておき…!

数学は、次のようなプログラミングの多くの側面で使用されます。

  • 効率的でスマートなアルゴリズムの作成
  • Big O表記について
  • セキュリティ (RSA など)
  • 他にもたくさん... プログラミングが生き残るには数学が必要だと思います。しかし、私はそれをサブセットとは呼びません。吹きガラスが物理学の性質を利用しているようなものですが、そのアーティストは物理学者を名乗っていません。
于 2008-09-26T03:15:10.067 に答える
4

私たちが行うすべての基礎は数学です。

幸いなことに、それを行うために数学自体が得意である必要はありません。車を運転したり、飛行機を飛ばしたりするのに物理学を理解する必要がないのと同じように。

于 2008-09-26T03:35:35.713 に答える
3

プログラミングと純粋数学の違いは状態の概念です。

http://en.wikipedia.org/wiki/Dynamic_logic_(modal_logic)をご覧ください。時間の経過とともに変化するものを数学的に分析する方法です。また、Hoare トリプルは、プログラムの入出力動作を形式化する方法です。プログラムの順次構成と代入の仕組みを扱ういくつかの公理を持つことで、数学的に厳密な方法で時間の経過とともに変化する状態を完全にうまく扱うことができます。

あなたが知っている数学が不十分な場合は、分析したいものに対処するために新しい数学を「発明」してください。ニュートンとライプニッツは分析のためにそれを行いました(別名微積分だと思います)。計算とプログラミングのためにそれをしない理由はありません。

于 2009-02-19T13:21:37.233 に答える
2

数学+芸術+論理

于 2008-09-26T04:16:33.807 に答える
2

私は言うだろう...

特に理論レベルでは、部分的に数学です。効率的な検索/並べ替え/クラスタリング/割り当て/偽装アルゴリズムを設計することを想像してみてください。それはすべて数学です...数論から統計までの範囲を実行します。

それは部分的にエンジニアリングです。複雑なシステムが理想的なレベルのパフォーマンスと信頼性を達成できることはめったになく、ソフトウェアも例外ではありません。多くのソフトウェア開発は、信頼性の低いハードウェアと (エヘム) 人間に直面して堅牢性を達成することです。

そしてそれは部分的に芸術です。創造的で特異なソフトウェア設計は、多くの場合、すばらしい新しいアイデアを思いつきます。アセンブリ言語、マルチタスク オペレーティング システム、グラフィカル ユーザー インターフェイス、動的言語、Web などです。

ちょうど私の2¢...

于 2008-09-26T03:58:13.287 に答える
2

数学は、論理的な証明という形で、プログラミングに似ていると実際に主張することができます。

Curry-Howard 通信を確認してください。おそらく数学者が物事を見る方法の方が多いでしょうが、これはことわざの釘を頭にぶつけていると思います.

于 2008-09-26T06:07:09.937 に答える
2

あなたがリストしたトピックは、理論的コンピューター サイエンスのトピックであり、THAT は純粋数学の分野です。プログラミングは、理論的なコンピューター サイエンスを使用する応用科学です。プログラミング自体は数学の一分野ではなく、プログラミング言語の元になっているラムダ計算/計算理論/形式論理/集合論などです。

また、私はダイクストラに完全に同意しません。それは自画自賛であるか、ダイクストラが誤って引用されている/文脈から引用されている. 純粋数学は非常に難しい分野です。それは非常に抽象的であるため、応用数学のどの分野も難しさで匹敵するものはありません。想像力の飛躍が必要な分野の一つです。最初の学位はコンピュータ サイエンスで、理論的な CS と、プログラミング、OS、コンパイラなどの応用分野に重点を置いていました。また、電気工学の学位も取得しました。これはおそらく工学の中で最も難しい分野であり、マクスウェルの方程式、制御理論、偏微分方程式全般などの応用数学の難しい分野に取り組みました。また、応用数学と純粋数学の研究も行っており、今日に至るまで、応用ははるかに簡単であることがわかっています。純粋数学者に関しては、

今では、誰かが応用から解き放たれた微積分学を 1 年か 2 年勉強して、純粋数学は簡単だと結論する傾向があります。彼らは何について話しているのか分かりません。アプリケーションから切り離された微積分やトポロジーを研究しても、純粋な数学者が何をするかはわかりません。これらの定理を実際に証明する作業は非常に難しいため、コンピュータ科学者にその違いを指摘してもらうことにします:「P = NP の場合、世界は私たちが通常想定している場所とは大きく異なる場所になるでしょう。 「創造的な飛躍」に特別な価値はなく、問題を解決することと、解決策が見つかったらそれを認識することの間に根本的なギャップがないこと. 交響曲を鑑賞できる人は誰でもモーツァルトであり、段階的な議論に従うことができる人は誰でもガウス. ..」

于 2011-06-20T16:08:18.623 に答える
2

プログラミングが数学のサブセットであると聞いたことはないと思います。あなたが提供するリンクでさえ、プログラミングへの提案されたアプローチに過ぎず(数学のサブセットであると主張していません)、wikiページにも多くの意見の相違があります.

プログラミングには(少なくともいくらかの)応用数学が必要です。数学は、プログラムやプログラムの断片を記述および分析するのに役立ちます。プログラミングは数学と非常に密接な関係にあり、数学とその概念を多用しています。でもサブセット?番号。

誰かが実際にそれが何らかの明確な理由を持ったものであると主張するのを見てみたい. 私は今まで持っていないと思います

数学を使って何かを推論できるからといって、それが事実上数学的な対象であるとは限りません。数学は、内燃機関、放射性崩壊、およびジャグリング パターンについて推論するために使用されます。数学を使うことは数学をすることではありません。

于 2008-09-26T03:31:54.443 に答える
2

プログラミングは、もともと数学の準サブセットとして始まった可能性がありますが、時間が経つにつれて分野の複雑さが増し、プログラミングは情報処理と計算のための優れた抽象化を作成する技術と科学になるようになりました。

プログラミングには、優れた設計と実装のための数学、工学、美的感覚が必要です。アルゴリズムは数学の延長であり、システム工学の側面は他の工学分野とある程度重複しています。しかし、数学も他の工学分野も、新しく進化する問題を解決するために非常に多くの異なるレベルで使用および適応できる、複雑で柔軟でありながら理解可能な抽象化に対する同レベルの必要性を持っていません。

最初に関数ライブラリ、次にクラス/コンポーネント ライブラリ、そして最近ではデザイン パターンとサービス指向アーキテクチャの作成につながったのは、便利で柔軟で動的な抽象化の必要性です。後者は設計に重点を置いていますが、プログラミングの問題と解決策の間に高レベルの抽象化ブリッジを構築する必要性が高まっていることへの反応です。

これらすべての理由から、プログラミングは数学のサブセットでもスーパーセットでもありません。それは、他の分野よりも深いルーツを持つ数学を使用する別の分野です。

于 2010-06-06T16:38:19.023 に答える
2

数学は、現実世界の問題を解決するために抽象的なレベルで使用する一連のツールをプログラマーに提供すると思います。

于 2012-11-19T14:59:27.530 に答える
1

数学は真理の最も純粋な形です。すべてが数学から受け継がれています。

アーメン。

于 2010-10-16T05:42:38.197 に答える
1

私がプログラマーになった理由の 1 つは、数学が好きではないからです。私は数学自体に問題はありませんし、概念的には問題ありませんが、手で計算するのは好きではありません。数学の問題が何であるかをコンピューターに伝えて計算を任せることができるとわかったとき、生涯にわたる情熱とキャリアが生まれました。

質問に答えるために、私の母校によると、数学 == プログラミングは、数学の要件を満たすために C++ の紹介を受けることができたからです。

編集: 私の学位は電気通信であり、当時は1学期の標準的なリベラルアーツ数学の要件しかありませんでした.

于 2009-02-19T13:55:08.870 に答える
1

第4世代言語に移行するにつれて、プログラミングは以前ほど数学に関係しなくなったと言えます。アセンブリは数学、C# に関するものであり、それほど重要ではありません。考え?

于 2008-09-26T03:22:11.703 に答える
1

上司から渡されたデザインスペックが欲しいだけなら、たいした数学じゃないけど、そんな仕事は全然楽しくない…。抽象化、グラフ、時には数論、問題によっては微積分など。個人的には、プログラミングに携わるほど、プログラミングの数学的な側面が見えてきます。ただし、ほとんどの場合、図書館から本を手に取って、必要なことの基本を調べることができますが、それには事前に数学的な把握が必要です.

その背後にある数学を理解せずに、「良い」アルゴリズムを設計することはできません。Google で検索しても、ここまでしか表示されません。

于 2008-09-26T04:52:02.643 に答える
1

プログラミングと純粋数学の違いは状態の概念です。プログラムは、ロジック (数学) を使用して状態間を遷移するステート マシンです。状態間の遷移に使用される実際のロジックは、通常は非常に単純です。そのため、数学の天才であっても、プログラマーとして必ずしもそれほど役立つとは限りません。

于 2008-09-26T18:40:00.803 に答える
1

プログラミングは広すぎるテーマです。数学(論理)だけでなく、心理学、言語学などにも基づいた優れたソフトウェア。アルゴリズムは数学の一部ですが、アルゴリズム以外にもプログラミング関連のものがたくさんあります。

于 2008-09-26T05:52:38.113 に答える
1

数学者として、数学がプログラミングと同等ではないことは明らかですが、どちらの分野でも問題を解決するために使用されるプロセスは非常に似ています.

高レベルの数学の問題を解くには、分析的思考、問題を解決するための可能な方法のツールボックス、その分野での経験、および他の数学者が同意するように答えを構築するための形式化された方法が必要です。問題を解決するための特に巧妙で抽象的な、またはエレガントな方法を見つけた場合、仲間の数学者から賞賛を得ることができます。特に難しい数学の問題については、問題を段階的に解決し、推測と証明と呼ばれるものを使用して段階的な議論を成文化することができます。

プログラミングにも同じ一連のスキルが必要だと思います。プログラミングでは、同じ一連の原則が問題の解決と解決策の提示に適用されます。プログラミングのジレンマに対する部分的な解決策がある場合、それを個人のライブラリの一部として含め、後で別のより大きな問題の一部として使用します。これらのスキルは、数学で使用されるスキルに非常に似ているようです。

数学とプログラミングの主な違いは、数学よりもプログラミングの異なる分野間で後者の方が多くの共通点があることです。数学の 2 つの分野は、表現方法と分野を伝えるために使用されるものが非常に大きく異なる場合があります。対照的に、プログラミングの構造は、少なくとも私には、多くの異なる言語で非常によく似ています。

于 2008-09-26T06:02:15.563 に答える
0

数学は強力であり、プログラミングも強力です。数学がプログラミングのサブセットである場合、プログラミングは数学のサブセットであると述べるのも同様に真実です。

数学は言語を使用して記述され、しばしば書き留められます。したがって、数学もライティングのサブセットですか?

歴史的には、数学はコンピューター プログラミングよりも前に登場しましたが、その後はおそらくリストとプロセスが数学よりも先行していました。どちらも数学として、またはプログラミングと同様に考えられます。

確かに、プログラミングは数学を使って表すことができるので、プログラミングが数学のサブセットであるということにはいくつかの根拠があります。しかし、コンピュータープログラムは、基本的な公理から無限で、ある程度定義されているだけでなく、相互に使用するより高いレベルの構造を定義できるようにするだけでなく、紙の上で数学を行うときに通常行うように、情報を象徴的に表現する数学を実装することもできます。構成を超えた他の種類の関係、図の描画をサポートし、システムの拡張を可能にします。数学も同様にプログラミングのサブセットです。

数学は単語などの構造を表すことができますが、数学は設計上、数値に関するものです。たとえば、文字列は数学よりもプログラム的です。

于 2011-02-26T17:11:09.477 に答える
0

プログラミングと音楽を比較するのも興味深いです。とにかく、英国には、関連するロジック、パターンなどのために、コンピューティングを想定した音楽資格に基づいて申請者を受け入れるコンピューティングベースの学部の大学コースがあります。

于 2010-03-13T01:35:13.327 に答える
-5

それは半分数学で、半分人間の話です。

于 2008-09-26T03:32:31.353 に答える