it-swarm.com.de

Was hat Mathematik mit Programmierung zu tun?

Ich habe gerade ein Diplom in Softwareentwicklung begonnen. Im Moment fangen wir mit basic Java und so weiter an (also könnte man von unten sagen)) - was in Ordnung ist, ich habe keine Programmiererfahrung, außer zu wissen, wie man "Hello World" macht "in Java.

Ich höre immer wieder, dass Mathematik für das Codieren relevant ist, aber wie ist es so? Welche allgemeinen Beispiele würden zeigen, wie Mathematik und Programmierung zusammenpassen oder voneinander abhängig sind?

Ich entschuldige mich dafür, dass meine Frage vage ist. Ich bekomme kaum eine ungefähre Vorstellung von der Art von Welt, in die ich als Code-Affen-Student eintrete ...

91
Rory

Zunächst einmal: Ich bin ein Mathematiker - ein professioneller (insofern werde ich dafür bezahlt, dass ich Mathe mache). Ich bin kein Programmierer. Ich programmiere etwas, aber definitiv von der Sorte Cargo Cult (siehe ersten Kommentar zu https://tex.stackexchange.com/q/451/86 und meiner Antwort) und nichts dergleichen das würde mich normalerweise auf diese Seite bringen (tatsächlich habe ich mich hier registriert, um diese Antwort zu posten, nachdem ich einen Link dazu im TeX-Chatraum gesehen habe).

Die Zusammenfassung meiner Antwort lautet: Mathematik programmiert .

Ich habe kürzlich einen Mathematikkurs für eine nicht-mathematische Gruppe von Studenten unterrichtet. Sie waren der Programmierbereich. Ich fand das fantastisch! Endlich würde ich in der Lage sein, Menschen Mathematik beizubringen, die bereits verstanden die Grundideen hatten und die bereits ein rudimentäres Toolkit für Mathematik hatten. Ich war unglaublich enttäuscht, als ich fragte, wie viele von ihnen tatsächlich ein Programm geschrieben hatten und irgendwo zwischen 0 und 1 eine Antwort erhielten.

Bevor ich fortfahre, sollte ich einige Dinge klären. Es gibt Bereiche der Mathematik, die sich direkt mit der Programmierung befassen und mit der Bewertung von Algorithmen und der Klassifizierung von Sprachen und dergleichen zu tun haben. Ich spreche nicht darüber. Es gibt auch ein Programm, das versucht, die gesamte Mathematik in eine formale Sprache zu übersetzen, die von einem Computer ausgewertet werden kann. Dies ist ein bisschen näher an dem, worüber ich spreche, aber selbst wenn ich mich darauf konzentriere, würde der Hauptteil dessen, was ich zu sagen versuche, fehlen. Die Mathematik, die ich mache, und die Programmierung, die ich mache, sind fast völlig themenunabhängig. Die Verbindung zwischen ihnen ist auf einer anderen Ebene.

Ich möchte mit dem Kommentar zur Hauptfrage beginnen:

Wenn das Mathe macht, dann ist jede menschliche Aktivität eine Form von Mathe. Wenn dies der Fall ist, hat die Wortmathematik keine nützliche Bedeutung, da sie nicht zur Unterscheidung einer Aktivität von einer anderen verwendet werden kann.

Ja, das macht Mathe. Aber "Mathe" ist immer noch ein nützliches Wort, denn wie das Lied sagt: "Es ist nicht das, was du tust, es ist die Art, wie du es tust." Ich würde sagen, dass ich Mathe mache, wenn ich mich etwas nähere auf mathematische Weise. Manchmal ist das "Hardcore" -Mathematik: Definitionen formulieren, Theoreme beweisen. Manchmal ist es nicht. Manchmal schreibt es alberne kleine Programme, damit meine Kinder ihre Rechtschreibung lernen können.

Das hilft mir die Mathematik beim Programmieren:

  1. Abstraktion Dies ist wahrscheinlich die wichtigste übertragbare Fähigkeit aus der Mathematik. Damit meine ich die Fähigkeit, alle unnötigen Dinge zu entfernen und sich auf die wichtigen Eigenschaften zu konzentrieren.

  2. Perspektive Wenn ich nur eins wählen könnte, was alle meine Schüler lernen sollten, wäre dies: Die Fähigkeit den Standpunkt zu ändern, um dem Problem zu entsprechen. Wir behandeln dies üblicherweise in der linearen Algebra mit Basisänderungsformeln (die zu schrecklichen Matrizen und schrecklichen Komplikationen führen), aber es ist viel anwendbarer als das. Im Kern ist es die Idee, dass nur weil Ihnen etwas auf eine Art und Weise präsentiert wurde, es nicht so sein muss, wie Sie damit arbeiten. Dies trennt die Sicht auf das Ding selbst von der Art und Weise, wie es präsentiert wurde. Dies kann äußerst praktisch sein: Es geht darum, etwas nützlich oder effizient zu machen. Wenn ich eine Liste von Vektoren habe und es effizienter ist, sie als Liste von x-Koordinaten und als Liste von y-Koordinaten zu speichern, so sei es.

  3. Form versus Funktion Ausgehend von oben; Wenn eine Sache auf viele verschiedene Arten präsentiert werden kann, ist es nicht mehr fair zu sagen, dass eine bestimmte Präsentation die Sache ist. Um dieses Lied noch einmal falsch zu zitieren: "Es ist nicht was du bist es ist was du tust" das zählt.

Ich könnte weitermachen, aber das sind diejenigen, die mir in den Sinn kommen.

Nun gibt es wahrscheinlich viele (negative) Reaktionen auf das, was ich bisher geschrieben habe. Eine wird sein: "Das ist keine Mathematik, das ist nur ein guter Sinn." (oder schlechter Sinn), auf die ich mich auf meine obige Bemerkung beziehe, die mit dem Gefühl übereinstimmt, dass "jede menschliche Aktivität eine Form der Mathematik ist". Ein anderer wird sein: "Das ist nicht die Art von Mathematik, die in der Frage gemeint ist." Dies ist mit ziemlicher Sicherheit wahr, und hier habe ich tatsächlich viel mehr Sympathie mit der Person, die sagte: "Zumindest habe ich die Mathematik seit 10 Jahren nicht mehr berührt." Er oder sie liegt natürlich falsch, sie machen seit 10 Jahren Mathe, denn wann immer sie ein Programm geschrieben haben sie haben Mathe gemacht. Sie haben es einfach nicht bemerkt. Und hier kommen wir zu dem Punkt, warum ich mich über die (leider nicht realisierte) Möglichkeit gefreut habe, Studenten, die bereits Programmierer waren, Mathematik beizubringen.

Ich benutze tatsächlich einige "echte Mathematik" in meinen Programmen. Ich habe kürzlich einen lustigen 3D-Form-Explorer codiert, bei dem mithilfe von Mathematik die Projektionen und anderen Transformationen ermittelt wurden, die ich auf meine Daten anwenden musste. Ich war leicht amüsiert darüber, dass ich tatsächlich Quaternionen codierte! Aber natürlich war die Mathematik, um die es ging, trivial im Vergleich zu der Mathematik, die ich mache, wenn ich arbeite. Es war "Rückseite des Umschlags" Zeug. Diese Art von Mathematik, dann stimme ich dem Gefühl zu, dass Sie es aufgreifen, wenn Sie es brauchen, und wenn Sie etwas Komplizierteres brauchen, als Sie auf Wikipedia finden können, dann finden Sie einen echten Mathematiker, der es für Sie erledigt. Damit Sie es jedoch können abholen, wenn Sie es brauchen, müssen Sie etwas gelernt haben. Das Ding ist vielleicht nichts, was Sie jemals tatsächlich benutzen, aber wenn Sie gelernt haben, dass etwas es umso einfacher macht, das zu erfassen, was Sie später im Leben tatsächlich benutzen. Hier bin ich mit Coder nicht einverstanden: Sie müssen einige Mathematik lernen, wenn Sie jemals any Mathematik verwenden wollen, und Sie müssen es lernen = von der mathematischen Seite (was übrigens nicht bedeutet, Theoreme zu beweisen).

Und so schließlich zur "Mathematik ist Programmierung". Sie können all diese Dinge lernen, wenn Sie ein guter Programmierer sind. Und wenn Sie diese Dinge gelernt haben, werden Sie die Mathematik viel einfacher finden, weil Sie verstehen werden, dass wenn wir über einen Vektor in einem Vektorraum sprechen, dies nur eine Instanz der Klasse Vector ist, was bedeutet, dass wir dies tun können all die Dinge, die Vector mit dieser Instanz macht: Addieren, Subtrahieren, Skalieren und so weiter. Das ist warum ich Programmierern gerne Mathematik beibringen würde. Aber als Mathematiker würde ich sagen, dass das zuerst von diesen, "Abstraktion", in der Mathematik leichter zu lernen ist als in der Programmierung, weil Mathematik das Streben nach Abstraktion ist. Wann immer wir ein Verhalten sehen, besteht unser Training immer darin, zu fragen: "Was ist es an dem Ding, das es dazu bringt, sich so zu verhalten? Was wäre, wenn ich ein anderes ähnliches Ding nehmen würde, würde es sich auf die gleiche Weise verhalten? Wie viel von dem, was dieses Ding ist." müsste ich verlieren, damit es sich nicht mehr so ​​verhält? " (Dies auf das Äußerste zu führen, führt zu "Hundertfüßer-Mathematik" - Suche nach dem Begriff). Aber wir machen das nicht mit (nur) "realen" Objekten (was auch immer sie sind), wir machen das mit Dingen, die bereits abstrahiert wurden.

Das hat lange genug gedauert, also lassen Sie mich mit einem der klassischen Witze der Mathematiker schließen:

Ein Mathematiker und ein Physiker besuchten beide ein Seminar über ein neues Modell mit 24-dimensionalem Raum. Danach diskutierten sie darüber und der Physiker bemerkte: "Das war wirklich schwer. Ich meine, wie visualisiert man den 24-dimensionalen Raum?" worauf der Mathematiker antwortete: "Oh, es ist einfach. Visualisiere einfach den n-dimensionalen Raum und setze dann n = 24.".


Hinzugefügt am 2012-03-2

Zu dieser Antwort gab es einige Kommentare, die unterschiedliche Ansichten zum Ausdruck brachten. Diese wurden nun von einem Moderator nach dem Verständnis gelöscht, dass ich versuchen würde, sie in meine Antwort aufzunehmen (oder darauf zu antworten).

Ich bin mir jedoch nicht sicher, ob ich das kann. Wenn ich diese Kommentare und den Rest dieser Seite lese, kann ich nur zu dem Schluss kommen, dass es ein großes Missverständnis darüber gibt, was Mathematik eigentlich ist. Außerdem fühle ich mich nicht kompetent genug, um es zu erklären. Glücklicherweise hat sich bereits jemand mit Lockharts Klage verbunden, daher werde ich die Erklärung darauf verschieben. Ich hätte es vielleicht anders ausgedrückt (als ich in einem wissenschaftlichen Umfeld aufgewachsen bin, hätte ich den experimentellen Charakter der Mathematik stärker betont), aber ich glaube nicht, dass ich es sagen könnte besser .

Ich denke immer noch, dass ich etwas hinzufügen kann. Neben den Missverständnissen darüber, was Mathematik ist, gibt es auch Missverständnisse darüber, was "Mathematik machen" bedeutet. Ich sehe zwei fast widersprüchliche Standpunkte:

  1. In der Mathematik geht es um Gleichungen und Formeln. Es besteht also keine Notwendigkeit, es zu studieren, da Wikipedia existiert (dies ist fast das Gegenteil von Eulers apokryphe Herausforderung an Diderot ).

  2. In der Mathematik geht es um Theoreme und Definitionen. Es ist also nicht nötig, es zu studieren, da Programme niemals etwas beweisen (was ungefähr so ​​vollständig ist wie ... hier einen Lieblingsfehler einfügen).

Während sich die beiden Standpunkte widersprechen, landen sie am selben Ort: Es macht keinen Sinn, wenn ein Programmierer Mathematik lernt - und mit Sicherheit nicht von einem Mathematiker! Was wissen sie über irgendetwas? Alles, was ein Programmierer wirklich wissen muss, kann in Wikipedia gefunden oder von jemand anderem abgeschnitten werden.

Oben habe ich mich als Cargo Cult Programmer beschrieben. Ich wette, die meisten von Ihnen hatten ein privates Kichern vor sich hin und dachten: "Ah ja, ich wette, ich weiß, wie Ihre Programme dann aussehen." Sie haben sich wahrscheinlich ein bisschen selbstgefällig und überlegen gefühlt (obwohl ich sicher bin, dass Sie sich schlecht gefühlt haben, weil Sie sich selbstgefällig und überlegen gefühlt haben).

Was ich oben beschrieben habe, ist Frachtkultmathematik.

Wenn ich also sage, dass Sie ein bisschen Mathematik lernen sollten, um zu verstehen, wie Mathematik funktioniert, sage ich das aus genau dem gleichen Grund wie Sie, wenn Sie ein bisschen Code gesehen haben, den ich geschrieben habe: "Wie viel einfacher ist Ihr Leben wäre, wenn Sie aufhören würden, Code aus StackOverflow auszuschneiden und einzufügen, und nur ein wenig darüber lernen würden, wie man es richtig macht. ".

Das Wichtigste ist jedoch, dass Sie es von Mathematikern lernen sollten. Warum so? Hier ist eine Analogie. Die Sprache, die ich am besten beherrsche, ist TeX. (Sagt wirklich alles!). Angenommen, ich möchte etwas mehr über TeX erfahren, und es kommt einfach so vor, dass Don Knuth in der Stadt ist und angeboten hat, einige Tutorials zu TeX zu geben. Oder ich könnte einfach auf Wikipedia darüber lesen. Oder vielleicht sind es Perl und Larry Wall oder C # (ist das der richtige?) Und Jon Skeet. Es mag gut sein, dass diese Leute nicht die besten sind Lehrer, aber sie machen das sicher in der Menge wieder wett, die sie kennen!

Und genau das sind Mathematiker. Wir sind die Leute, die die eigentliche Sprache schreiben und dann die Bibliotheken schreiben, die Sie verwenden. Natürlich müssen Sie nicht haben wissen, wie man einen Satz beweist - Sie werden keine Bibliothek schreiben! Wenn Sie jedoch ein wenig darüber wissen, wie wir denken, kann dies Ihnen helfen, zu verstehen, warum wir die Bibliothek so geschrieben haben, wie wir es getan haben, und wenn Sie verstehen, dass es Ihnen möglicherweise hilft, sie besser zu nutzen.

Es gibt einen Mittelweg zwischen dem Nachschlagen von Gleichungen in Wikipedia und dem Beweisen der Poincaré-Vermutung, ebenso wie - um sich auf Lockharts Klage zu beziehen - einen Mittelweg zwischen "Ich weiß nicht wirklich viel über Kunst, aber ich weiß, was ich mag". und Monet zu sein und zwischen "Wo ist der 'JEDER' Schlüssel?" und Don Knuth zu sein. Wenn Sie noch an der Universität sind, haben Sie die großartige Gelegenheit, von Leuten zu lernen, die Experten auf ihrem Gebiet sind und - aus irgendeinem Grund - bereit sind, ihre Zeit damit zu verbringen, es Ihnen zu erklären.


Der andere Punkt, den ich etwas näher erläutern wollte, war, warum Sie als Programmierer keine Angst haben sollten, ein bisschen mehr Mathematik zu lernen. Es sind weder die tiefen Verbindungen noch die Nützlichkeit. Es ist so, dass Ihre Fähigkeit, einen Computer zu programmieren, Ihnen direkt beim Erlernen von Mathematik helfen kann. Ich möchte nur einige erwähnen.

  1. Variablen verstehen. So viele Menschen werden durch einfache Aussagen wie "Sei n eine natürliche Zahl ..." verwirrt. Oder "Lassen Sie epsilon> 0". Es gibt Stellen in der Mathematik, an denen es wichtig ist, sich an den Bereich einer Variablen zu erinnern. Dies alles ist in der Programmierung alltäglich. Wenn Sie lernen, eine mathematische Aussage in ein Programm zu übersetzen, fällt es Ihnen viel leichter, den Überblick darüber zu behalten, was was ist.

  2. Die Art des Beweises. Wenn Sie jemals einen Test geschrieben haben oder ein Programm geschrieben haben, das von jemand anderem verwendet werden soll, dann verstehen Sie den Kern der Beweise. Wenn Sie das tun, müssen Sie wissen, dass was auch immer der Benutzer eingibt, Sie können damit umgehen (fügen Sie hier die obligatorische xkcd-Referenz ein). Das ist alles ein Beweis! Eine Demonstration, die was auch immer den "Benutzer/das Universum" einfügt, wird die Aussage halten. Experimentalisten werden sich auf "Wenn es unter normalen Umständen funktioniert, ist es wahr" stützen, aber Programmierer wissen, dass es immer dieses Kind gibt, das Alt + G + Umschalt + ÅØÆ versucht, nur um zu sehen, was passiert.

  3. TROCKEN. Tut mir leid, dass ich Ihnen das mitteilen muss, aber wir haben es erfunden, nicht Sie. Wir haben uns seit Jahrtausenden "nicht wiederholt". Deshalb habe ich eine Kopie von Euklids Elementen in meinen Regalen und es ist immer noch nützlich.

Und es gibt noch mehr. Wenn ich ein bisschen mehr über Programmierung wüsste, würde ich ein Buch mit dem Titel "Mathematik für Programmierer" schreiben, in dem das Ziel nicht darin bestand, "Die Mathematik, die Programmierer kennen sollten" zu lehren, sondern "Mathematik, die jeder kennen sollte, aber für Programmierer optimiert". . Aber ich werde wahrscheinlich nie genug über Programmierung wissen, um es zu schreiben - es sei denn, jemand bietet an, mit mir zusammenzuarbeiten!


Ich werde es dort lassen. Wenn ich mehr darüber nachdenken würde, würde ich wahrscheinlich ändern, was ich geschrieben habe. hoffentlich würde ich es besser erklären. In einem Monat könnte ich sogar Teilen davon nicht zustimmen. Wenn jemand weiter argumentieren oder etwas anderes kommentieren möchte, ist es wahrscheinlich am besten, dies in den Kommentaren hier nicht zu tun. Sie wissen, wo Sie mich finden können .

139
Andrew Stacey

Sie sind nicht so eng verwandt . Für die Programmierung ist es wichtig, sich mit Mathematik vertraut zu machen - insbesondere mit den Zweigen, die beispielsweise die Leistung von Algorithmen betreffen. Die einfache Tatsache ist jedoch, dass es keinen Zweig der Mathematik gibt, der Ihnen sagt, dass Singletons beispielsweise eine schrecklich schlechte Idee sind. oder wann Sie die Vererbung der Komposition vorziehen oder ob Sie diese Flexibilität wirklich benötigen und sich nicht wiederholen müssen und Dutzende anderer zentraler Programmieranforderungen.

Die Mathematik kann möglicherweise ausdrücken, was Ihr Programm tut, aber sie kann Ihnen mit Sicherheit nicht den wartbarsten, für den Menschen lesbaren und praktikablen Weg aufzeigen .

27
DeadMG

Mathematik und Programmierung hängen auf zwei Arten zusammen.

Eine davon ist, dass Mathematik verwendet werden kann, um über Computerprogramme nachzudenken. Es kann bei der Beantwortung von Fragen wie "Wie ändert sich die Laufzeit meines Programms, wenn sich die Eingabedaten ändern?", "Wird mein Programm garantiert eine Antwort auf mein Problem finden?", "Ist mein Programm so effizient wie möglich?" "," Wie soll ich mein Programm neu anordnen, um es schneller zu machen oder weniger Speicher zu verbrauchen? ". In der Regel behandeln Sie Themen wie diese in Kursen der oberen Abteilung zur Theorie der Berechnung, zum Entwurf von Algorithmen und zum Entwurf von Computersprachen.

Die zweite Art, wie Mathematik und Programm zusammenhängen, besteht darin, dass die Programmierung zur Lösung mathematischer Probleme verwendet wird. Dies ist wichtig, da viele Probleme des "normalen Lebens" tatsächlich als mathematische Probleme umformuliert und dann (möglicherweise ungefähr) auf einem Computer gelöst werden können. Diese Art von Themen wird bis zu einem gewissen Grad in fast allen Ihren Kursen auftauchen, insbesondere aber in Kursen über diskrete Mathematik und mathematische Modellierung.

20

Zwei spezifische Beispiele, bei denen eine mathematische Ausbildung für die Informatik wichtig ist, sind:

1) Relationale Datenbanken, in denen relationaler Kalkül verwendet wird.

Der relationale Kalkül besteht aus zwei Kalkülen, dem relationalen Tupel-Kalkül und dem relationalen Domänen-Kalkül, die Teil des relationalen Modells für Datenbanken sind und eine deklarative Möglichkeit bieten, Datenbankabfragen anzugeben. Dies steht im Gegensatz zur relationalen Algebra, die ebenfalls Teil des relationalen Modells ist, jedoch eine prozedurale Möglichkeit zum Spezifizieren von Abfragen bietet.

Die relationale Algebra schlägt möglicherweise diese Schritte vor, um die Telefonnummern und Namen der Buchhandlungen abzurufen, die einige Musterbücher liefern:

Join book stores and titles over the BookstoreID.
Restrict the result of that join to tuples for the book Some Sample Book.
Project the result of that restriction over StoreName and StorePhone.

Der Beziehungskalkül würde einen beschreibenden, deklarativen Weg formulieren:

Get StoreName and StorePhone for supplies such that there exists a title BK with the same BookstoreID value and with a BookTitle value of

Ein Musterbuch.

Die relationale Algebra und der relationale Kalkül sind im Wesentlichen logisch äquivalent: Für jeden algebraischen Ausdruck gibt es einen äquivalenten Ausdruck im Kalkül und umgekehrt. Dieses Ergebnis ist als Codd-Theorem bekannt.

Der nächste Bereich ist künstliche Intelligenz (KI) und maschinelles Lernen .

Ein Beispiel für die Verwendung dieser Geräte finden Sie in der Klasse CS 373 von udacity: PROGRAMMIERUNG EINES ROBOTERAUTOS .

Beschreibung: In dieser Klasse, die von einem der führenden Experten für KI unterrichtet wird, lernen Sie grundlegende Methoden der künstlichen Intelligenz kennen, darunter: probabilistische Inferenz, Computer Vision, maschinelles Lernen und Planung, alle mit Schwerpunkt Robotik. Umfangreiche Programmierbeispiele und Aufgaben werden diese Methoden im Zusammenhang mit dem Bau selbstfahrender Autos anwenden. Sie haben die Möglichkeit, per Video die führenden Forschungslabors auf diesem Gebiet zu besuchen und die Wissenschaftler und Ingenieure zu treffen, die bei Stanford und Google selbstfahrende Autos bauen.

Voraussetzungen: Der Kursleiter setzt solide Programmierkenntnisse voraus, die gesamte Programmierung erfolgt in Python. Kenntnisse über Wahrscheinlichkeit und lineare Algebra sind hilfreich.

WOCHE 1:

Grundlagen der Wahrscheinlichkeit Auto-Lokalisierung mit Partikelfiltern

WOCHE 2:

Gaußsche und kontinuierliche Wahrscheinlichkeit Verfolgung anderer Autos mit Kalman-Filtern

WOCHE 3:

Bildverarbeitung und maschinelles Lernen Finden von Objekten in Sensordaten

4. WOCHE:

Planen und Suchen Mit A * -Suche bestimmen, wohin gefahren werden soll Mit dynamischer Programmierung optimale Routen finden

WOCHE 5:

Steuerung Steuerung von Lenkung und Geschwindigkeit mit PID

6. WOCHE:

Alles zusammen Programmieren eines selbstfahrenden Autos

WOCHE 7:

Abschlussprüfung Prüfung, die Ihr Wissen testet

12
JonnyBoats

Für die Entwicklung wissenschaftlicher Anwendungen, Spieleprogrammierung, Echtzeitsysteme, Simulationssysteme und solche Anwendungen ist Mathematik in der Tat erforderlich. Schließlich nutzt die Programmierung Mathematik und Naturwissenschaften, um Probleme zu lösen. Zum Programmieren einer Anwendung, die Benutzerinformationen erfasst, um sie in Ihrer Datenbank zu registrieren, ist jedoch kein hohes Maß an Mathematik erforderlich. Trotzdem würden alle Programmierer von der grundlegenden Zahlentheorie, der Algebra, der grundlegenden Mengenlehre und der elementaren numerischen Analyse profitieren.

Von der Seite der Mathematikpraktiker könnten verschiedene Themen in der Mathematik (sowie in vielen anderen naturwissenschaftlichen Bereichen) erheblich von der Programmierung profitieren.

11
NoChance

Ich denke mehr als alles andere ist es das Ähnlichkeit des verwendeten Denkprozesses, das die beiden so ähnlich erscheinen lässt.

Zum Beispiel sind beide äußerst logisch. Wenn Sie denselben Schritten oder derselben Formel folgen, erhalten Sie immer das gleiche Ergebnis. Zum Beispiel ist 1+1 Immer gleich 2 Und set a = 1 Bedeutet, dass a immer 1 ist (bis Sie es auf etwas anderes setzen).

Ein weiteres Beispiel ist die Notwendigkeit, räumlich zu denken. In der Mathematik musste ich oft Zahlen im Kopf halten und mir vorstellen, was ich tat. Als sehr einfaches Beispiel würde ich mathematische Probleme aufschlüsseln, so dass aus etwas wie 13x1313x10 + 13x3 Wird, was für mein Gehirn viel einfacher zu handhaben ist, und ich muss das nachverfolgen 13x10=130 + 13x3=39, Also 130+39 = 169. Dieselbe Fähigkeit, etwas nicht Sichtbares zu visualisieren oder ein Problem in kleinere Probleme zu zerlegen, wird häufig auf die Programmierung angewendet.

Ich bin der Meinung, dass Sie, obwohl Sie keinen mathematischen Hintergrund zum Programmieren benötigen, bei dem Mathematik als Berechnungen mit Zahlen definiert ist, einen ähnlichen Denkprozess und ein ähnliches Verständnis benötigen, wie Sie es bei der Lösung von mathematischen Problemen verwenden würden.

9
Rachel

Ich nehme an, bis jetzt wurden Ihnen Elemente der Analysis und einige Trigonometrie . Und Sie nennen diese Mathematik. Das ist, als würde man ein Beinpaar "einen Menschen" nennen.

Kalkül hat wenig mit Programmierung zu tun und ist enger mit Physik und Technik verbunden. Sie benötigen Physik für Game Engines und Kalkül für statistische Analyse. (Die statistische Analyse führt zu mehr Jobs, als man zugeben kann.)

Bei Calculus geht es für uns mehr darum, die Programmierung mit der realen Welt in Beziehung zu setzen. Computerrechnung ist der Zweig, der untersucht, wie schlecht diese Beziehung bisher ist. (Spoiler: es läuft ziemlich schlecht, aber wir können es auf unbestimmte Zeit in Schach halten )

Trigonometrie ist eine verrückte Buchse in der Box, die herauskommt, wenn Sie es am wenigsten erwarten und dann Signalanalyse, Audioerzeugung und viele andere Dinge davon abhängen.

Gehen Sie durch Algebra 101 und Logik 101 , studieren Sie die Geschichte von Pascal, Leibniz (ja, er hat fast das Kalkül erfunden, es halbwegs falsch verstanden, mit Newton gestritten, bis alles fast Sinn machte - und immer noch die Sache mit der binären Codierung konzipierte) und Babbage und viele Ihrer Zweifel werden nachlassen. (Ihre Definition von Mathematik wird sich jedoch für immer ändern)

5
ZJR

Das Programmieren umfasst viele traditionelle akademische Disziplinen.

Mathematik, insbesondere angewandte Mathematik, ist wichtig für die Programmierung, da wir Computer häufig dazu auffordern, Zahlen zu knacken. Das Verständnis numerischer Methoden und das effiziente und angemessene Anwenden von Berechnungen ist eines der Dinge, die viele Programmierer täglich tun.

4
Joel Brown

Hier werde ich Ihnen praktische Dinge erzählen, bei denen ich bei der Lösung einiger Computerprobleme (insbesondere im Internet) auf Mathematik gestoßen bin:

  1. Suchmaschinen verwenden Vector Calculus zum Suchen von Daten.
  2. Die Matrixfaktorisierung kann für viele Dinge wie die Stimmungsanalyse verwendet werden.
  3. Sie müssen Calculus, Summations kennen, um die Komplexität des von Ihnen geschriebenen Codes herauszufinden.
  4. Die Wahrscheinlichkeit wird beim Abrufen/Suchen probabilistischer Informationen häufig verwendet
  5. Der Satz von Naive Bayes wird in Predictive Analytics verwendet.
  6. Sie müssen Dinge wie Hyperebene usw. für ein Konzept namens SVM kennen, das wiederum im maschinellen Lernen zur Lösung von Kategorisierungsproblemen verwendet wird.
  7. Sie müssen Entropy verstehen, um Dinge in natürlicher Sprache verarbeiten zu können.
  8. Latente semantische Indizierung/Hauptkomponentenanalyse, die von Suchmaschinen verwendet wird, beruht stark auf Matrixalgebra. & bald......
4
Yavar

Ein Problem bei Ihrer Frage ist, dass "Mathematik" und "Programmierung" sowohl sehr breite als auch tiefe Themen sind, über die es mehr zu wissen gibt, als irgendjemand in einem Leben beherrschen könnte (keine Übertreibung). Ich persönlich habe einen MA-Abschluss in Mathematik. Während meiner Zeit an der Universität schien es, als ob je mehr ich lernte, desto weniger wusste ich im Vergleich zu meinen Kollegen; Es fühlte sich so an, als wäre ich im Laufe der Jahre weniger intelligent geworden. Als ich meine Masterarbeit einer Gruppe von Professoren vorstellte, schienen selbst die meisten von ihnen mit dem, was ich studierte, weitgehend unbekannt zu sein.

Ebenso bin ich jetzt ein datenbankgesteuerter Webanwendungsentwickler. Wenn Sie mich mit jemandem vergleichen würden, der Embedded Assembler-Programmierung betreibt, könnten Sie uns als zwei sehr talentierte Fachleute betrachten, aber wir hätten sehr unterschiedliche Fachkenntnisse, obwohl wir beide "Programmierer" sind.

Während Sie Ihr Studium der höheren Mathematik fortsetzen (jenseits der Erstsemesterrechnung), werden Sie feststellen, dass die Mathematik eine Disziplin für abstraktes Denken einführt, die Ihnen beim Programmieren gute Dienste leistet. Ich denke, dass diese Disziplin sehr wichtig ist, weil Sie sich beim Programmieren mit abstrakten Anliegen befassen werden.

Sicher, in der Freshman-Programmierung werden Sie wahrscheinlich etwas über Zeigerarithmetik lernen. Sie werden kurze Programme schreiben, um dieses Konzept zu veranschaulichen, und Ihr Verständnis dafür, wie es Ihren Computer antreibt, gehorcht Ihrem Willen. Wenn Sie jedoch lernen, wie Zeigerarithmetik in der Zusammenfassung funktioniert, können Sie Zeiger in einem realen Programm nicht gut verwenden. Wenn es an der Zeit ist, ein Durcheinander von 10K-Codezeilen in Kauf zu nehmen und einige Änderungen an der Zeigerarithmetik vorzunehmen, müssen Sie in der Lage sein, auf einer sehr abstrakten Ebene zu argumentieren und strategische Entscheidungen zu treffen, um verschiedene Bedenken hinsichtlich der Auswirkungen Ihrer Änderungen auszugleichen der Code.

Als Programmierer müssen Sie unter anderem die "Lesbarkeit" Ihres Codes, die Leistung Ihres Codes und die Benutzerfreundlichkeit der resultierenden Programme in Einklang bringen. Sie müssen in der Lage sein, sehr abstrakte Vergleiche anzustellen, um diese Bedenken untereinander auszugleichen. Sie werden jeden Tag viele dieser Vergleiche anstellen. Ich habe noch nicht einmal mit Zeitmanagement angefangen. Sie werden abstrakt über die Wahrscheinlichkeit nachdenken, dass etwas, das Sie tun, Ihre Fähigkeit beeinträchtigt, Ihre Aufgaben pünktlich zu erledigen, und Sie werden jeden Tag viele Entscheidungen treffen, die sich auf Ihre Arbeit auswirken.

Schließlich müssen Sie Ihre philosophische Disziplin beibehalten, um neue Ideen und Konzepte aufnehmen zu können, um fortfahren zu können, wenn alte Methoden und Praktiken nicht mehr verwendet werden. Auch hier müssen Sie in der Lage sein, die Ideen zu bewerten und einen abstrakten Vergleich mit dem anzustellen, was Sie bereits kennen.

Kurz gesagt, Programmieren hat, wie die meisten von uns wissen, nicht viel mit Mathematik zu tun, wie die meisten von uns es wissen. Aber wenn man es auf einer abstrakten Ebene betrachtet, haben sie viel gemeinsam.

3

Mathematik beschreibt (sagen wir) eine kubische Gleichung.

Ein Algorithmus beschreibt, wie diese kubische Gleichung gelöst wird.

Diesen (oder einen beliebigen) Algorithmus so zu konstruieren, dass er von einer Maschine ausgeführt werden kann, ist Programmierung.

Informatik ist die Analyse des Algorithmus - seine theoretische Zeit-/Raumeffizienz, Fehlergrenzen usw. Dies könnte als ein Zweig der Mathematik angesehen werden. Beachten Sie jedoch, dass Informatik und Programmierung nicht dasselbe sind. Es ist wichtig, eine Grundlage in der Informatik zu haben, wenn Sie ein guter Programmierer sein möchten, da dies Ihnen hilft, die von Ihnen entwickelten Algorithmen besser zu entwerfen und zu überlegen. Dies ist jedoch keine Voraussetzung.

Ein guter Programmierer ist möglicherweise kein guter Mathematiker (und ist es oft auch nicht) und umgekehrt. Sie sind separate identifizierbare Fähigkeiten.

2
mcmcc

Ich habe im Laufe der Jahre viele Fragen zu diesen Forentypen gesehen, bei denen das eigentliche Problem im schlechten mathematischen Verständnis des Posters lag. Zum Beispiel versteht jeder, der eine gute Grundlage in der Algebra hat, dass man nicht durch Null teilen kann. Aber ich habe viele Fragen gesehen, bei denen das Poster das nicht verstanden und anschließend die Fehlermeldung nicht verstanden hat, die im Grunde gesagt hat: "Sie können nicht durch Null teilen." Ich habe viele Fragen gesehen, bei denen klar war, dass das Poster die grundlegende Logik nicht verstand. Ich habe viel zu viele Fragen gesehen, bei denen die Konzepte der Booleschen Algebra eindeutig nicht verstanden wurden.

Nur weil Sie keine mathematischen Beweise schreiben oder Gleichungen wie im Mathematiklehrbuch direkt lösen, heißt das nicht, dass Sie die dahinter stehenden Konzepte nicht verstehen müssen. Übrigens habe ich in meiner langjährigen Berufserfahrung noch nie einen schlechten Programmierer getroffen, der ein solides Verständnis für Mathematik hatte.

In einigen Bereichen verwenden Sie viel Mathematik direkt, wie z. B. Spielprogrammierung, statistische Programmierung, Finanzprogrammierung und einige eingebettete Systeme. In einigen dieser Fälle erhalten Sie die Gleichungen, die Sie in den Anforderungen benötigen, und manchmal nicht. Selbst wenn Sie die Gleichung erhalten, müssen Sie die Gleichung zunächst verstehen, um diese Gleichungen richtig in Programmiercode zu übersetzen.

Während Sie in Ihrer grundlegenden CRUD-Anwendung nur mit grundlegender Algebra auskommen können, beinhalten die meisten interessanteren Probleme und fortgeschritteneren Arbeiten mathematisches Verständnis. Warum sollten Sie sich also von Anfang an einschränken wollen, indem Sie nicht gründlich Mathematik lernen?

2
HLGEM

Zwei Beispiele, die sofort in den Sinn kommen, sind:

Funktionen - Die Idee, eine Transformation auf Eingabevariablen anzuwenden, um eine Ausgabevariable zu erzeugen, ist stark in der Mathematik verwurzelt. Der Gedanke, eine Funktion um as einen Parameter an eine andere Funktion zu übergeben, umso mehr. Im Allgemeinen entspricht der Begriff des abstrakten Denkens, der mit der Programmierung verbunden ist, der Mathematik ziemlich genau.

bitMasks - Dieser gängige Programmieransatz zur Lösung von Problemen erfordert mindestens ein grundlegendes Verständnis der Booleschen Algebra, um das Konzept überhaupt zu verstehen.

2
JohnFx

Aus Sicht der Programmierer: Mathematik ist eine Teilmenge der Programmierung.

In der Programmierung angewandte Mathematik:

Wenn Sie beim Programmieren mit Sammlungen (Arrays, Listen, Karten usw.) arbeiten, haben Sie es mit realen Implementierungen mathematischer Abstraktionen zu tun.

Programmieren ohne Mathematik:

Wenn Sie println("Hello World") ausführen, ist die Tatsache, dass zur Berechnung der Position auf dem Bildschirm, der Länge der Zeichenfolge usw. etwas Mathematik verwendet wird, größtenteils irrelevant.

Verwenden der Programmierung für Mathematik:

Die Implementierung von Mathematik und Physik in einer Programmiersprache ermöglicht beispielsweise computergestütztes Design.

1
Jack

Ich bin kein Experte in Mathe! Ich habe mich in HS Geometry gut geschlagen, was für mich alles logisch war. Ich finde Programmierung und Geometrie sehr ähnlich. Die boolesche Logik ist für mich sehr gut mit geometrischen Beweisen verbunden.

Dann gibt es kleine Dinge wie das Wissen, dass Sie mit dem Moduloperator steuern können, wie viele Spalten sich in einer Zeile befinden.

Ich bevorzuge nachdrücklich die Idee, ein guter Programmierer zu sein, der einen Freund (oder Kollegen/Berater) hat, der ein guter Mathematiker ist.

Wenn Sie gesegnet sind, beide Fähigkeiten zu haben, laufen Sie natürlich damit!

0
TecBrat

Die Programmierung basiert normalerweise auf einem Modell, das normalerweise ein mathematisches Modell ist.

Nehmen wir ein Beispiel für die Erstellung eines Hypothekenrechners. Dazu müssen Sie wissen, was Interesse ist, was ein zusammengesetztes Interesse ist und so weiter. Wenn Sie die zugrunde liegende Mathematik nicht verstehen, muss jemand anderes Ihnen diese Informationen zur Verfügung stellen. Normalerweise ist es die Aufgabe des Programmierers, alles zu erledigen. Bei Bedarf können Sie jedoch jederzeit Hilfe suchen.

In der Mathematik gibt es einfache Konzepte, die in der Programmierung weit verbreitet sind. Zum Beispiel Ausdrücke, Gleichungen, Variablen, sie werden in der Programmierung häufig verwendet. Wenn Sie es nicht in Mathe bekommen, sind Sie möglicherweise nicht der beste Programmierer.

Wenn Sie über eine starke Mathematik verfügen, erhalten Sie mehr Informationen, anhand derer Sie Ihre Arbeit modellieren können. Das macht Sie letztendlich zu einem besseren Programmierer. Zum Beispiel möchten Sie vielleicht eine quadratische Gleichung in einem Ihrer Projekte zeichnen. Auf diese Weise lernen Sie mehr, nur weil Sie stark in Mathematik sind. Oder Sie schreiben ein Programm, um den Bereich eines Kreises zu finden und mehr Erfahrung zu sammeln.

In meiner kurzen Lehrkarriere stellte ich fest, dass Schüler, die keinen mathematischen Hintergrund hatten, bei einem finanziellen Problem fast verloren sind. Wenn sie sich über das Modell verlieren, wird das Erlernen der Sprache selbst schwieriger und ehrlich gesagt sehr frustrierend.

0
Noname

Die Aktionen der Mathematik und 99% der Programmierung haben sehr wenig gemeinsam. Mathe muss kein großartiger Programmierer sein. Ich habe mehrere Kurse in Mathematik auf Hochschulniveau besucht, einschließlich, aber nicht beschränkt auf die Elemente der linearen Algebra für Kalkül I, II, III und einige andere.

Ich bin seit über 10 Jahren Softwareentwickler und musste nur selten mehr als nur grundlegende Mathematik verwenden. Es gibt einige Ausnahmen, in denen Mathematik benötigt wird: wie Grafiken und andere Bereiche. 99% der Programmierung und Softwareentwicklung erfordern jedoch keine Mathematik. Es erfordert logisches Denken, Algorithmen, OOP, Funktionen, Zerlegungsprobleme usw.

0

1) Wenn Sie das Programmieren lernen, werden Sie auf Fachjargon (d. H. Algorithmus) stoßen. Um einen Algorithmus zu analysieren, muss man eine Vorstellung von der Natur der Polynom-, Logarithmus- und Exponentialfunktionen haben.

2) Basierend auf einer Informatikanwendung muss man eine Idee für diskrete Mathematik und kontinuierliche Mathematik haben, um eine sinnvolle Lösung zu schreiben. Man kann mehr darüber verstehen, wenn man solche Kurse durchläuft wie:

---> Mathematik für Informatik

---> Codierung der Matrix: Lineare Algebra durch Informatikanwendungen .

Für einen Anfänger halte ich dynamische typisierte Sprachen wie python/scheme für die ersten besten Programmiersprachen. Statisch typisierte Sprachen wie Java/C++ sind nicht die besten, um damit zu beginnen. Opencourseware, veröffentlicht von "MIT/UOC-Berkeley/Stanford", kann Sie besser führen als ein regulärer College-Lehrplan. Ich wette, dass du!!!

0
overexchange

Es hängt ehrlich davon ab, welche Art von Programmierung Sie durchführen.

Wenn Sie leichte Web-Apps mit einer gewissen Logik erstellen, benötigen Sie wahrscheinlich nicht die fortgeschritteneren Mathematikklassen, die für viele Abschlüsse erforderlich sind. Wenn Sie mit Dingen arbeiten, die etwas prozessorlastiger sind, brauchen Sie mehr Mathematik. Wenn Sie mit einem wissenschaftlichen Gebiet arbeiten, sollten Sie Ihre Berechnungsreferenzen unbedingt zur Hand haben.

Ein weiterer Ort, an dem Sie Mathe benötigen, ist, wenn Sie Spiele schreiben möchten. In der Sekunde, in der Sie sich diagonal bewegen möchten, müssen Sie einige sorgfältige Berechnungen durchführen, damit Sie nicht mit Zeichen enden, die sich beschleunigen, wenn Sie zu einem Block nach NE wechseln.

Das heißt, Sie müssen nicht unbedingt Mathematik lernen und dann Programmieren lernen. Es ist vollkommen gültig, Programmieren zu lernen und dann etwas fortgeschrittene Mathematik zu lernen. Ich habe mit dem Codieren begonnen, bevor ich jemals einen Fuß in eine Calc- oder Trig-Klasse gesetzt habe, und habe es gut gemacht. Als ich anfing, fortgeschrittene Mathematik zu lernen, stellte ich fest, dass mir das Codieren wirklich geholfen hat, da ich das Thema mehr untersuchen konnte, indem ich Variablen in einem schnellen Skript änderte, als ich es mit Stift und Papier konnte.

0
kcunning

Die theoretische Grundlage der Informatik (die mehr als nur Programmieren ist) ist mathematischer Natur. Von der Definition der Berechenbarkeit über die Analyse und den Ausdruck von Algorithmen bis hin zu den Spezifikationen von Programmiersprachen basiert alles auf einer Vielzahl von mathematischen Grundlagen. Siehe diese Wikipedia-Seite für einen Vorgeschmack auf die Art der Mathematik.

Das meiste davon ist nicht wirklich notwendig, um zu wissen, ob Sie nur Sling-Code verwenden möchten. Was die angewandte Mathematik angeht, werden Sie wahrscheinlich nichts weiter als die grundlegende Algebra verwenden, es sei denn, Sie gehen in ein Gebiet, das ernsthafte Fähigkeiten zur Zahlenberechnung erfordert (detaillierte physikalische Simulationen, Signalanalyse, Finanzanalyse und Vorhersage usw.) auf einer täglichen Basis.

0
John Bode

Einfache Antwort; Mathe macht dich schnell. Sicher, Sie können Ihre Codierungsprobleme googeln/se/wikipedia entfernen, aber genug Mathe erledigen und das müssen Sie nicht. Ob Sie es glauben oder nicht, das richtig trainierte menschliche Gehirn ist schneller als Google. Je mehr Mathematik Sie kennen, desto schneller können Sie die Ergebnisse von Google/Se/Wiki verstehen und desto weniger müssen Sie einen Drilldown durchführen, um zu verstehen, was die Leute Ihnen sagen. Bei der Lösung Ihrer Programmierprobleme werden Sie ohnehin Mathematik lernen, aber wenn Sie sich auf Mathematik konzentrieren, wird dies ein weitaus effizienterer Prozess sein.

Ihre Frage ist wie die eines Rockmusikers, der fragt, warum er eine formelle musikalische Ausbildung benötigt. Ist es möglich, ohne sie erfolgreich zu sein? Sicher. Macht es dich viel mehr zu einem Badass, wenn du damit machst? Absolut.

Etwas kompliziertere Antwort - Wenn Mathematiker und Programmierer das Wort "Lösung" verwenden (für Probleme, dh nicht Gleichungen - dh nicht "Wurzeln") - bedeuten sie so ziemlich dasselbe. Wenn Sie lernen, mathematische Probleme zu lösen, lernen Sie, Programmierprobleme zu lösen.

Übrigens - und keine Beleidigung für irgendjemanden - jeder, der sagt, er sei ein guter Programmierer, aber er hasse Mathe, ist ein großer fetter Lügner. Was passierte war, dass sie von einem schlechten Lehrer oder Hochschullehrer von der formalen Mathematik abgeschaltet wurden und seitdem das Gefühl haben, "nicht gut in Mathematik zu sein". Jeder ohne Lernschwäche (dh jeder, der in der Lage ist, eine OO Sprache) zu lernen) kann alles bis einschließlich Sophomore Calculus.

0
jamesson