Was sind die wichtigsten mathematischen Konzepte, die ein guter Entwickler kennen sollte?[geschlossen]

StackOverflow https://stackoverflow.com/questions/52176

Frage

Seit ich 2006 meinen Abschluss an einer sehr kleinen Schule mit einem schlecht gestalteten und veralteten Programm machte (ich bin Ausländer und kannte damals keine bessere Schule), wurde mir klar, dass mir viele grundlegende Konzepte von a fehlten mathematische und softwaretechnische Perspektiven, die meist die Grundlage anderer höherer Konzepte bilden.

D.h.Ich habe versucht, die offenen Kursunterlagen vom MIT anzuhören/anzuschauen Einführung in Algorithmen aber schnell wurde mir klar, dass mir einige mathematische Konzepte fehlten, um den Kurs besser zu verstehen.

Was sind also die wichtigsten mathematischen Konzepte, die ein guter Softwareentwickler kennen sollte?Und welche möglichen Bücher/Seiten würden Sie mir empfehlen?

War es hilfreich?

Lösung

Mathematik für Programmierer.Eine gute Lektüre.

Andere Tipps

Die Boolesche Algebra ist für das Verständnis von Kontrollstrukturen und Refactoring von grundlegender Bedeutung.Ich habe zum Beispiel viele Fehler gesehen, die von Programmierern verursacht wurden, die das deMorgansche Gesetz nicht kannten (oder nicht anwenden konnten).Als weiteres Beispiel: Wie viele Programmierer erkennen das sofort?

if (condition-1) {
    if (condition-2) {
        action-1
    } else {
        action-2
} else {
    action-2
}

kann umgeschrieben werden als

if (condition-1 and condition-2) {
    action-1
} else {
    action-2
}

Diskrete Mathematik und Kombinatorik sind enorm hilfreich, um die Leistung verschiedener Algorithmen und Datenstrukturen zu verstehen.

Wie von Baltimark erwähnt, ist die mathematische Induktion sehr nützlich beim Nachdenken über Schleifen und Rekursion.

Die Mengenlehre ist die Grundlage relationaler Datenbanken und SQL.

Als Vergleich möchte ich darauf hinweisen, dass Tischler beim Bau von Dächern und Treppen routinemäßig verschiedene Faustregeltechniken anwenden.Mit Geometriekenntnissen können Sie jedoch Probleme lösen, für die Sie keine „vorgefertigte“ Faustregel haben.Es ist so, als ob man das Lesen durch Phonetik lernt und nicht durch visuelles Erkennen eines Grundwortschatzes.In über 90 % der Fälle gibt es keinen großen Unterschied.Aber wenn man in eine ungewohnte Situation gerät, ist es SEHR schön, die Werkzeuge zu haben, um selbst eine Lösung zu finden.

Schließlich ist die von der Mathematik geforderte Strenge/Präzision eine sehr nützliche Vorbereitung auf das Programmieren, unabhängig von der spezifischen Technik.Auch hier sind viele der Fehler in der Programmierung (oder sogar in den Spezifikationen), die ich in meiner Karriere gesehen habe, auf schlampiges Denken zurückzuführen.

Ich würde mich für die Felder entscheiden, die Landon angegeben hat:

Diskrete Mathematik, lineare Algebra, Kombinatorik, Wahrscheinlichkeit und Statistik, Graphentheorie

und mathematische Logik hinzufügen.

Dies würde Ihnen einen Überblick über die meisten Bereiche der Informatik verschaffen.Wer in Spezialgebiete vordringen möchte, muss in einige Bereiche besonders eintauchen:

Computer graphics -> Linear Algebra
Gaming -> Linear Algebra, Physics
Computer Linguistics -> Statistics, Graph Theory
AI -> Statistics, Stochastics, Logic, Graph Theory

Der Wichtigkeit nach geordnet:

  • Zählen (wird für Schleifen benötigt)
  • Addition, Subtraktion, Multiplikation, Division.
  • Algebra (nur wirklich erforderlich, um die Verwendung von Variablen zu verstehen).
  • Boolesche Algebra, boolesche Logik und Binärsystem.
  • Exponenten und Logarithmen (d. h.O(n)-Notation verstehen).

Alles, was weiter fortgeschritten ist, ist normalerweise algorithmusspezifisch oder domänenspezifisch.Je nachdem, für welche Bereiche Sie sich interessieren, können auch folgende Themen relevant sein:

  • Lineare Algebra und Trigonometrie (3D-Visualisierung)
  • Diskrete Mathematik und Mengenlehre (Datenbankdesign, Algorithmendesign, Compilerdesign).
  • Statistik (also für statistische und/oder wissenschaftliche/wirtschaftliche Anwendungen).möglicherweise auch nützlich für das Algorithmendesign).
  • Physik (für Simulationen).

Es ist auch nützlich, Funktionen zu verstehen (ich weiß nicht mehr, wie der mathematische Begriff für diesen Bereich lautet), aber wenn Sie wissen, wie man programmiert, wissen Sie das wahrscheinlich schon.

Mein Punkt ist:Ein Zehnjähriger sollte über ausreichende Mathematikkenntnisse verfügen, um Programmieren verstehen zu können.Für das grundlegende Verständnis der Dinge ist nicht wirklich viel Mathematik erforderlich.Eigentlich kommt es nur auf die Logik an.

„Beweis durch Induktion“ ist ein grundlegendes mathematisches Konzept, das Programmierer kennen sollten.

Big-O-Notation in der allgemeinen Algorithmusanalyse und in Bezug auf Standardsammlungen (Sortierung, Retrieval-Einfügung und Löschung)

Für diskrete Mathematik: Hier ist eine großartige Sammlung von 20 Vorlesungen der Arsdigita University.Jedes ist etwa eine Stunde und zwanzig Minuten lang.

Beginnen Sie mit dem, was wir CS-Leute „diskrete Mathematik“ nennen.Analysis und lineare Algebra können ebenfalls sehr nützlich sein, da sie Ihnen den Zugang zu vielen Anwendungsbereichen ermöglichen.Sobald Sie diese drei beherrschen, wenden Sie sich der Wahrscheinlichkeitstheorie zu.Mit diesen 4 erreichen Sie die Kompetenz in 95 % (das habe ich mir ausgedacht) der Anwendungsdomänen.

Konkrete Mathematik deckt die meisten wichtigen Themen ab.Ein gutes Buch über Diskrete Mathematik, wie das von Rosen Diskrete Mathematik und ihre Anwendungen, füllt eventuelle Lücken.

Ich denke, es hängt von deinem Fokus ab.Vor ein paar Jahren habe ich mir das Set „Art of Computer Programming“ von Donald Knuth gekauft.Nachdem ich mir die Bücher angeschaut hatte, wurde mir klar, dass es sich bei so ziemlich allem um Infinitesimalrechnungsbeweise handelt.Wenn Sie daran interessiert sind, Ihre eigenen generischen Algorithmen und Beweise dafür zu entwickeln, dann empfehle ich Ihnen, die oben genannten Bücher zu verstehen, da Sie damit in dieser Welt zu tun haben.Wenn Sie andererseits nur verschiedene Sortier-/Suchfunktionen/Bäume/etc. verwenden möchten/müssen...Routinen, dann sind mindestens die große O-Notation, boolesche Mathematik und allgemeine Algebra in Ordnung.Wenn Sie es mit 3D zu tun haben, dann auch mit Geometrie und Trigonomie.

Ich neige dazu, mehr auf der Seite der Verwendung als auf der Seite der Beweise zu stehen, und obwohl ich gerne glaube, dass ich im Laufe der Jahre einige clevere Dinge getan habe, habe ich mich nie hingesetzt und eine neue Sortierroutine entwickelt.Der beste Rat, den ich geben kann, ist, zu lernen, was Sie für Ihr Fachgebiet benötigen, aber setzen Sie sich auf höhere Ebenen ein, damit Sie wissen, dass es existiert und wie viel es noch zu lernen gibt, sonst werden Sie nicht viel wachsen.

Ich würde boolesche Logik sagen.UND, ODER, XOR, NICHT.Ich habe festgestellt, dass wir als Programmierer dies häufiger verwenden als die anderen mathematischen Konzepte.

Grundlegende Algebra und Statistik sind gute Ausgangspunkte und die Grundlage für viele andere Bereiche.

Hier ist eine einfache Lösung, die mich verblüfft, wenn ich Entwickler sehe, die sie nicht verstehen:
- Reihenfolge der Operationen

Kapitel 1 von „The Art of Computer Programming“ zielt darauf ab, genau dies zu vermitteln.

Es gab ein Buch, das empfohlen wurde ... der Titel war so etwas wie Konkrete Mathematik.Es wurde in einigen Fragen empfohlen.

Damals in der Schule sagte einer meiner Lehrer für Geschäftsanwendungen: Alles, was Sie wissen müssen, ist Addieren, Subtrahieren, Multiplizieren und Dividieren.Alle anderen Formeln wird der Antragsteller kennen und Ihnen mitteilen, was benötigt wird.Bedenken Sie nun, dass dies der Finanzierung der Berichterstattung und der anwendungsorientierten Schule dient.Das gilt für mich bis heute.Ich habe noch nie mehr als das wissen müssen.

Schauen Sie sich das Buch an Grundlagen der Informatik
Dieses Buch wurde verfasst von:Al Aho und Jeff Ullman sowie das gesamte Buch sind online verfügbar.

Das sagen die Autoren in ihrem Vorwort zum Ziel dieses Buches:

"Grundlagen der Informatik deckt Themen ab, die oft gespalten sind
zwischen einem diskreten Mathematikkurs und einer Computersequenz im zweiten Studienjahr
Wissenschaft in Datenstrukturen.Es war unsere Absicht, das Mathematische auszuwählen
Grundlagen mit Blick auf das, was der Computerbenutzer wirklich braucht, und nicht auf
was ein Mathematiker wählen könnte.“

Eine Seite zum Auffrischen von Mathe:http://www.khanacademy.org/

Mein Mathe-Hintergrund ist wirklich dürftig (Geologe mit Ausbildung), aber ich habe einen belegt diskrete Mathematik Klasse in der High School und ich verwende die Konzepte jeden Tag als Programmierer.Es ist wahrscheinlich der wertvollste Kurs, den ich in meiner gesamten Ausbildung besucht habe, wenn er sich auf meinen aktuellen Beruf bezieht.

Diskrete Mathematik
Lineare Algebra
Kombinatorik
Wahrscheinlichkeit und Statistik
Graphentheorie

  • Boolsche Algebra
  • Mengenlehre
  • Diskrete Mathematik

Nun, das hängt davon ab, was Ihr Ziel ist.Wie jemand sagte, sind lineare Algebra, Kombinatorik, Wahrscheinlichkeitstheorie und Statistik sowie Graphentheorie wichtig, wenn Sie schwierige Probleme lösen möchten.Asymptotisches Wachstum von Funktionen (Bit-Oh-Notation) ist sehr wichtig.Sie müssen auch Summationen und Reihen beherrschen, wenn Sie an der Analyse einiger komplexerer Algorithmen arbeiten müssen (siehe Anhang zu Cormen & others Intro to Algorithms).

Selbst wenn Sie sich für „Java für Unternehmen“ oder „serverseitiges PHP“ interessieren, werden Sie einige Statistiken und Algorithmenkomplexität (daher Kombinatorik, Induktion, Summationen, Reihen usw.) nützlich finden, wenn Ihr Chef möchte, dass Sie den Server bekommen schneller zu arbeiten, und das Hinzufügen neuer Hardware scheint nicht zu helfen.:-) Das habe ich schon einmal erlebt.

  • Boolsche Algebra
  • Mengenlehre

Warum nimmt jeder Wahrscheinlichkeit und Statistik in die Goldliste auf, ohne die Analysis zu erwähnen?Man kann nicht verstehen, worum es bei Wahrscheinlichkeit und Statistik geht, ohne zumindest praktische Kenntnisse über Grenzwerte, Ableitungen, Integrale und Reihen zu haben.Und alles in allem ist die Analysis (zusammen mit der linearen Algebra) das Arbeitstier von alle Mathematik.

Ich denke, dass Algorithmen und Theorie von großer Bedeutung sind.In der Lage sein, schnell etwas zu finden, und richtig Die Lösung unterscheidet gute Programmierer von den anderen.Ebenso wichtig ist es, dass Sie Ihren Algorithmus beweisen können (mithilfe von Standardbeweistechniken wie Induktion, Widerspruch usw.).

Ja, ich würde sagen, ein grundlegendes Verständnis der Induktion hilft, damit Sie verstehen, was n in Algorithmen darstellt.Auch einige logische und diskrete Strukturen sind hilfreich.

Wahrscheinlichkeit und Statistik sind sehr hilfreich, wenn Sie jemals etwas tun müssen, das maschinellem Lernen ähnelt.

Ich behandle die Grundlagen in meinem „Berechnen Sie Ihre Fähigkeiten„Blogbeitrag, in dem ich bespreche, wie der TrueSkill-Ranking- und Matchmaking-Algorithmus von Xbox Live funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top