Mathematikthemen oder Felder, die die Programmierkenntnisse verbessern? [geschlossen]

14

Im Allgemeinen sind Computerprogrammierer, die Mathematiker sind oder einen mathematischen Hintergrund haben, in Bezug auf Algorithmen und Computerprogrammierung im Allgemeinen sehr gut.

Was ich nicht sage:

Mathematik wird benötigt, um ein guter Computerprogrammierer zu sein. Mathematik ist für die Programmierung notwendig. Gute Mathematiker sind gute Programmierer und umgekehrt

Was ich sage

Ich möchte etwas Mathematik lernen, weil ich glaube, dass es mich zu einem besseren Programmierer machen wird. Welche Bereiche / Themen der Mathematik werden mir helfen, ein besserer Programmierer zu werden? Antworten des Formulars math topic - corresponding cs areawerden geschätzt.

NB: Ich habe dies auf StackOverflow gefragt, wo es als nicht thematisch deklariert wurde. Ich möchte es in meiner Freizeit genauso lernen, wie ich es mit Computerprogrammierung gemacht habe. Danke im Voraus.

Charitoo
quelle
1
Ich bin überrascht, dass StackOverflow erklärt hat, dass diese Frage nicht zum Thema gehört. Aus meiner Sicht (ein pensionierter Programmierer) sollte diese Frage eine der wichtigsten Fragen für SO sein.
Scaaahu
1
StackOverflow befasst sich mehr mit spezifischen Programmierproblemen. Dies ist am besten für CSEducators geeignet und hat möglicherweise bei SoftwareEngineering funktioniert.
Nat
1
Fragen wie diese hatten wir schon einmal und alle haben das gleiche Problem: Sie sind zu weit gefasst und zu subjektiv. Die einzige übereinstimmende Antwort lautet: alles .
Raphael
@ Raffael Zuerst respektiere ich Mods Entscheidung. Ich möchte jedoch im Namen des OP eine Frage stellen. Gibt es irgendetwas, um die Frage zu verbessern, damit sie wieder geöffnet werden kann? Wenn es keine Möglichkeit gibt, es zu verbessern, gibt es eine andere SE, bei der das OP diese Frage stellen kann? (Offensichtlich hat das OP bereits SO ausprobiert und ich weiß, dass es möglicherweise nicht auf Academia SE passt, da es nicht eng mit Academia verwandt ist.)
scaaahu
Fragen, die nach formellen Lösungen für bestimmte Probleme fragen, wären in Ordnung. Studienberatungsfragen sind für das SE-Format in der Regel ungeeignet; der "meinungsbasierte" enge grund gilt für alle seiten!
Raphael

Antworten:

19

Es gibt also viele Bereiche der Mathematik, die für die Wissenschaft des CS relevant sind, aber speziell für die Programmierung:

  • Graphentheorie : Dies ist die große. Graphen und Bäume sind überall. Netzwerke, Karten, Pfade in Videospielen. Selbst Dinge wie das Lösen eines Rubiks-Würfels können als Graph-Algorithmus modelliert und mit A * gelöst werden.

  • Diskrete Mathematik : Abgesehen von der Graphentheorie ist es hilfreich, diesen Bereich im Allgemeinen zu kennen. Es steckt voller Beweise durch Induktion, die sehr nützlich sind, um die Rekursion zu verstehen, was beim Programmieren, insbesondere bei Datenstrukturen, sehr nützlich ist. Kenntnisse über Mengen, Zählen, Einschluss- / Ausschlussregeln, Boolesche Logik usw. können von Zeit zu Zeit nützlich sein.

  • Typentheorie: Es ist nicht überraschend, dass die Kenntnis der Typentheorie beim Verständnis der Programmierung in getippten Sprachen und allgemeiner beim Verwenden von Typen hilft, um bestimmte Korrektheitseigenschaften sicherzustellen. Wenn Sie sich mit der Subtypisierungstheorie auskennen, können Sie Kovarianz und Kontravarianz in Java-ähnlichen Sprachen besser verstehen. Das Wissen über Dinge wie parametrischen Polymorphismus ist offensichtlich hilfreich, wenn Sie eine typlastige Sprache wie Haskell oder Purescript lernen, aber Sprachen wie Scala, TypeScript und Rust setzen sich in der Industrie immer mehr durch und Typen sind an ihrem Kern.

    Wenn Sie diesen extrem nehmen, erhalten Sie Dinge wie Coq und Agda und Idris, die verwendet werden können, um extrem genaue Korrektheitseigenschaften von Programmen zu beweisen.

  • Berechenbarkeits- und Komplexitätstheorie : Zu wissen, wann ein Problem entweder unlösbar oder NP-hart ist, ist hilfreich, da Sie keine Stunden damit verschwenden, Ihr Gehirn für eine schnelle Lösung zu beanspruchen. Ebenso kann es hilfreich sein, einige der Theorien zu Approximationsalgorithmen, zur Traktierbarkeit fester Parameter oder zu Exponentialalgorithmen mit niedriger Basis zu kennen, wenn Sie ein NP-hartes Problem wirklich lösen müssen.

  • Automatentheorie: Viele Probleme können mit verschiedenen Zustandsautomaten modelliert werden, daher ist es hilfreich, deren Eigenschaften zu verstehen.

Es gibt auch einige feldspezifische Bereiche:

  • Statistik: Wenn Sie maschinelles Lernen oder Big Data betreiben, ist dies ein Muss.

  • Lineare Algebra / Vektorberechnung : Beide sind wichtig für maschinelles Lernen, Grafiken, Simulationen oder Bild- / Audioverarbeitung.

  • Gittertheorie : Wenn Sie mit Compilern oder Programmoptimierungen arbeiten, taucht diese ständig auf. Fixpunkte überall!

  • Kategorietheorie: Wird nicht zum Codieren benötigt, ist aber nützlich für alles, was in der Typentheorie tief verwurzelt ist.

Edit: kann nicht glauben, dass ich vergessen habe:

  • Kryptographie : Wenn Sie sich für Sicherheit, Hashing, digitale Signaturen usw. interessieren, sollten Sie sich mit Zahlen-, Gruppentheorie-, Feldtheorie- und Ellipsenkurventheorie-Methoden vertraut machen.
jmite
quelle