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.
Antworten:
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:
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 , dieVector
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:
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 .
quelle
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.
quelle
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.
quelle
Zwei spezifische Beispiele, bei denen eine Mathematikausbildung für die Informatik wichtig ist, sind:
1) Relationale Datenbanken, in denen relationale Berechnungen verwendet werden.
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.
quelle
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.
quelle
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+1
wird immer gleich sein2
und dasset a = 1
Mittela
wird 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
13x13
wird13x10 + 13x3
, was für mein Gehirn viel einfacher ist, damit zu arbeiten, und ich muss das nachverfolgen13x10=130 + 13x3=39
, also130+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.
quelle
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.)
quelle
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.
quelle
Hier erzähle ich Ihnen praktische Dinge, bei denen ich auf Mathematik gestoßen bin, um einige Computerprobleme zu lösen (insbesondere im Internetbereich):
quelle
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.
quelle
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.
quelle
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?
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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!
quelle
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.
quelle
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.
quelle
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
/scheme
sind die ersten besten Sprachen für die Programmierung. Statische typisierte Sprachen wieJava
/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!!!quelle
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.
quelle
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
quelle
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.
quelle
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 * deltaTime
oderint x = x - speed * deltaTime
aber 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.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.
quelle
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.
quelle