• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Ist (höhere) Mathematik wirklich SO wichtig fürs Programmieren?

Azazyel

Well-Known Member
#26
Ich sage mal so: Es kommt drauf an, was man entwickelt. Für den normalen Wald- und Wiesencode, der sicher über 95% aller dort draußen geschriebenen Codezeilen ausmacht, reichen die 4 Grundrechenarten - und wenn man gut sein will dazu noch Modulo - vollkommen aus. Dort sind andere Dinge wichtiger.
Deiner Aussage kann ich nur zustimmen. Meist scheitert es eher am Handwerkszeug denn höherer Mathematik.

Beispielsweise ein "Gefühl" für Algorithmen und Datenstrukturen, Kenntnis gängiger Design Pattern und Best Practices in Sachen Programmarchitektur.
Ich würde zusätzlich noch etwas diskrete Mathematik mitnehmen. Ein sehr überschaubarer und auch für Normalsterbliche verständlicher Bereich, der einen als Entwickler noch einmal ein großes Stück weiterbringt und gefühlt 99% aller geschriebenen Codezeilen verständlich macht (auch im Bereich funktionaler Programmierung). :)
 

goblin

Dämonenbeschwörer
#28
Um es mal mathematisch zu formulieren: ich halte ein mathematisches Verständnis ist eine hinreichende, aber keine notwendige Bedingung für gutes Programmieren. Einige der Gründe hat @pintman in meinen Augen schon ganz gut dargelegt. Für mich ist der essenzielle Punkt das Verständnis. Wenn ich das Problem nicht verstanden habe, dann kann ich es nicht optimal lösen. Unter anderem fallen die bereits genannten Laufzeit- und Speicherkomplexitäten darunter, etwas das in meiner bescheidenen Erfahrung nach gerade bei Enterprise-Java-Programmierern komplett ignoriert wird…
Sehr viele Konzepte in Computern sind grundlegend mathematisch. Operationen auf Vektoren und Matrizen findet man in sehr vielen Teilbereichen. Taylorreihen allerdings sind mir nur im Bereich der wissenschaftlichen Simulationen begegnet. Und dort gab es programmierende Mathematiker, die sich darum gekümmert haben ;)
 

Th0min4tor

OS-Wechselwähler
#29
ich halte ein mathematisches Verständnis ist eine hinreichende, aber keine notwendige Bedingung für gutes Programmieren.
Nein, so einfach ist es dann auch wieder nicht. Die Mathematiker können weder automatisch programmieren, wenn sie von der Uni kommen, noch schreiben sie generell besonders guten Code, wenn sie programmieren. Es stimmt schon, dass Mathematiker ein gewisses Abstraktionsvermögen aufweisen, dass ihnen den Einstieg auch in tiefergehende Programmierkonzepte enorm erleichtert. Aber auf der anderen Seite haben sie auch oft keine Lust, sich mit Design Patterns jeglicher Art zu beschäftigen. Viele sind heilfroh, dass ihr geliebtes Matlab nicht objektorientiert ist. Code-Dokumentation und -Strukturierung (in Paketen, Modulen, Bibliotheken usw.) ist dann oft ganz besonders arg. Trotz allem: Natürlich gibt es auch Mathematiker, die sehr guten Code schreiben.

Übrigens gibt es auch Anwendungen für Taylorreihen außerhalb wissenschaftlicher Simulationen. Eigentlich bei jeder Art von Optimierungsproblem, dem ein kontinuierliches Modell zu Grunde liegt, etwa unzählige Probleme im Bereich Computer Vision bzw. Bildverarbeitung. Nichtlineare Operatoren werden da gerne durch Taylorentwicklungen approximiert und so weiter.
 

ralli

OpenBSD Fanboy
#31
Auch ich habe nur einen "Hauptschulabschluß". Der war im übrigen zu meiner Zeit wesentlich mehr wert wie heutzutage. Und aus allen Mitschülern sind gestandende Menschen geworden, die Ihr Leben gut gemeistert haben. Im übrigen auch ohne höhere Mathematik. Ich beherrsche sie bis heute nicht, aber um mehrere Hoch- und Scriptsprachen zu lernen und auch praktisch anzuwenden, hat es jedenfalls gereicht. Ich denke, das das Verständnis für logische Vorgänge und der inneren Logik einer Programmiersprache ausreicht, um einen bestimmten Bereich abzudecken. Wer kein Schachspieler ist, sollte natürlich tunlichst kein Schachspiel programmieren. Die digitale Welt bildet ja für eine bestimmte Aufgabe und Zweck die Wirklichkeit ab. Also kommt es beim Programmieren nicht nur auf Mathematik an, sondern auch auf praktische Erfahrungen und Erkenntnisse. Wer zusätzlich über analytisches und strategisches Denken verfügt, der ist natürlich klar im Vorteil. Was mathematische Formeln und Funktionen angeht, so bringt sie ja jede Hochsprache in Bibliotheken mit, die dann zum Gebrauch nur entsprechend eingebunden werden müssen und benutzt werden können.
 

ralli

OpenBSD Fanboy
#33
@ralli ... darf ich fragen wann deine Zeit war (nicht das sie es jetzt nicht mehr ist... aber du weisst schon was ich meine)
Aber gerne, ich bin Jahrgang 1950, also 66 Jahre alt. Ergo bin ich im wohlverdienten Ruhestand, also Rentner. Der Ruhestand steht natürlich nur auf dem Papier ..... ich schreibe viel, nicht nur in Foren und sitze immer noch ca. 8 Stunden am PC.;)
 

goblin

Dämonenbeschwörer
#36
Nein, so einfach ist es dann auch wieder nicht. Die Mathematiker können weder automatisch programmieren, wenn sie von der Uni kommen, noch schreiben sie generell besonders guten Code, wenn sie programmieren.
Das meinte ich doch genau damit: Man ist nicht automatisch ein guter Programmierer, nur weil man ein Mathe-Ass ist. Aber ohne mathematisches Verständnis sehe ich eben auch Schwierigkeiten. Die Hauptsache für mich ist, man sollte es mal gehört haben und sich im Zweifel einarbeiten können. Das geht halt am besten, wenn man es tatsächlich mal gelernt hat, auch wenn man es erstmal viele Jahre nicht mehr braucht. Ich finde schon, dass es auf den Lehrplan gehört, über die Tiefe kann man natürlich streiten und das handhabt ja auch jede Uni und jeder Professor unterschiedlich.

Viele sind heilfroh, dass ihr geliebtes Matlab nicht objektorientiert ist.
Objektorientierung ist nicht das Maß der Dinge. Genausowenig wie rein funktionale Programmierung. Oder rein prozedurale… “There is no silver bullet”

Im übrigen stellt Programmieren für mich eine interdisziplinare Tätigkeit dar: Es hat starke theoretische Anteile, wie bei einer Wissenschaft. Andererseits sind die von dir erwähnten Elemente „Handwerkszeug“. Unis und Hochschulen legen in meinen Augen zu viel Wert auf ersteres, die Ausbildung auf letzteres. Die Wahrheit liegt für mich letztendlich irgendwo dazwischen.
 

SierraX

Well-Known Member
Themenstarter #37
@ralli leider ist es nicht nur so das der Hauptschulabschluss heut zu tage an wert verloren hatte... schon in der 2ten hälfte der 80er (meine Zeit) war er bei weiten nicht soviel wert wie in den 60ern. Die Akademiker Blase hatte da meiner Meinung nach schon begonnen was dafür sorgt, dass das Handwerk zur Nische gestutzt ist und immer mehr auf die Gymies drängen die es von der Intelligenz her nicht verdient hätten.
 

SierraX

Well-Known Member
Themenstarter #38
Wikipedia ist auch eine Enzyklopädie und keine Lernplattform. :)

Du kannst ja mal einen Blick riskieren: deutsch / englisch
Danke für die links...
Man wird allerdings (zumindest bei der ersten Folge der deutschen Videoreihe) als Hauptschüler gleich mal abgeschreckt ...
... Aufleitung , Ableitung, Sinus, Cosinus, Integral sehe ich als gegeben an...
Sinus, Cosinus hat man zwar wie auch Ableitung schon mal gehört, aber nie wirklich gelernt. Von einer Aufleitung und Integral ganz zu schweigen...
 

zuglufttier

Well-Known Member
#39
Höhere Mathematik bedarf sicherlich einer Definition :D Für einige fängt es an, wenn man nicht mehr nur "rechnet", sondern auch Formeln und Buchstaben mit ins Spiel kommen, der andere denkt vielleicht an mathematische Beweise, die man selber führt.
 

ralli

OpenBSD Fanboy
#40
@ralli leider ist es nicht nur so das der Hauptschulabschluss heut zu tage an wert verloren hatte... schon in der 2ten hälfte der 80er (meine Zeit) war er bei weiten nicht soviel wert wie in den 60ern. Die Akademiker Blase hatte da meiner Meinung nach schon begonnen was dafür sorgt, dass das Handwerk zur Nische gestutzt ist und immer mehr auf die Gymies drängen die es von der Intelligenz her nicht verdient hätten.
Das stimmt absolut. Heute sind viele Hauptschulabgänger leider zukünftige Hartz IV Empfänger oder werden im Nidriglohnsektor beschäftigt. Das will ich nicht verallgemeinern, ich erinnere mich das es zu meiner Zeit nur ca. 2% Abiturienten gab. das dürfte sich heutzutage vervielfacht haben. Bei mir hätten die überdurchschnitlichen Noten durchaus auch fürs Gymnasium gereicht, was von den zuständigen Lehrern auch empfohlen wurde. Aber ich bekam halt vom Elternhaus nicht die notwendige Unterstützung. Aber trotzdem bin ich meinen Weg gegangen.
 

Athaba

Libellenliebhaber
Mitarbeiter
#42
Ich mach's gern umgekehrt. Also ich lern' nicht irgendwie Mathe in der Hoffnung, dass ich brauchen kann, sondern hab ein Projekt und eigne mir dann das entsprechende Wissen dazu an.

Da sehe ich Mathe nicht anders als andere Dinge. Wenn du sagst du willst ein Webservice bauen, dann schaust du dir auch an wie HTTP funktioniert, SQL wenn du was mit Datenbanken machst. Wenn du ein Jail-Management-Tool machst siehst du dir Jails wahrscheinlich auch viel detaillierter an, als viele User. Wenn du dann irgendwelche Visualisierung machst siehst du dir eben das Mathe dazu an. Ich hatte lange nicht viel mit Geometrie am Hut, habe zuletzt aber ein paar Projekte in die Richtung gemacht, deshalb das Mathe dazu gelernt.

Das geht übrigens auch ins Extreme. Wenn du fünf Jahre an was sitzt, egal was es ist, wirst du sicherlich auch den Anteil an Mathe den du brauchst Inne haben. Schule oder Uni sehe ich eher als Weg dafür zu sorgen, dass man weiß wonach man suchen muss. Und wenn's wirklich so Basic ist, wie du's an der Uni machst (also die Dinge abseits von deiner Bachelor-/Master-Doktorarbeit), dann ist das häufig ohnehin nicht in dem Rahmen, den du dann brauchst.

Und dann kommt's noch an was du machst. Kann ja sein, dass du Natural Language Processing machst und da ist es mitunter so, dass du Deutsch, Englisch, generell wie Sprachen funktionieren viel nötiger hast, als Mathe. Niemand sagt dir du brauchst Grammatik für's Programmieren.

Es gibt allerdings viele Punkte wo du Mathe inhärent in fast allen Bereichen brauchst. Wenn du was schneller machen willst, einen Algorithmus optimieren willst brauchst du Mathe. Generell brauchst du (binäre) Logik, als Teil der Mathematik. Nur ist da ja ohnehin was was du dann täglich machst, genauso wie die restliche Mathematik, die du brauchst. Das heißt man lernt vieles teilweise recht unbewusst und vor allem wenn man wirklich in einem Projekt ist wo man das Problem gut versteht auch extrem schnell.

Ich kenne einige Leute, die in der Schule oder auch an der Uni miese Mathematiker waren, aber dann als sie einfach vor ihrem Projekt standen, für das sie Passion haben genau die selbe Mathematik angewandt haben ohne es wirklich mitzubekommen.

Zuguterletzt: Du brauchst allem voran das was du mit sechs oder sieben gelernt an Mathe und womöglich Teile, die du an der Uni gelernt hast (meist vollkommen anders, als alles was davor kam). Beides kannst und wirst du dir aber auch im Zuge des Programmierens aneignen, wenn du ein Problem wirklich lösen willst. Und ja, davon gehört zu haben ist wie mit allem gut. Ist dann ungefähr, wie wenn du weißt in welcher man page du nachsehen musst und so, aber auch wenn du was an der Uni oder in der Schule durchgenommen hast ist es so, dass die Chancen groß sind, dass, wenn das nicht gerade deine Masterarbeit war du das ohnehin auffrischen bzw. neu lernen musst, Gerade die Dinge, die man womöglich nur sehr theoretisch durchgenommen hat stellt man sich dann vollkommen anders vor.

Kenne viele ITler, auch PhDs, die Mathe in der Schule gehasst haben und auch durchgefallen sind und jetzt was wirklich Mathe-intensives treiben. Oft haben die dann nur auf dem Teilgebiet wirklich viel Ahnung, aber das ist dann genau das Mathe, das du brauchst.

Im Endeffekt halte ich so Sätze wie "Wie willst du ohne Mathematik programmieren?" kontraproduktiv. Ich weiß, oft sind sie gut und motivierend gemeint, aber sie können Panik verursachend sein und dann lernt es sich noch schlechter. Und es ist einfach Humbug zu denken, dass man jemanden ein Mathebuch in die Hand drückt, dann liest man das drei mal quer und kann das. Das funktioniert nicht um Rad fahren zu lernen, das funktioniert nicht um programmieren zu lernen und bei Mathe auch nicht.

Das ist das schöne am Programmieren. Du kannst dir ein Problem suchen, dich reinbeißen bis du es löst und es mag mal länger und mal kürzer dauern aber für gewöhnlich hat man dann eine Lösung und auch wenn sie schlecht ist hat man meist so viel daran und am Rundherum gelernt, das das nächste Mal was viel besseres entsteht.

Für alle, die nicht an der Uni waren: Meist fokussiert man sich da viel mehr drauf Probleme zu lösen, sich Dinge als X vorzustellen, etc. Das ist sehr anders, als das Mathe das man davor hatte. Was mitunter auch passiert ist die Sprache zu verstehen. Stellt euch vor, ihr redet mit jemanden über BSD und neben euch steht jemand ohne Ahnung von Computern. So kann es einem natürlich auch mit Mathe gehen. Das kann mitunter eines der größten Herausforderungen sein, das Basiswissen dafür aufzubauen, aber dann geht das schon.

Kurzum: Wenn Mathe das Einzige ist, was einem vom Programmieren oder IT (auch als Admin brauchst du Mathe!) fern hält, dann macht man sicher eine prima Karriere!

Und noch eines. Es ist witzig, aber es gibt doch einige Leute, die einfach nur Spiele machen wollten und dann irgendwann ihre eigene 3D-Game-Engine bauen, so ohne mathematischen oder IT Hintergrund. Das ist auch sowas, wo man extrem Mathematik brauchen kann (Grafik, Physik, ...), mehr als die meisten anderen Programmierer. Ich erzähle das, weil das klassische "Ich habe von Mathe und Programmieren eigentlich keine Ahnung"-Leute sind.
 

SierraX

Well-Known Member
Themenstarter #44
@goblin deshalb steht höhere auch in Klammern...
Es stand in diesem Threat schon mal, das man Mathematik auch als eine Art Sprache sehen kann. Ich fand die Aussage sehr interessant und wann man es jetzt auf Programmiersprachen umlegt sind Hoch bzw höhere Sprachen ja diejenigen, die eine bestimmte oder unbestimmte Entfernung zu einer Basis haben.
Bezugnehmend auf meiner Aussage das wir "nicht weit über Grundrechenarten und 3 Satz hinaus gekommen" sind wäre das was ich hatte, ein Basis wissen (wohlgemerkt, das was rein von der Schule kam. Statistik und ein paar andere Sachen hab ich mir angeeignet weil es für meinen momentanen Job hilfreich ist um die Hintergründe zu verstehen. Vor 3 Jahren hatte ich z.B. noch keine Ahnung was ein "Median" sein soll. "Modulo", was hier auch schon mal gefallen ist, kenne ich erst seit 10 Jahren und erst einige Jahre drauf, mit dem Basteln an und mit Arduinos die teilweise kein float kennen, hab ich das auch häufiger mal im Einsatz). Da bin ich beim @zuglufttier es bedarf einer Definition... dachte aber das hätte ich mit dieser Basis aussage im Opener gegeben.
Von einer vorhandenen Basis nach oben geschaut ist eigentlich das meiste "höher"... ich meine aber eher das was in den früheren (also meine Schulzeit bis 1987) und ich glaube auch aktuell eher den Gymnasiasten an mathematischen Grundlagen schulisch vorbehalten war/ist.
 

Kamikaze

Warrior of Sunlight
Mitarbeiter
#45
Wer meint er braucht zum Programmieren kein Mathe, fasst einfach den Begriff zu eng. Die gesamte Algorithmik ist ein Zweig der Mathematik. Die Mengenlehre, Grammatiken alles was man so in der theoretischen Informatik macht. Die O-Notation wurde schon im 18. Jahrhundert von Mathematikern verwendet.

Was man nicht so viel braucht ist analytische Mathematik. Die meisten realen Probleme da draußen sind analytisch nicht lösbar und erfordern einen numerischen Ansatz. Das kommt in der Mathematik in der Schule leider viel zu kurz. Auch in der Physik. All die Rechenprobleme die man da vorgesetzt bekommt sind selektiert um analytisch lösbar zu sein, was doch die Wahrnehmung verzerrt.

Natürlich gibt es viele Dinge die in O(n) oder O(1) gemacht werden und entsprechend wenig komplex sind.

Aber für alle interessanten Problemstellungen braucht man Mathematik.
 

kith

unfuck me!
Mitarbeiter
#46
Ich sage mal so: Es kommt drauf an, was man entwickelt. Für den normalen Wald- und Wiesencode, der sicher über 95% aller dort draußen geschriebenen Codezeilen ausmacht, reichen die 4 Grundrechenarten - und wenn man gut sein will dazu noch Modulo - vollkommen aus. Dort sind andere Dinge wichtiger. Beispielsweise ein "Gefühl" für Algorithmen und Datenstrukturen, Kenntnis gängiger Design Pattern und Best Practices in Sachen Programmarchitektur. Mathematisch fit muss man lediglich für einen kleinen Teilbereich sein, wo wirklich gerechnet wird. Datenauswertungen, Datentransformationen wie Audio- und Video-Codecs oder auch Kompressionsalgorithmen. 3D-Grafik. Um mal drei Punkte herauszupicken. Und da sind wir dann ganz schnell bei Bibliotheken. Du wirst sehr wahrscheinlich keinen Audiocodec entwickeln, stattdessen libvorbis oder libopus nehmen. Du wirst auch kein Kompressionsverfahren bauen, schließlich gibt es zlib und gefühlt 25 Alternativen. Kurz gesagt, jemand hat die Arbeit gemacht und du greifst darauf zurück, ohne selbst das notwendige mathematische und technische Verständnis haben zu müssen. Daher ist unter dem Strich meine Meinung, dass die Behauptung man müsse zum Programmieren ein gutes mathematisches Verständnis haben einfach falsch.

+1

Meine Erfahrung ist, dass Mathe von Mathematikern erledigt wird und die fertige Formeln an Entwickler übergeben, die es dann in Algorithmen giessen. Was Entwickler machen hat mMn. mehr mit logischem Denkvermögen und ein paar Mathebasics zu tun, was nicht zwingend das gleiche wie hardcore Mathe ist.
 

CrimsonKing

Systemzerstörer
#47
Wer meint er braucht zum Programmieren kein Mathe, fasst einfach den Begriff zu eng. Die gesamte Algorithmik ist ein Zweig der Mathematik. Die Mengenlehre, Grammatiken alles was man so in der theoretischen Informatik macht.
Verwechsle bitte nicht Programmieren mit Informatik. Den Fehler machen viele. Als Informatiker brauchst du exakt 0 Programmierkenntnisse.
 

CrimsonKing

Systemzerstörer
#49
Korrekt. Die (z.B.) Inder, die billig Dinge runterprogrammieren, müssen weder von Algorithmik noch von Automatentheorie besonders viel Ahnung haben - das unterscheidet eben Entwickler von Programmierern.
 
#50
Ihr amüsiert mich! :) Da führt man eine neue Unterscheidung ein wie die zwischen Programmieren und Entwickeln und schon streite man sich um des Kaisers Bart. :rolleyes:

Also: Programmieren ist die Anfertigung von Daten verarbeitenden Maschinen. Dazu braucht man keine Theorie, nur einiges an Wissen und Erfahrung. Und wenn sich jemand hinsetzt und eine solche Maschinerie neu entwickelt, dann ist er eben ein Entwickler. Ob die Idee und ihre Ausfertigung dann gut ist, ist eine ganz andere Frage. Vermutlich werden da Informatik oder vertiefte Mathematik hilfreich sein, aber doch keine Bedingung.

Informatik ist eine rein abstrakte Theorie, vergleichbar der Mathematik und mit ihr auch eng verbunden. Das sind m.W. neben Teilbereichen der Theologie und der Philosophie die einzigen rein abstrakten Disziplinen. Solche Theorien bauen auf bestimmten Kalkülen und Axiomen auf und brauchen keinerlei praktischen Anwendungsbereich, - sie sind sich selbst genug.

Sowohl praktische Erfahrungen wie Programmieren als auch die Vertiefung in abstrakte Theorien führen zu einem Bildungsprozess der uns selbst und unser Denken verändert. Man tickt eben in der Birne ganz anders, sieht andere Dinge, auch andere Möglichkeiten und Probleme. Diese Unterschiede werden meist/oft überhaupt nicht wahrgenommen und das eigene Tick-Tack als der Weisheit letzter oder vorletzter Schluss verstanden. Und die jeweils anderen sind immer die Dummen...

Das alles sollte man allerdings von beruflichen Bildung unterscheiden denn da sind eine Menge an Gesichtspunkten zu berücksichtigen die nicht mit ein paar Worten abzutun sind. Und da jede Tätigkeit die von individuellen Personen ist, ist die individuelle Bildung (und zwar nicht nur die der Birne!) für jede berufliche Tätigkeit ebenfalls von Bedeutung. Sicherlich ist es von Vorzug da recht breit aufgestellt zu sein und kein Fachidiot, welcher Art auch immer, zu sein.