Kognitive Informatik, die Zweite

Mein zweites Semester im Studiengang Kognitive Informatik ist schon seit einiger Zeit vorbei und ich habe endlich Zeit kann mich endlich aufraffen mal ein paar Zeilen dazu zu schreiben. Viel allgemeines habe ich bereits in meinem Artikel zum letzten Semester geschrieben. Daher wird dieser Artikel etwas kürzer ausfallen und sich nur auf die Veranstaltungen dieses Semesters konzentrieren.

  1. Mein Stundenplan
  2. Algorithmen und Datenstrukturen II
    1. Tutorium
    2. Prüfung
  3. Mathematik für Informatiker II
    1. Analysis
    2. Lineare Algebra
    3. Tutorium
    4. Klausur
  4. Praktikum: Mathematik
  5. Physik für das Nebenfach II
    1. Tutorium
    2. Klausur
  6. Rechnerarchitektur
    1. Tutorium
    2. Klausur
  7. Betriebssysteme
    1. C-Programmierung
    2. Tutorium
    3. Klausur
  8. Fazit
  9. Nützliche Links

Mein Stundenplan

MontagDienstagMittwochDonnerstagFreitag
8:00–9:00Tutorium: Mathematik für Informatik II
9:00–10:00Tutorium: Physik für das Nebenfach II
10:00–11:00Physik für das Nebenfach IIMathematik für Informatik II: AnalysisRechnerarchitekturTutorium: Algorithmen und Datenstrukturen IIBetriebssysteme
11:00–12:00
12:00–13:00Tutorium: RechnerarchitekturAlgorithmen und Datenstrukturen IIPhysik für das Nebenfach IIMathematik für Informatik II: Lineare AlgebraAlgorithmen und Datenstrukturen II
13:00–14:00
14:00–15:00Praktikum: Mathematik
15:00–16:00
16:00–17:00Tutorium: Betriebssysteme
17:00–18:00
18:00–19:00(C-Programmierung)(C-Programmierung)
19:00–20:00

Algorithmen und Datenstrukturen II

Die Fortsetzung der Vorlesung Algorithmen und Datenstrukturen wurde in diesem Semester von Dr. Peter Steffen übernommen. Folgende Themen wurden behandelt:

  1. Syntax und Semantik (formale Sprachen, Grammatiken,
  2. Programmierung mit Java (Imperative Programmierung)
  3. Algorithmen zur exakten Suche in Texten (Boyer-Moore-, Boyer-Moore-Horspool- und Knuth-Morris-Pratt-Algorithmus)
  4. Programmierung mit Java (Objektorientierte Programmierung)
  5. Unterschiede zwischen funktionaler und imperativer Programmierung
  6. Hashing
  7. Ein- und Ausgabe mit Java
  8. Graphen

Im Unterschied zum letzten Semester wurde die Programmiersprache (Java) in der gleichen Vorlesung vermittelt. Zudem fällt auf, dass sich ein paar Themen wiederholt haben, so hatten wir Hashing zum Teil bereits im letzten Semester in der Vorlesung Programmieren in Haskell gehabt und vor allem die Algorithmen zur Suche in exakten Texten hatten wir bereits in Algorithmen und Datenstrukturen durch genommen. Warum dies der Fall ist, kann ich nicht sagen, aber es wird wohl nicht an mangelnder Absprache zwischen den Lehrenden liegen. Soweit ich es mitbekommen habe, ist diese Doppelung durchaus vorgesehen. Ich denke, sie ist auch nicht ganz unvorteilhaft, da sich der Stoff durch die Wiederholung besser festigt und man die Implementierung der Algorithmen in zwei Programmiersprachen mit unterschiedlichen Programmierparadigmen sieht.

Vieles in der Vorlesung war mir dank Vorwissen schon grob bekannt, aber dank Laptop konnte ich mich immer gut beschäftigen. Der Vortragsstil von Herrn Steffen hat sich zwar im Vergleich zum letzten Semester gebessert, ist aber leider immer noch nicht herausragend.

Positiv war, dass es wieder ein gedrucktes Skript sowie die Folien zum Herunterladen gab.

Tutorium

Das zugehörige Tutorium habe ich bei Jannis Balske besucht. Viel mehr, als dass er seine Arbeit gut gemacht hat, kann man eigentlich nicht sagen. Gut fande ich es, dass er mit uns eine Prüfungssimulation zur mündlichen Prüfung (s.u.) gemacht hat.

Neben den gewöhnlichen Übungsaufgaben musste übrigens ein etwas größeres Einzelprojekt in Java programmiert werden. Dieses Semester konnte man zwischen Memory und Vier Gewinnt wählen. Da das ganze unbenotet ist, sollte es eigentlich für niemanden ein großes Hindernis zu sein die Minimalanforderungen zu erfüllen. Wer will kann natürlich beliebig viel Zusatzfeatures einbauen.

Prüfung

In Algorithmen und Datenstrukturen muss man eine 30 minütige mündliche Prüfung ablegen, welche beide Semester umfasst. Die Note dieser Prüfung fließt sogar etwas stärker in die Bachelorendnote ein als die Bachelorarbeit. Ein allzu großes Problem ist diese Prüfung aber nicht, wie ich finde (allerdings hatte ich auch schon viel Vorwissen, daher muss das nicht auf jeden zutreffen). Man hat bei dieser Prüfung schon einige Vorteile im Gegensatz zu einer gewöhnlichen Prüfung: Man kann sich den Prüfer aus ungefähr fünf Leuten aussuchen und vereinbart einen individuellen Termin. Also kann man sich einen Termin suchen, wo man genug Zeit hat zu lernen und man kann sich einen Prüfer entscheiden bei dem man sich wohl fühlt. Zudem gibt es in der Fachschaft Prüfungsprotokolle zur Einsicht. Daher weiß man bereits vorher, in welche Richtung die Fragen des Prüfers bevorzugt gehen und ob er mehr oder weniger immer das Gleiche fragt. Zudem kann man mit dem Prüfer vorher ein Gespräch führen und sich so nochmal zusätzlich informieren, was man verstärkt lernen sollte.

Ich habe meine Prüfung bei Dr. Peter Steffen abgelegt. Er war freundlich ruhig und hat an einer Stelle, wo ich nicht direkt die Antwort wusste, die Frage nochmal etwas ausführlicher ergänzt. In der Regel muss man in der Prüfung auch kleine Programme in Haskell und Java aufschreiben. Mein Tipp: Nach dem Schreiben nochmal ein Blick drauf werfen, ob man keine Fehler eingebaut. Ich hatte z.B. an einer Stelle mal versehentlich eine 0 statt einer 1 stehen und hatte den Fehler so noch selbst entdeckt. In der Prüfung sitzt übrigens noch ein Beisitzer, den man sich nicht aussuchen kann. Dieser schreibt ein Prüfungsprotokoll und hat sich bei mir auch nicht weiter zu Wort gemeldet.

Mathematik für Informatiker II

Analysis

Die Analysis-Vorlesung wurde auch in diesem Semester wieder von Dr. Walter Hoh gehalten. Das Tempo war gewohnt zügig, aber für mich meistens ok. Die Themen schlossen direkt an das letzte Semester an:

  • Integralrechnung
  • Metriken und Normen, Abschluss von Mengen
  • Differentialrechnung mit mehrdimensionalen Funktionen
  • Differentialgleichungen (allerdings nur grundlegend gegen Ende angeschnitten und nicht in der Klausur).

Im Vergleich zum letzten Semester muss man sagen, dass die Themen bisweilen deutlich abstrakter waren und das Verständnis daher nicht immer ganz so einfach.

Lineare Algebra

Auch die Vorlesung zur Linearen Algebra hatten wir wieder bei Prof. Dr. H.-G. Carstens. Zum behandelten Stoff gehörte:

  • Lösen von Gleichungssystemen
  • Vektorräume
  • Eigenwerte und Eigenvektoren
  • Körper
  • Lineare (Un)abhängigkeit

Bereits im letzten Semester war ich von Herrn Carstens wenig begeistert: Zu langsamer Vortragsstil, unstrukturierte Vorlesung etc. In diesem Semester war leider keine Besserung festzustellen, im Gegenteil: Er erschien regelmäßig zu spät (insbesondere nach der Pause), hat oft die Vorlesung wegen anstehender Fakultätskonferenzen vorzeitig beendet und ist zu einer Vorlesung überhaupt nicht erschienen ohne vorher oder nachher ein Wort dazu zu verlieren. Dafür bezahlt man dann Studiengebühren. :(

Tutorium

Das Tutorium zu den beiden Vorlesungen habe ich bei Siegfried Heckel besucht. Wirklich zufrieden war ich mit dem Tutorium nicht. So waren seine Erklärungen nicht immer wirklich verständlich und er hat sehr viel Wert darauf gelegt, dass die Übungsaufgaben formal sehr korrekt aufgeschrieben sind. Das ist an sich ja auch gar nicht mal so falsch, aber weil ihm die Lösungen alle nicht gut genug waren. Lies er anfangs (später dann schon) niemanden vorrechnen. Allerdings muss man für die Klausurzulassen einmal vorgerechnet haben.

Etwas erstaunt war ich auch, dass er meinte, dass man eine leere Menge korrekt {} schreibt. Ich bin aber immer noch davon überzeugt und konnte bisher keine weitere abweichende Meinung finden, dass eine leere Menge korrekt geschrieben nur ist. Dagegen wäre {} die Menge, die die leere Menge enthält. Das hört sich vielleicht komisch an, wird aber an einigen besonderen Stellen der Mathematik wohl verwendet.

Klausur

Am Ende des Semesters wurde eine Klausur zu den beiden Vorlesungen geschrieben. Diese war nicht besonders schwer. Allerdings gab es in einer Aufgabe zur linearen Algebra etwas zu beweisen. Diese war an sich auch recht einfach, abgesehen davon, dass es um eine Eigenschaft ging, die wir in der Vorlesung nur kurz behandelt haben. Daher wussten viele nichts damit anzufangen. Letztendlich wurde die Aufgabe aus der Wertung genommen. Also konnte man durch sorgfältiges Lernen noch Bonuspunkte holen, um andere Fehler auszugleichen. :)

Praktikum: Mathematik

Beim Praktikum Mathmatik ging es darum, das Computeralgebra-Programm Maple zu lernen. Leider war das Praktikum für mich eine ziemliche Enttäuschung. Wir haben einfach jedes Mal einen Zettel doppelseitig bedruckt mit zwei verkleinerten Seiten pro Zettelseite erhalten, den wir dann selbst durch zu arbeiten hatten. Wenn man dies wirklich ausführlich machen wollte, hat die Zeit des Praktikums nicht gereicht und man hätte noch Freizeit opfern müssen. Dies habe ich und viele andere nicht getan. Dementsprechend ist das Maple-Wissen auch eher etwas lückenhaft. Ab und zu gab es noch Pflichtaufgaben, die man aber zu zweit oder dritt bearbeiten durfte. Diese haben auch nochmal einiges an Zeit in Anspruch genommen, so dass ich manche Zettel gar nicht bearbeitet habe.

Dazu kommt, dass mir Maple nicht besonders zusagt. Ich empfinde die von Maple genutzte "Programmiersprache" inkonsistent. Wenn ich wirklich mal ein Computeralgebra-Programm benötige würde ich mich wohl eher in Mathemathica einarbeiten (in der Hoffnung das dies besser ist). Zumal es im Gegensatz zu Maple kostenlose opensource Programme gibt, die Mathemathica-Code verstehen.

Physik für das Nebenfach II

Gehalten wurde, wie im Vorsemester, diese Vorlesung von Dr. Andre Beyer. Die folgenden Themen wurden behandelt:

  1. Gravitation
  2. spezielle Relativitätstheorie
  3. Elektrizität und Magnetismus
  4. Wellen in Optik und Akustik
  5. Quantenmechanik

Der Vortragsstil war nicht herausragend, aber ok. Im Grunde gilt, dass was ich [zum letzten Semester bereits geschrieben habe]({{ site.url }}/de/2009/02/18/kognitive-informatik/). Allerdings sind wir wie auch im letzten Semester mit dem geplanten Stoff wieder nicht komplett durchgekommen. Zusätzlich geplant war noch:

  1. Kernphysik
  2. Atomphysik
  3. Molekülphysik

Tutorium

Ich habe das Tutorium bei Thorge Holmes besucht. Seine Erklärungen waren gut verständlich, zu einer schwereren Aufgabe hat er uns eine Musterlösung kopiert. Ich kann mich über dieses Tutorium nicht beklagen.

Klausur

Der Stoff war abgesehen von Relativitätstheorie und Quantenmechanik auch nicht schwerer als letztes Semester. In der Klausur kam Relativitätstheorie gar nicht dran. Bei Quantenmechanik nur ein (oder zwei) simple Aufgaben, die sich fast auf Einsetzen von Werten in die richtigen Formeln beschränkt haben und nicht allzu viel Verständnis erfordert haben. Insgesamt waren die Aufgaben der Klausur zudem einfacher als in der zum letzten Semester und die die Anzahl an Aufgaben wurde reduziert. Daher war die Klausur auch sehr fair und ohne große Probleme machbar. Während wir im letzten Semester nur eine handgeschriebene Formelsammlung verwenden durften, war es diesmal gestattet eine ausgedruckte zu verwenden. Dafür war die Seitenanzahl aber auf 10 Seiten beschränkt. [Die von mir verwendete Formelsammlung]({{ site.url }}/de/studium/formelsammlung/) gibt es auch zum Download.

Rechnerarchitektur

Die Vorlesung zu Rechnerarchitektur wird von Prof. Dr.-Ing. Ralf Möller gehalten. Dieser Mensch ist sehr korrekt: Wenn er mal fünf Minuten überzieht, gibt's in der nächsten Vorlesung fünf Minuten früher Schluss. Das heißt aber auch, wer zu den Tutorien mehr als 10 Minuten zu spät kommt gilt als fehlend. Gespräche sind während der Vorlesung sollte man unterlassen und Laptops dürfen nicht aufgeklappt sein. Falls das aber doch mal wer ignoriert hatte, wurde diejenige Person stets freundlich darauf hingewiesen.

Letzendlich macht Herr Möller anfangs vielleicht einen recht strengen Eindruck, aber in der Tat ist er recht freundlich und an der Qualtität seiner Vorlesung interessiert. Hinweise wurden immer bereitwillig aufgenommen und er gibt sich nicht als der allwissende Professor. Zu Details, die ihm selber nicht ganz genau bekannt sind, sagt er dies auch offen. Macht man ihn auf einen Fehler in der Vorlesung aufmerksam, so verifiziert er das und korrigiert es in der Vorlesung.

Sein Vortragsstil ist recht schnell, so dass man sich wirklich auf die Vorlesung konzentrieren sollte, wenn man nichts verpassen will. In einer Vorlesung werden etwa je 20 Seiten des exzellenten Skripts durchgearbeitet. Dieses gibt es übrigens auch kostenlos. Anstatt der Tafel verwendet Prof. Möller ein Grafiktablett und erstellt damit während der Vorlesung handschriftliche Folien, die man nachher aus dem Internet runterladen kann. Dies ist sehr praktisch.

Ein grober Überblick über die Themen der Vorlesung:

  1. Kombinatorische Automaten (Schaltalgebra, Minimierung, Karnaugh-Pläne, Multiplexer, Demultiplexer)
  2. Sequentielle Automaten (Flip-Flops, Schieberegister, Zähler)
  3. Kodierung von Zahlen und Zeichen
  4. Grundlagen der Rechnerarchitektur (Von-Neumann-Architektur, Speicher, Cache, Busse, Register, Assembler)
  5. Computer-Arithmetik (Voll- u. Halbaddierer)

Tutorium

Ich habe das Tutorium bei Matthias Siemonsmeier besucht und kann dies weiter empfehlen. Im ersten Teil des Tutoriums haben wir anfangs jeweils einen Übungstest zur Selbstkontrolle geschrieben, seine Erklärungen waren verständlich und er hat eine Einführung in Assembler gegeben.

Der erste Teil der Übungen ist freiwillig. Ich würde aber jedem empfehlen hinzugehen. Die Rechnerarchitektur-Klausur soll die schwerste Klausur des Studiums sein und zum Teil Durchfallquoten von über 50% haben. Der zweite Teil der Übungen dient dazu Assemblerprogramme zu schreiben. Dabei kann man sich aus einem gewissen Pool beliebige Aufgaben raussuchen und muss so eine gewisse Mindestpunktzahl erreichen. Wenn man diese Punktzahl erreicht hat, muss man nicht mehr zu den Übungen erscheinen und ist für die Klausur zugelassen. Da ich die Assembleraufgaben bereits ein paar Wochen nach Beginn des Semesters fertig hatte, war ich bei keiner einzigen der Assemblerübungen. Man sollte zudem die Assemblerprogramme tunlichst nicht von jemand anders kopieren, da die Programme mit einer speziellen Software verglichen werden (auch aus den Vorjahren). Diese Software ist wohl auch recht zuverlässig. Aber es versuchen wohl doch immer wieder welche.

Die Assemblereinführung in der Vorlesung ist nicht ausführlicher als die im Skript. Daher kann es durchaus sinnvoll sein, sich bereits zu Beginn des Semesters damit auseinander zu setzen und so früh mit den Assembleraufgaben fertig zu sein. Dabei sollte man beachten, dass man ein Skript "Kurze Einführung in die Assemblerprogrammierung unter Linux" bekommt. Da geht es aber vor allem nur darum wie man Assemblercode in ein ausführbares Programm verwandelt. Das sollte man zwar auf jeden Fall lesen, aber dort wird nicht wirklich viel zu Assembler selber erklärt. Erklärungen zu den Assemblerbefehlen selber befinden sich im eigentlichen Skript zur Vorlesung in Kapitel 4.10. Das haben zumindest einige meiner Kommilitonen nicht selbstständig gefunden.

Klausur

Wie gesagt, soll diese Klausur die schwerste des Studiums sein. Es ist halt einiges an Stoff, ich fand sie aber durchaus machbar. Vor allem muss man sich vor Flüchtigkeitsfehlern in acht nehmen. Die letzte Aufgabe besteht darin ein Assemblerprogramm zu schreiben. Man hat natürlich keine Möglichkeit dies während der Klausur zu testen. Daher sollte man es besser zweimal kontrollieren und nicht wie ich einen korrekten Wert in einen falschen verschlimmbessern. Zur Unterstützung hat man bei der Assembleraufgabe übrigens eine Referneztafel, so dass man die Befehle nicht auswendig kennen muss.

Betriebssysteme

Die Vorlesung Betriebssysteme wird ebenfalls von Prof. Dr.-Ing. Ralf Möller gehalten. Eigentlich ist sie erst für das dritte Semester vorgesehen. Da diese Vorlesung aber für einen gewissen Zeitraum mit einer anderen getauscht war, wurde sie bei mir ebenfalls im Sommersemester angeboten. Ich (und auch ein paar andere Kommilitonen) habe mich entschlossen, sie daher auch gleich zu belegen. Sie baut ein bisschen auf Rechnerarchitektur auf, insbesondere taucht manchmal etwas Assembler auf. Dies wird an den entsprechenden Stellen aber immer nochmal kurz erklärt, so dass man auch ohne Rechnerarchitektur gehört zu haben eigentlich alles verstehen kann. Zudem hat man ja auch um so mehr vom Rechnerarchitektur-Stoff durch genommen je weiter das Semester voran schreitet. Ich habe es sogar als Vorteil empfunden, dass in den Vorlesungen teilweise stofflich sehr verwandte Themen behandelt wurden, da man so durch das Lernen für die eine Klausur gleichzeitig etwas für die andere mit gelernt hat.

Bei dieser Vorlesung hat Herr Möller übrigens im wesentlichen auf bereits fertige Folien zurückgegriffen und nur stellenweise handschriftliche Ergänzungen mit seinem Grafiktablett gemacht. Die Folien gab es auch wieder zum Download, ein gedrucktes Skript gab es ebenfalls kostenlos. Die Themen haben umfasst:

  1. Aufgaben von Betriebssystemen
  2. Betriebssystemarchitekturen
  3. Prozess-Verwaltung (Erzeugung, Beendigung, Warteschlangen, Scheduling, Prozesswechsel)
  4. Threads (Realisierung, Sicherheit)
  5. Thread-Synchronisation (Atomare Befehle, Spin-Locks, Mutex-Locks, Semaphoren, &hellip alles sehr ausführlich)
  6. Verklemmungen (Belegungs-Anforderungs-Graphen, Problem der speisenden Philosophen)
  7. Speicherverwaltung (Segmentierung, Seitenverwaltung, virtueller Speicher)
  8. Datei-Verwaltung

C-Programmierung

C-Programmierung ist ebenfalls eine Vorlesung von Herrn Möller, die an drei Terminen zu Semesteranfang (deshalb im Stundenplan nur eingeklammert) eine Einführung in die Programmiersprache C gegeben hat. Ebenfalls gab es ein kostenloses gedrucktes Skript und die Möglichkeit zum Download der Folien. Die Programmiersprache ist für die Vorlesung Betriebssysteme essentiell, da alles was kein Assembler ist, ist dort C. Ebenso benötigt man für die Übungsaufgaben C.

Tutorium

Das Tutorium hatte ich bei Christian Rothen. In dem Tutorium konnten wir Fragen stellen und hatten ansonsten die Zeit die Übungsaufgaben zu bearbeiten. Diese bestanden darin verschiedene kleine C-Programme zu schreiben sowie ein etwas größeres Projekt ebenfalls in C. Mit diesen Aufgaben musste man eine gewissen Punktzahl sammeln, um zur Klausur zugelassen zu werden. War man mit diesen Aufgaben fertig, so musste man nicht mehr zum Tutorium erscheinen.

Klausur

Die Klausur ist unbenotet und auch nicht übermäßig schwer. Im Gegensatz zu Rechnerarchitektur ist etwas etwas weniger Rechnen, sondern etwas mehr Faktenwissen in kurzen Stichpunkten niederschreiben.

Fazit

Es mag auffallen, dass mir keine der Klausuren oder Prüfungen besonders schwer gefallen ist. Dies kann sicherlich nicht daran liegen, dass ich einiges an Vorkenntnissen hatte bzw. habe. Ich kann leider schlecht einschätzen wie es mit der Schwierigkeit für eine Durchschnittsperson aussieht. Aber machbar sind die Prüfungen sicherlich alle mit der entsprechenden Lernbereitschaft.

Insgesamt war, dass Semester trotz vereinzelter enttäuschender Veranstaltungen (Praktikum Mathematik), recht interessant. An sich hat es sich aber bisher nur um Grundlagen gehandelt. Keine einzige der Veranstaltungen hatte mit künstlicher Intelligenz zu tun, obwohl sich der Studiengang Kognitive Informatik nennt. Aber die entsprechenden Grundlagen müssen ja auch erstmal gelegt werden. Ab dem kommenden dritten Semester wird es dann mit Sprachverarbeitung und Methoden der Künstlichen Intelligenz tatsächlich endlich stark in die gewünschte Fachrichtung gehen.