Ist Mathematik zum Programmieren notwendig? [geschlossen]


117

Ich habe zufällig während der College-Tage mit einem Freund darüber diskutiert, ob fortgeschrittene Mathematik für einen erfahrenen Programmierer notwendig ist. Er hat heftig dagegen gestritten. Er sagte, dass Programmierer nur grundlegende mathematische Kenntnisse von der High School oder der College-Mathematik für das neue Jahr benötigen, nicht mehr und nicht weniger, und dass fast alle Programmieraufgaben ohne fortgeschrittene Mathematik erledigt werden können. Er argumentierte jedoch, dass Algorithmen für Programmierer von grundlegender Bedeutung und ein Muss sind.

Mein Standpunkt war, dass alle Fortschritte in der Informatik fast ausschließlich von Fortschritten in der Mathematik abhingen, und daher würde ein gründliches Wissen in Mathematik Programmierern sehr helfen, wenn sie mit realen herausfordernden Problemen arbeiten.

Ich kann mich immer noch nicht entscheiden, welche Seite der Argumente richtig ist. Können Sie uns Ihre Haltung aus eigener Erfahrung mitteilen?


7
Zehn Jahre später rief ich meinen Mathematiklehrer an, um ihm zu sagen, dass ich während meiner gesamten Karriere nie fortgeschrittene Mathematik verwendet habe. Dick bewegen, ich weiß, aber tolle Frage! Plus eins.
Chris McCall


Bitte sehen Sie die am höchsten bewertete Antwort auf diese Frage .
Boris Stitnicky

Eher, als. Schließen, dies sollte zu Programmierern migriert werden.
Chris Cudmore

Antworten:


111

Um Ihre gestellte Frage zu beantworten, muss ich sagen: "Nein, Mathematik ist für die Programmierung nicht erforderlich." Wie andere Leute in diesem Thread vorgeschlagen haben, besteht meines Erachtens ein Zusammenhang zwischen dem Verständnis der Mathematik und der Fähigkeit, "algorithmisch zu denken". Das heißt, abstrakt über Quantität, Prozesse, Beziehungen und Beweise nachdenken zu können.

Ich begann mit dem Programmieren, als ich ungefähr 9 Jahre alt war, und es wäre eine Strecke zu sagen, dass ich zu diesem Zeitpunkt viel Mathematik gelernt hatte. Mit ein wenig Mühe war ich jedoch in der Lage, Variablen, Schleifen, goto-Anweisungen (verzeih mir, ich war Vic 20 BASIC und ich hatte noch keine Dijkstra gelesen) und grundlegende Koordinatengeometrie zu verstehen, um Grafiken auf den Bildschirm zu bringen .

Schließlich schloss ich ein Honours-Studium in reiner Mathematik mit einem Nebenfach in Informatik ab. Obwohl ich mich hauptsächlich auf die Analyse konzentrierte, studierte ich auch einiges an diskreter Mathematik, Zahlentheorie, Logik und Berechenbarkeitstheorie. Abgesehen davon, dass ich einige Ideen aus Statistik, Wahrscheinlichkeitstheorie, Vektoranalyse und linearer Algebra auf die Programmierung anwenden konnte, gab es wenig Mathematik, die ich studierte und die direkt auf meine Programmierung während meines Grundstudiums und die kommerzielle und Forschungsprogrammierung anwendbar war, die ich danach machte.

Ich bin jedoch der festen Überzeugung, dass die formalen Denkmethoden, die die Mathematik erfordert - sorgfältiges Denken, Suchen nach Gegenbeispielen, Aufbau axiomatischer Grundlagen, Erkennen von Verbindungen zwischen Konzepten - eine enorme Hilfe waren, wenn ich große und komplexe Programmierprojekte in Angriff genommen habe.

Überlegen Sie, wie Sportler für ihren Sport trainieren. Zum Beispiel verbringen Fußballer zweifellos einen Großteil ihrer Trainingszeit mit grundlegenden Fußballfähigkeiten. Um ihre allgemeine Fitness zu verbessern, können sie jedoch auch Zeit im Fitnessstudio mit dem Fahrrad oder Rudergerät verbringen, Gewichte machen usw.

Das Studium der Mathematik kann mit Krafttraining oder Cross-Training verglichen werden, um Ihre mentale Stärke und Ausdauer beim Programmieren zu verbessern. Es ist absolut notwendig, dass Sie Ihre grundlegenden Programmierkenntnisse üben, aber das Studium der Mathematik ist eine unglaubliche mentale Übung, die Ihre analytischen Kernfähigkeiten verbessert.


6
Ich möchte hinzufügen, dass Mathematik nicht nur Krafttraining für Ihre mentale Stärke ist, sondern auch die Tür zu neuen Problemen und Lösungen öffnet. Während meines Praktikums in der Bildverarbeitung wäre es mir beispielsweise nicht möglich, unsere Algorithmen zur Rauschunterdrückung zu implementieren, ohne die PDEs gründlich zu verstehen. Der resultierende Code war einfach, aber sehr präzise. Und die Mathematik hat uns dorthin gebracht. Noch erstaunlicher ist die Schönheit dieser Formeln. Ein kleiner PDE-Ausdruck kann in einige Seiten Code übersetzt werden. Ohne die ursprüngliche Formel ist es schwierig zu sehen, wie Sie jemals damit enden würden.
Joe

Mathe ist nicht erforderlich für die Programmierung, da die Programmierung ist Mathematik. Es kann gute oder schlechte Mathematik sein (wie wenn Orang-Utans langer Anruf in die Ook-Sprache übersetzt wird ), aber wenn ein Programmierer ein Objektmodell von etwas entwirft, führt ze (normalerweise unwissentlich) einen mathematischen Akt aus. Man muss also wieder keine Mathematikbücher lesen, um zu programmieren, aber das ändert nichts an der Tatsache, dass Programmieren Mathematik ist und dass es (wie Euklid es ausdrückte) keinen königlichen Weg dorthin gibt.
Boris Stitnicky

56

Während fortgeschrittene Mathematik möglicherweise nicht für die Programmierung erforderlich ist (es sei denn, Sie programmieren fortgeschrittene Mathematikfähigkeiten), sind der Denkprozess der Programmierung und der Mathematik sehr ähnlich. Sie beginnen mit einer Basis bekannter Dinge (Axiome, zuvor bewährte Theorien) und versuchen, an einen neuen Ort zu gelangen. Sie können keine Schritte überspringen. Wenn Sie Schritte überspringen, müssen Sie die Lücken ausfüllen. Es ist ein kritischer Denkprozess, der die beiden unglaublich ähnlich macht.

Auch Mathematiker und Programmierer denken abstrakt kritisch. Dinge der realen Welt werden durch Objekte und Variablen dargestellt. Die Fähigkeit, von konkret zu abstrakt zu übersetzen, verbindet auch die beiden Felder.

Es besteht eine sehr gute Chance, dass Sie wahrscheinlich gut in dem anderen sind, wenn Sie in einem gut sind.


Man könnte also sagen, dass jemand, der viele Kreuzworträtsel macht oder Scrabble spielt, eher gut programmiert als jemand, der dies nicht tut. In der Beziehung scheint es eher um die Wahrscheinlichkeit als um eine strikte Abhängigkeit zu gehen.
Liam

Die Genauigkeit und Disziplin bei der Lösung eines mathematischen Problems führt zur Programmierung. Sie müssen in der Lage sein, ein Problem zu dekonstruieren und es zuerst aus der offensichtlichen Richtung und dann aus kreativeren Richtungen in beiden Disziplinen anzugehen.
Bramha Ghosh

4
Zwei großartige Programmierer, die ich sehr bewundere, haben nicht Informatik studiert, sondern wurden als Mathematiker ausgebildet und haben nur ihre Karriere geändert: Miguel de Icaza und Alexander Stepanov. Übrigens hat Stepanov einmal gesagt, dass man bei der Arbeit an Mathematik "nicht mit Axiomen beginnt, sondern mit Axiomen endet ". : D
Joe Pineda

@Liam - Es geht darum, Muster abzugleichen und kurzfristig Dinge im Gedächtnis zu jonglieren. Beide Aktivitäten erfordern diese Fähigkeiten.
Jcolebrand

+1 für "Es besteht eine sehr gute Chance, dass Sie wahrscheinlich gut in dem anderen sind, wenn Sie in einem gut sind."
Thorbjørn Ravn Andersen

39

Informatik! = Programmierung

OK, im Ernst, ich kenne gute und schlechte Programmierer, die Hauptfächer Englisch und Psychologie waren, und einige, die Hauptfächer Informatik waren. Einige sehr berühmte Leute, die ich als Entwickler bewundere, hatten keinen CS-Hintergrund. Larry Wall (Perl) war zum Beispiel ein Linguist. Auf der anderen Seite ist es hilfreich, etwas über die Domain zu wissen, an der Sie arbeiten, denn dann können Sie zumindest sehen, ob Ihre Daten sinnvoll sind, und Ihren Kunden / Benutzern helfen, einen Drilldown zu dem durchzuführen, was sie wirklich wollen. Und ja, es gibt das Problem der Rechenkomplexität und der effizienten Datenstrukturen sowie der Programmkorrektheit. Das ist etwas, was Sie in der Informatik lernen und das in fast allen Bereichen nützlich ist, aber es ist weder notwendig noch ausreichend.


12
Ich denke, das beste Zitat, das ich gehört habe, ist: "In der Informatik geht es nicht mehr um Computer als in der Astronomie um Teleskope." (Dijkstra)
tloach

5
Ich denke, stackoverflow.com wurde im Grunde genommen erstellt, um diese einzeiligen Antworten zu überwinden, aber es gibt 15 Gleichgesinnte, die diese nutzlose Antwort nach oben gehoben haben. Ich habe nichts Persönliches mit Ihnen, aber ich habe Ihre Antwort als "beleidigend" gekennzeichnet. Zumindest für mich ist es so.
Simsim

2
@simsim: Ich finde es beleidigend, dass die Leute denken, bei einem CS-Abschluss geht es irgendwie um Programmierung.
Tloach

3
@simsim: Es spielt keine Rolle, was Joel und Jeff bei der Erstellung dieser Website im Sinn hatten. Es geht darum, eine Community zu schaffen, in der sich Programmierer gegenseitig helfen. Ich denke, Davids kurze Antwort ist genau richtig. +1
Scottie T

@ Scottie: Wenn es darum ging, "eine Community zu schaffen, in der sich Programmierer gegenseitig helfen", hätten Foren und Mailinglisten ausgereicht. Vielleicht war ich etwas hart in meiner Antwort, aber es war überraschend zu sehen, dass 15 Benutzer für eine völlig ahnungslose "Antwort" stimmten, na ja, bevor sie sie bearbeiteten. :-)
simsim

29

Ich denke , ich werde die erste Person sein , zu sagen , Sie tun müssen math. Wie andere gesagt haben, ist Mathematik für bestimmte Aspekte der Entwicklung nicht allzu wichtig, aber die Grundlagen des kritischen Denkens und der strukturierten Analyse sind sehr wichtig.

Darüber hinaus ist Mathematik wichtig, um viele der Grundlagen zu verstehen, die für Dinge wie Scheduler, Optimierungen, Sortierung, Protokollverwaltung und eine Reihe anderer Aspekte von Computern erforderlich sind. Obwohl die Mathematik auf Berechnungsebene nicht komplex ist (meistens Algebra der High School), können die Theorien und Anwendungen recht komplex sein, da ein solides Verständnis von Mathematik durch Kalkül von großem Nutzen ist.

Können Sie ohne sie absolut auskommen, und Sie sollten sich nicht von weniger gründlichen mathematischen Kenntnissen zurückhalten lassen, aber wenn Sie die Chance oder die Neigung hätten, würde ich so viel Mathematik wie möglich studieren, Kalkül, numerische Theorie, linear Algebra, Kombinatorik, praktische Anwendungen - all dies hat sowohl praktische als auch theoretische Anwendungen in einem breiten Spektrum der Informatik.

Ich habe Leute gekannt, die auf beiden Seiten des Zauns sehr erfolgreich waren (diejenigen ohne starken Fokus auf Mathematik und diejenigen, die zur Schule für Physik oder Mathematik gingen), aber in beiden Gruppen hatten sie Spaß an numerischen Problemen und lernten Algorithmen und Mathematiktheorie .


Ich stimme dem zu. Obwohl man ohne auskommen kann - wird man seine Entscheidung bereuen? Wenn Sie erwarten, auch nur einen mäßig aufregenden / herausfordernden Job zu haben, werden Ihnen die erworbenen mathematischen Fähigkeiten sicherlich helfen.
Andras Vass

Meinetwegen! GrayWizardx und andere: Was empfehlen Sie als Selbstlerner in Bezug auf Lesematerial? Ich war massiv abgeschreckt von der mörderisch schlechten Art und Weise, wie mir Mathematik beigebracht wurde, als ich jünger war. Ich möchte nicht anderswo die Schuld geben, aber Mathe wurde bösartig präsentiert. Jetzt ist es Zeit einzulösen. Wie EINFACH ist es, die hier beschriebene Mathematik (Kalkül, lineare Algebra, diskrete Mathematik usw.) selbst zu lernen? Gibt es eine bestimmte Reihe von Lehrbüchern, die für diesen Ansatz empfohlen werden? Ein College-Abschluss ist keine Option mehr!
Emmel

1
@Emmel, ich habe tatsächlich "The Manga Guide to Math" und "The Manga Guide to Calculus" bei einem Barnes and Noble da draußen gesehen, und ich weiß, dass ich neulich einen "Complete Idiots Guide to Linear Algebra" gesehen habe. Was die tatsächlichen Ressourcen angeht, gibt es früher einige großartige Mathe-Websites (für Studenten usw.), aber ich bin mir nicht sicher, wie viele davon noch vorhanden sind. Eine Sache, die ich hin und wieder mache, ist, auf ein Community College zu gehen und die Matheklassen zu "auditieren" (für bestanden / nicht bestanden) und einfach eine Auffrischung zu bekommen. Havent hat es in 5-6 Jahren geschafft, aber es war das letzte Mal ziemlich hilfreich.
GrayWizardx

26

Ich habe einen Mathematik-Abschluss, aber ich kann mich nicht erinnern, dass ich diese Mathematik ein einziges Mal in meiner Karriere verlangt habe. Es war nützlich, um meinen Geist für logisches Denken zu trainieren, aber ich habe keinen Code mit Fluiddynamik, Quantentheorie oder Markov-Ketten geschrieben. (Der letzte ist der wahrscheinlichste, der auftaucht, vermute ich.)

Die meisten Branchenentwickler benötigen die meiste Zeit keine fortgeschrittene Mathematik. Manchmal kann es hilfreich sein, die Trigonometrie zu kennen, und es kann sicher wichtig sein, genügend Mathematik zu verstehen, um mathematisch beschriebene Algorithmen zu implementieren - aber darüber hinaus? Nein, nein.

Vergessen Sie nicht, dass die meisten Programmierer die Informatik nicht vorantreiben - sie erstellen Anwendungen. Ich muss keine fortgeschrittene Technik kennen, um ein modernes Auto zu fahren, obwohl dieses Auto mit ziemlicher Sicherheit durch fortgeschrittene Technik verbessert wurde .


Ich stimme den meisten Ihrer Aussagen zu. Kann man jedoch nicht sagen, dass viele Aspekte der Programmierung durch das Verständnis gemeinsamer mathematischer Prinzipien deutlich einfacher werden können? Manchmal ist eine Formel für etwas viel einfacher zu programmieren als der Algorithmus, um denselben Wert zu erreichen ... solange Sie diese Formel kennen
BenAlabaster

@balabaster: Manchmal - aber ich würde sagen, das kommt nicht sehr oft vor. Ebenso müssen Sie vorher keine Formel kennen, um sie verwenden zu können. In Mathematik kompetent zu sein ist gut, so dass Sie Formeln verstehen können, wenn Sie sie sehen, aber Sie brauchen selten Mathematik auf Abschlussniveau selbst IMO.
Jon Skeet

11
Mathematik-Abschluss? Dann wissen Sie, dass es nicht nur Zahlen sind. Ich habe zwei mathematische Abschlüsse und verwende den Inhalt häufig: Boolesche Algebra zur Analyse / Vereinfachung der Logik, Automaten- / Sprachtheorie für die DSL-Konstruktion, Algebra für die Big-O-Leistungsanalyse usw.
Joel.neely

14

Ich würde argumentieren, dass fortgeschrittene Logik (diskrete) Mathematik wirklich helfen kann. Das zusammen mit der Mengenlehre. Beim Umgang mit gängigen Computerprogrammen können diese Disziplinen sehr hilfreich sein. Ein Großteil der anderen Mathematik, die ich an der Universität belegte, war jedoch die Analysis, die, soweit ich sehen kann, nur sehr begrenzt verwendet wurde. Da 90% (oder so ähnlich) der Programmierung Geschäftsanwendungen mit sehr einfacher Mathematik ausführen, würde ich sagen, dass Sie größtenteils mit sehr wenig mathematischen Kenntnissen auskommen können. Ein gutes Verständnis von Boolescher Algebra, Logik, diskreter Mathematik und Mengenlehre kann Sie jedoch wirklich auf die nächste Stufe bringen.


14

Ich werde hier gegen den Strich gehen und "Ja" sagen

Ich wechsle vom Tiefbau zur Programmierung (Concrete Sucks!). Mein mathematischer Hintergrund besteht aus den üblichen Aufgaben des ersten Jahres, der Berechnung des zweiten und dritten Jahres (Diff EQ, Volumenintegrationen, Reihen-, Fourier- und Laplace-Transformationen) und einem Kurs zur numerischen Analyse.

Ich finde, dass meine Mathematik für die Computerprogrammierung unglaublich fehlt. Es gibt ganze Bereiche der diskreten Mathematik und Logik, die mir fehlen, und ich überlebe nur aufgrund einer umfangreichen Bibliothek von Lehrbüchern, Wikipedia und Wolfram. Die meisten fortgeschrittenen Algorithmen basieren auf fortgeschrittener Mathematik, und ich bin nicht in der Lage, fortgeschrittene Algorithmen zu entwickeln, ohne umfangreiche Nachforschungen anzustellen (im Wesentlichen das Äquivalent zu einem halben Arbeitskurs). Ich bin sicherlich nicht in der Lage, NEUE Algorithmen zu entwickeln, da ich es einfach nicht tue Ich habe nicht die mathematischen Grundlagen als Schultern der Riesen, auf denen ich stehen kann.


Wie viele grundlegende Algorithmen schreibt ein durchschnittlicher Programmierer wirklich? Ich würde vermuten, dass 80% der Programmierjobs keine Mathematik beinhalten, die über die grundlegende Algebra hinausgeht.
dbkk

@dbkk: Die häufigste Aufgabe eines durchschnittlichen Programmierers ist das Design des Objektmodells, die "Geschäftslogik" einer Domäne. Und ein solcher Prozess ist nichts anderes als Mathematik, obwohl er von denjenigen, die die Aufgabe ausführen, nicht allgemein reflektiert wird.
Boris Stitnicky

14

Es hängt davon ab, was Sie tun. Wenn Sie viel 3D-Programmierung betreiben, sind sicherlich Kenntnisse der 3D-Geometrie erforderlich, stimmen Sie nicht zu? ;-) Wenn Sie ein neues Bildformat wie JPG oder ein neues Audioformat wie MP3 erstellen möchten, sind Sie auch ziemlich verloren, wenn Sie eine Cosinus- oder Fourier-Transformation nicht verstehen können, da dies die Grundlagen sind, auf denen die verlustreichste Komprimierung basiert . Viele andere Probleme können besser gelöst werden, wenn Sie Ihre Mathematik ziemlich gut kennen.

Es gibt auch viele andere Programmieraufgaben, bei denen Sie feststellen, dass Sie nicht viel Mathematik benötigen.


13

Wenn Sie das Thema faszinierend genug finden, um es zu posten, beginnen Sie einfach mit dem Lernen. Der Rest wird natürlich kommen.


9

Ja, es gibt keine Notwendigkeit für fortgeschrittene Mathematik - wenn Sie kommerziell programmieren - Standard-Software.

Beim Umgang mit Hardcore-Dingen wie:

  • Berechnung von Flugbahnen zur Steuerung eines Roboters
  • Erstellen von AI-ähnlichen Anwendungen zur Unterstützung von Unsicherheit und automatischem Denken
  • Spielen mit 3D-Bewegung und Grafik

Einige fortgeschrittene mathematische Kenntnisse könnten nützlich sein. Und es ist nicht so, als wären sie "nicht von dieser Welt" -Probleme.

Ich musste eine Software erstellen, um zu versuchen, die für ein Büro erforderliche Papiermenge "vorherzusagen" (und es war die Hölle, nur um herauszufinden, wie man Werte am besten approximieren kann).

Sie müssen jedoch vorsichtig sein, da es leicht ist, sich bei der Verwendung fortgeschrittener Dinge zu verirren - es gibt einen Freund von mir, der Turing verwendet hat, um den Status eines dynamischen Menüs zu speichern, nur um es richtig anzuzeigen - humm ... vielleicht er war zu weit in seiner Vorstellung.


Sie können Dinge wie das Komprimieren von Dateien oder das Bearbeiten von MP3-Dateien hinzufügen oder alles, was erfordert, dass Sie wirklich verstehen, was der Computer tut, anstatt nur eine Website zusammen zu werfen.
Tloach

4
Wie hat er Turing benutzt, um das zu tun? Ein Ouija-Brett oder eine Seance?
Jared Updike

8

Welche Art der Programmierung?

In meiner kaufmännischen Erfahrung habe ich keine fortgeschrittene Mathematik benötigt, aber dies hängt stark von dem Bereich ab, in dem Sie sich befinden.

Computergrafik erfordert viel fortgeschrittene Mathematik. Viele akademische Computerprogramme erfordern fortgeschrittene Mathematik.

Wenn man also sagt, dass es eine Korrelation zwischen Leuten gibt, die gut in Mathematik sind, und Leuten, die gut in Programmieren sind.

Ich hoffe, diese verwaschene Antwort hilft.


6

Mathematik wird für Entwickler in einigen Bereichen benötigt, in anderen jedoch fast unbrauchbar.

Wenn Sie ein Spieleentwickler sind und viel mit Physik arbeiten müssen, ist das Verständnis von Mathematik von entscheidender Bedeutung. Wenn Sie mit erweiterten visuellen Steuerelementen arbeiten, können Sie ohne Geometrie nicht viel tun. Wenn Sie planen, einige finanzielle Berechnungen durchzuführen, wäre es WIRKLICH hilfreich, solide statistische Kenntnisse zu haben.

Andererseits hatte ich in den letzten 5 Jahren nur 2 oder 3 Projekte, in denen JEDE Menge Mathematik benötigt wurde. Von diesen gab es nur 1 Ereignis, bei dem eine Google-Suche nicht half.

Letztendlich sind sogar finanzielle Berechnungen sehr oft etwas, was Ihre Kunden für Sie tun und Ihnen Formeln zur Implementierung geben.

Wenn Sie also im Geschäft mit angewandter Software tätig sind, werden Sie Ihren Mathematik-Abschluss wahrscheinlich nie verwenden. Wenn Sie in akademischer Software sind, ist Mathematik entscheidend.


Zu "Spieleentwickler" würde ich "Simulationsentwickler" hinzufügen. Ich erinnere mich, dass ich 1993 in der ganzen Stadt herumgefahren bin und versucht habe, ein Mathematikbuch zu finden, das weit genug fortgeschritten ist, um zu erklären, wie Quaternions für mich funktionieren, damit ich einen toten Rekokinierungsalgorithmus richtig codieren kann. Gott sei Dank für das Internet heute!
TED

6

Ich stimme Chris zu. Ich würde auch "Ja" sagen. Dies hängt jedoch von Ihrem Markt ab, wie oben angegeben. Wenn Sie einfach einige grundlegende "Standard" -Anwendungen oder Schreibwerkzeuge erstellen, die Ihnen bei Ihrer täglichen Arbeit helfen ... dann ist Mathematik bei weitem nicht so wichtig.

Die Entwicklung kundenspezifischer Softwarelösungen erfordert viel Problemlösung und kritisches Denken. Fähigkeiten, die definitiv verbessert werden, wenn ein mathematischer Hintergrund vorhanden ist. Ich habe mit meinem Abschluss in Computertechnik in Mathematik studiert und all meinen mathematisch orientierten Hintergrund darin gewürdigt, warum ich dort bin, wo ich heute bin.

Das sind meine 2 Cent, ich kann dem obigen Lesen entnehmen, dass viele nicht zustimmen würden. Ich ermutige alle zu bedenken, dass ich nicht sage, dass Sie diese Fähigkeiten ohne mathematischen Hintergrund nicht haben können. Ich sage lediglich, dass die Fähigkeiten Nebenwirkungen eines solchen Hintergrunds sind und sich positiv auf Software auswirken können.


6

Nach meiner Erfahrung ist Mathe beim Programmieren erforderlich, man kommt nicht davon weg. Die gesamte Programmierung basiert auf Mathematik.

Das Problem ist nicht schwarz und weiß, sondern bunter. Die Frage ist nicht, ob Sie Mathe brauchen oder nicht, sondern wie viel. Die höheren Stufen der Mathematik geben Ihnen mehr Werkzeuge und öffnen Ihren Geist für verschiedene Wege.

Sie können beispielsweise programmieren, wenn Sie nur Addition und Subtraktion kennen. Wenn eine Multiplikation erforderlich ist, müssen Sie viele Ergänzungen vornehmen. Die Multiplikation vereinfacht sich wiederholende Additionen. Mit Algebra kann man Mathematik vereinfachen, bevor man sie in Programme implementiert. Die lineare Algebra bietet Werkzeuge zum Transformieren von Bildern. Die Boolesche Algebra bietet Mechaniken zum Reduzieren all dieser ifAussagen.

Und vergessen Sie nicht die Geschwister in Mathematik, Logik und Philosophie. Logic hilft Ihnen dabei, caseoder switchAnweisungen effizient zu nutzen . Die Philosophie wird Ihnen helfen, das Denken des Mannes zu verstehen, der den Code geschrieben hat, den Sie ändern.

Ja, Sie brauchen nicht viel Mathematik, um Programme zu schreiben. Einige Programme erfordern möglicherweise mehr Mathematik als andere. Mehr Mathematikkenntnisse verschaffen Ihnen einen Vorteil gegenüber denen, die weniger Verständnis haben. In diesen Zeiten brauchen die Menschen jeden Vorteil, den sie bekommen können, um diese Jobs zu bekommen.


6

Ich programmiere seit 8 Jahren professionell und seit meinem 12. Lebensjahr als Hobby.

Mathe ist nicht notwendig, Logik ist. Mathe ist schrecklich hilfreich. Zu sagen, dass es nicht notwendig ist, ist wie zu sagen, dass man ein Messer benutzen kann, um einen Mann zu töten. Nun, es ist wahr, aber diese Waffe macht es viel einfacher.

Es gibt ein paar Mindestanforderungen, die Sie bereits erfüllen sollten. Sie müssen grundlegende algebraische Ausdrücke und Notationen sowie die gängigen Computeräquivalente kennen. Zum Beispiel müssen Sie wissen, was ein Exponential ist (3 bis 3 ist 27), und der allgemeine Computerausdruck ist 3 ^ 3. Die gebräuchlichen Notationen für Algebra ändern sich zwar zwischen den Sprachen, aber viele von ihnen verwenden eine etwas einheitliche Methodik. Andere (sehen dich LISP an) tun es nicht. Sie müssen auch die Reihenfolge der Operationen kennen.

Sie müssen algorithmisches Denken verstehen. Erst dies, dann dies erzeugt dies, was in dieser Berechnung verwendet wird. Wahrscheinlich verstehen Sie das oder nicht, und es ist eine ziemlich schwierige Hürde, zu springen, wenn Sie es nicht verstehen. Ich habe festgestellt, dass dies etwas ist, das man "bekommt" und nicht wirklich etwas, das man lernen kann. Umgekehrt bekommen manche Leute keine Kunst. Sie sollten keine Maler werden. Es gab auch Studenten im CS-Lehrplan, die nicht herausfinden konnten, warum dies nicht funktioniert: x = z + w; z = 3; y = 5; Es ist nicht so, dass sie Addition nicht verstehen, es ist so, dass sie das Erfordernis eines eindeutigen Ausdrucks nicht verstehen. Wenn sie es verstehen, sollte der Computer auch, oder? Wenn Sie nicht sehen können, was mit den obigen drei Zeilen nicht stimmt, werden Sie kein Programmierer.

Zuletzt müssen Sie wissen, welche Mathematik in Ihrem Programmierbereich liegt. Buchhaltungssoftware könnte bei der grundlegenden Algebra aufhören. Wenn Sie Physik programmieren, müssen Sie Physik (lose) und Mathematik in dreidimensionaler Geometrie (euklidisch) kennen. Wenn Sie Architektur-Software programmieren, müssen Sie die Trigonometrie kennen.

Dies geht jedoch weiter als Mathe; Für welche Domäne Sie auch programmieren, Sie müssen die Grundlagen genau verstehen. Wenn Sie eine Programmiersprachenanalyse-Software programmieren, müssen Sie Wahrscheinlichkeit, Statistik, Grammatiktheorie (mehrere Sprachen) usw. kennen.

Oft benötigen bestimmte Domänen Wissen, von dem Sie glauben, dass es nichts damit zu tun hat, oder können davon profitieren. Wenn Sie beispielsweise Audiosoftware programmieren, müssen Sie die Trigonometrie kennen, um mit Wellenformen umgehen zu können.

Die Größe verändert auch die Dinge. Wenn Sie einen Finanzdatensatz mit 1000 Elementen sortieren, ist dies keine große Sache. Wenn es jedoch 10 Millionen Datensätze wären, würden Sie stark davon profitieren, die Vektormathematik tatsächlich zu kennen und ein tiefes Verständnis für das Sortieren auf Binärebene zu haben (wie sortiert ein System alphabetisch? Woher weiß es, dass 'a' kleiner als 'b' ist? '?)

Sie werden feststellen, dass Ihre allgemeine Wissensbasis als Programmierer explodieren wird, da jedes Projekt mehr Lernen außerhalb des direkten Bereichs der Programmierung erfordert. Wenn Sie zimperlich oder faul im Selbstlernen sind und die Idee, mehr als 10 Stunden pro Woche im Wesentlichen „Hausaufgaben“ zu machen, nicht mögen, werden Sie kein Programmierer.

Wenn Sie Gedankenübungen mögen, wenn Sie gerne lernen, wenn Sie über abstrakte Dinge wie Mathematik ohne Taschenrechner oder Design ohne Skizzenblock nachdenken können, wenn Sie einen breiten Geschmack im Leben und in Ihren Hobbys haben, wenn Sie selbstkritisch sind und wegwerfen können. ' Bevorzugte Ideen, wenn Sie Dinge perfektionieren möchten, dann werden Sie Programmierer. Begründen Sie diese Entscheidung nicht mit Mathematik, sondern mit der Fähigkeit, logisch zu denken und zu lernen. Das ist wichtig; Mathe ist nur das Nebenprodukt.


5

Natürlich hängt es davon ab, welche Art von Programmierer Sie sein möchten oder besser, welche Art von Programmierer Ihre Arbeitgeber von Ihnen erwarten. Ich denke, Kalkül und Algebra sind wesentliche Faktoren. Statistische und lineare Programmierung sind in der Tat ein gutes Werkzeug für Ihre Aktentasche. Vielleicht könnte eine Analyse (Ableitung, Integrale, Funktionen ...) ohne durchgeführt werden. Aber wenn Sie wissen möchten, wie die Dinge hautnah funktionieren (z. B. Elektronik oder einige nicht triviale Algorithmen), ist "fortgeschrittene" Mathematik etwas, auf das Sie besser nicht verzichten sollten.


5

Die meisten meiner Programmierungen umfassten physikalische Simulationen für Forschungszwecke, darunter Elektromagnetismus, Quantenmechanik und Strukturmechanik. Da mit den Problembereichen fortgeschrittene Mathematik verbunden ist, würde es mir schwer fallen, sie zu lösen, ohne fortgeschrittene Mathematik zu verwenden.

Die Antwort auf Ihre Frage lautet also - es hängt davon ab, was Sie versuchen zu tun.


5

Fortgeschrittene Mathematikkenntnisse sind wichtig, wenn Sie eine neue Programmiersprache schreiben möchten. Oder Sie müssen Ihre eigenen Algorithmen schreiben.

Für die meisten alltäglichen Programme - von Websites bis hin zu Anwendungen für die Versicherungsabwicklung - sind jedoch nur grundlegende mathematische Aspekte erforderlich .


5

Jemand mit einem soliden mathematischen (der nicht nur arithmetischen) oder logischen Hintergrund wird gut mit Algorithmen, variabler Verwendung, bedingtem Denken und Datenstrukturen umgehen können.

  • Nicht jeder kann eine Benutzeroberfläche entwerfen.
  • Nicht jeder kann effizienten Code erstellen.
  • Nicht jeder kann klar kommentieren und dokumentieren.
  • Nicht jeder kann einen guten Algorithmus machen

Die Mathematik hilft Ihnen zu einem Punkt, aber nur zu einem Punkt.


5

Ich denke nicht, dass fortgeschrittene Mathematikkenntnisse eine Voraussetzung für einen guten Programmierer sind, aber aufgrund persönlicher Erfahrungen denke ich, dass Programmierer, die fortgeschrittene Mathematik besser verstehen, auch bessere Programmierer sind. Dies kann einfach auf einen logischeren Verstand oder auf eine logischere Sichtweise aufgrund ihrer Erfahrungen mit der Lösung mathematischer Probleme zurückzuführen sein.


5

Das grundlegende Konzept der Mathematik besteht darin, Algorithmen zu entwickeln, zu verstehen, zu implementieren und zu verwenden. Wenn Sie nicht rechnen können, liegt es daran, dass Sie diese Dinge nicht können, und wenn Sie diese Dinge nicht können, können Sie kein effektiver Programmierer sein.

Für gängige Programmieraufgaben sind möglicherweise keine spezifischen mathematischen Kenntnisse erforderlich (z. B. benötigen Sie wahrscheinlich keine Vektoralgebra und -rechnung, es sei denn, Sie führen Aufgaben wie 3D-Grafiken oder Physiksimulationen aus), aber die zugrunde liegenden Fähigkeiten sind identisch und es mangelt an Fähigkeiten in einer Domäne wird mit einem entsprechenden Mangel an Fähigkeiten in der anderen Domäne übereinstimmen.


5

Mathe ist eine Toolbox zum Erstellen von Programmen. Ich empfehle Cormens Einführung in Algorithmen. Es berührt das "mathematischere" Zeug.

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)

4

Ich denke nicht, dass höhere Mathematik eine Voraussetzung ist, um ein guter Programmierer zu sein - wie immer hängt es davon ab, was Sie programmieren.

Wenn Sie in der 3D-Grafikprogrammierung sind, benötigen Sie natürlich Matrizen und ähnliches. Als Autor von Unternehmenssoftware benötigen Sie wahrscheinlich Statistikmathematik.

Aber ein professioneller Programmierer für fast 10 Jahre (und weitere 10 Jahre Amateur) "höhere Mathematik" zu sein, brauchte ich nicht regelmäßig. In etwa 99,8% aller Fälle geht es in einigen intelligenten Kombinationen nur um Plus, Minus, Division und Multiplikation - in den meisten Fällen geht es um Algorithmen, nicht um Mathematik.


4

Für die meisten Programmierer ist es wichtig, höhere Mathematik zu lernen, nur weil es Ihr Gehirn dazu bringt, logisch zu denken und Schritt für Schritt von einer Sache zur anderen zu gelangen.

Sehr wenige Programmierjobs erfordern jedoch etwas, das über die Mathematik der High School hinausgeht. Ich habe einmal lineare Algebra verwendet. Ich habe noch nie Kalkül benutzt. Ich benutze jeden Tag Algebra.


4

Mathematische Kenntnisse sind für einen Programmierer oft nützlich, ebenso wie Grafikdesignfähigkeiten, Fähigkeiten zum Lösen von Rätseln, Arbeitsmoral und eine Vielzahl anderer Fähigkeiten und Eigenschaften. Sehr wenige Programmierer sind in allem gut, was ein Programmierer möglicherweise gut kann. Ich würde keiner Aussage des Formulars "Sie sind kein echter Programmierer, es sei denn, Sie können hier { Lieblingsprogrammierfähigkeiten einfügen }" zustimmen .

Aber ich wäre vorsichtig mit einem Programmierer, der nicht rechnen kann. Mehr als von jemandem, der nicht zeichnen konnte.


4

Ich denke, es hängt wirklich davon ab, was Sie versuchen, aber meiner Meinung nach sind die CS- und OS-Theorie hier wichtiger als Mathematik, und Sie brauchen wirklich nur die Mathematik, die sie beinhaltet.

Zum Beispiel gibt es viele CS-Hintergründe der Planungstheorie und -optimierung, die hinter vielen Planern in modernen Betriebssystemen stehen. Das ist ein Beispiel für etwas, das etwas Mathematik erfordern würde, aber nicht etwas sehr Kompliziertes.

Aber ehrlich gesagt, für die meisten Dinge braucht man keine Mathematik. Was Sie brauchen, ist die Fähigkeit zu lernen, in Basis 2 und 16 zu denken, wie zum Beispiel die Fähigkeit, mental ODER / UND zu denken. Wenn Sie beispielsweise ein Byte haben und innerhalb dieses Bytes zwei 3-Bit-Felder und 2 verschwendete Bits vorhanden sind, können Sie die Dinge etwas schneller machen, als wenn Sie wissen, welche Bits in welchen Feldern aktiv sind, wenn der Byte-Wert etwa 11 beträgt Stift und Papier.


Haben Sie jemals Warteschlangentheorie studiert? Haben Sie jemals Speichermanager und die statistischen Modelle studiert, mit denen Entwickler einander vorziehen? Ich bin nicht unbedingt anderer Meinung als die Hauptlast Ihrer Antwort, sondern Ihrer übermäßigen Vereinfachung.
San Jacinto

@ San: Ich bin sicher, dass ich zu stark vereinfache, aber ich denke, dass die meisten Systementwickler diese Dinge auf dieser Ebene nie wissen müssen. Ich habe es in den ersten beiden Abschlüssen auf der Grundstufe und während meiner Promotion etwas tiefer studiert, aber es war nie meine Stärke, ich überlasse es lieber den Experten. Die OS-Leute, die ich kannte, hatten mathematische Fähigkeiten, die mich umgehauen haben.
Uri

was ich für sehr gültig halte. Ich denke, es besteht die Notwendigkeit, die Systemprogrammierung von der Betriebssystemprogrammierung zu unterscheiden. Eng gewebte Konzepte, aber dennoch anders.
San Jacinto

4

Ich habe ungefähr zur gleichen Zeit mit dem Programmieren begonnen, als ich in meine Voralgebra-Klasse eingetreten bin. Ich würde also nicht sagen, dass Mathematik so wichtig ist, obwohl sie bei bestimmten Arten der Programmierung helfen kann, insbesondere bei funktionalen.

Ich habe Discrete Math noch nicht belegt, aber ich sehe viele theoretische Dinge mit Programmierung, die in einer Mathe-Notation geschrieben sind, die in dieser Klasse unterrichtet wird.

Stellen Sie außerdem sicher, dass Sie wissen, wie Sie irgendetwas in einer Basis berechnen, insbesondere Basis 2, 8 und 16.

Eine Klasse, die mir wirklich einige Konzepte gebracht hat, war diese Vorprogrammierungsklasse. Wir haben Gewerkschaften, Kreuzungen und all das fröhliche Zeug gelernt und es ist fast genau eine Parallele zur bitweisen Mathematik. Und wir haben uns sehr intensiv mit boolescher Logik befasst. Was ich am nützlichsten fand, war, als wir lernten, wie man komplexe boolesche Anweisungen reduziert. Das war sehr praktisch:

(x|y) & (x|z) & (x|foo)

kann vereinfacht werden

x | (y & z & foo)

Was ich vorher nicht ganz verstanden habe.


4

Nun, Sie haben eine Reihe von Antworten generiert, und nein, ich habe nicht alle gelesen. Ich bin mittendrin, nein, Sie brauchen sicherlich keine Mathematik, um Programmierer zu werden. Assembler vs Gerätetreiber unter Linux sind nicht mehr oder weniger kompliziert als die anderen und erfordern auch keine Mathematik.

In keiner Weise müssen Sie dafür einen Mathematikkurs belegen oder bestehen.

Ich werde zustimmen, dass die Denkweise zur Problemlösung beim Programmieren der von mathematischen Lösungen ziemlich ähnlich ist und daher Mathematik wahrscheinlich leicht fällt. oder im Gegenteil, wenn Mathe schwierig ist, kann das Programmieren schwierig sein. Eine Klasse oder ein Abschluss oder irgendwelche Zettel oder Trophäen sind nicht erforderlich.

Wenn Sie jetzt weder in Ihrem Kopf noch auf Papier oder mit einem Taschenrechner schnell von hexadezimal in binär in dezimal konvertieren können, werden Sie Probleme haben. Wenn Sie sich mit Netzwerken und anderen Dingen beschäftigen möchten, die Timing beinhalten, was Kerneltreiber oft tun, aber nicht müssen. Du wirst kämpfen. Ich kenne eine sehr lange Liste von Leuten mit Mathematik- und / oder Informatik- und / oder Ingenieurabschlüssen, die mit den Ratenberechnungen, Bits pro Sekunde, Bytes pro Sekunde, wie viel Speicher Sie für etwas tun müssen usw. zu kämpfen haben In gewissem Maße kann es als eine Art Talent angesehen werden, auf das einige hinarbeiten und auf das andere hinarbeiten müssen.

Mein Fazit ist, dass ich an Willenskraft glaube. Wenn du dieses Zeug lernen willst, das du kannst und willst, ist es so einfach. Sie müssen nicht an einem Kurs teilnehmen oder viel Geld ausgeben. Linux und Qemu können Sie beispielsweise für einige Zeit beschäftigen, verschiedene ASM-Sprachen usw. Absturzsichere Umgebungen für die Kernel-Entwicklung, eingebettet usw. Sie sind nicht darauf beschränkt , aber ich glaube nicht, dass du weglaufen und Unterricht nehmen musst, wenn du nicht willst. Wenn Sie dann sicher einige ee Klassen, einige cs Klassen und einige Matheklassen nehmen möchten.


Dies ist kein Flammenköder, sondern Realität. Alles, was Sie aus programmtechnischer Sicht über digitale Elektronik und Softwareentwicklung wissen müssen, lässt sich zusammenfassen. 0, 1 und oder nicht. Mit diesen fünf Dingen arbeiten die digitale Elektronik und alle Programme. Mit einer großen Kiste schneller Nand-Gates können Sie alles bauen.
old_timer

4

Du brauchst Mathe. Programmieren ist nichts anderes als Mathematik. Erkenntnisse der theoretischen Physik werden nicht zu einer praktischen (anwendbaren) Implikation, es sei denn, sie werden durch mathematische Lösungen erklärt. Keines davon kann rechnerisch gelöst werden, wenn es nicht auf Computern und insbesondere auf Programmiersprachen interpretiert werden kann. Verschiedene Sprachen sollen daher bestimmte Probleme lösen. Aber für den allgemeinen Zweck und weit verbreitete Programmiersprachen wie Java, C, C ++ beinhalten viele unserer Programmieraufgaben die wiederholte (kontinuierliche) Lösung derselben Probleme wie das Extrahieren von Werten aus Datenbanken, Textdateien, das Platzieren unter Windows (Desktop, Web) und das Manipulieren gleiche Werte, manchmal Zugriff auf einige Daten von ähnlichen Geräten (aber mit unterschiedlichen Markennamen, unterschiedlichem Port und Kopfschmerzen) usw., die nicht mehr als eine einheitliche Methode beinhalten,


3

IMO, Sie brauchen wahrscheinlich eine Eignung für Mathematik, ohne unbedingt viel Wissen auf dem Gebiet zu haben. Die Dinge, die Sie benötigen, um gut in Mathe zu sein, ähneln den Dingen, die Sie benötigen, um gut in Programmieren zu sein.

Aber im Allgemeinen kann ich mich nicht erinnern, wann ich das letzte Mal fortgeschrittene Mathematik in der täglichen Programmierung verwendet habe, also nein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.