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

Soviel ich weiss, beschäftigen sich Informatiker (unter anderem) mit der Erforschung und Verbesserung neuer Algorithmen, Rechnerarchitekturen und Programmiersprachen. Ingenieure wiederum lösen technisch-naturwissenschaftliche Problemstellungen mithilfe von Computern. Dafür braucht man spezielle Mathematikkenntnisse und Kenntnisse in der "angewandten Informatik".

Es gibt zwar Ausnahmen, aber nur weil man im Besitz eines KFZ-Führerscheins ist, bedeutet nicht, dass man sein Auto selbst geplant, konstruiert und hergestellt hat.
 
@nintendo das wird ja auch niemand behaupten wollen... der Besitz eines KFZ-Führerscheins bedeutet noch nicht mal das man das Führen eines KFZ beherrscht sondern ist nur der vorzeigbare Beweis das man die Staatliche Erlaubnis hat, eines auf öffentlichen Stassen zu führen. Zusätzlich ist es sogar so, das man keine KFZ-Fahrerlaubnis, nicht mal einen TÜV Plakette braucht um ein Kraftfahrzeug zu planen, konstruieren und herzustellen.

Da Ingenieurs Studiengänge schon wesentlich länger existieren, als der Begriff der Informatik überhaupt definiert wurde halte ich es für Mumpitz das man dort Kenntnisse in der "angewandten Informatik" braucht.
 
Da Ingenieurs Studiengänge schon wesentlich länger existieren, als der Begriff der Informatik überhaupt definiert wurde halte ich es für Mumpitz das man dort Kenntnisse in der "angewandten Informatik" braucht.
Ich kann mir heute keinen technischen oder naturwissenschaftliches Bereich vorstellen in dem nicht Informatik (was immer "angewandte Informatik" genau sein soll) eine wichtige Rolle spielt. Also Mumpitz ist das nun wirklich nicht...
 
Ich musste jetzt tasaechlich fuer "Mitternachtsformel" eine Suchmaschine bemuehen, da selbst meine Formelsammlung den Begriff nicht kannte :o
Jetzt weiss ich also, was als Mitternachtsformel bezeichnet wird.

Mathematik kann sicherlich beim Programmieren hilfreich sein; was Mathematik aber nach meiner bescheidenen Meinung foerdert, ist das Abstraktionsvermoegen. Dies bedeutet aber nicht, dass ein guter Mathematiker auch ein guter Programmierer waere...
Ich habe mal - aus Neugier/Interesse - angefangen mich mit der Relativitaetstheorie zu befassen. Hierbei geht es mir aber nicht um irgendwelche anschaulichen Beispiele sondern um die mathematischen Hintergruende, da es mich immer fasziniert hat, wie man auch einfachste Naturgesetze mathematisch ausdruecken kann (ja ich finde das nunmal spannend und beschaeftige mich in meiner Freizeit damit :D ). Kann ich dadurch besser Programmieren: Definitiv nicht.
Mathematik ist das formale Fundament aber doch nur ein Hilfsmittel.

Ich weiss, dass einige Lehrer an Berufsschulen am Verzweifeln sind, da die Azubis teilweise noch nicht mal mehr die einfachste Mathematik beherrschen und selbst ihre Taschenrechner nicht bedienen können...was heisst Mathematik; die können noch nicht mal mehr rechnen...bei physikalischen Einheiten ist die "Antwort" oft nur ein geistloser, leerer Blick (letzte Woche selbst gesehen und es ging nur um Ohmsche Widerstände).
 
Wer meint er braucht zum Programmieren kein Mathe, fasst einfach den Begriff zu eng. [...]
Stimmt schon. Nur hat das mitunter relativ wenig bzw. meist garnichts damit zu tun, wie man notentechnisch an Uni oder Mathe ageschnitten hat. Gibt genug Leute, die zuerst mal Programmieren, dann Interesse in einem Gebiet aufbauen und dann erst richtig Tief eingetaucht, Papers geschrieben, die Informatik (Coputer Science sind) und voll mit mathematischer Notation.

Ich find's halt etwas schade, dass angehende Informatiker, die nicht selten unter Impostor-Syndrom und in dem Alter (Ende der Pubertät) dann auch häufig mal unter Selbstzweifeln. Da ist das mitunter kontraproduktiv Sprüche loszulassen, dass man mit solchen Mathe-Noten kein guter Informatiker wäre. Wie du ja eh geschrieben hast (also sieh' das nicht als Widerspruch) ist das eine extrem enge Interpretation des Begriffs, aber leider eine sehr weit verbreitete. Deshalb gibt's echt Leute (und ja ich kenne das selbst mehr als eine Person), die nicht so extrem gute Noten hatten, dann mit dem Bachelor Informatik begonnen haben und dann hat ihnen der Mathe-Teil so gut gefallen, dass sie darauf umgestiegen sind und bis zum Master oder Doktorat durchmachen.

Das sehe ich eben als das große Problem von solchen Statements, wenn die dazu führen, dass Leute, die womöglich gute Informatiker oder generell Techniker wären sich dann nur deshalb einer Geisteswissenschaft zuwenden. Nichts gegen Geisteswissenschaften. Ich finde die haben ein schlechteres Image, als nötig, aber derzeit kann die Welt gute Informatiker und Techniker echt gebrauchen. Und ja, dass man sich gegen seine Passion entscheidet kann man auch als Charakterschwäche entscheiden, aber ähnliches gilt auch für Sprüche, die Lehrer manchmal loslassen - oftmals, weil sie es offenbar nicht schaffen das Potential von Schülern nicht zu wecken. Das soll auch wieder nichts gegen Lehrer sein. In jedem Job gibt's eben auch schwarze Schafe und ich schreibe jetzt mal über diese.

Mal ganz davon abgesehen, dass man auch nicht studieren *muss*, auch nicht, wenn man Papers schreiben will. Das ist mittlerweile nicht mehr die riesige Ausnahme. Ist nicht häufig, nicht unbedingt ein ratsamer weg, aber gibt's eben auch immer mal wieder. :)

Finde den Weg über Programmieren zu Mathematik spannender als umgekehrt. Ist aber wohl Geschmacksache.
 
Kann ich nur zustimmen...

Fuer mich persoenlich kann ich aber sagen - so rueckblickend betrachtet -, dass ich haette Mathematik oder Physik studieren sollen und nicht Informatik.
 
Programmierst du einen Web Browser in Assembler?
Ich habe gerade zwei Webbrowser erstellt. Einen mit Objectpascal, den anderen in Qt5. Aber dafür gibt es ja fertige webkit Widgets, so das das nicht wirklich schwierig ist. Assembler wurde ja früher hauptsächlich für zeitkritische Anwendungen genommen. Da aber die Rechner heutzutage um ein Vielfaches schneller sind, wird man sich den Aufwand sicherlich auch ersparen. Früher waren dBase III und dBase IV komplett in Assembler geschrieben. Komplette Programme für Windows oder unter X fällt mir kein einziges ein.
 
Gottlob ist C++ ja standardisiert. Und dazu gibt es die STL von Alexander Stepanov. Die deckt aber schon einen großen Teil an benötigten Funktionen ab. Für die restlichen 5% wird es zusätzliche Bibliotheken geben. Das schöne an C++, was ja nur eine Obermenge von C ist, das Du die Wahl hast. Du mußt ja nicht objektorientiert arbeiten, du kannst es auch lassen. Am Anfang hieß ja C++ (C mit Klassen), die objektorientierten Erweiterungen wurden notwendig, weil die Komplexität von Programmen unheimlich zugenommen hatte und das mit C nicht mehr sinnvoll zu meistern war.
 
Ich kann mir heute keinen technischen oder naturwissenschaftliches Bereich vorstellen in dem nicht Informatik (was immer "angewandte Informatik" genau sein soll) eine wichtige Rolle spielt. Also Mumpitz ist das nun wirklich nicht...
Verwendung findet sicher, auch das es jetzt eine wichtige Rolle hat ok... mir ging es bei meinem Post um das "braucht". Das Empire State Building ist 1931 eröffnet worden. Da waren, an der Jahreszahl zu sehen, die technische Möglichkeit vorhanden ohne das der Begriff - Informatik (der glaube ich zwischen den 1970ern und 1980ern geprägt wurde), noch garnicht gedacht.
Es geht mir jetzt noch nicht mal darum das es damals keine Computer gab, sondern das man das ohne die Wissenschaft der systematischen Verarbeitung von Informationen realisiert hat.
Die Informatik an sich ist eine Werkzeug das erst später entwickelt wurde und wie die meisten Werkzeuge, vergleichbare Leistungen für die Zukunft optimiert.
 
Komplette Programme für Windows oder unter X fällt mir kein einziges ein.

The Gun (Texteditor), Top Gun (Texteditor) und Fresh IDE (IDE für FASM) wären drei, die mir spontan einfallen. Vorteil: Die sind wirklich überaus performant. Ansonsten: KolibriOS?
 
Ich kann nur aus meinem Alltag sprechen. Ich arbeite schon viele Jahre als Programmierer für Datenkonvertierung und habe mit Mathematik recht wenig am Hut obwohl ich auch unter anderem Formal in MathML konvertiere. Wichtig ist da nur das es am Ende so aussieht wie es soll und was diese Formel macht ist eher unwichtig. So beim Programmieren kommt eben das übliche wie Grundrechenarten zum Einsatz. Für alle komplexeren Dinge nutzt man ja meist eher fertige Funktionen.

Mathematik wird erst dann wichtig wenn man besondere Aufgaben zu erledigen hat für die es keine geeignete fertige Lösung gibt. Simples Beispiel, ein Jump & Run Spiel lässt sich inkl. sämtlichen Mechaniken problemlos ohne eine Zeile Mathematik lösen wenn man eine fertige Engine nutzt. Will man jedoch ohne was fertiges arbeiten, dann wird es ganz schnell verdammt Rechenlastig. Auch bei speziellen Softwarelösungen könnte das der Fall sein. Wer eine Finanzsoftware schreibt sollte schon Wirtschaftsmathematik perfekt beherrschen, wobei an solcher Software wird man vermutlich als Normalsterblicher Programmierer niemals eine Zeile Code schreiben ;)

Unterm Strich kann man sagen, wenn man mit Mathematik nicht zurecht kommt, dann sucht man sich einfach eine Nische in der man damit wenig zu tun hat. Wenn man jedoch besonders bewandert in dem Thema ist, dann sucht man sich einen Bereich wo man sein Wissen ausnutzen kann. Für Projekte sind in der Regel viele Programmierer verantwortlich und jeder macht das was er kann und nicht das was er nicht kann.
 
Ich finde die Aussagen Assembler wäre schneller als X oder Y Unsinn. Es kommt darauf an was man macht und man sollte je nach Projekt die passende Sprache wählen. Mag ja sein das z.B Assembler sehr schnell ist, auf der anderen Seite wie viele Programmierer sind in der Lage einen Assemblercode zu schreiben der optimal ist? Ich würde vermuten das ein vom Compiler erzeugter Assemblercode aus einer anderen Sprache besser optimiert ist als das ein Mensch von Hand bei komplexen Programmen machen könnte. Auf der anderen Seite, warum soll ich mich mit C/C++/Java herum ärgern, wenn ich ein 2d RPG erstellen will das ich im RPG Maker um einiges schneller und besser umsetzen könnte, als mit eigenem Code.

Leider neigen viele dazu die eine Sprache beherrschen diese als einzige gute Sprache zu sehen. Aber man sollte immer die Werkzeuge nehmen mit welchen man die eigenen Probleme lösen kann, wenn dies mit Java geht, dann ist das Okay, wenn es auch mit einem grafischen Baukasten geht, dann ist das auch nicht die schlechtere Lösung.
 
Andersrum: Es ist in Assembler deutlich schwieriger, unnötig komplizierten Code zu schreiben, als in anderen Sprachen.

Das mag sein, wenn man aber einen Programmierer im Team hat der ständig hochkomplexen Unsinn schreibt, dann sollte man sich eher überlegen den Programmierer auszutauschen anstatt die Sprache ;) Ich denke mal diese ganzen Hardwarenahen Sprachen sind am besten für Dinge geeignet wo es minimalistisch sein muss und oder wo man direkt mit der Hardware arbeiten will/muss.
 
Ich würde vermuten das ein vom Compiler erzeugter Assemblercode aus einer anderen Sprache besser optimiert ist als das ein Mensch von Hand bei komplexen Programmen machen könnte.

Die Vermutung ist korrekt.

Auf der anderen Seite, warum soll ich mich mit C/C++/Java herum ärgern, wenn ich ein 2d RPG erstellen will das ich im RPG Maker um einiges schneller und besser umsetzen könnte, als mit eigenem Code.

The right tool for the right job. Als Normalsterblicher kann man aber nur eine begrenzte Anzahl Programmiersprachen bzw. Tools samt Ökosystem vernünftig beherrschen. :o

Andersrum: Es ist in Assembler deutlich schwieriger, unnötig komplizierten Code zu schreiben, als in anderen Sprachen.

In Assembler benötigt man auch halbe Ewigkeiten für Einzeiler in anderen Programmiersprachen.
 
Welches IDE, die ja überwiegend in anderen Sprachen als ASM geschrieben sind, ist performanter oder auch nur kompakter als Fresh IDE? Bonusfrage: Wieso ist Kolibri OS (ASM) schneller als *BSD (C)?
 
The Gun (Texteditor), Top Gun (Texteditor) und Fresh IDE (IDE für FASM) wären drei, die mir spontan einfallen. Vorteil: Die sind wirklich überaus performant. Ansonsten: KolibriOS?
Hab mal eben KolibriOS gezogen, ist ja sauschnell. Erinnert mich an GEOS, aber das werden wohl auch nicht mehr viele kennen. Hab es zwar auf german umgestellt, hat aber nicht wirklich funktioniert. Eine schöne Sache, wenn man Assembler lernen möchte.
 
KolibirOS und seine Mutter MenuetOS sind aber nicht schnell, weil sie in Assembler geschrieben sind. Stattdessen, da sie in ihren Hardwareanforderungen irgendwann Anfang des Jahrtausends stehen geblieben sind. Wenn man heute ein Windows 98 oder auch ein Windows 2000 in einer auf aktueller Hardware laufenden VM ausführt, gehen die auch ab wie Schmidts Katze.

Ich würde mich meinen Vorpostern anschließen und sagen, dass Assembler im Normalfall nicht schneller als "normale" Sprachen sind. Im Gegenteil. Bis auf wenige Ausnahmen wie z.B. handoptimierte Algorithmen ist es sehr, sehr schwer besser als ein moderner Compiler zu sein. Der Eindruck, dass Assembler schneller sei, dürfte eher daher kommen, dass Assemblerprogrammierer noch viel mehr wissen müssen, was sie tun und sich tendenziell mehr Gedanken um Ressourcennutzung als Entwickler in anderen Sprachen machen.
 
Man muss aber echt sagen, dass es mitunter sehr auf den Code ankommt, wie gut er optimierbar ist.

C-Compiler haben extrem coole Features und erkennen Sachen, die man als Mensch oft übersehen würde, ersetzen teilweise Code durch eigenen, wenn sie annehmen, dass er besser ist, kennen die letzten Assemblertricks für die CPU, etc. Auf der anderen Seite wundert man sich auch mal was für einen Stuss sie machen und man mit was für einen dummen Compiler man da arbeitet. Teilweise sind das auch Verschlimmbesserungen, wo quasi im Namen der Performance der Code langsamer gemacht wird. Solche Dinge werden zwar auch immer wieder gefixed, aber auch wenn Compiler ein interessantes Thema sind haben auch diese Projekte nicht unendlich Ressourcen und müssen auch Abwägungen treffen. Man will ja auch gute Warnings, Errors, debugbaren, portablen und sicheren Code haben, der nicht unendlich (potentiell) unendlich Memory frisst, damit irgendein kleiner Codeschnipsel ein Hauch schneller läuft.

So pauschal kann man das echt kaum sagen. Klar, wenn es um so Dinge wie Kryptographie geht ist es geradezu prädestiniert für Assembler. Ich würde argumentieren, dass Code nahe am OS/Kernel häufig auch eher mit Assembler schneller ist, aber selbst mit der Aussage lehne ich mich schon weit raus.

Was aber wahrscheinlich einen großen Einfluss hat ist auf was man bei Code abzielt, wie man ganz High Level Prioritäten setzt. Das kann man ja sogar meist dem Compiler mitteilen. Ich denke schon, dass wenn man im großen Stil Assembly wahrscheinlich gezielter mitdenkt und wenn man sagt man will schnellen Code, dass man da eher mehr rausholt.

Ein Teil der noch wichtig ist, ist wohl, dass Executables nicht allzu groß sind, was man bei C aus diversen Gründen (Debugging, irgendwelche Protections, ...) leicht haben kann. Dann gibt's noch andere Themen, wie die Frage auf was C-Libraries so aus sind (einfacher, portabler Code, ...). Wenn man dann ein ganzes System sehr stark bestimmen kann und vor allem alles selbst schreibt, was bei solchen Assembly-OSs häufig der Fall ist, dann hat man am Ende vielleicht weniger Maschinencode, der ausgeführt werden muss, als bei einer Hello-World-Qt-App. Da gibt's ja den schönen Spruch "No code is faster than no code".

Ist halt die Frage, wie man das sieht. Ja, rein vom Code der raus kommt optimieren moderne C-Compiler, wenn sie nicht gerade wo einen Bug haben extrem gut. Nur weiß auch ein C-Compiler meist nicht mit letzter Sicherheit was dein Ziel ist und dann gibt's auch mal Grenzen bzw. macht der Code dann häufiger mal mehr, als nötig.

Fairer wäre es dann wohl C-Code ohne Libraries zu nehmen. Da kann man auch mehr rausholen, aber gleichzeitig gibt man dann womöglich wieder viele Optimierungen aus.

Wie gesagt: Es kommt sehr stark auf den Fall an und was man mit schnell meint.

Oh und zu den IDEs und Assembler-Programmen auf anderen OSs möchte ich anmerken, dass die häufig C-Code callen, wenn sie mit dem OS sprechen. Da spielt wirklich häufig das "weniger redundanter Maschinencode"-Thema eine Rolle.
 
Vor über 20 Jahren hatte ich mal ein Gespräch mit einem Schreiner, der Fenster bauen musste und dazu Rahmen aus angelieferten Profilen zu sägen hatte.
Er wünschte sich damals eine IT-Lösung, die ihm beim sparsamen Umgang mit den angelieferten und teuren Profilen helfen könnte. Es sollte die Abfall-Länge optimiert,a ls minimal gehalten werden. Das Problem ist, dass die Profile mit einer bestimmten Länge angeliefert werden und wenn man nun etwa aus einem 5m Profil ein Stück von 3m schneidet, ergibt sich ein Abfall von 2m. Daraus könnte aber vielleicht noch ein Stück von 1,5m geschnitten werden. Dann ist der Abfall nur 0,5m. Das ist einfach und leuchtet ein. Doch, wenn ich nun aus einem 5m Profil drei Stücke von 1,5m schneide, habe ich ebenfalls 0.5m Abfall, brauche aber aus einem anderen 5m Profil nochmal 1,5m, da je jedes Rahmenstück doppelt vorkommt. Es ist leicht zu sehen, dass je nach Auftrag hier durchaus eine Optimierung stattfinden und passende Längen zueinander gebildet werden könnten. zudem könnten auch mehrere Aufträge zusammengefasst werden und so eine noch größere Optimierung erzielt werden.
Mir kam das Problem interessant vor, aber außer "Versuch und Irrtum" mit vielen if..then und Vergleichen, ist mir dazu nichts eingefallen. Ich hatte aber auch noch nir Lust auf Mathe und auch nicht sonderlich auf Programmierung und kenne mich mit beidem nicht aus.

Das Beispiel mochte ich erzählen, weil es vielleicht ganz anschaulich was verdeutlicht.
Ein Programmierer kann solch eine Aufgabe wahrscheinlich lösen, wenn er sich Mühe gibt und er braucht dazu noch nicht mal einen Algorithmus zu finden, sondern nur sehr viele Rechnungen durchlaufen und ordnen zu lassen.
Ein Mathematiker könnte einen Algorithmus entwickeln, irgendeine Art Formel oder vielleicht gibt es die auch schon und damit rechnerisch und elegant das Problem tatsächlich lösen, aber damit hat er dann immer noch kein Programm geschrieben.
Es bleibt immer noch ein Teil der Arbeit zu tun, die auch der unmathematische Programmierer zu bewältigen hat: das (G)UI muss gefüttert werden und die Ein- und Ausgaben sinnvoll zur Anzeige kommen.
Ohne Zweifel hat aber der Mathematiker einen Vorteil und wird auch ein eleganteres Programm bauen können, weil der Kern der Aufgabe einfacher und eleganter realisiert werden kann.

Vielleicht kann man das so sehen, was und wann Mathematik gebraucht wird oder zumindest das Verständnis dafür und das Wissen um vorhandene Lösungsmöglichkeiten einsetzen, um Aufgaben besser und schneller zu lösen. Beide können eine Lösung bieten und beide müssen noch programmieren, wobei wiederum Fehler gemacht werden können und es nicht gesagt ist, dass einer mit guten Mathe-Kenntnissen automatisch auch guten Code produziert.
Ja, Mathe ist vielleicht sogar eher eine Fremd-Disziplin und eigentlich sollte vielleicht ein guter Programmierer einen fähigen Mathematiker zur Seite haben, um zuerst mal die anstehenden Probleme sauber formulieren und analysieren zu können. Aber, weil das kaum in der Praxis zu haben sein wird, ist dann der Mathematik-Kundige ein wenig im Vorteil. Wie jemand mit guter Allgemeinbildung auch den ein oder anderen Vorteil hat, gegenüber jemandem, der nur ein einziges Gebiet betreibt.

Deshalb möchte ich auch noch ein (für mich) sehr abschreckendes Beispiel nennen. Denn, wenn so ein Mars-Lander crashed, weil die Programmierer inch und cm verwechselt haben (oder so ähnlich), dann weiß ich nicht ob man das auf Versagen der höheren Mathematik oder auf schlechte Programmiertechnik zurückführen kann. Für mich ist das einfach nur sau dämlich und es fehlte offenbar am nötigen kleinen Verstand zwischen den hohen Ansprüchen. Vielleicht wäre es manchmal gut, die Akteure zu mischen und nicht nur zu tief in ihrem Wissen verstrickte Arbeitskräfte zu haben. Das Wissen um die geheimen Gesetze der Schwerkraft nutzt nichts, wenn ich nicht mal eine einfache Strecke abmessen kann.

So muss man vielleicht auch unterscheiden, wer denn was programmiert und sehen, was dafür gebraucht wird.
Ich glaube (aber ich weiß es nicht, weil ich wirklich keine Ahnung habe), dass gutes Programmieren eine eigene Kunst ist und wenn ich einen Mathematiker brauche, dann suche ich mir einen und wenn ich guten Code brauche, dann eben einen Programmierer und wenn ich meine Wohnung gut gestrichen haben will, entweder einen Anstreicher oder meine Frau. Ich denke, der Projekt-Verantwortliche muss derartiges koordinieren und überblicken, nicht unbedingt der Programmierer selbst.
Ich glaube nicht, dass ein Bild vom Programmierer als kleines Universal-Genie in der schlecht beheizten Garage noch gültig ist.
Aber, wenn ich Programmierer wäre, würde ich mich natürlich auch für andere Sachen interessieren und meine Bildung nicht still stehen lassen und selbstredend gehört dann auch Mathematik und einige Grundlagen dazu, die mit meinem Beruf in Zusammenhang stehen. Denn ich bin altmodisch und möchte nicht gerne auf andere Leute bauen, wenn ich etwas selbst erledigen kann.
 
Das ist eine Variante des Travelling-Salesman Problems. Da kannst Du eine Heuristik draufschmeißen oder alle Möglichkeiten durchrechnen. Es gibt dafür, so weit ich weiß, keine bekannte Lösung, die in polynomialer Zeit die optimale Lösung liefert. Das Problem ist also in O(n!), was ziemlich katastrophal ist.
 
Zurück
Oben