Frage von Tinypixel, 91

Was erlernt man alles wenn man Informatik studiert?

Antwort
von NoHumanBeing, 39

Das unterscheidet sich stark von Hochschule zu Hochschule und kommt auch darauf an, wo Du Deinen persönlichen Schwerpunkt legst.

In der Regel ist folgendes dabei.

  • Programmieren (mit Hochsprachen und systemnahen Sprachen - die Hochsprachen sind oft objektorientierte Sprachen, deren Denkweise dem Informatiker häufig sehr entgegenkommt, seltener kommen auch funktionale (nicht zu verwechseln mit prozeduralen oder imperativen) Sprachen, die eher der Denkweise des Mathematikers entsprechen, was darauf zurückzuführen ist, dass die Informatikfakultäten an vielen Hochschulen aus der Mathematikfakultät hervorgegangen ist)
  • Automatentheorie, Algorithmen und Datenstrukturen, Suchalgorithmen, Sortieralgorithmen, Listen, Bäume, Baumrotationen, ...
  • Software- und Systementwurf
  • Datenbankentwurf
  • Logik, Elektrotechnik, Halbleitertechnik
  • Netzwerktechnik (drahtgebunden und drahtlos)
  • spezielle Rechnerarchitekturen (z. B. für Großrechner, Cluster, "high availability")
  • Mathematik: Analysis, Lineare Algebra, Stochastik, Numerik, Abstrakte Algebra
  • "affine Fächer" (z. B. Englisch, Betriebswirtschaftslehre, Rechtslehre, Physik)

Dann kommt es natürlich darauf an, wo Du den Schwerpunkt legst. Bei mir lag er beispielsweise im Bereich Sicherheit.

  • Kryptographie, Kryptoanalyse
  • Computersicherheit, Netzwerksicherheit, Pentesting
  • Datenanalyse / "big data"
  • ...

Im Informatikstudium lernst Du wirklich sehr viel. Das liegt unter anderem daran, dass Du als Informatiker ja nicht nur Ahnung von Deinem eigenen Fachgebiet, sondern in der Regel auch Wissen über die Domäne brauchst, für die Du Deine Anwendung oder Deinen Algorithmus entwickeln willst/musst.

Die Informatik dient ja (abgesehen von "Spezialfällen", wie dem Compilerbau) ja in der Regel nicht dem Selbstzweck, sondern Dein Ziel wird es sein, ein Problem, das in einem anderen (nicht die Informatik betreffenden) Bereich auftritt, mit den Mitteln der Informatik zu bearbeiten. Das kann zum Beispiel bedeuten, dass Du eine Software entwickelst, die einen bestimmten physikalischen oder biologischen oder psychologischen oder ökonomischen oder wie auch immer gearteten Effekt analysieren oder simulieren soll. Dann brauchst Du entsprechendes Domänenwissen. Deswegen ist ein Informatikstudium in der Regel sehr "breit" angelegt und bietet viele Möglichkeiten (und auch einen gewissen "Zwang"), Dich auch mit "Nicht-Informatikthemen" auseinanderzusetzen. Gerade dieses Wissen wird aber später häufig sehr wichtig für Dich sein.

Es gibt ja keine echten "Universalgelehrten" mehr, weil die Menge an Wissen, die die Menschheit bisher angehäuft hat, einfach längst viel zu groß ist, um sie einem Individuum noch beibringen zu können. Aber ein guter Informatiker sollte dem schon sehr nahe kommen. ;-)

Es ist auf jeden Fall nicht einfach. Du wirst eine ganze Menge lernen müssen. Und Du solltest mit Mathematik nicht definitiv auf Kriegsfuß stehen. ;-)

Kommentar von Omnivore10 ,

Eine tolle Antwort!

Aber darf ich kurz intervenieren? Das OOP-Denken fiel bei uns vieeelen am Anfang schwer. Auch mir. Ich hab gedacht "was soll der Quark". Aber irgendwann begriff ich die Nützlichkeit dieser geilen Erfindung und es war klar. "NoHumanBeing" ist eine Instanz der Klasse "Mensch", welche abgeleitet wurde von "Mensch", welche wiederrum abgeleitet wurde von "Trockennasenaffenart", welche wiederum abgeleitet wurde von "Säugetier", welche wiederrum abgeleitet wurde von "Tier", welche wiederum abgeleitet wurde von "Lebewesen".

Seit dem ich das begriffen habe, arbeite ich nicht nur objektorientiert, ich denke auch so! ^^ Aber viele hatten damit Probleme, bis heute. Teilweise war es sogar ein Ex-Grund.

Trotzdem: Deine Antwort ist echt toll!

Kommentar von NoHumanBeing ,

Nunja, ich bin an die OO etwas anders herangegangen.

Ich halte von der "reale Welt"-Denke nicht so viel. Es ist eben Code und keine "Gegenstände". ;-)

Ich habe ursprünglich noch prozedural programmieren gelernt und wenn man mal Vererbung ignoriert (die häufig ohnehin mehr Probleme bereitet, als sie löst ;-) - oftmals kann man statt Vererbung auch Komposition einsetzen, die weit weniger problematisch ist), dann kann man "objektorientierung" in prozeduralen Sprachen, die über Funktionspointer (oder ähnliches) verfügen, "emulieren". Dann ist eine "Klasse" einfach eine Datenstruktur, die "normale Daten" (= Attribute) und Funktionspointer (= Methoden) enthält.

Was die OO in meinen Augen macht, ist, die "Trennung von Code und Daten" aufzuheben und die Daten mit dem Code, der auf ihnen operiert, zu einer Einheit (der Klasse) zusammenzuführen. Das ist alles.

Oftmals macht es Sinn, sich unter einem Objekt tatsächlich eine Art "Maschine" vorzustellen, die etwas "tut", aber viele "OO-Abstraktionen" gehen mir persönlich zu weit. Z. B. habe ich in der Uni gelernt, dass ein Objekt an ein anderes "eine Nachricht sendet", indem es eine Methode auf dem Objekt aufruft. Das impliziert irgendwie eine Art Nebenläufigkeit und FIFOs (Queues) zwischen den Objekten, eben wie bei echtem "message passing".

Es gibt Sprachen, die tatsächlich so arbeiten, aber die "klassischen" objektorientierten Programmiersprachen tun dies nicht. Ein Methodenaufruf ist letztlich ein Funktionsaufruf, bei dem ein impliziter Parameter (das allseits bekannte this) mit über den Stack übergeben wird. Mehr nicht. Wenn eine Methode aufgerufen wird, legt der Code (auf Maschinenebene) den aktuellen "instruction pointer", sowie die Parameter auf den Stack und springt dann an den Anfang der Methode. Dann läuft der Code der Methode, bis diese "den Stack abräumt" und den zuvor "gesicherten" Wert vom Stack wieder in den "instruction pointer" schreibt. Es ist im Grunde total "primitiv", absolut nichts "tolles" oder "bahnbrechendes". Von daher habe ich da auch nie Probleme gehabt. Wenn dann wieder jemand kommt und erzählt, er würde "ein Objekt benachrichtigen", dann einfach auf Durchzug schalten und Dir denken: "Ok, er ruft also eine Funktion auf, die eine implizite Referenz auf eine Datenstruktur übergeben bekommt." ;-)

Warum man um die OO so einen "Hype" macht und sie damit eigentlich nur komplizierter macht, habe ich persönlich nie verstanden, aber vermutlich lässt sich meine Sichtweise Einsteigern, die noch nie mit rein prozeduralen/imperativen Sprachen gearbeitet haben, nicht so einfach vermitteln. ;-)

Wenn es um Vererbung geht (was Du ja hier ausführlich beschrieben hast), kommst Du mit der "Datenstruktur mit Funktionspointern"-Denke allein nicht mehr unbedingt weit. Aber ich vermeide Vererbung auch, wo es geht. Und es geht nahezu immer. ;-)

Antwort
von Jonas711, 44

Aus der Retrospektive betrachtet: Nur Quatsch :D

Du kannst dich ja mal durch das Modulhandbuch meiner Uni wühlen. Auf der verlinkten Seite findest du einen Musterstudienplan sowie das Modulhandbuch, in dem alle Vorlesungen aufgelistet und kurz beschrieben werden. http://cs.uni-paderborn.de/studium/studienangebot/informatik/

Wenn dann noch Fragen sind hau raus, nur das macht in meinen Augen mehr Sinn, wenn du erst mal selbst ein bisschen recherchierst, als wenn ich jetzt furchtbar viel irrelevantes Zeug erzähle.

Kommentar von Omnivore10 ,

Aus der Retrospektive betrachtet: Nur Quatsch :D

Sollte man NICHT verallgemeinern!

Antwort
von Omnivore10, 34

Programmiersprachen

Anwenden von Programmiersprachen

Programmierwerkzeuge

höhere Mathematik

Physik

etwas BWL

Irgendwelche Spezialmodule (Modelierung, Intelligente Systeme, usw.)

Netzwerktechnik

Übertragungstechniken

Bool'sche Algebra

Und natürlich auch etwas technisches zu Computer: Digitaltechnik und natürlich die Architektur des Rechners. Schließlich soll man auch verstehen WAS ein Rechner intern macht.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten