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 area
werden 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.
quelle
Antworten:
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:
quelle