Wie wichtig ist Compiler-Wissen für einen Programmierer/Informatiker?

Peter_2498

Lieutenant
Registriert
Apr. 2018
Beiträge
583
Hallo zusammen!

Kurz zu meinem Hintergrund:

Ich bin Mathematiker mit Nebenfach Informatik und habe mir für meinen Master schon länger Gedanken darüber gemacht, welche Informatik-Kurse sinnvoll sind. Die Informatik ist heute überall. Physiker, Mathematiker, Ingenieure und viele weitere Gruppen sind oftmals Quereinsteiger in dem Bereich. Wer nicht programmieren möchte, der macht sich sehr viele Türen zu....

Wenn man als Nebenfach Informatik belegt, dann hat man natürlich nur sehr wenig Informatik gehabt(verglichen mit vollwertigen Informatikern) und da ist es berechtigt sich irgendwo die Frage zu stellen, welche Kurse/Themen von so fundamentaler Bedeutung sind, dass jeder, der irgendwas mit Programmierung zu tun hat, diese belegen/lernen sollte.

Kenntnisse über Algorithmen und Datenstrukturen sowie erstmal grundsätzliches Programmier-Know-How (funktionale und objektorientierte Programmierkonzepte) gehören zu den Fundamenten dazu. Das war für mich auch logisch.

Nach meiner weiteren Recherche nannten aber auch viele Leute sowas wie "Compiler-Bau". Da waren auch Leute dabei, die der Meinung waren, dass solch ein Kurs wohl neben den oben genannten der Fundamentalste! ist, den du überhaupt belegen kannst. Es würde einem extrem viel bringen.

Ich muss sagen, dass ich sehr überrascht war. So einen Kurs gibt es an unserer Uni(wie an jeder Uni wahrscheinlich auch) aber ehrlich gesagt, habe ich diesen Kurs oder das Thema an sich nicht mal wahrgenommen, weil ich dachte, dass das eine Nische ist, in der ich als Mathematiker nichts zu suchen habe und es sicherlich sinnvollere Kurse gibt...

Ich muss aber auch sagen, dass dieser Kurs an meiner damaligen Uni wo ich den Bachelor gemacht habe, nicht Pflicht war, an meiner jetzigen ist es für Informatik-Studenten im Bachelor Pflicht und da frage ich mich, wieso eine Uni, wenn es denn so wichtig sein soll, sowas nicht als Pflichtprogramm stellt.

Aus diesem Grund wollte ich mal eure Meinung dazu hören. Hier gibt es ja viele Informatiker.
 
Welche Optionen hast du denn?
Ich würde was in Richtung "praktische Informatik" empfehlen - so hieß das bei uns damals.
Compiler-Bau finde ich nicht sinnvoll, wenn man später Programmieren eher als "Werkzeug" einsetzen will.

Hab genau andersrum studiert - Info mit Mathe dazu.
 
  • Gefällt mir
Reaktionen: Peter_2498
Ich baue als 08/15 Java-/Kotlin-Entwickler im Schnitt alle zwei Berufsjahre einem Compiler, sprich verwende die im entsprechenden Unifach vorgestellten Werkzeuge. Ich würde das Fach zusätzlich wegen dem Hintergrundwissen dass es vermitteln empfehlen.

Man darf nicht vergessen, dass mit die Werkzeuge nicht nur das Übersetzen von Quellcode in Programmcode verwenden kann, sondern immer dann wenn man Syntax A effizient in Syntax B umwandeln muss.
 
  • Gefällt mir
Reaktionen: M4ttX und Peter_2498
Es ist auch Nische. Für jene, die Compiler bauen wollen oder die ein grundlegendes Verständnis dafür entwickeln wollen, was da passiert.

Grundlegend? Ja klar. Ohne Compiler keine Software.

Aber wenn es um Anwendungsentwicklung abseits assembler geht, und insbesondere wenn es eher um ein Nebenfach geht, dann denke ich ist theoretische Informatik essentiell und für Mathematiker Praktische und Numerik empfehlenswert.
 
  • Gefällt mir
Reaktionen: M4ttX und Peter_2498
Kommt drauf an in welchen Bereich mal als Softwareentwickler arbeitet. Wir mussten einen Compiler, Lexer und Parser im Informatik Praktikum selber schreiben.
War sicherlich informativ und es ist gut zu wissen, jedoch geht das schon recht tief in eine bestimmte richtung.
 
  • Gefällt mir
Reaktionen: madmax2010 und Peter_2498
Ich habe vor einiger Zeit übrigens erfahren, dass an meiner ehemaligen Hochschule das Fach vom sechsten Semester ins vierte vorverlegt wurde, weil das Professorengremium der Meinung war, dass es als Grundlagenfach unabdingbar ist, und der Verständnis für andere Fächer im Studienverlauf verbessert.
 
Zuletzt bearbeitet:
Bei manchen Performance-Problemen kann jemand als Code-Lektor der die Tücken der oft zu dummen Compiler kennt helfen, in die Situation kommt man aber nicht oft, bzw. ab eine gewissen Projektwichtigkeit sind solche Fachleute eigentlich immer mit an Bord.
Falls perfekt performanter Code immer ein Muss wäre, müsste ja Alles ohne Compiler direkt in Assembly geschrieben werden, was allein von der Arbeitszeit garnicht geht.
Aber ich lehne mich nicht weit aus dem Fenster wenn ich sage kein menschliches Gehirn kennt die detailierte Funktionsweise aller gängigen Compiler auswendig. Aber manche kennen sich bei den Fallgruben sehr gut aus.
 
Mein Eindruck vom Studium: Nichts von den Modulen ist wirklich wichtig. Klar, hier und da nimmst du mal was Wertvolles mit (vielleicht verschiedene Programmierparadigmen, Algorithmen, Datenstrukturen oder so), aber am Ende ist Erfahrung wichtig und dass du dich durch diese Erfahrung schnell auf Neues einstellen kannst.
In Hiwi- und Werkstudentenjobs lernt mal IMHO mehr als im Studium selbst.
 
  • Gefällt mir
Reaktionen: Ebrithil, maxpayne80 und DaysShadow
Je nachdem was man denn mit Informatik anfangen will kann es sehr nützlich sein.
Aber wenn man hauptsächlich vor hat Dinge zu automatisieren, also mehr Skripten, denke ich trägt Compilerbau kaum etwas bei, außer halt Praxisbeispiele für Parser, Datenstrukturen und Algorithmen.

In älteren Sprachen wie C/C++ kann Verständnis für Compiler natürlich gut helfen, bestimmte Probleme, Fehlermeldungen und Eigenarten zu verstehen, aber das sollte in den vielen modernen / abstrakteren Sprachen kaum von Relevanz sein.


Compiler in der Tiefe zu verstehen, samt Optimierungen, wird erst essentiell wenn man entweder die absolut maximale Performance aus etwas herausholen will (wobei da der Großteil auch ohne Compiler-Kenntnisse gehen sollte, nur halt vermutlich etwas weniger offensichtlich), sich mit Prozessorarchitekturen beschäftigt oder sich um die Security kümmern muss.
 
  • Gefällt mir
Reaktionen: ZuseZ3 und Peter_2498
Hab ich nie belegt, aber was ich mir heute wünschen würde: Mehr Assembler Wissen (habe fast keins), da ich mich zum Teil mit der Performance von Algo Implementierungen beschäftigt habe.
Außerdem fehlt mir wissen in Hardware Bereich, L2 Cache misses ist das äußerste was ich mir von selbst aus den Rippen leiern kann :D.

Also speziell Compiler-Bau find ich weniger interessant als generell die Pipeline vom Code bis zum Opcode auf der CPU zu verstehen.
Andererseits, um die Passes in einem Compiler zu verstehen hilft es womöglich, Compiler Grundlagen zu beherrschen ;).

Als Mathematiker würde ich dir jedenfalls theoretische Informatik oder notfalls sowas wie parallele Algos o.ä. empfehlen, um dich möglichst von den Informatikern abzugrenzen.
 
  • Gefällt mir
Reaktionen: Peter_2498
In ein nachhaltiges Informatikstudium das auch noch in Jahrzehnten wertvolles brauchbares Wissen ist, wuerde ich theoretische Informatik und Compilerbau rein nehmen.

Konkrete Computersprachen kommen und gehen, das liegt in der Natur der IT Technologie. Diese Fächer dagegen vermitteln Grundlagen aller Computersprachen.
 
  • Gefällt mir
Reaktionen: .fF und Peter_2498
Flare schrieb:
Falls perfekt performanter Code immer ein Muss wäre, müsste ja Alles ohne Compiler direkt in Assembly geschrieben werden, was allein von der Arbeitszeit garnicht geht.
Ich stelle hart in Frage, dass ein Mensch performanteren Assembly schreiben kann.
Präzise Optimierungen ja, alles andere eher nicht.
 
  • Gefällt mir
Reaktionen: ZuseZ3
Steve Gibson ist dir ein Begriff?

Natürlich geht es. Aber es erfordert ein bissel mehr Kompetenzen als dieser Tage üblich zu sein scheinen.
 
@RalphS Solange empirisch bewiesen ist, dass die Leute nicht mal richtig speicher managen können behaupte ich mal, dass sie erst recht nicht Simulationen die schon in C++ 100k LoC haben in Asm schrieben können.

Ich hatte auch nur minimale Grundlagen vom Compilerbau in anderen Fächern und die compilerfächer selbst nie genommen. Jetzt sitze ich aber da und arbeite direkt mit llvm Funktionen.

Als Mathematiker wirst du vmtl. am Ende an irgendwelchen Simulationen o.ä sitzen und keine Web-frontends bauen. Da es bei sowas auf performance ankommt würde ich dir einen Kurs dazu empfehlen, einfach damit du besser verstehst wie der compiler deinen high-level code in Maschineninstruktionen umwandelt und welche optimierungen er dabei wie (gut) anwenden kann. Vereinfacht optimierungen.
 
  • Gefällt mir
Reaktionen: TriggerThumb87
@ZuseZ3 alles richtig, ich denke allerdings, daß man als Nebenfächler sein Augenmerk auf dem Hauptfach haben sollte und das Nebenfach als Komplement, als Ergänzung verstehen sollte.

Ergo ist Numerik für den Mathematiker wichtig, denn da geht es darum, daß Mathematik in der Informatik eben NICHT Mathematik im Sinne des Hauptfachs ist.
 
Spoiler: Die Wahrscheinlichkeit, dass irgendein Kurs im Nebenfach für dich später mal signifikante Relevanz haben wird, ist überschaubar ;)
 
Hallo, danke erstmal für die zahlreichen Antworten.

Also ich hab mir mal von den paar großen Informatik Unis(RWTH Aachen, KIT, TU München, ETH Zürich und paar mehr) die Studienpläne angeschaut und Compiler-Theorie ist in keiner dieser Unis Pflicht, also lass ich das mal am besten. Da ist ein Programmierpraktikum sicherlich sinnvoller...

Vielleicht noch kurz wohin ich überhaupt in Zukunft möchte, weil da einige drauf eingegangen sind:

Ich werde mich mathematisch in Richtung Optimierung vertiefen und dahingehend kommt vielleicht sowas wie Operations Research infrage, aber mit Simulationen habe ich nichts am Hut, da müsste ich mich anderweitig vertiefen. Seitens der Informatik möchte ich in Richtung Algorithmik(Graphenalgorithmen, algorithmische Modellierung) und maschinellem Lernen(statistisches ML und ML basierend auf Optimierung sowie Data Mining) gehen. Maschinelles Lernen passt auch irgendwo zur Optimierungsrechnung.

kuddlmuddl schrieb:
Welche Optionen hast du denn?
Ich kann alles wählen, was ich möchte, sofern es im Informatik-Modulhandbuch steht(natürlich ausgenommen die Kurse die ich in der Art schon belegt habe...)

feynman schrieb:
Spoiler: Die Wahrscheinlichkeit, dass irgendein Kurs im Nebenfach für dich später mal signifikante Relevanz haben wird, ist überschaubar
Ja, das ist mir schon klar. Das was man an der Uni lernt wird man so sicherlich nicht 1:1 in der Arbeitswelt vorfinden, aber wenn man sich irgendwo bewirbt, dann wird es zumindest nicht schlecht sein, wenn der Arbeitgeber sieht, dass derjenige zumindest irgendwas in dem Bereich vorzuweisen hat, also nicht komplett fachfremd daherkommt.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: kuddlmuddl
Finds gut was du entscheidest. Wie gesagt - Compilerbau ist unsinn für Nebenfächler (imho).
Gerade in 'praktischer Info' lernt man an der Uni nicht konkret eine Sprache sondern davon unabh. Konzepte und Algo&Datenstrukturen.
Würde die praktischeren Kurse oder Software-Praktika bzgl. Berufsleben auch nicht so schlecht machen. Sicher is viel an der Uni Theorie, aber "Algorithmen und Datenstrukturen" zu lernen hilft immer, wenn du später mehr können willst als Excel, R, und MatLab.
Bei uns wurde dort auch hands-on sehr gut agile Entwicklung vermittelt. Das sollte imho in viel mehr Studienfächern als Informatik Pflicht werden, da auch 2021 leider viele es noch nicht anwenden und/oder verstanden haben.

zB so konkrete Dinge wie: "Wie geht OOP", "Wie geht TDD", "Was ist DRY", Was ist die O Notation", "Was ist der Unterschied zwischen den vielen Containern aus Interface-Sicht" und "Welche Performance haben ihre angebotenen Operationen?" helfen, wenn man Programmieren will.
Also zB diese Übersicht (C++ Container) verinnerlichen, wo man so spannende Details findet, dass zB unordered_map/operator[] in O(1) möglich ist. (Das Finden der Nadel im Heuhaufen unabh. von der Heuhaufen-Größe dauert also immer gleich lange). Diese Container gibts auch in JAVA, Python, C# usw.
Oder auch R-Trees sind sinnvoll zu kennen und mal zu benutzen, wenn man in Richtung Algos was macht.
Bei AI/ML schadet es sicher nicht mal ein sehr ausführliches Tensorflow Tutorial anzuschauen, um die Möglichkeiten kennenzulernen, was heute schon im Werkzeugkasten umsonst drin liegt. Und GANs sollen ganz toll sein, wenn man genug Power zum lernen hat.
 
  • Gefällt mir
Reaktionen: Peter_2498
@kuddlmuddl
Also bei uns gibt es eine theoretische Vorlesung "Software Engineering" wo dieser Software-Entwicklungsprozess(mit agiler Entwicklung) behandelt wird, allerdings glaube ich, dass ich da mit einem guten Buch besser beraten bin, da die meisten Leute, die ich kenne nicht so wirklich angetan sind von dem Kurs...

Auch hatte ich vor Clean Code von Robert C. Martin zu lesen. Ist sicherlich nicht verkehrt.

Programmierparadigmen wie OOP und funktionale Programmierung werde ich mir ebenfalls nochmal anschauen(ich glaube, dass ich am Anfang noch zu wenig Programmiererfahrung hatte um die Wichtigkeit solcher Paradigmen zu verstehen).
 
Zuletzt bearbeitet:
Zurück
Oben