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:
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.
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 .
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 , Vector
was bedeutet , dass wir alle Dinge tun können , die Vector
zu 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:
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 ).
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.
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.
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.
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 .