Was hat Mathematik mit Programmieren zu tun? [geschlossen]

89

Ich habe gerade ein Diplom in Softwareentwicklung begonnen. Momentan fangen wir mit grundlegendem Java und so an (sozusagen ganz unten) - was in Ordnung ist, ich habe keine Programmiererfahrung, außer zu wissen, wie man "Hello World" in Java macht.

Ich höre immer wieder, dass Mathematik für das Codieren relevant ist, aber wie ist es so? Welche allgemeinen Beispiele zeigen, wie Mathematik und Programmierung zusammenpassen oder aufeinander angewiesen 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 Monkey Student eintrete.

Rory
quelle
49
Programmieren ist Mathematik. en.wikipedia.org/wiki/Discrete_mathematics
SK-logic
25
@ Dave, deshalb habe ich einen Link im Kommentar angegeben, nicht als Antwort.
SK-logic
7
@FiascoLabs, noch mehr - Sprachstruktur und Logik sind auch Teilbereiche der Mathematik. Programmierung ist nichts anderes als angewandte Mathematik.
SK-logic
19
Unabhängig davon ist das Starten mit Java nicht "von Grund auf".
Matt H
5
@CharlesE.Grant, viele Mathematikstudenten machen dasselbe (und bestehen ihre Prüfungen trotzdem).
SK-logic

Antworten:

137

Zunächst einmal: Ich bin ein Mathematiker - ein Profi (ich werde dafür bezahlt, dass ich Mathe mache). Ich bin kein Programmierer. Ich programmiere zwar, aber auf jeden Fall für die Cargo Cult-Variante (siehe ersten Kommentar zu https://tex.stackexchange.com/q/451/86 und meine Antwort) und nichts in der Art, die mich normalerweise dazu bringen würde Seite (in der Tat 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 ist Programmierung .

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

Bevor ich fortfahre, sollte ich einige Dinge klarstellen. Es gibt Bereiche der Mathematik, die sich direkt mit der Programmierung befassen und sich mit der Bewertung von Algorithmen und der Klassifizierung von Sprachen und dergleichen befassen. Ich spreche nicht über diese. 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 versuche zu sagen, fehlen. Die Mathematik, die ich mache, und die Programmierung, die ich mache, sind fast völlig unabhängig vom Thema. Die Verbindung zwischen ihnen ist auf einer anderen Ebene.

Ich möchte mit dem Kommentar zur Hauptfrage beginnen:

Wenn das Mathe ist, dann ist jede menschliche Aktivität eine Form von Mathe. Wenn dies der Fall ist, hat das Wort Mathematik keine nützliche Bedeutung, da es nicht dazu verwendet werden kann, eine Aktivität von einer anderen zu unterscheiden.

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 auf mathematische Weise nähere . Manchmal ist das "harte Kern" -Mathematik: Definitionen formulieren, Theoreme beweisen. Manchmal ist es nicht. Manchmal schreibt es dumme kleine Programme, damit meine Kinder ihre Rechtschreibwörter lernen können.

Dabei 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, alles Unnötige zu entfernen und sich auf die wichtigen Eigenschaften zu konzentrieren.

  2. Perspektive Wenn ich nur eine Sache auswählen könnte , die alle meine Schüler lernen sollten, dann wäre dies: Die Fähigkeit, die Sichtweise zu ändern, um sie dem Problem anzupassen. Wir behandeln dies in der Regel in linearer Algebra mit Formeln, bei denen sich die Basis ändert (was zu schrecklichen Matrizen und schrecklichen Komplikationen führt), aber es ist weitaus besser anwendbar. Im Grunde genommen ist es die Idee, dass etwas, das Ihnen auf eine Weise präsentiert wurde, 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. Das kann sehr praktisch sein: Es geht darum, etwas Nützliches oder Effizientes zu machen. Wenn ich eine Liste von Vektoren habe und es effizienter ist, sie als eine Liste von x-Koordinaten und eine Liste von y-Koordinaten zu speichern, sollte es so sein .

  3. Form versus Funktion Weiter 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 das Lied noch einmal falsch zu zitieren: "Es ist nicht das, was du bist, es ist das, was du tust ", das zählt.

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

Nun, es gibt wahrscheinlich viele (negative) Reaktionen auf das, was ich bisher geschrieben habe. Eine wird lauten: "Das ist keine Mathematik, das ist nur ein guter Sinn." (oder böser Verstand), auf den ich mich auf meine obige Bemerkung beziehe, in der ich der Ansicht zustimme, dass "jede menschliche Aktivität eine Form von Mathematik ist". Ein anderer wird sein "Das ist nicht die Art von Mathematik, die in der Frage gemeint ist." Dies trifft mit ziemlicher Sicherheit zu, und hier habe ich tatsächlich viel mehr Verständnis für die Person, die sagte: "Zumindest habe ich die Mathematik seit 10 Jahren nicht mehr berührt." Er oder sie ist falsch, natürlich, sie wurden Mathematik für 10 Jahre zu tun , weil , wenn sie ein Programm geschrieben , sie Mathematik taten . Sie haben es einfach nicht bemerkt.

Ich benutze tatsächlich einige "echte Mathematik" in meinen Programmen. Vor kurzem habe ich einen lustigen 3D-Formen-Explorer programmiert, bei dem ich mithilfe von Mathematik die Projektionen und andere Transformationen herausgefunden habe, die ich auf meine Daten anwenden musste. Ich fand es leicht amüsiert, Quaternionen zu programmieren! Aber natürlich war die Mathematik, um die es ging, trivial im Vergleich zu der Mathematik, die ich bei der Arbeit mache. Es war "back of envelope" Zeug. Diese Art von Mathematik, dann stimme ich dem Gefühl zu, dass Sie es aufheben, 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 tut. Damit Sie es jedoch abholen können, wenn Sie es brauchen, müssen Sie etwas gelernt haben. Das Ding ist vielleicht nichts, was Sie jemals tatsächlich benutzen, aber nachdem Sie gelernt haben, dass etwas es einfacher macht, das zu erlernen, was Sie später im Leben tatsächlich benutzen. Also das ist , wo ich mit Coder nicht zu : Sie müssen lernen , einige Mathematik , wenn Sie jemals verwenden werden alle Mathematik und Sie müssen es lernen , von der mathematischen Seite (was nicht bedeutet , beweist Theoreme, übrigens).

Und so zum Schluss zur "Mathematik ist Programmieren". Sie können all diese Dinge von einem guten Programmierer lernen. Und wenn Sie diese Dinge gelernt haben, werden Sie Mathematik viel einfacher finden , weil Sie werden verstehen , dass , wenn wir über einen Vektor in einem Vektorraum sprechen , dann ist es nur eine Instanz der Klasse , Vectorwas bedeutet , dass wir alle Dinge tun können , die Vectorzu tun diese Instanz: Addieren, Subtrahieren, Skalieren und so weiter. Deshalb würde ich gerne Programmierern Mathematik beibringen. Aber als Mathematiker würde ich das als erstes sagenDavon ist "Abstraktion" in der Mathematik leichter zu lernen als in der Programmierung, weil Mathematik das Streben nach Abstraktion ist. Wenn wir ein Verhalten bemerken, besteht unser Training immer darin, zu fragen: "Was ist es an dem Ding, das es so macht? Was wäre, wenn ich ein anderes ähnliches Ding nehmen würde, würde es sich so verhalten? Wie viel von dem Ding?" Müsste ich verlieren, damit es aufhört, sich so zu benehmen? " (Wenn man dies auf die Spitze treibt, führt dies zur "Tausendfüßler-Mathematik" - Suche nach dem Begriff). Wir tun dies jedoch nicht mit (nur) Objekten der "realen Welt" (was auch immer sie sind), sondern 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 im 24-dimensionalen Raum. Danach diskutierten sie darüber und der Physiker bemerkte: "Das war wirklich schwer. Ich meine, wie visualisiert man einen 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

Es gab einige Kommentare zu dieser Antwort, die eine Vielzahl von Ansichten zum Ausdruck brachten. Diese wurden nun von einem Moderator mit der Maßgabe 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 tatsächlich ist. Außerdem fühle ich mich nicht kompetent genug, um es zu erklären. Glücklicherweise hat jemand bereits eine Verbindung zu Lockharts Klage hergestellt, daher werde ich die Erklärung dazu 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 besser ausdrücken könnte .

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 ist also nicht nötig, es zu studieren, da Wikipedia existiert (dies ist fast das Gegenteil von Eulers apokryphischer Herausforderung für Diderot ).

  2. In der Mathematik geht es um Theoreme und Definitionen. Sie müssen es also nicht studieren, da Programme niemals irgendetwas beweisen (was ungefähr so ​​vollständig ist wie ... fügen Sie hier Ihren Lieblingsfehler ein).

Obwohl sich die beiden Standpunkte widersprechen, landen sie doch am selben Ort: Es hat keinen Sinn, dass ein Programmierer Mathematik lernt - und das 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 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 Sie sich sicher schlecht gefühlt haben, wenn Sie sich selbstgefällig und überlegen gefühlt haben ).

Was ich oben beschrieben habe, ist Cargo Cult Mathematics.

Also, wenn ich sage, dass Sie ein bisschen Mathematik lernen sollten, um zu verstehen, wie Mathematik funktioniert, sage ich es aus genau dem gleichen Grund, aus dem Sie vielleicht ein bisschen Code gesehen haben, den ich geschrieben habe: "Wie viel einfacher ist Ihr Leben wäre, wenn Sie das Ausschneiden und Einfügen von Code aus StackOverflow beenden und nur ein wenig über die richtige Vorgehensweise lernen würden. "

Das Wichtigste ist jedoch, dass Sie es von Mathematikern lernen. Warum so? Hier ist eine Analogie. Die Sprache, die ich am besten beherrsche, ist TeX. (Sagt wirklich alles!) Angenommen, ich möchte ein bisschen mehr über TeX erfahren, und es kommt vor, dass Don Knuth in der Stadt ist und angeboten hat, einige Tutorials zu TeX zu geben. Oder ich könnte es einfach auf Wikipedia nachlesen. 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 Lehrer sind , aber sie machen es in der Menge wieder gut, 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 , um einen Satz zu wissen , wie um zu beweisen , - du bist nicht eine Bibliothek zu schreiben , gehen! Wenn Sie jedoch ein wenig darüber Bescheid wissen, wie wir denken, kann es Ihnen helfen, zu verstehen, warum wir die Bibliothek so geschrieben haben, wie wir es getan haben, und wenn Sie verstehen, dass es Ihnen helfen könnte, sie besser zu nutzen.

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


Der andere Punkt, den ich etwas näher erläutern wollte, war, warum Sie als Programmierer keine Angst davor haben sollten, ein bisschen mehr Mathematik zu lernen. Es sind nicht die tiefen Verbindungen, noch die Nützlichkeit. Durch Ihre Fähigkeit, einen Computer zu programmieren, können Sie direkt Mathematik lernen. Ich möchte nur einige erwähnen.

  1. Variablen verstehen. So viele Leute werden durch einfache Aussagen wie "Let n be a natural number ..." verwirrt. Oder "Epsilon> 0 lassen". Es gibt Stellen in der Mathematik, an denen es wichtig ist, sich den Gültigkeitsbereich einer Variablen zu merken . All dies 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 oder ein Programm geschrieben haben, das von einer anderen Person verwendet werden soll, dann verstehen Sie den Kern der Beweise. Wenn Sie das tun, müssen Sie wissen, dass Sie damit umgehen können , was auch immer der Benutzer eingibt (fügen Sie hier eine obligatorische xkcd-Referenz ein). Das ist alles ein Beweis! Eine Demonstration, dass die Anweisung gültig ist, unabhängig davon , was der "Benutzer / das Universum" einfügt. Experimentalisten werden sich an die "Wenn es unter normalen Umständen funktioniert, ist es wahr" halten, aber Programmierer wissen, dass es immer das Kind gibt, das Alt + G + Shift + ÅØÆ probiert, nur um zu sehen, was passiert.

  3. TROCKEN. Tut mir leid, dass ich das für dich brechen muss, aber wir haben es erfunden, nicht du. Wir haben uns seit Jahrtausenden "nicht wiederholt". Deshalb habe ich eine Kopie von Euclids Elementen in meinen Regalen und sie ist immer noch nützlich .

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


Ich lasse es dort. 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 mit Teilen davon nicht einverstanden sein. Wenn jemand weiter streiten oder etwas anderes kommentieren möchte, ist es wahrscheinlich am besten, dies nicht in den Kommentaren hier zu tun. Sie wissen, wo Sie mich finden .

Loop Space
quelle
19
Dies ist eine der besten Antworten, die ich je auf SE gelesen habe. Übrigens gibt es ein großes Buch über "Mathematik für Programmierer"; Es heißt Konkrete Mathematik und wird vom Autor von TeX, Donald Knuth, mitgeschrieben. Ich habe gerade eine Kopie bekommen und es ist fantastisch. Ich fühle mich wie dein Gegenteil. Ich wurde ernsthaft mit dem Programmieren, als mir klar wurde, dass der beste Weg (für mich), Konzepte im Matheunterricht zu verstehen, darin bestand, ein Programm zu schreiben, das es für mich erledigt. Natürlich dann wollte ich verwende das Programm stattdessen rote Berechnung von Hand zu tun, und meine Mathematiklehrer nicht wie.
Jason Lewis
Alter, +100 dafür.
Barry Brown
2
Registriert, nur um dies zu verbessern
Leo
Genau. Ohne den analytischen Gedanken, den Ihnen die Mathematik lehrt, können Sie nicht gut programmieren.
Fiasko Labs
1
Gibt es ein gutes Buch über Mathematik der Programmierung (mit Blick auf die mathematische Programmierung)?
Qed
27

Sie sind nicht so eng miteinander verwandt. Für die Programmierung ist es wichtig, die Mathematik zu kennen - insbesondere die Zweige, die sich zum Beispiel auf die Leistung von Algorithmen beziehen, aber die einfache Tatsache ist, dass es keinen Zweig der Mathematik gibt, der Ihnen sagt, dass Singletons eine fürchterlich schlechte Idee sind. oder wann Sie die Vererbung der Komposition vorziehen oder ob Sie diese Flexibilität wirklich brauchen oder nicht, um sich selbst und Dutzende anderer wichtiger Programmieranforderungen nicht zu wiederholen.

Die Mathematik ist möglicherweise in der Lage auszudrücken, was Ihr Programm leistet, aber sie kann Ihnen mit Sicherheit nicht den am besten zu wartenden, von Menschen lesbaren und praktikablen Weg aufzeigen, dies zu tun.

DeadMG
quelle
6
1) An Singletons an sich ist nichts auszusetzen. 2) Algorithmische Informationstheorie, formale Sprachen und Denotationssemantik sind direkt relevant für die einfachen Dinge, um die Sie sich aus irgendeinem Grund so sorgen (sie sind für die Programmierung nicht so wichtig) im Allgemeinen).
SK-logic
19
Ihre Erfahrung muss dann etwas begrenzt sein. Singletons sind notwendig und unvermeidlich, solange sie Teil eines Domain-Modells sind. Und wie man ein Domain-Modell erstellt, ist ein mathematisches Problem, mehr nicht. Und ja, diejenigen, die sich mit formaler Sprachtheorie nicht auskennen, produzieren schreckliche Modelle und schreckliche Sprachen.
SK-logic
10
@ Dave: Die Gefahr bei dieser Methode ist, dass jeder Sie von einer vernünftigen, gut begründeten Position abbringen kann, indem er eine wild unterschiedliche Position angibt, egal wie dumm. Durchschnittswerte sind kein nützlicher Ersatz für die Bewertung von Argumenten.
Michael Borgwardt
4
@ SK-logic: Ist es möglich, dass ihr zwei einfach über unterschiedliche Vorstellungen von dem, was genau ein "Singleton" ist, redet? Es scheint mir, dass SK-logic von der abstrakten Idee spricht, nur eine Instanz einer bestimmten Entität in einem System zu haben, was manchmal genau das ist, was erforderlich ist. Leider wurde dieses abstrakte Konzept eng mit dem schrecklich schlechten Implementierungsdetail einer öffentlichen statischen Factory-Methode verknüpft, da das GoF-Buch dies als Beispiel für den Zugriff auf einen solchen Singleton anführte.
Michael Borgwardt
5
Bitte nicht mehr Off Topic Diskussion zu Singtons
mattnz
20

Mathematik und Programmierung hängen auf zwei Arten zusammen.

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

Die zweite Art, wie Mathematik und Programm in Beziehung stehen, ist, dass die Programmierung verwendet wird, um mathematische Probleme zu lösen. Dies ist wichtig, da viele Probleme des "gewöhnlichen 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 tauchen in fast allen Kursen zum Teil auf, insbesondere aber in Kursen zu diskreter Mathematik und mathematischer Modellierung.

Charles E. Grant
quelle
Math kann Ihnen nicht helfen, zu garantieren, dass Ihr Programm eine Antwort findet. Das wäre die Lösung des Halteproblems, das unmöglich ist.
DeadMG
6
@DeadMG Es ist unmöglich für beliebige Programme. Es kann sehr gut nachgewiesen werden, dass ein bestimmtes Programm in einigen Fällen beendet oder nicht beendet wird.
Luc Danton
6
@DeadMG, das ist ein weit verbreitetes Missverständnis des Halting-Problems. Das Problem "Anhalten" besagt nicht, dass Sie nicht beweisen können, ob ein bestimmtes Programm anhält oder nicht. Es besagt, dass es keinen einzigen Algorithmus oder Beweis gibt, der auf alle Programme angewendet werden kann, um zu entscheiden, ob sie anhalten oder nicht. Siehe zum Beispiel en.wikipedia.org/wiki/Halting_problem und programmers.stackexchange.com/questions/125882/… .
Charles E. Grant
Aaaah. Mein Fehler also. Dumme Wahlsperre ... wenn Sie Ihren Beitrag bearbeiten könnten, damit ich ihn abwerten kann?
DeadMG
4
@DeadMG, Sie sind sich der Tatsache bewusst die meisten typischen Programmieraufgaben benötigen keine Turing-complete Sprache alle auf ? Und für den Rest der Fälle gibt es fast immer einen speziellen Stoppbeweis.
SK-logic
12

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

1) Relationale Datenbanken, in denen relationale Berechnungen verwendet werden.

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

Die relationale Algebra schlägt möglicherweise die folgenden Schritte vor, um die Telefonnummern und Namen der Buchhandlungen abzurufen, die Some Sample Book bereitstellen:

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 Codds Theorem bekannt.

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

Ein Beispiel für deren Verwendung finden Sie in der Klasse CS 373: PROGRAMMIERUNG EINES ROBOTERAUTOS von udacity .

Beschreibung: In diesem Kurs, der von einem der führenden Experten für KI unterrichtet wird, lernen Sie grundlegende Methoden der künstlichen Intelligenz kennen, darunter probabilistische Schlussfolgerungen, Bildverarbeitung, maschinelles Lernen und Planung mit Schwerpunkt auf Robotik. Umfangreiche Programmierbeispiele und -aufgaben wenden diese Methoden im Zusammenhang mit dem Bau selbstfahrender Autos an. Sie haben die Möglichkeit, die führenden Forschungslabors auf diesem Gebiet per Video zu besuchen und die Wissenschaftler und Ingenieure kennenzulernen, die bei Stanford und Google selbstfahrende Autos bauen.

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

WOCHE 1:

Wahrscheinlichkeitsgrundlagen Fahrzeuglokalisierung 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:

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

WOCHE 5:

Steuerung Steuerung von Lenkung und Geschwindigkeit mit PID

WOCHE 6:

Alles zusammen Programmieren eines selbstfahrenden Autos

7. WOCHE:

Abschlussprüfung Prüfung Ihres Wissens

JonnyBoats
quelle
Ich denke, dies fällt unter den Bereich der KI, aber die meisten Menschen haben dieses Paradebeispiel im Kopf, wenn dieser Begriff verwendet wird. Wie auch immer, fast jedes Programm, das die reale Welt simuliert, erfordert fast immer eine Form fortgeschrittener Mathematik. Außerdem erfordert jedes System mit Sensoren fast immer eine Form fortgeschrittener Mathematik.
Eintauchen
11

Für die wissenschaftliche Anwendungsentwicklung, Spieleprogrammierung, Echtzeitsysteme, Simulationssysteme und solche Anwendungen wird in der Tat Mathematik benötigt. Schließlich nutzt die Programmierung Mathematik und Naturwissenschaften, um Probleme zu lösen. Zum Programmieren einer Anwendung, mit der Benutzerinformationen erfasst werden, um sie in Ihrer Datenbank zu registrieren, sind hingegen keine hohen Mathematikkenntnisse erforderlich. Dennoch würden alle Programmierer von der grundlegenden Zahlentheorie, der Algebra, der grundlegenden Mengenlehre und der elementaren numerischen Analyse profitieren.

Von Seiten der Mathematiker könnten verschiedene mathematische Themen (sowie viele andere naturwissenschaftliche Bereiche) erheblich von der Programmierung profitieren.

Emmad Kareem
quelle
Genau. Ich mache viel Unternehmensentwicklung und musste nicht viel fortgeschrittene Mathematik anwenden, obwohl es definitiv gut zu wissen ist, da es definitiv helfen kann. Ich würde sagen, jeder Programmierer hätte mindestens Kalkül 1 nehmen sollen. Andere Arten von Programmen verwenden möglicherweise Dinge wie Fourier-Transformationen, statistische Modelle und 3D-Programmierung verwenden häufig Matrizen.
Makotosan
@Makotosan, danke für deinen Kommentar. In Anbetracht der kurzen Zeit, die ein Programmierer hat, ist Mathematik jedoch sehr interessant. Man sollte sich am besten darum bemühen, was die Produktivität wirklich steigert. Zusätzliche Informationen werden zum Luxus für diejenigen, die es sich leisten können.
NoChance
Ich denke, dass die Mathematik genau das Fachwissen ist, das für Ihr Programm benötigt wird, genauso wie das Verständnis für Finanzen für Excel-Entwickler wichtig ist.
Sixtyfootersdude
9

Ich denke mehr als alles andere ist es die Ähnlichkeit des verwendeten Denkprozesses , die 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 dasselbe Ergebnis. Zum Beispiel 1+1wird immer gleich sein 2und das set a = 1Mittel awird immer 1 sein (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 behalten und mir vorstellen, was ich tat. Als sehr einfaches Beispiel würde ich mathematische Probleme aufschlüsseln, so dass etwas wie 13x13wird 13x10 + 13x3, was für mein Gehirn viel einfacher ist, damit zu arbeiten, und ich muss das nachverfolgen 13x10=130 + 13x3=39, also 130+39 = 169. Dieselbe Fähigkeit, etwas Unsichtbares zu visualisieren oder ein Problem in kleinere Probleme aufzuteilen, wird häufig auf die Programmierung angewendet.

Obwohl Sie keinen mathematischen Hintergrund für das Programmieren benötigen, bei dem Mathematik als das Ausführen von Berechnungen mit Zahlen definiert ist, müssen Sie einen ähnlichen Denkprozess und ein ähnliches Verständnis haben wie beim Lösen von mathematischen Problemen.

Rachel
quelle
Und eine grundlegende Mathematik ist das übliche Sprungbrett, um diesen systematischen, logischen Problemlösungsprozess zu erlangen. Die Sprachstruktur, die in der Schule nicht mehr gelehrt wird, ist ebenfalls ein Sprungbrett. Es gibt einen Grund, warum ein Compiler einen Parser hat. Je besser Sie analysieren und die Struktur Ihres Codes berücksichtigen, desto wahrscheinlicher ist es, dass Sie gut programmieren können.
Fiasco Labs
5

Ich nehme an, bis heute wurden Ihnen Elemente der Analysis und einige Trigonometrie beigebracht . Und Sie rufen , dass 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 Ingenieurwesen verbunden. Sie benötigen Physik für Game-Engines und Kalkül für statistische Analysen . (Die statistische Analyse treibt mehr Jobs voran, als es angenehm ist, zuzugeben)

In Calculus geht es für uns mehr darum, die Programmierung mit der realen Welt in Verbindung zu bringen. 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 ein verrückter Hingucker, der herauskommt, wenn man es am wenigsten erwartet, und von dem dann die Signalanalyse , die Audiogenerierung und viele andere Dinge abhängen.

Gehen Sie durch Algebra 101 und Logic 101 , studieren Sie die Geschichte von Pascal, Leibniz (ja, er hat die Analysis beinahe erfunden, halbwegs falsch verstanden, sich mit Newton gestritten, bis alles beinahe Sinn ergab - und immer noch das Ding der binären Codierung erfunden hat) und Babbage und Viele deiner Zweifel werden nachlassen. (Ihre Definition von Mathematik wird sich jedoch für immer ändern.)

ZJR
quelle
4

Die Programmierung durchläuft 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 gehören zu den Aufgaben, die viele Programmierer täglich ausführen.

Joel Brown
quelle
4

Hier erzähle ich Ihnen praktische Dinge, bei denen ich auf Mathematik gestoßen bin, um einige Computerprobleme zu lösen (insbesondere im Internetbereich):

  1. Suchmaschinen verwenden Vector Calculus zum Durchsuchen von Daten.
  2. Die Matrix-Faktorisierung kann für viele Dinge wie die Stimmungsanalyse verwendet werden.
  3. Sie müssen Calculus, Summations kennen, um die Komplexität des Codes herauszufinden, den Sie schreiben.
  4. Wahrscheinlichkeit wird häufig beim Abrufen / Suchen probabilistischer Informationen verwendet
  5. Der Satz von Naive Bayes wird in der Predictive Analytics verwendet.
  6. Für ein Konzept mit dem Namen SVM, das auch beim maschinellen Lernen zur Lösung von Kategorisierungsproblemen verwendet wird, müssen Sie Kenntnisse in Sachen Hyperebene usw. haben.
  7. Sie müssen Entropy verstehen, um Natural Language Processing zu betreiben.
  8. Die von Suchmaschinen verwendete latente semantische Indizierung / Hauptkomponentenanalyse stützt sich stark auf Matrixalgebra. & bald......
Yavar
quelle
3

Ein Problem mit Ihrer Frage ist, dass "Mathematik" und "Programmieren" 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 ich im Vergleich zu meinen Kollegen weniger wusste, je mehr ich lernte. 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, größtenteils nicht vertraut zu sein.

Ebenso bin ich jetzt ein datenbankgetriebener Webanwendungsentwickler. Wenn Sie mich mit jemandem vergleichen, der Embedded-Assembler-Programmierung betreibt, würden Sie uns vielleicht 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 (jenseits der Grundlagenrechnung) fortsetzen, 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 Themen auseinandersetzen werden.

Sicher, in der Erstprogrammierung werden Sie wahrscheinlich etwas über Zeigerarithmetik lernen. Sie werden kurze Programme schreiben, um dieses Konzept zu veranschaulichen, und Sie werden verstehen, wie es Ihren Computer antreibt, wenn Sie Ihren Willen befolgen. Wenn Sie jedoch wissen, wie Zeigerarithmetik in der Zusammenfassung funktioniert, können Sie Zeiger in einem realen Programm nicht gut verwenden. Wenn es an der Zeit ist, 10.000 Codezeilen durcheinander zu bringen und Ä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 unterschiedliche 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 in Einklang zu bringen. 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, sich auf Ihre Fähigkeit auswirkt, Ihre Aufgaben rechtzeitig zu erledigen, und Sie werden jeden Tag wieder viele Entscheidungen treffen, die sich auf Ihre Arbeit auswirken.

Schließlich müssen Sie Ihre philosophische Disziplin beibehalten, um in der Lage zu sein, neue Ideen und Konzepte aufzunehmen, um fortzufahren, 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 zu 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.

Reismehl Cookies
quelle
Besonders gut gefällt mir der Teil "Wie die meisten von uns wissen". Das ist die Schwierigkeit, die ich sehe, wenn ich die meisten Antworten hier lese: Die "linke Hand" weiß nicht, was die "rechte Hand" tut.
Loop Space
Ich denke, "die linke Hand weiß nicht, was die rechte tut", fasst es zusammen. Das OP sagte, dass er mit Java "von unten anfängt". Programmierung in Java ist so etwas wie den Bau etwas von Schrauben und Holz aus dem Baumarkt, im Gegensatz zu diesen Schrauben Bearbeitung und Herstellung von lebenden Bäumen um Holz (was mehr wäre wie die Programmierung in Assembler)
Reismehl - Plätzchen
2

Mathe beschreibt (sagen wir) eine kubische Gleichung.

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

Das Konstruieren dieses (oder eines beliebigen) Algorithmus in einer Weise, die von einer Maschine ausgeführt werden kann, ist Programmieren .

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

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

mcmcc
quelle
3
Das hängt von Ihrer Domain ab. Wenn Sie nur ein Programmierer sein wollen, müssen Sie Mathe nicht wirklich kennen. Wenn Sie ein wichtiger Teil des Geschäfts werden möchten (in vielen Domänen), ist es wichtig, Lösungen für Domänenprobleme zu finden. Sehr häufig können diese Lösungen nur abgeleitet werden, wenn sie einen soliden mathematischen Hintergrund haben. Möglicherweise müssen Sie kein Experte in einem bestimmten mathematischen Bereich sein, aber Sie sollten wissen, wie Sie eine breite Palette von Mathematik anwenden, damit Sie herausfinden können, welche Mathematik Ihr aktuelles Problem lösen könnte.
Dunk
2

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 Algebra hat, dass man nicht durch Null teilen kann. Aber ich habe so manche Frage gesehen, bei der das Poster das nicht verstand und anschließend die Fehlermeldung nicht verstand, die im Grunde "Sie können nicht durch Null teilen" lautete. 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, müssen Sie die dahinter stehenden Konzepte nicht verstehen. Übrigens habe ich in vielen Jahren Berufserfahrung noch nie einen schlechten Programmierer getroffen, der ein solides Verständnis für Mathematik hatte.

In einigen Bereichen setzen Sie viel Mathematik direkt ein, z. B. Spieleprogrammierung, statistische Programmierung, Finanzprogrammierung und einige eingebettete Systeme. In einigen dieser Fälle erhalten Sie die Gleichungen, die Sie für die Anforderungen benötigen, und manchmal auch nicht. Selbst wenn Sie die Gleichung erhalten, müssen Sie die Gleichung von Anfang an verstehen, um diese Gleichungen ordnungsgemäß in Programmcode zu übersetzen.

Während Sie mit etwas mehr als der grundlegenden Algebra in Ihrer grundlegenden CRUD-Anwendung auskommen können, erfordern die meisten der interessanteren Probleme und fortgeschritteneren Arbeiten mathematisches Verständnis. Warum sollten Sie sich also von Anfang an darauf beschränken, Mathematik nicht gründlich zu lernen?

HLGEM
quelle
2

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 als Parameter an eine andere Funktion weiterzugeben. Im Allgemeinen entspricht der Begriff des abstrakten Denkens, der mit dem Programmieren verbunden ist, ziemlich genau der Mathematik.

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

JohnFx
quelle
1

Aus Sicht des Programmierers: Mathematik ist eine Teilmenge der Programmierung.

Mathematik in der Programmierung angewendet:

Wenn Sie mit Sammlungen (Arrays, Listen, Maps usw.) in der Programmierung arbeiten, haben Sie es mit realen Implementierungen mathematischer Abstraktionen zu tun.

Programmieren ohne Mathematik:

Wenn Sie dies tun println("Hello World"), ist die Tatsache, dass die Position auf dem Bildschirm, die Länge der Zeichenfolge usw. mithilfe von Mathematik berechnet werden, in der Regel irrelevant.

Verwenden der Programmierung für Mathematik:

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

Jack
quelle
Es gibt eine Schnittmenge von Dingen, die sich sowohl auf Mathematik als auch auf Programmierung beziehen. Weder ist eine richtige Teilmenge der anderen. Wenn Sie mehr MATH wüssten, würden Sie das wissen. Lassen Sie uns ein Venn-Diagramm zeichnen und sehen, ob wir in jedem Bereich einen Gegenstand finden können. Algebra ist mathematisch und programmtechnisch. Prinzipien der objektorientierten Programmierung sind keine rein mathematischen, sondern Abstraktionen, da Mathematik eine Abstraktion ist. Diskrete Mathematik ist für Programmierer unglaublich nützlich, genau wie Statistik. Kalkül taucht für die meisten Programmierer selten auf, für mich seit 30 Jahren noch nie.
Warren P
0

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

Nehmen wir ein Beispiel für die Erstellung eines Hypothekenrechners. Dazu muss man wissen, was für ein Interesse besteht, was für eine Verbindung das ist und so weiter. Wenn Sie die zugrundeliegende Mathematik nicht verstehen , muss Ihnen jemand anderes diese Informationen zur Verfügung stellen. Normalerweise ist es der Programmierer, der alles macht. Bei Bedarf können Sie jedoch jederzeit Hilfe anfordern.

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

Wenn Sie über gute Mathematik verfügen, haben Sie mehr Material, mit dem 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, um auf diese Weise mehr zu lernen, nur weil Sie stark in Mathe 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 finanziellen Problemen fast verloren sind. Wenn sie sich nicht mit dem Modell auskennen, wird das Erlernen der Sprache selbst schwieriger und ehrlich gesagt sehr frustrierend.

Kein Name
quelle
3
Ob jemand ein finanzielles Problem lösen kann oder nicht, hat fast nichts mit Programmierkenntnissen zu tun. Ich arbeite mit einer Signalverarbeitungssoftware, die eine Menge Mathe enthält, die mir weit über den Kopf geht. Mein Job ist nicht das Rechnen, sondern das, was von Mathematikern und Ingenieuren produziert wird, für die das Programmieren nicht in ihrem Fachgebiet liegt, in gute Software umzuwandeln. Weil das meine Domain ist.
Blrfl
In den meisten praktischen Bereichen sind die beiden getrennt: Jemand hat das Modell und jemand muss es programmieren. Also ja, du hast recht. Aber damit jemand von Anfang an das Programmieren lernen kann, muss er die Mathematik kennen. Sonst wird es schwierig. Sie müssen über Variablen, Ausdrücke und verschiedene mathematische Eigenschaften Bescheid wissen. Ich habe mit dem Optimierungsteam gearbeitet. Sie arbeiteten an Lösern. Wenn sie keine Mathematikkenntnisse hätten, hätten sie nie daran gearbeitet. Ich antwortete aus der Perspektive des Lernens und wusste, dass er nur ein neuer Lernender ist, der in die Programmierung einsteigt.
Noname
Vom Standpunkt des Lernens aus ist es unerlässlich, einen mathematischen Hintergrund zu haben, sonst wird kein anderes Lernen stattfinden.
Noname
Solver sind in hohem Maße ein mathematisches Problem, weshalb es naheliegend ist, die Mathematik zu verstehen, um daran arbeiten zu können. Ich sage nicht, dass es beim Programmieren keine mathematischen Konzepte gibt , aber wie @DeadMG in seiner Antwort hervorhob, gibt es viele sehr praktische Aspekte des Prozesses, bei denen Mathematik absolut keine Hilfe bietet.
Blrfl
1
@Birfl, DeadMG ist ein bisschen ignorant (und fast immer falsch). Mathematik würde in all diesen "weichen" Bereichen immer helfen. Die Psychologie basiert stark auf Mathematik. Die Soziologie ist noch mathematischer. Und im Falle eines Systemdesigns sollten Sie es nicht ohne einen sehr guten Hintergrund in Semantik (der aus diskreter Mathematik stammt) anfassen. Es gibt keine Aspekte in der Programmierung, die nicht mathematisch sind. GUI-Design und CRUD-Codierung sind enthalten.
SK-logic
0

Die theoretische Grundlage der Informatik (die mehr als nur Programmierung ist) ist mathematischer Natur. Alles, von der Definition der Berechenbarkeit über die Analyse und den Ausdruck von Algorithmen bis hin zu den Spezifikationen von Programmiersprachen, basiert auf einer Vielzahl von mathematischen Grundlagen. Auf dieser Wikipedia-Seite finden Sie einen Überblick über die Art der Mathematik.

Das meiste davon ist nicht wirklich notwendig, um zu wissen, ob Sie nur Sling-Code wollen. Was die angewandte Mathematik anbelangt, werden Sie wahrscheinlich nichts weiter als die grundlegende Algebra anwenden, es sei denn, Sie beschäftigen sich mit einem Gebiet, das ernsthafte Kenntnisse im Knacken von Zahlen erfordert (detaillierte physikalische Simulationen, Signalanalyse, Finanzanalyse und Vorhersage usw.) auf einer täglichen Basis.

John Bode
quelle
0

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

Wenn Sie einfache Webanwendungen mit etwas Logik erstellen, benötigen Sie wahrscheinlich nicht die fortgeschritteneren Matheklassen, die für viele Abschlüsse erforderlich sind. Wenn Sie mit etwas prozessorlastigeren Dingen arbeiten, brauchen Sie mehr Mathematik. Wenn Sie auf irgendeinem wissenschaftlichen Gebiet arbeiten, sollten Sie Ihre Kalkulationsreferenzen stets zur Hand haben.

Ein weiterer Ort, an dem Sie Mathe brauchen, 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 zu schnelleren Zeichen kommen, wenn Sie zu einem Block nach NE wechseln.

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

kcunning
quelle
Sie müssen auf jeden Fall Ihre Trigger- und Vektor-Mathematik für Spiele kennen.
Alan B
Absolut. Ich habe jedoch auch festgestellt, dass das Schreiben von Spielen eine großartige Möglichkeit sein kann, Mathematik neu zu lernen, die Sie vielleicht von der High School vergessen haben, solange Sie sich nicht an eine Frist halten.
kcunning
0

Ich bin kein Mathe-Experte! 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 verknüpft.

Dann gibt es Kleinigkeiten wie das Wissen, dass Sie mithilfe des Modulus-Operators steuern können, wie viele Spalten in einer Zeile sind.

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

Wenn Sie beide Skillsets besitzen, können Sie natürlich mitmachen!

TecBrat
quelle
0

Einfache Antwort; Mathe macht dich schnell . Sicher, Sie können Ihre Codierungsprobleme mit google / se / wikipedia beseitigen, aber Sie müssen nicht genug rechnen . Ob Sie es glauben oder nicht, das richtig trainierte menschliche Gehirn ist schneller als Google . Je mehr Mathematik Sie wissen, 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. Während Sie Ihre Programmierprobleme lösen, werden Sie ohnehin Mathematik lernen, aber wenn Sie sich auf Mathematik konzentrieren, wird es ein weitaus effizienterer Prozess sein.

Ihre Frage ist wie eine Frage eines Rockmusikers, warum sie eine formelle musikalische Ausbildung benötigen würden. Ist es möglich, ohne sie erfolgreich zu sein? Sicher. Macht es dich viel mehr zu einem Badass, wenn du es machst? Absolut.

Etwas kompliziertere Antwort - Wenn Mathematiker und Programmierer das Wort "Lösung" verwenden (für Probleme also keine Gleichungen - dh keine "Wurzeln"), meinen 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 ist ein guter Programmierer, aber er hasst Mathe, ist ein großer fetter Lügner. Was geschah, war, dass sie von einem schlechten HS- oder College-Lehrer aus der formalen Mathematik ausgeschlossen wurden und seitdem das Gefühl haben, dass sie "nicht gut in Mathe sind". Jeder ohne Lernbehinderung (dh jeder, der eine OO-Sprache lernen kann) kann alles bis einschließlich Sophomore Calculus.

Jamesson
quelle
0

Die Aktionen der Mathematik und 99% der Programmierung haben sehr wenig gemeinsam. Mathematik muss kein großartiger Programmierer sein. Ich habe mehrere Kurse auf College-Niveau in Mathematik belegt, darunter, ohne darauf beschränkt zu sein, die Elemente der linearen Algebra in Kalkül I, II, III und einige andere.

Ich bin seit über 10 Jahren Softwareentwickler und brauchte nur selten etwas anderes als einfache Mathematik. Es gibt einige Ausnahmen, in denen Mathematik benötigt wird: wie Grafiken und andere Bereiche. Für 99% der Programmierung und Softwareentwicklung ist jedoch keine Mathematik erforderlich. Es erfordert logisches Denken, Algorithmen, OOP, Funktionen, Zerlegen von Problemen usw.

Pascal Aschwanden
quelle
0

1) Beim Erlernen der Programmierung stoßen Sie auf Fachjargon (dh Algorithmus). Um den Algorithmus zu analysieren, muss man eine Vorstellung von der Natur der polynomischen, logarithmischen und exponentiellen Funktionen haben.

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

---> Mathematik für Informatik

---> Kodierung der Matrix: Lineare Algebra durch Anwendungen der Informatik .

Für einen Anfänger fühle ich mich dynamisch getippte Sprachen wie python/ schemesind die ersten besten Sprachen für die Programmierung. Statische typisierte Sprachen wie Java/ C++sind nicht die besten für den Anfang. Opencourseware von "MIT / UOC-Berkeley / Stanford" kann Sie besser führen als ein regulärer College-Lehrplan. Ich wette, dass du!!!

Wechsel
quelle
-1

Ich persönlich würde sagen, es kommt auf den Grad der Programmierung an. Die Datenmodelle und die Korrelationen zwischen diesen und den beteiligten Programmieralgorithmen. Zum Beispiel: Um ein Programm zu schreiben, das "Hallo Welt" ausgibt, sehe ich keine Notwendigkeit, jemanden mit höherer Mathematik vertraut zu machen. Das Ausmaß der mathematischen Beteiligung hängt von der Komplexität des Problems ab, das programmatisch gelöst werden muss.

Aubede
quelle
-2

Nur meine Erfahrung, nicht mehr:
Ich bin kein Mathematiker. Ich bin kein Genie, nur ein Autodidakt.
... und nach vielen Jahren merke ich, dass ich mit Intuition arbeite

Zuerst habe ich Pick (totes System) von Grund auf gelernt (allein mit Papierdokumentation und Beispielen),
... nach C, C ++ zum Spaß und Java für die Arbeit.

Wie Sie bereits sagten, kann ich sagen, dass das Erlernen dieser Sprache kein mathematisches Problem ist (auch wenn Ihnen die grundlegende / minimalistische Algebra hilft), sondern ein logisches .

Jetzt helfen und korrigieren viele Tools (wie Eclipse) Sie: Sie müssen sich auf das konzentrieren , was Sie tun möchten , mit nur 52 reservierten Wörtern ... und vielen Bibliotheken, die nicht mehr für Sie arbeiten.

Also, wenn Sie Sprache mögen, wählen Sie ein Java-Projekt, lernen Sie Pattern Design, UML, verstehen Sie JVM und wie Sie es mit Bigloo und Scala verwenden, verstehen Sie es immer wieder während 10 000 Stunden.

Die Erfahrung in Java gibt Ihnen gut bezahlte Jobs und für lange Zeit in großen Industrieprojekten die Möglichkeit, in eine andere Umgebung zu wechseln, da Sie in der Lage sind, informatisch und nicht mathematisch zu sprechen .

Wenn das Verstehen von Sprache (Wörter, Bedeutung, Konzept und andere verborgene logische Wissenschaften wie Semantik, Ontologie usw.) ein gutes Ziel für Ihre menschliche Person ist, können Sie jetzt Ihr ganzes Leben lang damit beginnen .

Andernfalls experimentieren Sie auf andere Weise.

Viele Grüße
Claude

cl-r
quelle
Nochmals siehe unten Beitrag. Sie rechnen, Sie geben es nur nicht zu.
Jamesson
1
Ich habe gesehen, aber ich habe auch andere Posts gefunden, die auf die erste Frage nach dem mathematischen Interesse eines Studenten (der die Grundlagen kennt, keine Fachgebiete) mit -1 ^ n antworteten, als sie über Logik in Latein, Philosophie, Sprache ... real berichteten Leben. Ist der mathematische Verstand so eingeschränkt, dass alles, was nicht in der Gleichung steht, verworfen wird, ohne das Leben um sich herum zu verstehen und zu vergessen, dass Newton mit einer von einem Apfel gegebenen Intuition beginnt? Vielleicht liegt es am Moderator, den Geist für die anderen Welten zu öffnen, wenn dies möglich ist. Dies wird die beiden Seiten der Diskussion bereichern. Sonst werde ich in meinem Schreiben vorsichtig sein.
Cl-R
-2

Jemand hätte fast den Nagel auf den Kopf getroffen. Programmieren ist Mathematik. Insbesondere ist die Programmierung ein Zweig der mathematischen Logik, der als Berechenbarkeitstheorie oder Rekursionstheorie bezeichnet wird.

Andere Bereiche der Mathematik sind direkt beteiligt, insbesondere die formale Sprache und die Automatentheorie. Diese helfen bei der Beschreibung regulärer Ausdrücke, die bei der Mustererkennung verwendet werden, und formaler Grammatiken, mit denen Programmiersprachen beschrieben und analysiert werden.

Jeder, der sagt, Programmierung sei keine Mathematik, weiß nicht, wovon er spricht, oder hat ein hintergründiges Motiv, wie ein "Intellectual Property" -Maximalist, der hofft, durch ein Patent auf einen Algorithmus oder eine andere grundlegende Mathematik einen Gewinn zu erzielen Tatsache oder Entdeckung.

Einige Referenzen für die Programmierung als Mathematik und die Konsequenz, dass Sie nicht wissen, wovon Sie sprechen:

Programm sind Beweise: 19. Jahrhundert Logik und 21. Jahrhundert Computing

Programme sind Beweise: Modelle und Typen in Lambda Calculus

Wikipedias Curry-Howard Korrespondenz Artikel

Über die ungewöhnliche Wirksamkeit der Logik in der Informatik

Die unvernünftige Wirksamkeit der Logik

Ja, diese sind schwer mit dem "logischen" Teil der mathematischen Logik verbunden, aber Mathematik ist allgemein als ein paar Axiome anerkannt, und ihre logischen Konsequenzen ergeben sich aus der Logik erster Ordnung.

Soweit ich etwas anderes sage und ein "IP" -Maximalist bin:

So patentieren Sie einen Algorithmus in den USA . Algorithmen sind nicht patentierbar, aber Patente werden für Algorithmen erteilt, indem sie nicht als Algorithmen bezeichnet werden. Es ist nicht schwer, eine Menge Material im Web zu finden, das entweder auf diesen Widerspruch hinweist oder ihn zu erklären versucht.

Bruce Ediger
quelle
6
-1 für das Ad Hominem am Ende.
Charles E. Grant
@charles ad hominem gegen wen? Das ursprüngliche Plakat? Ich denke, der Punkt über Patente ist aufschlussreich (auch wenn er hätte besser formuliert werden können).
Gcbenison
@gcbenison: "Jeder, der sagt, dass Programmierung keine Mathematik ist ... oder ein hintergründiges Motiv hat", ist eine klassische Ad-hominem-Attacke: Ich muss auf Ihre Argumentation nicht antworten, weil Sie eine schlechte Person sind. Ich fand es irritierend, weil ich nicht denke, dass Programmieren Mathematik ist, und ich denke , dass Softwarepatente ein Gräuel sind. Ich habe einen MS in Angewandter Mathematik, aber ob ich weiß, wovon ich spreche, ist zweifellos offen für Diskussionen.
Charles E. Grant
@commentators: danke. Ich ignoriere diese Verhaltensweisen, weil sie selbst projektiertes Elend sind, das anderen zugeschrieben wird. --- zu Bruce Ediger: Zweifel Zeichen Reflexion im Gange.
Cl-R
@ cl-r: Ich habe an sehr spezifische Beispiele gedacht, wie die SCO-Anti-Linux-Kampagne und nature.com/news/… Wenn wir als Programmierer die Definition von Mathematik zum Wohle des Anwalts zulassen, dann tun wir der Zivilisation allesamt einen großen Nachteil .
Bruce Ediger
-2

Mathematik hat alles mit Programmieren zu tun. Zum Beispiel müssen Sie in der Spielprogrammierung Matyhs für die Physik verwenden und mehr weniger alles tun. Um den Spieler x - Position in Java zu bewegen würden Sie tun , int x = x + speed * deltaTimeoder int x = x - speed * deltaTimeaber man könnte sagen , dass die grundlegende Mathematik ist so bewegen auf fortgeschrittenere Sachen läßt. Es gibt einen Algorithmus zum Bewerten von Schachspielern, den Elo-Algorithmus.

Dies ist der erklärte Elo-Algorithmus

Wenn Sie immer noch der Meinung sind, dass dies grundlegend ist, versuchen Sie dies. Wie berechnet man das Alter einer Person, wenn man einen Geburtstag, einen Monat und ein Jahr bekommt? Subtrahieren Sie das Geburtsjahr von diesem Jahr und prüfen Sie dann, ob der Monat kürzer als dieser Monat ist und ob er nicht 1 subtrahiert.

Es ist keine Magie, es ist harte Arbeit und gute Mathematik.

one2three
quelle
-4

Ok, ich werde wahrscheinlich eine Menge Abstimmungen dafür bekommen, aber Programmierung und Mathematik sind zwei völlig unabhängige Dinge. Jemand kann ein großartiger Entwickler sein, der nur die Grundlagen wie Addition, Multiplikation und grundlegende logische Operationen kennt.

Die meisten Entwickler werden während ihrer beruflichen Laufbahn keine einzige Gleichung lösen, und Dinge wie die große O-Notation können auch auf nicht-mathematische Weise erfasst werden. Denken Sie nur an das Zeug, stellen Sie sich vor, dass ein Teil in Ihrem Kopf herumfliegt, und voila, Sie können erkennen, was für ein großes O das Zeug ist, wenn jemand erklärt, was Protokoll und Macht sind.

Manchmal kann Mathematik es einfach machen oder Sie können stolz darauf sein, dass Sie etwas bewiesen haben, da Sie die Bedeutung des Programmierens auf einen mathematischen Bereich ausweiten können, indem Sie ihn diskrete Mathematik und dergleichen nennen, aber viele Differentialgleichungen und Integrale lernen und Wie man das beweist, ist meiner Meinung nach nicht gerade die beste Idee, was zu tun ist, wenn man als Programmierer erfolgreich sein will.

Zumindest habe ich die Mathematik seit 10 Jahren nicht mehr angefasst, ich hatte die ganze Zeit Streit mit meinen Mathematikprofessoren, und als ich eine Mathematik für Echtzeit-Rendering brauchte, lernte ich alles von der Seite des Programmierers, ohne irgendwelche Theoreme zu beweisen, und Für mich war es einfach und leicht zu verstehen, verglichen mit all den Dingen, die Mathematikprofessoren mit der Bemerkung "Sie können kein guter Programmierer sein, wenn Sie die Mathematik nicht kennen" in den Kopf gesetzt haben. Klar kannst du, einfach!

Jetzt kenne ich mich mit Mathematik aus, damit ich mit Programmierern mit mathematischem Hintergrund über alle Unterschiede und Dinge des Protokolls sprechen kann, aber nur aus dem Grund, damit sie nicht ohnmächtig werden. Da dieses Zeug in 99,9% der Fälle unbrauchbar ist, kann es aus Sicht des Programmierers 1000x effektiver erlernt werden.

Zum Teufel brauchen Programmierer mindestens 5 Jahre, um eine Programmiersprache + Frameworks + Best Practices zu beherrschen. Warum um alles in der Welt sollten sie lernen, die Sätze zu beweisen? Mathematikstudenten machen das Mathezeug, Programmierer bringen das Zeug zum Laufen, so sollte es funktionieren.

Coder
quelle
8
Ein Kind sagt seiner Mutter, dass er kein Mathe braucht, weil er erwachsen wird und Millionär im Baseball ist. Seine Mutter sagt zu ihm: "Du brauchst Mathematik, um deine Millionen zu zählen."
Nav
2
Entschuldigung, ich muss nicht zustimmen. Das Studium der Mathematik lehrt Sie, wie man logisch denkt. Wenn Sie nicht logisch denken können, ist alles, was Sie schreiben werden, eine Menge Code, der sich nicht skalieren lässt. Ich sage nicht, dass Sie ein Experte in Mathe sein müssen oder sogar Mathe mögen, noch müssen Sie es in Ihrem täglichen Leben verwenden. Sie müssen es jedoch studieren, wenn Sie echte Programmierprobleme lösen möchten.
jmort253
2
@ jmort253: Das Studium der Mathematik macht dich nicht zu einer logisch denkenden Person. Es ist entweder etwas, das in Ihrem Kopf verkabelt ist, oder nicht. Ich habe Mathe seit der Schule gehasst, aber ich bin eine sehr logische Person. Programmieren ist keine Mathematik, ich beschäftige mich seit über 10 Jahren mit Systemprogrammierung, und das kann ich mit 100% iger Sicherheit sagen, und Sie können sogar noch weniger Mathematik erwarten, wenn Sie sich mit Webentwicklung oder SQL-Administration beschäftigen. Ihre Aufgabe ist es nicht, neue mathematische Theorien zu entwickeln, Ihre Aufgabe ist es, die Arbeit mit begrenzten Ressourcen auf wartbare Weise unter Verwendung der effizientesten Algorithmen und Container zum Laufen zu bringen.
Coder
2
@Nav: Es ist für jede Person sinnvoll, bis hin zu Gleichungen mit x und y Grundrechenarten zu lernen. Aber Ihre Millionen zu zählen ist normalerweise das, was Wirtschaftsprüfer und Anwälte tun, weil Sie sonst ein Staatsgesetz verpassen, das etwas mit der Erklärung zu tun hat und alles so oder so verliert. Sie sollten klug genug sein, um zu verstehen, was vor sich geht, aber wenn Sie sich erst einmal hervorgetan haben, ist es kostengünstiger, spezialisierte Dienste zu nutzen, die Ihre Arbeit korrekt, schnell und pünktlich erledigen, während Sie im Fitnessstudio in Form bleiben. um diesen hart verdienten Top 5 Platz zu halten.
Coder
10
Mathematik ist nicht der Prozess des Lösens von Gleichungen. Wenn die einzige Mathematik, die Sie jemals gesehen haben, die Mathematik ist, die in der Schule unterrichtet wurde, haben Sie die eigentliche Mathematik noch nie gesehen .
Doppelgreener