Zum Inhalt springen

kurtchen

Communitymitglied
  • Gesamte Inhalte

    879
  • Benutzer seit

  • Letzter Besuch

Blogbeiträge von kurtchen

  1. kurtchen
    Wie ich zur theoretischen Informatik kam
     
    In meinem Modulbericht zu GdI4 "Algorithmen und Datenstrukturen" hatte ich es schon einmal erwähnt: Ich wollte gerne ein Modul "Künstliche Intelligenz" belegen, was Springer Campus leider bislang so nicht anbietet.
     
    Die WINGS Wismar hat ein sehr schönes KI Modul, in dem sowohl klassische KI und als auch künstliche neuronale Netze behandelt werden. Das gefiel mir und so schrieb ich Professor Cleve an, der für dieses Modul zuständig ist und auch das zugrunde liegende Lehrbuch geschrieben hat. Ihn fragte ich, ob ich dieses Modul als Gast- oder Zweithörer belegen könne. Und was gegebenenfalls für Vorwissen nötig sei. Herr Cleve empfahl mir, zunächst Kenntnisse in theoretischer Informatik zu erwerben und hatte auch gleich das passende Modul, das ebenfalls von ihm betreut wurde. So kam es, dass ich mich als Gasthörer bei der WINGS anmeldete.
     
    Organisatorisches
     
    Die Anmeldung unterscheidet sich bei der WINGS ein wenig von Springer Campus, weil man sich für ein bestimmtes Semester anmelden muss. In diesem Semester soll man auch die Modulprüfung ablegen. Für die Prüfung stehen mehrere Termine zur Verfügung, die allerdings an verschiedenen Standorten angeboten werden. Will man zu einem anderen Termin in die Prüfung gehen, so muss man in der Regel auch einen anderen Standort anfahren.
     
    Das Studienbüro ist gut erreichbar und bei organisatorischen Fragen sehr hilfreich. Als Gasthörer hatte ich immer wieder mal eine organisatorische Frage, weil ich mit den Abläufen noch nicht so vertraut war.
     
    Etwas verwirrend für mich: Während Springer Campus EINE Online-Plattform für den Studiengang hat, gibt es an der WINGS mehrere: StudIP, Ilias, den OnlineCampus, Wistu und wie sie alle heißen. Es dauerte eine ganze Weile, bis ich halbwegs begriffen hatte, wo ich welche Informationen finde.
     
    Das Modul "Theoretische Informatik"
     
    Grundlage für das Modul ist das in meinen Augen hervorragende Skript von Professor Jürgen Cleve. Er lehrt an der HS Wismar Grundlagen der Informatik und Künstliche Intelligenz. Sein Skript besteht aus an die 130 Seiten im A4-Format. Wenn man Anhänge, Verzeichnisse und Index abzieht, bleiben ca. 120 Seiten reiner Stoff. Die haben es allerdings ziemlich in sich, weil die Ausdrucksform mathematisch knapp ist, man also mit wenigen Symbolen viel ausdrücken kann. Diese 120 Seiten liest man also nicht mal eben so runter. Mehr als 2-4 Seiten pro Tag waren bei mir selten drin. Damit man bis zum Prüfungstermin "fit" ist, muss man dranbleiben und "den Berg Kieselstein für Kieselstein abtragen".
     
    Das Skript gliedert sich in 6 Kapitel:
    1. TI - Einführung
    2. Grundlagen
    3. Automatentheorie
    4. Logik
    5. Komplexität
    6. Berechenbarkeit
     
    Es enthält auch einen Vorschlag, wie man sich die Bearbeitung des Moduls zeitlich einteilen soll. Damit bin ich flexibel umgegangen.
     
    Außer dem Skript findet man auf der Plattform StudIP Zusatzmaterial, Videos, Übungsaufgaben für die Klausur und einen Link zum Download von JFLAP, einer Software zum Simulieren der verschiedenen Automaten aus dem Kapitel Automatentheorie. Im Unterschied zu Springer Campus, wo alles schön in EINER Plattform beisammen ist, muss man hier aus mehreren Quellen schöpfen. Die Materialien sind aber sehr gut.
     
    Mathematische Grundlagen
     
    Das Grundlagenkapitel ist ein Parforceritt durch Mengenlehre, Relationen und Funktionen. Grundlagen waren bei mir aus dem Modul Mathe1 da. Ich würde sagen, dass man davon ausgeht, dass die meisten Studierenden sich schon einmal mit diesen Themen vertraut gemacht haben. Es ist eher eine knappe Wiederholung, die noch einmal den begrifflichen Boden bereiten soll, für das was kommt. Außerdem werden so verschiedene Konventionen hinsichtlich der Darstellung etabliert, was die weitere Lektüre des Skriptes vereinfacht.
     
    Auch die sehr knappe Einführung in Begriffe der Graphentheorie enthielt größtenteils vertrautes. Auch das kannte ich aus Mathe1. Aber hier kamen die ersten für mich neuen Begriffe, z.B. der der Hülle eines Graphen. Dieser Begriff ist hilfreich, wenn man ausdrücken möchte, wie ein Automat durch eine Serie von Konfigurationsübergängen geht.
     
    Neu war für mich in erster Linie der Abschnitt über formale Sprachen. Knapp ausgedrückt, hat man eine Sammlung von Zeichen, ein Alphabet. Dieses besteht bei formalen Sprachen oft aus nur wenigen Zeichen, z.B. {0,1} oder {a,b,c} oder etwas in der Art. Wörter entstehen dadurch, dass man Ketten aus Zeichen bildet, also Strings. Eine Sprache entsteht dadurch, dass wir Eigenschaften definieren, die die so erzeugten Strings aufweisen müssen, z.B. mindestens eine Folge von drei Nullen enthalten. Eine Sprache ist also eine Teilmenge der mit dem Alphabet möglichen Strings.
     
    Interessanter wird es, wenn reguläre Ausdrücke ins Spiel kommen. Sie erlauben, bestimmte Stringmuster in kompakter Weise zu beschreiben. Das kann man in vielen Programmiersprachen gut brauchen, um z.B. Muster für Suche und Vergleich zu definieren. Zugleich sind reguläre Ausdrücke wichtig, weil sie mit einem bestimmten Automatentyp aus der Automatentheorie in Zusammenhang stehen, den sogenannten endlichen Automaten. Diese können nämlich genau solche Strings erkennen, die sich durch reguläre Ausdrücke beschreiben lassen.
     
    Über das Kapitel verstreut sind gelegentlich Übungsaufgaben. Am Ende des Kapitels kommen dann noch mal mehr Aufgaben. Im Gegensatz zu Springer Campus ist die Bearbeitung dieser Aufgaben nicht nötig, um zur Klausur zugelassen zu werden. Man kann seine Lösungen aber per Mail an einen Betreuer schicken. Besser ist es, sie ins Forum von StudIP einzustellen, wo sie auch andere Studierende sehen. Die Aufgaben werden auch dort von einem Betreuer kommentiert, jedenfalls wenn es etwas zu kommentieren gibt. Perfekte Lösungen bleiben auch mal ohne Feedback. Im Vergleich zu Springer würde ich sagen, dass es hier mehr und kleinere Aufgaben gibt. Das ist nicht schlecht, weil man so ähnliche Aufgaben wiederholt übt, was ungemein hilft, die Konzepte zu verinnerlichen.
     
    Automatentheorie
     
    Dieses Kapitel ist für mich das Kernkapitel des Moduls. Es behandelt zunächst endliche Automaten, abgekürzt DFA für engl. deterministic finite automaton. Einen endlichen Automaten kann man sich vorstellen als eine Maschine, die ein Band einliest, auf dem Zeichen notiert sind. Die Maschine liest das Band genau 1x von Anfang bis Ende. Sie kann nicht vor oder zurück gehen und auch nichts auf das Band schreiben. Sie kann aber in Abhängigkeit vom eingelesenen Zeichen ihren inneren Zustand wechseln. Ist die Maschine am Ende des Bandes in einem Zustand, der als akzeptierend ausgezeichet wurde, so sagt man, die Maschine habe die Zeichenkette akzeptiert. Die Maschine hat erkannt, dass das Wort auf dem Band zu einer Sprache gehört.
     
    Natürlich existiert dieser Automat nicht physisch sondern als Konzept. Man beschreibt ihn mathematisch. Mit der Menge von Zeichen, die er verarbeiten kann. Mit der Menge der Zustände, die er einnehmen kann. Mit dem Startzustand. Mit der Menge der Zustände, die als akzeptierend gelten. Und vor allem mit den Regeln für Übergänge von einem Zustand in den anderen in Abhängigkeit vom eingelesenen Zeichen. Deterministisch heißt der Automat, weil die Zustandsübergangsfunktion total ist. In jedem Zustand ist bei jedem eingelesenen Zeichen eindeutig, in welchen neuen Zustand der Automat wechselt. Durch die mathematische Form der Darstellung, kann man so einen Automaten in wenigen Zeilen exakt notieren.
     
    Verständlicher wird ein Automat, wenn man ihn graphisch darstellt. Er wird als Graph mit gerichteten Kanten gezeichnet. Die Kanten stehen für Zustandsübergänge, die Knoten für die Zustände.
     
    Hier ist ein Beispiel für einen deterministischen endlichen Automaten, der Wörter aus den Buchstaben "a" und "b" akzeptiert, die mindestens 1x die Zeichenkette "aab" enthalten. Das kleine Dreieck links markiert den Startzustand. Die Kreise stehen für die Zustände, die Pfeile für Zustandsübergänge, wenn im jeweiligen Zustand das Zeichen auf dem Pfeil eingelesen wird. Der Doppelkreis rechts steht für den einzigen akzeptierenden Zustand. Wie man sieht, gibt es auch reflexive Kanten. Sie bedeuten, dass der Automat im aktuellen Zustand bleibt. Der Automat ist deterministisch, weil von jedem Zustand aus für jedes mögliche Zeichen genau ein Zustandsübergang existiert.

     
    Nach dem DFA wird der NFA eingeführt. Er ist indeterministisch, weil der Folgezustand nicht mehr eindeutig definiert sein muss. Es kann mehrere Folgezustände geben. Der Automat wählt aber nicht zufällig einen davon aus. Vielmehr geht er in JEDEN möglichen Folgezustand. Man kann zeigen, dass ein NFA in einen DFA überführt werden kann. Dafür gibt es sogar ein mechanisches Verfahren. Für viele Probleme ermöglicht der NFA eine kompaktere Darstellung. Aber er kann nicht mehr als der DFA.
     
    Die Beschäftigung mit endlichen Automaten ist nützlich, z.B. weil man damit in der Softwaretechnik manche dynamische Systeme gut modellieren kann.
     
    Der DFA und der NFA sind in ihren Möglichkeiten begrenzt, weil sie sich nur durch ihren inneren Zustand etwas merken können. Soll ein Automat z.B. 100 Zeichen zählen, braucht er 100 innere Zustände. Aus diesem Grund wird der Kellerautomat eingeführt. Er hat einen Speicher, den Keller, auf den er Zeichen legen kann. Dieser Speicher ist ein Stack. Die Zeichen werden gestapelt und man kann immer nur das oberste Zeichen lesen. Der Kellerautomat kann z.B. vergleichen, ob die Anzahl A's zu Beginn eines Wortes gleich der Anzahl B's am Ende des gleichen Wortes ist. Er kann somit etwas zählen.
     
    Die von Kellerautomaten akzeptieren Sprachen lassen sich mit kontextfreien Grammatiken beschreiben. Diese sind nützlich, weil sich die Syntax der meisten Programmiersprachen ebenfalls mit kontextfreien Grammatiken beschreiben lässt.
     
    Weil es Sprachen gibt, die nicht kontextfrei sind, braucht man einen mächtigeren Automaten als den Kellerautomaten: Die Turingmaschine. Die Turingmaschine ist deterministisch. Sie liest ein endloses Band ein. Einen Kellerspeicher hat sie nicht. Dafür kann sie auf dem Band schrittweise nach rechts und nach links gehen oder stehen bleiben. Sie kann Zeichen lesen und schreiben. Das Band ist also ihr Speicher. Es enthält eine Folge von Zeichen, einen String. Die Turingmaschine verarbeitet den String, d.h. sie transformiert ihn in einen neuen String. Wenn der String z.B. aus zwei natürlichen Zahlen besteht und die Maschine am Ende die Summe dieser beiden Zahlen auf das Band schreibt, dann kann man sagen, die Maschine hat eine Summe berechnet.
     
    Die Turingmaschine ist ein einfaches Computermodell. Interessant ist, dass sie zugleich das mächtigste bislang bekannte Computermodell ist. Mächtigkeit bezieht sich hier nicht auf die Verarbeitungsgeschwindigkeit sondern auf das, was prinzipiell mit einer Maschine dieses Typs berechnet werden kann. Jeder Computer kann im Prinzip nur berechnen, was auch auf einer Turingmaschine berechnet werden könnte. Darum ist es interessant, sich mit diesem Automaten zu beschäftigen.
     
    TI ist ein FH-Modul. Der Schwerpunkt liegt also hier nicht auf dem Führen von Beweisen. Die Übungsaufgaben laufen meist darauf hinaus, Automaten zu konstruieren, die ein bestimmtes Problem lösen. Mit der Software JFLAP kann man seine Automaten testen, mit verschiedenen Strings füttern und schauen, wie sie diese Schritt für Schritt verarbeiten. Das hat mir sehr viel Spaß gemacht. Und es hat auch schon eine Menge mit Programmierung zu tun. Der erste Schritt zur Lösung ist meist, sich eine Strategie zu überlegen, wie ein Automat ein Problem lösen könnte, eine Art Algorithmus. Dann muss man sich mit den Details der Implementierung rumschlagen, wozu oft auch eine geschickte Behandlung von Sonderfällen gehört.
     
    Logik
     
    Das Kapitel zur Logik beschäftigt sich nur mit Aussagenlogik. Die mächtigere Prädikatenlogik spielt keine Rolle. Hier hatte ich Vorkenntnisse aus den Modulen "Mathe1" und "Rechnerstrukturen und Betriebssysteme". Trotzdem hat mir dieses Kapitel viel gebracht. Nachdem knapp einführt wird, wie man Aussagen formalisiert, mit Operatoren verknüpft und mit Umformungsregeln umformt, wird die konjunktive- und die disjunktive Normalenform eingeführt. Sie ist eine Art standardisierte Darstellung komplex verknüpfter Aussagen. So weit kannte ich den Stoff.
     
    Der nächste und für mich neue Schritt bestand nun darin, die konjunktiv verknüpften Ausdrücke sehr kompakt als Mengen zu schreiben. Die nennt man Klauseln. Aus Klauseln kann man mit einer einfachen Umformung - der Resolution - neue Klauseln erzeugen. Man kann so Widerspruchsbeweise führen. Die Gültigkeit einer Schlussfolgerung kann man prüfen, indem man sie in negierter Form den bisherigen Klauseln hinzufügt und dann einen Widerspruch findet.
     
    All dies könnte man auch auf anderem Wege tun, z.B. mit Wahrheitstabellen oder mit Umformungen. Das interessante an Klauseln und am Resolutionsbeweis ist, dass man...
    1. effizient mit sehr großen Mengen von Aussagen umgehen kann, was bei Wahrheitstabellen schnell unübersichtlich wird.
    2. Resolutionsbeweise gut automatisiert per Software führen kann.
     
    Gerade der letzte Punkt ist entscheidend: Man hält das mathematisch-logische Werkzeug in den Händen, um einen automatischen Beweiser zu bauen. Der Stoff dieses Kapitels ist Grundlage für logische Programmiersprachen wie Prolog. Ich vermute, genau aus diesem Grund hat mir Herr Cleve dieses Modul als Grundlage für KI empfohlen. Dieses Kapitel hat mich positiv überrascht, weil ich hier wirklich etwas nützliches und neues gelernt habe, obwohl ich der Ansicht war, über Aussagenlogik schon eine Menge zu wissen.
     
    Komplexität
     
    Im Kapitel über Komplexität geht es Aufwandsabschätzungen. Platt ausgedrückt, schätzen wir Aufwand, indem wir zählen, wieviele Zuständsübergänge ein Automat durchlaufen muss, um ein bestimmtes Problem zu lösen. Wir zählen die Übergänge in der Regel nicht genau. Vielmehr ordnen wir sie einer Klasse zu. Der Aufwand wächst z.B. linear mit der Größe des Problems oder vielleicht auch quadratisch mit der Größe des Problems. Manches davon war mir aus dem Modul Algorithmen und Datenstrukturen (GdI4) bekannt. Hier wird das Thema Komplexität aber mathematischer und formaler behandelt.
     
    Eine für mich schöne Übung war die Aufgabe, die Komplexität eines Sortieralgorithmus zu analysieren. Den durfte man sich frei aussuchen. Aus GdI4 kannte ich schon die Komplexitätsklassen vieler einfacher und komplexerer Sortierverfahren. Es wäre somit eine langweilige Aufgabe geworden. Allerdings war dort kurz ein Algorithmus namens Bucketsort erwähnt, der unter bestimmten Voraussetzungen ein Feld in linearer Laufzeit sortieren kann. Es hatte mich schon länger interessiert, wie das funktioniert, denn man kann ja mathematisch beweisen, dass ein Sortierverfahren, dass auf Vergleich basiert, im besten Fall logarithmische Komplexität hat. Wie kann man ohne Vergleiche schneller sortieren? Ja wie kann man überhaupt ohne Vergleiche sortieren? Die Übungsaufgabe war für mich also Anlass, mich mit dem mir bis dahin unbekannten Bucketsort-Algorithmus zu beschäftigen. Das hat wirklich Spaß gemacht.
     
    Berechenbarkeit
     
    In diesem letzten Kapitel werden die LOOP und die WHILE-Sprache eingeführt. Die LOOP-Sprache hat nur ganz wenige Konstrukte. Sie kann Variablen einen Wert zuweisen, sie um 1 erhöhen oder vermindern. Vor allem kann sie mit dem Befehl LOOP eine Schleife genau n-mal durchlaufen, wobei n zu Beginn festsehen muss. Die Sprache hat also nicht mal ein IF. Man kann es aber mit einem LOOP geschickt simulieren. Trotz der primitiven Möglichkeiten kann diese Sprache schon viel berechnen. Hilbert vermutete sogar, dass die LOOP-Sprache jede Funktion berechnen kann. Widerlegt wurde seine Vermutung durch die Ackermann-Funktion, die nicht mehr LOOP-berechenbar ist.
     
    Darum brauchte man die WHILE-Sprache. Sie hat zusätzlich die WHILE-Schleife, die wiederholt eine Bedingung prüfen kann. Mit der WHILE-Sprache kann man nun genau die Probleme lösen, die auch eine Turingmaschine lösen kann.
     
    Knapp gesagt geht es in dem Kapitel darum, was gemeint ist, wenn wir sagen, etwas sei berechenbar oder nicht berechenbar. Es gibt verschiedene Konzepte von Berechenbarkeit. Dieses Kapitel wird ein wenig philosophisch. Es geht hier letztlich darum, die Grenzen dessen auszuloten, was mit Computern gerechnet werden kann.
     
    Präsenztag und Klausur
     
    Module an der WINGS enden mit einem Präsenztag, an dem in der Regel auch die Abschlussklausur geschrieben wird. Anders als bei Springer Campus gibt es an der WINGS keine Möglichkeit, schon in der Bearbeitung eines Moduls ein paar Punkte für die Klausur zu sammeln. Die Note spiegelt allein die Performance in den 2 Stunden der Klausur wieder.
     
    Die Präsenzveranstaltung vor der Klausur war bei TI eher eine Art Repetitorium, bei dem viele Übungsaufgaben bearbeitet wurden. Die Lehrform war sehr interaktiv. Automatentheorie nahm etwa die Hälfte der Zeit in Anspruch. Die Ideen der Teilnehmer wurden vom Dozenten direkt in JFLAP eingegeben und mit dem Beamer projeziert. So konnte man sofort sehen, was die Automaten machen und welche Fehler man noch verbessern muss. Die Übungen ließen darauf schließen, dass in der Klausur weniger Wissen abgefragt werden würde. Es schien darum zu gehen, Wissen anzuwenden, indem man Probleme löst. Dazu braucht man ein bisschen Kreatitivät.
     
    Die intensive Wiederholung des Stoffes in der Gruppe unmittelbar vor der Prüfung ist eine tolle Vorbereitung. Das finde ich an der WINGS sehr gut gelöst. Die Klausur deckte den Stoff gut ab. Schwerpunkt war Automatentheorie, aber auch Grammatiken, Komplexität und der Resolutionsbeweis kamen dran.
     
    Das Klausurergebnis kam nach knapp 2 Wochen. Schlecht war es nicht, aber ganz zufrieden war ich am Ende auch nicht. Das lag aber keinesfalls am Modul oder an der Klausur sondern daran, dass ich der Meinung war, bei dieser Prüfung ein bisschen hinter meinen Möglichkeiten zurückgeblieben zu sein.
     
    Fazit
     
    Das Modul "Theoretische Informatik" hat mir sehr viel Spaß gemacht. Die von Herrn Cleve gewählte Form der Darstellung, bei der es weniger ums Beweisen sondern vor allem um das Lösen von Problemen mit Automaten geht, finde ich für ein FH-Modul genau richtig. Das Skript ist verständlich geschrieben und lässt meiner Meinung nach auch solchen Studierenden eine faire Chance, die sich mit dem eher trockenen Stoff der TI nicht anfreunden können.
     
    Sehr gut war auch das Feedback zu den Aufgaben durch Herrn Cleve. Oft hat er Rückfragen gestellt, Einwände formuliert, meine Aufmerksamkeit auf Spezialfälle gelenkt. Auf die Weise hat er mich angeregt, neu über meine Lösung nachzudenken. Das war viel besser als einfach nur Punkte zu verteilen. Es hat etwas für sich, dass die Übungsaufgaben NUR Übungsaufgaben sind und weder für die Note noch für die Zulassung zur Prüfung eine Rolle spielen. Das führt zu einem freieren Umgang mit der Übung. Statt auf Punkte zu zielen, geht es allein um den Stoff. Das hat mir gut gefallen.
     
    Ich studiere gerne bei Springer Campus. Aber das Konzept der WINGS ist auch nicht schlecht. Diejenigen unter euch, die Wirtschaftsinformatik studieren möchten, mit etwas weniger zeitlicher Flexibilität bei Prüfungen zurecht kommen und BWL etwas stärker gewichten wollen, sollten sich das Angebot der WINGS einmal anschauen.
  2. kurtchen
    Einordnung und Voraussetzungen
     
    Das Modul "nichtsequentielle Programmierung" (NSP) ist für Studierende im Studiengang "Web- und Medieninformatik" das letzte im Fachgebiet "Grundlagen der Informatik und Programmierung". Springer Campus empfiehlt, es im 5. Semester zu belegen. Die Module "Grundlagen der Informatik 1 & 2" werden als inhaltliche Voraussetzung genannt. Konkret heißt das, dass man Grundkenntnisse in strukturierter, prozeduraler und objektorientierter Programmierung in Java braucht. Auch Kenntnisse der generischen Programmierung, wie sie GdI2 vermittelt, sind unbedingt nötig.
     
    Meiner Meinung nach reicht das aber nicht. Ich möchte ergänzen, dass das Modul "Rechnerstrukturen und Betriebssysteme" eine nötige Vorbereitung ist, weil man hier einiges an Hintergrundwissen über Speicher- und Prozessverwaltung lernt. Auch GdI3 sollte man meiner Meinung nach belegt haben, weil die Kursteile zu Nebenläufigkeit und GUIs eigentlich voraussetzen, dass man sich ein bisschen mit Swing und dem AWT auskennt. Schließlich halte ich auch GdI4 "Algorithmen und Datenstrukturen" für zumindest sinnvoll, weil es bei der nichtsequentiellen Programmierung auch um den nebenläufigen Zugriff auf verschiedene Datenstrukturen geht. Es ist sinnvoll, wenn man diese kennt und versteht.
     
    Studierende im Studiengang Wirtschaftsinformatik müssen NSP nicht absolvieren, können es aber als Vertiefung belegen. Außerdem ist NSP ein Pflichtmodul der wissenschaftlichen Weiterbildung "Anwendungsprogrammierer". Das könnte für manche Studierende interessant sein, die sich unsicher sind, ob ihre Ausdauer für ein komplettes Bachelorstudium reicht.
     
    Das Lehrbuch
     
    Grundlage für den Kurs ist das Lehrbuch "Java: Nebenläufige und verteilte Programmierung" von Peter Ziesche und Doga Arinir. Es hat an die 360 Seiten, aber wegen recht umfangreicher Anhänge kommt der reine Kurstext auf nur ca. 330 Seiten, was für einen Springer Campus Kurs eher im unteren Mittelfeld liegt. Diese 330 Seiten haben es allerdings in sich. Ich empfinde NSP als das herausfordernste der Java-Module.
     
    Der Titel ist Programm. Nebenläufige Programmierung heißt, dass es mehr als einen Kontrollfluss gibt. Verteilte Programmierung heißt, dass Teile einer Anwendung auf verschiedenen Rechnern ausgeführt werden, sozusagen Nebenläufigkeit plus Entfernung. Wichtig ist zunächst die grundlegende Unterscheidung zwischen Prozessen und Threads. Prozesses laufen in je eigenen Speicherbereichen, während sich Threads als leichtgewichtige Prozesse einen Speicherbereich teilen. Die Möglichkeit, so auf gemeinsamen Daten zu arbeiten, erleichtert einerseits die Kommunikation und Kooperation zwischen den Threads. Andererseits schafft das viele Probleme, die erst zur Laufzeit auftreten und schwer reproduzierbar sind.
     
    Warum ist nebenläufige Programmierung schwierig?
     
    Als Programmierer kann man sich vorstellen, dass nebenläufige Programmteile auf verschiedenen CPUs zur Ausführung kommen. In modernen Multicore-Systemen kann und wird das auch tatsächlich so sein. Da in modernen Betriebssystemen stets Dutzende von Prozessen laufen, werden nebenläufige Programmteile de facto häufig auf einer CPU oder einem Kern ausgeführt werden, der zwischen verschiedenen Threads umschaltet. Es ist nicht vorhersehbar, in welcher Reihenfolge die Threads zur Ausführung kommen werden. Wenn Threads eine gemeinsame Datenstruktur manipulieren, kann man also nicht vorhersagen, was in welcher Reihenfolge passieren wird. Genau hier liegt eine der großen Herausforderungen. Als Programmierer gewöhnt man sich nämlich zunächst an das schön planbare Nacheinander eines Programmablaufs. Man trainiert sich an, in Sequenzen zu denken, Abläufe in Arbeitsschritte und Zustandsabfolgen zu zerlegen. Der Programmzustand ist so zu jedem Zeitpunkt das Ergebnis dessen, was zuvor passiert ist. Bei nebenläufigen Programmen ist das im Prinzip auch so, aber es gibt Ungewissheit, was in welcher Reihenfolge passieren wird. Man ist gezwungen, viel darüber nachzudenken, welche Ausführungsreihenfolgen möglich sind und welche Folgen das haben könnte. Auch wird das Testen eines Programmes schwieriger. Ein Programm kann bei Tests hervorragend laufen und im Dauerbetrieb kommt es zu bizarren Bugs, mit denen man nie gerechnet hätte. Nebenläufige Programmierung ist leider komplex.
     
    Theoretische Konzepte
     
    Kommen wir zum Aufbau des Kurses. Die ersten 60 Seiten sind eine Einführung in die nebenläufige Programmierung. Es beginnt mit grundlegenden Konzepten:
    - Anwendungen und Prozesse
    - Threads und Scheduling
    - Speicherverwaltung mit Stapel und Halde, zunächst sequentiell
    - und Speicherverwaltung bei mehreren Threads
    - Vorteile von Nebenläufigkeit: Bessere Performance und bessere Reaktionszeiten, vor allen in Multicore-Umgebungen
    - Probleme nebenläufiger Programme
    - Synchronisation und kritische Abschnitte
    - Monitore
    - Lebendigkeit
    - Verklemmungen
     
    Insbesondere bei den Ausführungen zur Speicherverwaltung musste ich schon sehr konzentriert lesen, um nachvollziehen zu können, was genau auf Stapel und Halde z.B. bei der Initialisierung eines GUIs passiert. Auch wenn hier Codebeispiele in Java gegeben werden, geht es in diesem Kursteil nicht um die Programmiersprache Java sondern um Konzepte.
     
    Die Umsetzung in Java
     
    Diese Konzepte werden in den folgenden 60 Seiten mit Leben erfüllt, denn nun geht es um die Realisierung in Java. Man lernt:
    - Threads zu erzeugen, indem man von Thread abgeleitete Klassen programmiert.
    - Die Schnittstelle Runnable zu nutzen, um Aufträge einem Thread zur Ausführung zu übergeben.
    - Gegenseitigen Ausschluss zu realisieren, indem man Methoden oder Codeabschnitte als synchronized kennzeichnet.
    - Monitore in Java zu implementieren, in denen Threads schlafen gelegt werden, die auf Ressourcen warten müssen.
    - Erste Strategien, um Verklemmungen zu vermeiden.
     
    Das Kapitel endet mit einem Fallbeispiel "Generisches Suchsystem", an dem die neuen Konzepte in einer Anwendungssituation gezeigt werden sollen. Dieses Fallbeispiel, dass sich durch den Kurs zieht, ist einer meiner wenigen Kritikpunkte. Während das Fallbeispiel Auftragsverwaltung aus GdI3 komplett und ausführbar vorlag und ausprobiert werden konnte, ist das generische Suchsystem nicht lauffähig, weil nicht komplett ausprogrammiert. Man kann die Klassen compilieren, aber man kann es nicht in Aktion erleben. So hat man nur eine statische Sicht auf den Code: Das hat didaktisch zwar auch einen hohen Wert, aber mir hätte es geholfen, mit dem Fallbeispiel herumspielen zu können, den Code in der Ausführung zu erleben. Dieser Aspekt hat mir bei diesem Kurs gefehlt. Zum Glück gibt es viele andere Codebeispiele im Kurs, die ausführbar sind und zum Experimentieren einladen.
     
    Modellierung von Nebenläufigkeit in UML
     
    Es folgt ein kurzes Kapitel über die Modellierung von Nebenläufigkeit in der UML. In den sonst so wichtigen Klassendiagrammen ist sie nicht so gut darstellbar. Nebenläufigkeit ist etwas, dass sich zur Laufzeit entfaltet. Sie kann daher besser mit Aktivitätsdiagrammen, Sequenzdiagrammen und Zustandsautomaten dargestellt werden. Hier wird auch auf den Anhang verwiesen, bei dem noch einmal die Petri-Netze knapp wiederholt werden, die ich ja schon aus Softwaretechnik 1 kannte. Die Markenwanderung im Petri-Netz hilft nämlich, Aktivitätsdiagramme besser zu verstehen. Hier sieht man, dass die Module oft schön untereinander vernetzt sind. Dieses Kapitel ist kurz, aber für die Präsenzklausur sollte man sich das gut anschauen.
     
    Vertiefende Kapitel zur Nebenläufigkeit in Java
     
    Nun kommt ein Kapitel zum Entwurf nebenläufiger Anwendungen in Java. Dieses Kapitel ist eine Sammlung verschiedener Klassen, die beim Entwurf nebenläufiger Anwendungen hilfreich sein können. Sie stammen meist aus java.util.concurrent.

    Man lernt hier vieles über:
    - den Unterschied zwischen threadsicheren und nebenläufigen Klassen
    - verschiedene Arten von Warteschlangen und Puffern
    - Container mit copy-on-write-Semantik, deren Iteratoren bei nebenläufigen Schreibzugriffen weiter laufen können.
    - verschiedene nebenläufige Container
    - Auftragsdienste und Threadpools, die eine Anzahl von Threads zum Abarbeiten von Auftragen bereithalten.
    - Aufträge mit Ergebnis, die etwas komplizierter zu handhaben sind.
    - Flexible selbst implementierte Monitore mit eigenen Lock-Objekten und Conditions
    - Leser-Schreiber-Synchronisation
    - Atomare Operationen
     
    Als Anwendungsbeispiele dienen hier nebenläufige Matrizenmultiplikation und ein nebenläufiger Quicksort. Diese Beispiele eigenen sich gut für eigene Experimente.
     
    Ein Problem mit diesem Kursteil ist: Die einzelnen Klassen werden recht knapp vorgestellt. Die Codebeispiele sind ausreichend aber oft nur Skizzen. Es fehlt häufig die Einbettung in einen Anwendungskontext, wie sie z.B. bei der Matrizenmultiplikation gegeben ist. Oft wird auf die API-Dokumentation verwiesen, die man tatsächlich auch braucht, will man das alles verstehen. Das Kapitel ist eher eine Sammlung von Methoden und hat für mich keinen richtigen roten Faden.
     
    Dafür ist hier die Abstimmung mit den Einsendeaufgaben sehr gut. Die laufen meist darauf hinaus, etwas zu programmieren, bei dem die vorgestellten Klassen zum Einsatz kommen. Oft reicht am Ende wenig Code. Trotzdem habe ich hier regelmäßig gemerkt, was ich eben noch nicht verstanden hatte. Ich musste mich regelmäßig durch die API-Dokumentation wühlen, um Erfolg zu haben. Rückblickend meine ich, dass das mehr gebracht hat als ein Text, der von vorneherein alle Eventualitäten erklärt. Das Lehrbuch lässt genug offen, um in den Aufgaben Spielraum für eigene Erkundungen und Aha-Erlebnisse zu haben. Im Zusammenspiel mit den Aufgaben funktioniert das Buch sehr gut.
     
    Im nächsten Kapitel geht es um fortgeschrittene Konzepte von Nebenläufigkeit in Java. Hier geht es z.B. um:
    - das kontrollierte Beenden von Threads
    - Swing-GUIs und Nebenläufigkeit: Fallbeispiel ist hier die Fortschrittsanzeige eines nebenläufigen Auftrages. Eine alltägliche Situation, die komplizierter ist als man zunächst denkt.
    - Caches und Synchronisation
     
    Ans Eingemachte geht es mit den Abschnitten über Caches und Synchronisation. In modernen PCs haben die CPUs ja mehrstufige Caches, in denen sie oft benötige Daten ablegen. Arbeiten mehrere CPUs parallel, stehen im Cache eventuell Daten, die im RAM schon längst geändert wurden. Eine gemeinsam genutzte Variable kann so aus Sicht verschiedener CPUs oder Kerne zugleich verschiedene Werte haben, was dem intuitiven Verständnis von Speicherinhalt widerspricht. So etwas kann zu bizarren und schwer nachvollziehbaren Bugs führen. Java bietet Sprachkonstrukte, mit denen man einen Refresh oder Flush des Caches erzwingen kann. Diese sollte man aber nicht ständig einsetzen, weil so die Zugriffszeiten auf Speicherinhalte steigen und das Programm langsamer wird. Man kommt also nicht umhin, sich zu überlegen, was man tut. Auch in diesem Kapitel war die Verzahnung mit den Einsendeaufgaben sehr gut.
     
    Verteilte Programmierung
     
    Im letzten Kapitel geht es dann um verteilte Anwendungen mit RMI (Remote Methode Invocation). Eine Java-Anwendung kann auf mehrere Rechner verteilt sein, z.B. auf einen Client und einen Server. Ein Client kann Methoden auf dem Server aufrufen. Dazu erhält er über das Netz sogenannte Stummel-Objekte, die sozusagen nur die Schnittstelle und keine Implementierung enthalten. Arbeitet man mit RMI, so implementiert man viele Dinge etwas anders als bei einer Anwendung, die lokal läuft. Entfernte Methodenaufrufe dauern relativ lange. Darum bieten sich Methoden an, die z.B. mehrere Attribute eines Objektes auf einmal abfragen oder verändern.
     
    Es war  schwierig, zum Thema RMI gute und aktuelle Quellen neben dem Kursmaterial zu finden. Manche Codebeispiele liefen nicht mehr so wie im Buch beschrieben, weil inzwischen verschärfte Sicherheitskonzepte gelten. Ich habe hier nicht alles ausprobieren können. Verteilte Programmierung ist komplex. Dies gilt auch für die Verteilung und Installation von Anwendungen. Ich fand es gut, dass dieses Thema behandelt wurde, merkte aber an dem Punkt auch, dass es Grenzen gibt, wie viel Stoff ich für eine Modulprüfung verdauen kann.
     
    Zum Glück wies mein Tutor mich darauf hin, dass dieses letzte Kapitel nicht klausurrelevant ist. Für den Online-Test und die Online-Klausur ist es aber wichtig, also sollte man sich gut damit beschäftigen.
     
    Online-Tests und Online-Klausur
     
    Bei den Tests gab es in diesem Kurs eine Besonderheit. Es waren vergleichweise wenige und zu mehreren Kapiteln gab es gar keine. Der Abschluss-Test deckte aber auch diese Kapitel ab. Hier musste man also direkt liefern ohne zuvor an Fragen zum gleichen Stoff sein Verständnis überprüfen zu können. Es ist mein Eindruck, dass hier bewusst noch eine kleine Hürde vor den ersehnten Bonuspunkten eingezogen wurde. Tatsächlich habe ich bei diesem Kurs nur vergleichsweise wenige Bonuspunkte erringen können, sowohl im Online-Test als auch in der Online-Klausur, die ich ebenfalls als herausfordernd empfand. Der eigentliche Nutzen der Online-Klausur war denn auch das Feedback meines Tutors, das mir ermöglicht hat, die Aufgaben noch einmal zu überarbeiten und dabei noch einige Einsichten zu erlangen. Auch in der Online-Klausur kann Stoff aus dem gesamten Kurs drankommen, auch zu dem Kapitel über RMI.
     
    Präsenzklausur
     
    Für die Präsenzklausur habe ich das Lehrbuch insgesamt 3 mal durchgearbeitet und mit vielen Anmerkungen versehen. Außerdem habe ich mir zum Thema viel Sekundärliteratur aus der Unibibliothek besorgt. Einen konkreten Titel nennen möchte ich aber nicht, weil ich in den meisten Büchern immer nur kurze hilfreiche Abschnitte gefunden habe. Das Lehrbuch von Ziesche und Arinir ist schon sehr gut zusammengestellt und behandelt sehr viele Konzepte, die man anderswo weit verstreut zusammensuchen muss. So kam ich letztlich doch immer wieder darauf zurück. Ich würde für die Klausur empfehlen, die Kapitel 2 bis 5 gründlich zu wiederholen.
     
    Die Präsenzklausur war breit angelegt. Ein Mix aus Wissensfragen, Code analysieren, Code schreiben, UML-Diagramme zeichnen. Inhaltlich wurden eher die Grundkonzepte abgeprüft und nicht so sehr ausgefallene Klassen aus java.util.concurrent. Ich würde empfehlen, die theoretischen Grundlagen und die Kapitel zur UML gut zu wiederholen. Und die grundlegenden Kapitel zu Threads in Java. Damit hat man schon mal einen guten Teil abgedeckt. Strategisch würde ich bei dieser Klausur dazu raten, erst die leichteren Aufgaben mit weniger Punkten zu machen und erst dann die umfangreicheren. Ich habe es umgekehrt gemacht, aber das war hier klar die falsche Strategie, weil ich an irgendeinem Punkt abbrechen musste und später nur schwer wieder reinkam. Eine Aufgabe war etwas anspruchsvoller, weil ein Thema, dass im Kurs nur recht knapp vorgestellt wurde, nun in einer Anwendungssituation ausprogrammiert werden sollte. Mein Tipp: Wenn im Kurstext die Rede davon ist, sich gewisse Dinge noch einmal in der API anzuschauen, dann macht das. Kann auch nicht schaden, die knappen Codebeispiele abzutippen, auszuführen und selbst ein bisschen damit zu experimentieren. Das bezieht sich vor allem auf Kapitel 5.
     
    Fazit
     
    Insgesamt wieder ein schöner Kurs. Leider ist damit die Serie der Java-Module nun vorbei. Schade, denn gerade die haben mir besonders viel Spaß gemacht. Es wird noch ein Wiedersehen mit Java geben, weil auf mich noch der Kurs "Java Server Pages" aus dem Fachgebiet "Web- und Medieninformatik" wartet. Da geht es dann um serverseitige Anwendungen, die dynamisch HTML erzeugen. Das macht man meistens mit PHP aber bei Springer Campus eben mit Java.
     
    Nachtrag (08.12.2016)
     
    Heute kam das Ergebnis der Präsenzklausur. Ich hatte Glück und habe ziemlich gut abgeschnitten. Hier konnte ich wieder einmal lernen, dass ich mich nicht entmutigen lassen sollte, auch wenn der Stoff eines Moduls am Anfang schwer zu fassen ist. Nichtsequentielle Programmierung habe ich als das schwierigste der Java-Module empfunden. Ich habe hier ein paar Anläufe mehr gebraucht, um die Konzepte wirklich zu verstehen. Gerade die Online-Klausur, bei der noch vieles schief gelaufen ist, hat mir hier noch einmal wertvolle Rückmeldungen gebracht. Auch weil mein Tutor sich nicht damit begnügt hat, meine Arbeit nur mit Punkten zu bewerten sondern differenzierte inhaltliche Rückmeldungen gegeben hat, wo genau die Mängel meiner vorgelegten Lösungen waren. Das hat mir erlaubt, mich "auf den letzten Metern vor dem Ziel" noch einmal zu steigern.
     
    Ich denke, dass das ganze auch ein bisschen mit seelischer Reife zu tun hat. Wenn ich an mein Erststudium zurückdenke, so meine ich, dass ich mich damals von Schwierigkeiten viel schneller habe verunsichern lassen. Ich bin jetzt ein paar Jahre älter und habe in meinem Leben auch den einen oder anderen Misserfolg wegstecken müssen, privat wie beruflich. Da erlebt man, dass man nach einen Sturz auch wieder aufstehen kann. Dass Fehler vor allem den aktuellen Lernstand wiederspiegeln, aber eben längst nicht das eigene Potential für die Zukunft. Natürlich hatte ich das auch mit 19 Jahren schon einmal gehört. Aber jetzt ist das eigene Erfahrung und nicht der gute Rat anderer. Es macht viel mehr Spaß als früher, mit dieser veränderten Perspektive zu studieren.
  3. kurtchen
    Am Montag war die Lernplattform von Springer Campus für längere Zeit nicht erreichbar. Ein größeres Update wurde eingespielt, was uns Studierenden allerdings einige Tage vorher per Mail angekündigt worden war. Die Plattform hat nun ein neues Design.
     
    Zugegeben: Das bisherige Design sah ein wenig altbacken aus. So nach WindowsXP.
     
    Natürlich habe ich nun erst mal ein wenig Schwierigkeiten, mich zurecht zu finden, weil die verschiedenen Schaltflächen nicht mehr an den gleichen Stellen sind. Auf so etwas reagiere ich nicht mit Begeisterung, aber natürlich weiß ich, dass ich mich schon umgewöhnen werde.
     
    Der Vorteil des neuen Designs: Es ist "responsive", d.h. das Layout passt sich an kleinere Bildschirme von Tablets und Smartphones an, z.B. indem Inhalte untereinander angeordnet werden, die sonst nebeneinander stehen oder indem Menüs eingeklappt werden, die nicht unbedingt gebraucht werden. Es sollte in Zukunft leichter sein, Tests unterwegs zu bearbeiten. Im Prinzip wäre es sogar denkbar, den Text von Wissensbausteinen am Handy zu lesen. Ich vermute, dass das nicht bei allen Modulen gut gehen wird. Im Modul "Computernetze" gab es viele Diagramme, die eigentlich schon für meinen Laptop-Bildschirm zu groß waren. Die konnte man verkleinern, aber dann wurde es schwieriger Details zu erkennen. Aber grundsätzlich eine gute Sache.
     
    Inakzeptabel ist allerdings die Farbgebung: Die Schriftfarbe ist ein Grau, dass vor dem weißen Hintergrund für mich einfach zu kontrastarm ist. Ich schaffe es nicht mehr, längere Zeit zu lesen. Es ist sehr anstrengend und ich bekomme schnell Kopfschmerzen. Zum Glück gilt das nicht für die Darstellung in den Wissensbausteinen, wo man ja den Löwenanteil der Texte lesen wird. Hier wurde ein grauer Hintergrund gewählt, der weniger blendet, so dass die Schrift nicht so überstrahlt wird. Zwar wäre mir auch hier eine dunklere Schrift lieber, aber damit kann ich leben. Schwierig wird es für mich aber bei den Tests und Aufgaben. Hier ist der Hintergrund hell und überstrahlt das Grau der Schrift. Helfen würde mir hier eine dunklere Schrift oder ein etwas dunklerer Hintergrund. Natürlich gibt es immer die Möglichkeit, im Browser eine andere Darstellung zu erzwingen, was ich wahrscheinlich für's erste tun muss.
     
    Eine weitere Schwierigkeit für mich: Bei den Tests unterscheiden die Ampelfarben Rot und Grün die Ergebnisse "geschafft" und "nicht geschafft" bzw. "nicht bearbeitet". Hier wurden recht blasse Farben gewählt, die sich in ihrer Helligkeit recht ähnlich sind. Für mich ist das ein Problem, da ich Rot und Grün nicht sicher unterscheide. Das ist ja bei Männern nicht selten. Helfen würden mir hier sattere Farben oder deutlichere Helligkeitsunterschiede zwischen Rot und Grün. Interessant eigentlich, weil die recht verbreitete Rot-Grün-Schwäche im Modul "Webdesign und Webergonomie" thematisiert wird.
     
    In der alten Plattform konnte man zwischen drei Farbschemata wählen. Jetzt scheint es eine solche Möglichkeit nicht mehr zu geben.
     
    Ich habe dem Studienbüro von meinen Schwierigkeiten berichtet. Mir wurde ins Aussicht gestellt, dass es in der nächsten Zeit noch weitere kleinere Änderungen am Erscheinungsbild der Plattform geben wird und das man sich bemühen wird, die Rückmeldungen der Studierenden zu berücksichtigen. Insofern hoffe ich, dass in Zukunft wieder eine Auswahl zwischen Farbschemata möglich sein wird. Das war schon ein Feature, das ich gerne zurück hätte.
     
  4. kurtchen
    Diesmal kommt kein Modulbericht. Eben habe ich mich auf der Lernplattform der W3L eingeloggt. Und dort, wo bislang das W3L-Logo zu sehen war, ist nun das Springer Logo. Das ist zugegebenermaßen recht chic, aber noch wirkt es auf mich an dieser Stelle fremd. Ich habe nun darüber nachgedacht, wie ich im Hinblick auf meinen Blog mit dieser Namensänderung umgehen möchte.Tatsächlich habe ich mit dem Gedanken gespielt, die Bezeichnung W3L in allen meinen Artikeln zu ändern. Andererseits habe ich mein Studium nun einmal nicht bei Springer Campus begonnen sondern bei der W3L. Und das war ein guter Anfang.
     
    Ich hoffe (und bin auch guten Mutes), dass es mit Springer Campus gut weitergehen wird. Ab jetzt werde ich in meinen Beiträgen also den neuen Namen verwenden.
     
    Sinn meines Blogs war und ist, dass künftige Studierende es ein wenig leichter haben als ich, Informationen zum Studium aus einer Insider-Perspektive zu finden. Damit diese Leute meine Modulberichte gut finden, habe ich zumindest in den Stichworten zu den Blogeinträgen konsequent W3L durch Springer Campus ersetzt.
     
    Bis zum nächsten ausführlichen Bericht dauert es noch ein bisschen. Zur Zeit bearbeite ich das Modul Nicht-sequentielle Programmierung und nebenbei auch schon ein bisschen Mobile Computing.
  5. kurtchen
    Softwaretechnik 1 ist das erste von insgesamt drei aufeinander aufbauenden Modulen. Ergänzt wird es um die Module "Softwaremanagement" und "Software testen". Diese fünf Module bilden den Studienbereich "Softwaretechnik" und sind für Studierenden im Studiengang "Web- und Medieninformatik" Pflicht. Studierende der Wirtschaftsinformatik müssen "Softwaretechnik 3" und "Software testen" nicht belegen. Für Studierende beider Studiengänge wird ein Vertiefungs-Modul "Softwaremanagement 2" angeboten.
     
    Das Modul Softwaretechnik 1 basiert auf dem "Lehrbuch der Softwaretechnik" von Helmut Balzert. Zugeschickt bekommt man Band 1 "Basiskonzepte und Requirements Engineering". Beim Auspacken erlebt man die erste Überraschung. Es ist kein Buch vom W3L-Verlag sondern vom Spektrum Verlag. Die zweite Überraschung ist, dass es ein ziemlich dicker Wälzer von über 600 Seiten ist. Der didaktische Aufbau ist aber durchaus ähnlich, wie man das von der W3L gewohnt ist. Herr Balzert hat ja auch den Studiengang "Web- und Medieninformatik" der W3L aufgebaut. Man kommt mit dem Format gut zurecht. Außerdem ist wird dieses Lehrbuch nicht allein im Modul "Softwaretechnik 1" verwendet sondern auch in "Softwaretechnik 2". Dieses Modul behandelt die Kapitel I bis III. Man landet so bei einem üblichen Umfang von 430 Seiten.
     
    Prinzipien und Werkzeuge
     
    Die ersten 100 Seiten des Lehrbuches behandeln Basistechniken. Interessant ist vor allem das Kapitel "Prinzipien". Hier werden verschiedene Begriffe entwickelt, die im weiteren Verlauf des Kursmoduls von Bedeutung sind: Abstraktion, Strukturierung, Bindung und Kopplung, Hierarchisierung, Modularisierung, Geheimnisprinzip, Lokalität, Verbalisierung. Betrachtet werden außerdem die Abhängigkeiten zwischen diesen Prinzipien. Dieser Abschnitt des Kurses fühlte sich teilweise fast schon wie ein geisteswissenschaftliches Modul an. Man sollte beim Lesen regelmäßig innehalten und über die eingeführten Begriffe nachdenken, zum Beispiel darüber, was für Bezüge es zwischen Struktur und Hierarchie gibt und wie sich Hierarchien von Strukturen unterscheiden. Herr Balzert entwickelt die Begriffe sehr präzise, unterscheidet sehr genau. Diesen Teil des Kurses habe ich sehr geschätzt. Ich halte Begriffe für wichtig, weil man sie braucht, um sich mit anderen auszutauschen - sei es im direkten, kollegialen Dialog, sei es indirekt, indem man Bücher, Fachartikel oder Dokumentationen liest. Der Stoff dieses Kursabschnittes wurde allein durch Tests abgeprüft. Die waren gut gestellt und brachten einen noch einmal ins aktive Nachdenken über das Gelernte.
     
    Ein weiterer größerer Abschnitt behandelte Werkzeuge in der Softwaretechnik. Die sind natürlich einen ständigen Wandel und auch gewissen Moden unterlegen, aber hier geht es darum, Werkzeuge hinsichtlich bestimmter Operationen zu klassifizieren: Editieren, Transformieren, Suchen, Visualisierung, Verbinden, Nachvollziehen, Verwalten von Versionen und Änderungen, Dokumentieren, Messen, Verfolgen und Überwachen, Prüfen, Kommunizieren. Für alle diese Funktionen werden auch konkrete Beispiele genannt. Den Abschluss bilden Kriterien für die Auswahl von Werkzeugen.
     
    All dies war interessant aber auch ein wenig theoretisch. Das änderte sich mit dem Kapitel "Basistechniken". Dieses zerfällt in drei Teile: Statik, Dynamik, Logik.
    Statik
     
    Statik
     
    Laut meinem Tutor ist das Kapitel Statik für die Praxis der meisten Entwickler am wichtigsten. Hier geht es um:
    - Zusammenfassung von Funktionen
    - Funktionsbäume
    - Pakete
    - Vererbung
    - Assoziationen
    - Multiplizitäten
    - Aggregationen und Kompositionen
    - Daten-Strukturen
    - XML, DTD und XML-Schemata zur Beschreibung von Datenstrukturen
    - Entity-Relationship-Modelle
    - Schlüssel, Tabellen und Dateien
    - Semantische Datenmodelle
    - Unternehmensdatenmodelle
    - Multidimensionale Datenstrukturen
    - OLAP und Hyperwürfel
     
    Zur Darstellung der statischen Beziehungen wird in erster Linie die UML verwendet. Man könnte sagen, dass Softwaretechnik 1 in weiten Teilen ein UML-Kurs ist. Dies gilt besonders für das Kapitel Statik. Aber auch andere Notationsformen wie ER-Diagramme mit verschiedenen Notationen für die Kardinalitäten werden behandelt. In diesem Teil des Kurses gibt es nun auch Einsendeaufgaben. Die bestehen in der Regel darin, dass man ein konkretes Szenario geschildert bekommt, in dem eine Software eingesetzt werden soll. Dazu soll nun ein Modell entwickelt werden, oft in UML.
     
    Die Aufgaben in Softwaretechnik 1 fand ich oft schwieriger als in anderen Modulen der W3L. Der Abstraktionsgrad ist höher. Im Gegensatz zu Programmiermodulen kann man ein Modell nicht "laufen lassen" und dann erleben, was nicht funktionert. Natürlich würde man merken, dass ein Modell schlecht ist, wenn man anfinge, es in Code umzusetzen und dann auf Schwierigkeiten stieße. Aber genau das soll ja durch eine sinnvolle Modellierung verhindert werden. Hier habe ich selten die volle Punktzahl erzielt. Mit den oft sehr konkreten und detaillierten Rückmeldungen meines Tutors konnte ich meine Lösungen aber überarbeiten und verbessern. Oft habe ich überarbeitete Lösungen noch einmal eingeschickt, um zu hören, ob es so besser ist. Auf diesem Wege habe ich viel gelernt. (Auch wenn das natürlich an den erreichten Punkten nichts ändert.)
     
    Dynamik
     
    Dieses Kursabschnitt fand ich am schwierigsten. Auch Gesprächen mit Kommilitonen weiß ich, dass es anderen Studierenden ähnlich geht. Auch finden viele Studierende dieses Kapitel weniger praxisrelevant. Das kommt natürlich sehr darauf an, was für eine Art von Software man entwickeln möchte.
    Während in Statik Beziehungen modelliert werden, die über die Laufzeit eines Programmes stabil bleiben, beschäftigt sich Dynamik mit Veränderungen über die Zeit, also mit Systemen in Bewegung. Hier geht es um Zustandsübergänge, Zustandsänderungen und die Ereignisse, die dazu führen. Das ist natürlich wesentlich komplexer und herausfordernder.
     
    Es geht um:
    - Kontrollstukturen
    - Nebenläufigkeit
    - Aktivitätsdiagramme
    - Geschäftsprozesse und Use-Cases
    - Zustandsautomaten: Mealy, Moore und Harel
    - Petrinetze: Bedingungs-Ereignis-Netze, Stellen-Transitions-Netze, Hierarchische-Petrinetze, zeitbehaftete Petrinetze und stochastische Petrinetze
    - Szenarien
    - Sequenzdiagramme
    - Kommunikationsdiagramme
     
    Für die Einsendeaufgaben sollten hier Zustandsautomaten entworfen werden. Außerdem sollte ein Petri-Netz entworfen werden, dass ein bestimmtes Problem löst. Für letztes war eine Software empfohlen worden, Visual Objects Net++, die man sich gratis runterladen kann. Die lief leider auf meinem System ziemlich instabil und stürzte häufig ab, was mich viel Zeit gekostet hat. Man sieht dem Programm an, dass es ein paar Jahre auf dem Buckel hat. Hier hätte ich sicher die Möglichkeit gehabt, mich nach aktuelleren Alternativen umzusehen, aber die Arbeit an den Petri-Netzen machte mir nicht so viel Spaß und ich wollte lieber zügig mit dem Thema abschließen. Rückblickend betrachtet, wäre es besser gewesen, hier ein wenig mehr Zeit zu investieren. Mein Tutor hatte mich gewarnt, das Softwaretechnik 1 ein sehr anspruchsvoller Kurs sei, der von vielen Studierenden unterschätzt werde. Ich war hingegen froh, endlich zum dritten Abschnitt "Logik" weitergehen zu können.
     
    Logik
     
    Vom Kapitel "Logik" erwartete ich, dass es mich wieder mehr interessieren würde. Anfangs wurde ein knapper Überblick über Aussagenlogik, Prädikatenlogik und Temporallogik gegeben. Dann kamen Abschnitte mit klaren Softwarebezug.
    - Constraints und die OCL in der UML
    - Entscheidungstabellen und Entscheidungsbäume
    - Erstellung, Darstellung und Optimierung von Entscheidungstabellen
    - Entscheidungstabellen-Verbunde
    - Regeln und regelbasierte Software
    - Verkettung von Regeln, Lösungssuche, Tiefe-Zuerst-Suche, Breite-Zuerst-Suche, Heuristische Suche
    - Geschäftsregeln
     
    Als konkrete Realsierung von regelbasierter Software wird zum Beispiel die Sprache Prolog genannt, die für bestimmte Spezialanwendungen elegante Lösungen ermöglicht.
     
    Für die Einsendeaufgaben sollte man wieder Klassendiagramme zeichnen, diesmal ergänzt um Informationen über Constraints, z.B. formuliert mit OCL. Außerdem sollte man verschiedene Entscheidungstabellen entwerfen. Dieser Kursteil hat mir wieder viel Spaß gemacht.
     
    Online-Klausur
     
    Den Online-Test habe ich ganz gut geschafft. Die Online-Klausur fand ich anspruchsvoll und habe auch ein paar dumme Fehler gemacht. Was mir entgegen kam: Es gab Aufgaben zu Petri-Netzen, aber hier ging es darum, die dynamische Entwicklung eines gegebenen Netzes nachzuvollziehen. Einzuschätzen, ob es zu Verklemmungen kommen kann. Das fiel mir relativ leicht. Es war gar nicht so schlecht, dass ich bei den Aufgaben zur Statik ein paar Fehler gemacht habe, weil ich so noch mal viele wertvolle Rückmeldungen von meinem Tutor bekommen habe und noch einmal gezielt ein paar Sachen wiederholt habe. So ging ich in die Präsenzklausur, auf die ich mich eigentlich ganz gut vorbereitet fühlte.
     
    Die Präsenzklausur
     
    Die Präsenzklausur hat mich dann leider ziemlich kalt erwischt. Ich fand sie viel schwieriger als die Online-Klausur. Vor allem hing ungefähr die Hälfte der Punkte an Stoff aus den Kapiteln zur Dynamik. Unter anderen sollte man ein Petri-Netz entwerfen, das ein konkretes Problem löst. Als Einsendeaufgabe mit genügend Zeit zur Verfügung hätte ich das vielleicht geschafft. Aber Zeit ist eine knappe Ressource, mit der man vor allem in dieser Klausur sehr taktisch umgehen muss. Ich habe noch kein Ergebnis, aber diesmal habe ich ein ziemlich schlechtes Gefühl.
     
    Wie hätte ich mich rückblickend besser vorbereiten können? Was könnte ich anderen Studierenden dieses Moduls raten? Ich glaube, im allgemeinen ganz gut reflektieren zu können, wo meine Schwächen gelegen haben. Bei anderen Modulen habe ich auch immer wieder Tipps formuliert, worauf man bei der Prüfungsvorbereitung achten sollte. Bei diesem Modul bin ich erstmals ziemlich ratlos. Ich fand das Niveau im Vergleich zu anderen Modulen der W3L ziemlich hoch. Das liegt sicher auch ein Stück weit in der Natur der Sache. Softwaretechnik ist abstrakter als andere Module. Man hantiert mit Begriffen, Konzepten, Notationen, Modellen. Und man kann - anders als in der Programmierung - nicht mal schnell was ausprobieren und so Feedback vom System erhalten. Hier geht es darum, einen Sachverhalt genau zu analysieren, entscheidende Aspekte zu erkennen und die Beziehungen zwischen ihnen in einer geeigneten Form darzustellen. So schafft man die Blaupause für eine gute Implementierung, die auch wartbar und erweiterbar sein soll. Das ist schon eine anspruchsvolle Aufgabe.
     
    Insbesondere bei den Petri-Netzen bin ich ratlos. Ich meine, sie verstanden zu haben. Wenn ich ein Petri-Netz vor mir sehe, einen Ausgangszustand bekomme, so kann ich nachvollziehen, was Schritt für Schritt passieren wird. (Oder passieren kann. Ihr Verhalten ist ja oft nicht-deterministisch.) Aber der Entwurf ist eine ganz andere Herausforderung. Das ist vielleicht ähnlich wie der Unterschied zwischen dem Nachvollziehen und dem Finden eines Beweises in der Mathematik. Vielleicht hätte mir hier ein wenig mehr Übungsmaterial gut getan. Es gab nur eine Einsendeaufgabe zu Petri-Netzen. Vielleicht würde ich mich aktiv nach mehr Übungsmöglichkeiten umsehen, wenn ich dieses Modul nochmals machen müsste.
     
    Vielleicht merke ich bei diesem Modul auch, dass ich - im Gegensatz zu vielen meiner Kommilitonen - bislang nicht in einem IT-Beruf arbeite. Ich hatte den Eindruck, in der Klausur einfach nicht auf das Tempo zu kommen, dass ich gebraucht hätte, um die Aufgaben in der gegebenen Zeit zu schaffen. Das habe ich natürlich als Stress erlebt, habe nach schnellen Lösungen gesucht, bin oft den erstbesten Schritt auf die Lösung zugegangen, auch wenn es mich in die Sackgasse geführt hat. Ich hätte gründlicher über meine Entwürfe nachdenken müssen, bevor ich anfange, Teile meiner Diagramme zu zeichnen. Genau diese Zeit habe ich mir nicht genommen, weil ich - vielleicht zu unrecht - glaubte, sie nicht zu haben. Eine klare Antwort, wie ich es beim nächsten Mal besser machen könnte, habe ich noch nicht. Ich hoffe, dass ich außer der Note auch ein bisschen Feedback vom Tutor bekomme. Wenn sich dadurch neue Einsichten ergeben, möchte ich die hier noch nachreichen.
     
    Fazit
     
    Softwaretechnik 1 war insgesamt ein sehr interessantes Modul. Ich würde sagen, es geht in erster Linie darum, wie man komplexe Zusammenhänge und Prozesse auf wesentliche Aspekte zusammenfasst. Es geht darum, wie man etwas modelliert. Und darum, wie man Modelle mit einfachen graphischen Mitteln so darstellen kann, dass man sie anderen Menschen kommunizieren kann. Das halte ich allgemein für eine nützliche Fähigkeit. Ich glaube, dass viele Konzepte aus diesem Kurs einem sogar helfen könnten, auch in anderen Situationen als der Softwareentwicklung Probleme klarer zu sehen und zu beschreiben. Es geht um "Denkzeuge" und so etwas finde ich immer spannend. Auf das sehr gute Lehrbuch von Herr Balzert werde ich sicher auch in Zukunft immer wieder zurückkommen. Es ist sehr systematisch aufgebaut und eignet sich mit seinen vielen Checklisten sehr gut als Nachschlagewerk.
     
    Insofern möchte ich hier ein positives Fazit ziehen. Auch wenn ich befürchte, dass ich mit meiner Leistung in diesem Modul nicht zufrieden sein werde.
  6. kurtchen
    Das Modul "Angewandte Mathematik" ist das dritte von insgesamt vier Mathematik-Modulen im Studiengang "Web- und Medieninformatik". Studierende der Wirtschaftsinformatik müssen es nicht machen, dürfen es aber als Vertiefungsfach belegen. Auch wenn es formal - wie bei der W3L üblich -  keine Teilnahmevoraussetzungen gibt, gelten Mathe2 (Analysis und lineare Algebra), GdI1 (strukturierte und prozedurale Programmierung) und GdI2 (objektorientierte Programmierung) als inhaltliche Voraussetzungen. Meiner Meinung nach braucht man auf jeden Fall die Kenntnisse in linearer Algebra und Analysis, die Mathe2 vermittelt. Die Programmierkurse wären aus meiner Sicht weniger wichtig.
     
    Kursautor von Mathe3 ist wieder Professor Lenze, der schon die Lehrbücher zu Mathe2 geschrieben hat. Die beiden Kurse bauen schön aufeinander auf. Man kann die Bände aus Mathe2 gut zum Nachschlagen nutzen, wenn man bei der Lektüre von Mathe3 merkt, das einem etwas entfallen ist. Auch in diesem Kurs gibt es die hervorragenden PDF-Tools, mit denen man sich zu allen Kapiteln des Buches selbst beliebig viele Übungsaufgaben mit Lösungen generieren kann.
     
    Angewandte Mathematik ist natürlich ein Sammelbegriff, der ganz verschiedene Teilgebiete zusammenfasst, die in unterschiedlichen Anwendungssituationen von Bedeutung sind. Herr Lenze hat für diesen Kurs drei Gebiete ausgewählt, die für einen Informatiker interessant sein sollten: Numerik, Grafik und Kryptik.
     
    Das Buch beginnt allerdings mit einem Kapitel über Zahldarstellungen und Maschinenzahlen und über charakteristische Rechen- und Rundungsfehler, die beim Rechnen mit Maschinenzahlen auftreten können. Das ist interessant und für manche Anwendungen relevant. Es ist letztlich eine Auffrischung von Stoff, der den Studierenden schon aus GdI1 bekannt sein sollte, wo dieses Thema bereits behandelt wurde. Dieses einführende Kapitel ist nicht klausurrelevant.
     
    Teil 1 - Numerik
     
    Das Kapitel Numerik fasst verschiedene Näherungsverfahren zusammen. Ausgangspunkt ist der Banachsche Fixpunktsatz. Hier geht es um sogenannte kontrahierende Selbstabbildungen. Das sind Funktionen, bei denen ich mein f(x) wieder neu als x in die Funktion einspeisen kann; die generierten Werte nähern sich dabei von Schritt zu Schritt einem Fixpunkt. Letztlich geht es in der Numerik darum, Funktionen zu finden, die bestimmte Probleme durch schrittweise Näherung lösen. Das ist dann nützlicht, wenn eine exakte Lösung schwierig, unbekannt oder aufwendig ist.
     
    Das Kapitel zur Numerik zerfällt in zwei Teile. Im ersten Teil geht es um Anwendungen in der Analysis, im zweiten um Anwendungen in der linearen Algebra. Relevant für die Präsenzklausur ist nur der erste Teil. Aber Achtung: In der Online-Klausur und in den Online-Tests kann - wie schon in Mathe2 - alles drankommen.
     
    Die Inhalte zur Analysis:
    - Mit dem Newton-Verfahren kann man näherungsweise die Nullstelle einer differenzierbaren Funktion in einem Intervall finden, indem man an den Graphen Tangenten anlegt.
    - Mit dem Heronverfahren kann man Quadratwurzeln reeler Zahlen näherungsweise berechnen.
    - Das Sekanten-Verfahren ist ein weiteres Verfahren zur Näherung von Nullstellen.
    - Mit dem Abstieg-Verfahren kann man das Minimum einer Funktion in einem Intervall finden.
    - Das Dividierte-Differenzen-Verfahren liefert Näherungen für Ableitungen einer Funktion.
    - Die Trapez- und Simpson-Regel nähern Integrale.
    - Die iterierte Trapez- und Simpson-Regel machen das gleiche mit verbesserter Genauigkeit.
     
    Die Inhalte zur lineare Algebra:
    - Gesamtschrittverfahren,
    - Einzelschrittverfahren und
    - SOR-Verfahren. Damit kann man lineare Gleichungsssysteme näherungsweise lösen, die durch eine reguläre Matrix und einen Vektor gegeben sind.
    - von Mises-Geiringer Verfahren. Damit kann man Eigenwerte und Eigenvektoren näherungsweise berechnen.
     
    Numerik war für mich schon recht interessant. Die Verfahren laufen mechanisch ab und lassen sich gut als Algorithmen implementieren. Im Kurs finden sich dafür auch Code-Schnipsel in Java. Aus dieser Perspektive macht Mathematik auch dem angehenden Informatiker Spaß.
     
    Teil 2 - Grafik
     
    Auch das Kapitel Grafik zerfällt wieder in zwei Teile. Im ersten Teil geht es um polynomiale Interpolation und Approximation. Das ist eigentlich eine ziemlich interessante Sache. Aus Schulzeiten kennen wir ja noch die Situation: Man bekommt eine Funktionsvorschrift und soll nun eine Reihe von Funktionswerten berechnen, die man in ein Koordinatensystem einzeichnet. Und wenn man genug Koordinaten hat, verbindet man die Punkte zu einem Graphen. Bei der polynomialen Interpolation geht man nun den umgekehrten Weg. Bekannt sind ein paar Koordinaten. Gesucht ist eine Funktionsvorschrift für ein Polynom, das genau durch diese Punkte verläuft. Bei der polynomialen Approximation sucht man ein Polynom, das nur ungefähr durch die gegebenen Punkte läuft, dafür aber einen glatteren Kurvenverlauf aufweist.
     
    Man lernt:
    - polynomiale Interpolation mit Monomen
    - polynomiale Interpolation nach Lagrange
    - polynomiale Interpolation nach Newton
    Gerade die letztere ist ziemlich interessant. Hier kann man nämlich das aus der Numerik bekannte Dividierte-Differenzen-Verfahren anwenden, um sogenannte Newton-Koeffizienten zu bestimmen. Die kann man nutzen, um mit dem Newton-Horner-Schema das Interpolationspolynom effizient auswerten zu können. Man kann also schnell weitere Funktionswerte berechnen, ohne sich die Mühe zu machen, die Funktionsvorschrift explizit zu bestimmen. Auch diese Verfahren lassen sich gut in Code implementieren.
     
    Ferner lernt man:
    - Interpolation nach Aitken-Neville
    - nach de Casteljau
    - interpolierende Subdivision nach Dubuc
    - und schließlich approximierende Subdivision nach Chaikin
     
    In diesem Kursabschnitt werden auch Bernstein-Grundpolynome wichtig, die in Mathe2 noch nicht klausurrelevant waren. Für Mathe3 muss man die unbedingt drauf haben.
     
    Den zweiten Teil des Grafik-Kapitels bilden Verfahren der Interpolation über Rechtecken und Dreiecken, die in der 3D-Grafik zum Einsatz kommen können. Hier geht es auch um Verfahren zur Schattierung, z.B. um die Gouraud oder die Phong-Schattierung. Dieser recht interessante Teil ist nicht relevant für die Präsenzklausur, kann aber in der Online-Klausur drankommen.
     
    Ich vermute, die Einschränkungen des Stoffes haben auch damit zu tun, dass viele der Verfahren eine hohe Zahl einfacher Rechenschritte erfordern. Dies gilt umso mehr für Verfahren, die mit linearer Algebra zu tun haben, weil man da mit Matrizen hantiert. Würde man so etwas in der Präsenzklausur machen, könnte man in der Zeit nur wenige Aufgaben stellen und nur wenig Stoff abprüfen. Das merkt man, wenn man die Einsendeaufgaben zu diesem Kapitel bearbeitet. Da hat man es zum Teil Gleichungen zu tun, die sich über viele Zeilen erstrecken. Das ist zeitaufwendig, die Schritt für Schritt umzuformen. Und man braucht viel Konzentration, um keinen Flüchtigkeitsfehler zu machen.
     
    Teil 3 - Kryptik
     
    Kryptik ist der letzte Teil des Kurses. Hier geht es um mathematische Grundlagen für Verschlüsselung und Schlüsseltausch. Diesen Teil kann ich nicht so detailliert beschreiben. Der Stoff war nicht unbedingt schwierig aber sehr fremdartig und neu. Man benutzt Primzahlen und ihre sogenannten Restklassenkörper. Außerdem beschäftigt man sich mit sogeannten Galois-Feldern. Die bestehen aus Polynomen, die lediglich 0 und 1 als Koeffizienten aufweisen und sich daher gut als Bitfolge darstellen lassen. Man lernt Addition und Multiplikation neu und wendet nun diese neuen Kenntnisse an, um im Restklassenkörper oder in Galois-Feldern z.B. Determinanten oder inverse Matrizen zu berechnen, Gleichungssysteme zu lösen und so weiter. Nichts davon ist wirklich schwierig, aber das Kapitel war trotzdem eine Herausforderung, weil man beim Rechnen leicht vergisst, dass man es nicht mit normalen Zahlen zu tun hat, auch wenn es so aussieht. Da schleichen sich leicht Fehler ein.
     
    Eine weitere Schwierigkeit ist, dass man zu Beginn nicht begreift, was das alles denn mit Verschlüsselung zu tun haben könnte. Man ist schon fast am Ende des Kapitels, wenn auf wenigen Seiten das Diffie-Hellman-Verfahren und das Vernam-Verfahren, AES, DES und RSA erklärt werden. Und auf einmal passt alles zusammen und man versteht den Sinn des ganzen. Hier lohnt es sich also wieder einmal, am Ball zu bleiben und sich erst mal die nötigen Grundlagen zu erarbeiten. Natürlich hätte ich mir gewünscht, gleich zu Beginn erklärt zu bekommen, wozu ich das Rechnen im Galois-Feld lernen soll. Aber man kann das "wozu" wohl erst verstehen, wenn man die Grundlagen beherrscht.
     
    Nach Mathe2 wird es leichter
     
    Im Vergleich zu Mathe2 war Mathe3 leichter. Weil es um recht praktische Verfahren geht, mit denen man etwas berechnen oder nähern kann. Weil diese Verfahren sich gut in Code überführen lassen. Weil man sich gut vorstellen kann, dass es für diese Verfahren Anwendungen gibt, auch wenn man die wahrscheinlich später nicht selbst in Code implementieren wird. Weil man für vieles, was hier geschieht, auch gute graphische Veranschaulichungen finden kann.
     
    Im Online-Test kann wieder alles drankommen. Meiner Meinung nach, bereitet man sich auf den Online-Test am besten vor, indem man die Tests des Moduls intensiv wiederholt. Auch in der Online-Klausur kann alles drankommen. Die Aufgaben werden anscheinend vom Zufallsgenerator ausgewählt. Ich hatte fast nur Aufgaben aus dem Kapitel Grafik und ein bisschen Kryptik. Und es war vor allem Stoff, der in der Präsenzklausur NICHT vorkommen sollte. Wer also in den Genuss von Bonuspunkten kommen möchte, muss zuschauen, dass er sich den ganzen Stoff erarbeitet. Zumindest muss man sich soweit auskennen, dass man im Online-Test die 70% holen kann, die man für die Klausurzulassung braucht.
     
    Die Betreuung durch Herrn Lenze war wieder einmal hervorragend. Sehr schnelle Rückmeldungen, gute Hinweise zur Prüfungsvorbereitung.
     
    In der Präsenzklausur war der Stoff sehr gleichmäßig über die drei Kapitel verteilt. Man darf keinen Taschenrechner benutzen. Es ist trotzdem schaffbar, weil die Werte so gewählt sind, dass sie sich gut für Handrechnung eigenen. Das Problem ist wieder einmal der Faktor Zeit. Man darf das Lehrbuch und sogar gerechnete Einsendeaufgaben mitnehmen. Aber das nützt nur bedingt, weil man die Aufgaben in der Zeit nicht schaffen wird, wenn man ständig nachschlagen muss. Es muss schon ein Grundstock Wissen im Kopf sein, dann kann ein gelegentlicher Blick ins Buch bestätigen, dass man sich an diese oder jene Formel richtig erinnert.
     
    Auch in Mathe3 habe ich noch kein Ergebnis, bin aber zuversichtlich, dass ich diese Klausur nicht nochmal schreiben muss.
     
    Nachtrag: Ergebnis
     
    Nach nicht einmal 2 Wochen habe ich für Mathe3 schon ein Prüfungsergebnis. Es ist ziemlich gut gelaufen. Die gründliche Vorbereitung hat sich gelohnt.
     
    Für diese Klausur habe ich im Urlaub oft bei brütender Hitze Übungsaufgaben gerechnet, während meine Familie sich im Pool verlustiert hat. Und sich gewundert hat, wie ich mich dazu überwinden konnte, im Urlaub und bei so schönem Wetter zu lernen. Nun freue ich mich sehr. Es ist schön, zu erleben, wie man innere Fortschritte macht. Wie sich Mühe auszahlt, weil man plötzlich Dinge begreift, die einem anfangs so schwierig erschienen. Es ist aber auch schön, wenn diese innere Entwicklung sich am Ende als äußerer Erfolg manifestiert. Das motiviert mich gerade im Fernstudium, wo es ja keinen äußeren sozialen Rahmen gibt, der mich trägt.
  7. kurtchen
    Das Modul "Mathematik für Informatiker" ist das zweite von insgesamt 4 Mathematik-Modulen im Studiengang "Web- und Medieninformatik". Die Studierenden im Studiengang "Wirtschaftsinformatik" belegen ein Mathematik-Modul weniger. Aber dieses Modul ist auch für sie verpflichtend. Im Jargon der Studierenden heißt dieses Modul einfach Mathe2.
     
    Nachdem in Mathe1 mit Logik, Mengenlehre, Relationen, Graphentheorie, Abbildungen und algebraischen Strukturen eine mathematische Grundlage vermittelt wurde, geht es in diesem Kurs um die klassischen Themen Analysis und Lineare Algebra, die wohl Teil von jedes Informatik-Studiums sein dürften. Dazu verwendet der Kurs zwei Lehrbücher von Professor Burkhard Lenze (FH Dortmund). Das Modul zerfällt in zwei Online-Kurse. Das heißt, man muss hier zwei Online-Tests bestehen und darf zwei Online-Klausuren schreiben. In der Präsenzprüfung wird das Wissen beider Kurse mit ziemlich gleicher Gewichtung abgeprüft.
     
    Keine Angst vor Mathe2
     
    Wenn ich mich unter meinen Kommillitonen umhöre, gewinne ich den Eindruck, dass speziell dieses Modul den meisten Studierenden Sorgen bereitet. Im Vorfeld ist Mathe2 ein Modul, vor dem viele Angst haben. Diejenigen, die es gerade belegen, klagen oft darüber, dass sie hier viel mehr Zeit investieren als in andere Module. Und diejenigen, die es hinter sich haben, sind in der Regel erleichtert, es geschafft zu haben. Aus Sicht vieler Studierender und mancher Dozenten sollte man Mathe2 zügig angehen, weil das Projekt Studium an genau diesem Modul scheitern könnte.
     
    Die gute Nachricht: Mathe2 ist machbar. Die beiden Lehrbücher von Herr Lenze sind recht kompakt geschrieben, enthalten aber im Vergleich zu vielen anderen Lehrbüchern nicht allein Beweise sondern viele gerechnete Beispiele. Mathe2 ist ein Kurs auf FH-Niveau. Im Gegensatz zur Mathematik an der Uni geht es nicht allein um Beweise sondern um angewendungsbezogenes Rechnen. Mathe2 legt damit eine Grundlage für Mathe3 "Angewandte Mathematik". Wie der Name vermuten lässt, ist speziell Mathe3 für einen Mathe-Kurs schon wieder recht praxisbezogen und ein klarer Bezug zur Informatik ist erkennbar. Also beißt euch durch Mathe2. Danach wird es schon wieder besser.
     
    Nutzt das Tutorium am Präsenztag
     
    Die W3L unterstützt die Studierenden in diesem Modul mit einem Tutorium, dass an den Präsenztagen angeboten wird. Ich habe mich im Vorfeld gefragt, was es denn nutzen kann, wenn in zwei mal zwei Stunden der Stoff von Analysis und linearer Algebra im Schweinsgalopp durchlaufen wird. Nachdem ich an solch einem Tutorium teilgenommen habe, weiß ich, es bringt etwas. Nicht weil man in dieser knappen Zeit den Stoff vermitteln könnte. Das kann man nicht. Den wird man sich schon selbst gründlich erarbeiten müssen. Schon eher, weil die Studierenden dazu aufgefordert werden, ihre Probleme mitzubringen, die sich bei der Bearbeitung des Moduls ergeben haben. Die Tutoren gehen flexibel darauf ein. Leider wurde diese Möglichkeit in dem Tutorium, das ich besucht habe, kaum genutzt. Ich selber konnte sie nicht nutzen, weil ich noch gar nicht angefangen hatte, das Modul zu bearbeiten. Ich vermute, dass es anderen Studierenden ebenso ging. Ideal wäre natürlich, wenn man vor dem Präsenztag ein gutes Stück aus beiden Themenbereichen bearbeitet hätte, um sich dann gezielt bei seinen Problemen weiterhelfen zu lassen.
     
    Warum hat mir das Tutorium trotzdem eine Menge gebracht? Weil wir gute Tipps bekommen haben, wie wir unseren Lernprozess und - in Mathe2 noch wichtiger - unseren Übungsprozess organisieren können. Für Menschen, die mathematisch sehr begabt sind, mag es reichen, Konzepte verstanden zu haben. Die meisten von uns müssen üben, üben, üben. Und merken erst dann, wie viel (oder wie wenig) sie verstanden haben.
     
    Außerdem wurde uns auch ein wenig "Klausurstrategie" vermittelt. Wie denkt ein Prüfer, der checken möchte, ob wir etwas verstanden haben. Wie kann man sich zumindest einen Grundstock an Punkten sichern, auch wenn man nicht den gesamten Stoff im Schlaf beherrscht. Für viele Studierende, die in diesem Modul keine Glanzleistung vollbringen sondern einfach bestehen möchten, können solche Tipps sehr nützlich sein.
     
    Last but not least erhält man Hinweise, welche Teile der Schulmathematik, die nicht explizit im Kurs behandelt werden, man sich besser noch einmal anschauen sollte. Ich hätte zum Beispiel Stein und Bein geschworen, dass ich natürlich in der Lage bin, quadratische Gleichungen mit der pq-Formel zu lösen. Und das mir selbstverständlich alle wichtigen Potenz-, Wurzel- und Logarithmengesetze bekannt sind. Bis ich es praktisch ausprobiert habe und feststellen musste: So richtig sicher sitzt das nicht mehr. Besser noch mal ÜBEN.
     
    Mathe2: Die Inhalte
     
    Um diese Selbsterkenntnis reicher begann ich nun nach dem Tutorium mit der Bearbeitung des Moduls, für das ich deutlich mehr Zeit eingeplant hatte, als für andere Module. Es wird empfohlen, erst Analysis und dann lineare Algebra zu bearbeiten. Ich habe mit linearer Algebra angefangen, weil mir da mein Schulwissen aus Abiturzeiten noch geläufiger erschien und ich einen guten Start erleben wollte. Darum geht's in linearer Algebra:
    - Vektoren: Rechenregeln, lineare Unabhängigkeit, Skalarprodukt, Vektorprodukt Spatprodukt, die Cauchy-Schwarzsche Ungleichung und die Dreiecksungleichung.
    - Matrizen: Rechenregeln, Matrizenmultiplikation und einfacher Gauß-Algorithmus.
    - Determinanten: 2,2-Determinanten, 3,3-Determinaten und die Regel von Sarrus, n,n-Determinanten und der Laplacesche Entwicklungssatz. Geometrische Anwendungen spielen eine Rolle.
    - Allgemeine lineare Gleichungssysteme: Die lösen wir vor allem mit dem Gauß-Algorithmus. Wir unterscheiden homogene und inhomogene lineare Gleichungssysteme und lernen was Fundamentalsysteme sind.
    - Reguläre lineare Gleichungssysteme: Hier entwickeln wir den einfachen Gauß-Algorithmus weiter zum vollständigen Gauß-Algorithmus. Den sollte man für die Klausur im Schlaf können. Er ist für alle möglichen Anwendungen sehr nützlich. Weiterhin geht es um die Cramersche Regel und die erweiterte Cramersche Regel. Sie verbindet das Kapitel über Determinanten mit diesem Kapitel. Schließlich geht es um LR-Zerlegungen und QR-Zerlegungen. Und natürlich muss man wissen, wie man Matrizen invertiert. Und wie man all das nutzen kann, um lineare Gleichungssysteme effizient zu lösen.
    - Geraden und Ebenen: Hier kommen nun geometrische Anwendungsmöglichkeiten für das Wissen, das man sich bis hier aufgebaut hat.
    - Komplexe Zahlen: Darstellungsformen, Rechenregeln, Polynomfaktorisierung
    - Eigenwerte und Eigenvektoren
    - Spezielle quadratische Matrizen: Diagonalähnliche Matrizen, symmetrische und hermitesche Matrizen, orthogonale und unitäre Matrizen.
    - Transformationen: Hier geht es um verschiedene Abbildungen, die man mit Matrizen, realisieren kann. Man beginnt mit der kartesischen und baryzentrischen Transformation, arbeitet weiter mit Parallel- und Zentralprojektionen und endet irgendwann bei Fourier- und Haar-Wavelet-Transformationen.
     
    Und in Analysis geht es um:
    - Wiederholung der vollständigen Induktion
    - Funktionen: Neu sind hier die parametrisierten ebenen Kurven, die ganzrationalen und die gebrochenrationalen Bezierkurven. Die kannte ich aus Schulzeiten noch nicht. (An dieser Stelle ein Hinweise: Die Bezierkurven sind nicht klausurrelevant. Aber in Mathe3 spielen sie eine große Rolle. Darum diesen Teil NICHT überspringen.)
    - Folgen und Reihen: Hier geht es darum Grenzwerte für Folgen zu berechnen, was viele aus Schulzeiten kennen dürften. Und Konvergenzkriterien für Reihen anzuwenden, was schon schwieriger ist.
    - Transzendente Funktionen: Diese werden auf verschiedene Eigenschaften hin untersucht. Verschafft einem einen guten Überblick und frischt vieles vergessene aus Schulzeiten noch mal auf.
    - Rechenregeln für stetige Funktionen
    - Differenzierbare Funktionen: Hier geht es um Rechenregeln für differenzierbare Funktionen und deren Anwendung zur Extremwertbestimmung. Das kennen wohl die meisten aus der Schule. (Ferner geht es um kardinale kubische B-Splines, ganzrationale B-Spline-Kurven und gebrochenrationale B-Spline-Kurven. Zum Glück nicht klausurrelevant.)
    - Integrierbare Funktionen: Hauptsatz der Differential und Integralrechnung, Rechenregeln für integrierbare Funktionen, Längen-, Flächen- und Volumenberechnung. Eine Herausforderung für mich waren die Techniken der partiellen Integration und der Integration durch Substitution. Beides hatte ich in der Schule gelernt, aber leider wieder vergessen. Da war viel Übung nötig, um das wieder flüssig zu können.
     
    Diejenigen unter euch, deren Abitur noch nicht so lange her ist und die damals stark in Mathe waren, dürfen sich nun ein bisschen freuen. Ihr dürftet einige Themen wiedererkennen und habt einen Startvorteil.
     
    An manchen Stellen im Kurs gibt es kleine Anwendungsbeispiele aus der Informatik (in Java). Das ist interessant, aber nicht prüfungsrelevant.
     
    PDF-Tools: Die Geheimwaffe
     
    Die Beweise in den Lehrbüchern habe ich nicht immer nachvollziehen zu können. Die Stärke dieser Module sind aber nicht die Lehrbücher. Herr Lenze liefert PDF-Tools mit, die man sich runterladen kann. Ein PDF-Tool ist eine Seite mit einer Übungsaufgabe eines bestimmten Typs, z.B. invertieren einer Matrix, knacken eines Integrals und solche Dinge. Im PDF stehen aber keine konkreten Werte sondern eine allgemeine Formel mit verschiedenen Parametern. Ein Knopfdruck generiert dann die Werte und zeigt sie in einer Alert-Box: a=7.4, b=sin(33), c=ln(9) usw. Diese Parameter setzt man für die Variablen ein und hat nun seine konkrete Übungsaufgabe. Ist man fertig, kann man durch Druck auf einen weiteren Knopf die Lösung sehen. Manchmal werden hier auch noch Zwischenergebnisse angezeigt, so dass man nachvollziehen kann, wo es gehakt hat. Mit diesen Tools kann man üben, bis man merkt, dass man richtig sicher ist. Herr Lenze empfiehlt, wirklich auf Tempo zu üben, denn in der Klausur muss man schnell sein.
     
    Übrigens: In der Klausur darf man keinen Taschenrechner benutzen. Das hat mich überrascht, weil ich es aus Schulzeiten anders kannte. Die Werte in den Aufgaben sind so gewählt, dass man auch keinen braucht. Aber wer schon ewig nicht mehr im Kopf oder mit Stift und Papier gerechnet hat, sollte das üben. Also: PDF-Tool öffen, Aufgaben generieren, Bleistift spitzen und los. Ich habe mich oft geärgert, weil ich einen Aufgabentyp grundsätzlich konnte, aber blöde Vorzeichenfehler gemacht habe. Gerade bei den Aufgaben in der linearen Algebra ziehen sich Fehler schön durch. Da muss man eine gewisse Sorgfalt lernen.
     
    Die Hinweise im Forum nutzen
     
    Damit komme ich zu einen wichtigen Grund, warum jeder Studierende eine realistische Chance hat, dieses Modul erfolgreich abzuschließen. Für die Präsenzklausur ist NICHT der gesamte Stoff des Moduls relevant. Ein Beispiel: In der Präsenzklausur kann verlangt werden, die LR-Zerlegung einer Matrix zu finden, aber nicht die QR-Zerlegung. Was genau klausurrelevant ist und was nicht, veröffentlicht Herr Lenze im Forum zum Kurs. Da in den Foren oft wenig los ist, hatte ich dort anfangs gar nicht reingeschaut, bis mich Herr Lenze, ausdrücklich darauf hinwies. Also schaut ins Forum und nutzt die dort gegebenen Hinweise.
     
    Aber Vorsicht! In der Online-Klausur können mehr Themen drankommen. Und beim Online-Test, dessen Bestehen ja Voraussetzung dafür ist, überhaupt zur Klausur zugelassen zu werden, kann ALLES abgeprüft werden. Wer sich also möglichst viele Bonuspunkte erarbeiten will, um etwas gelassener in die Präsenzklausur zu gehen, der muss sich schon mit dem gesamten Stoff auseinander setzen. Wer einfach nur bestehen möchte, kann zuschauen, dass er für die Klausur die im Forum genannten Themen intensiv vorbereitet. Er hat dann auch ohne Bonuspunktepolster eine gute Chance, das Modul abzuschließen.
     
    Die Betreuung durch Herrn Lenze war sehr gut. Das Feedback zu Einsendeaufgaben war unheimlich schnell. Auch auf Fragen reagierte er meist innerhalb von 24 Stunden und seine Hinweise haben mir immer weitergeholfen.
     
    Die Klausur
     
    In der Präsenzklausur entfielen 55 Punkte auf lineare Algebra und 45 auf Analysis. Wenn man den vollständigen Gauß-Algorithmus sicher beherrscht, kann man sich in linearer Algebra eine gewisse Punktegrundlage erarbeiten, weil man den für verschiedene Aufgabentypen braucht. Aus Gesprächen mit anderen Kommilitonen weiß ich, dass das auch in vergangenen Klausuren oft so war. In der Analysis waren bei mir die Themen breit gestreut. Partielle Integration und Integration durch Substitution sollte man üben.
     
    Tipps für die Vorbereitung
     
    Da Mathe2 für viele Studierende ein Angstfach ist, zum Schluss noch ein paar Tipps:
    - Lasst euch nicht verunsichern, wenn ihr in den Lehrbüchern nicht jeden Beweis im Detail nachvollziehen könnt. Konzentriert euch auf das Üben mit den PDF-Tools.
    - Es gibt im Kurs vergleichsweise wenige Einsendeaufgaben. Manche Studierende machen nur diese Aufgaben und wundern sich dann, wenn sie im ersten Anlauf durch die Prüfung rasseln. So ist es nicht gedacht. Die Einsendeaufgaben prüfen in Abständen, ob man im Kurs vorankommt. Sie ersetzen auf keinen Fall das Üben mit den Tools, die den gesamten Stoff abdecken.
    - Übt die PDF-Aufgaben ohne Taschenrechner, auch wenn es verführerisch ist, ihn zu benutzen. Nur dann bekommt ihr ein Gefühl dafür, wieviel ihr in der Klausur in welcher Zeit schaffen könnt. Es ist gut möglich, dass ihr eine taktische Entscheidung treffen müsst, ob ihr in der verbliebenen Zeit noch diese ohne jene Aufgabe versuchen wollt. Da braucht ihr ein Bauchgefühl dafür, was lange dauert und was schneller zu schaffen ist.
    - Ich habe verschiedene Tools genutzt, die nicht zum Kurs gehörten. Zunächst mal einen Funktionenplotter. Die gibt es als Desktopanwendungen, aber ich habe mit einer Online-Version gearbeitet. Da kann man eine Funktionsvorschrift eingeben, sich die Kurve plotten lassen, auch Ableitungen und Integrale. Das kann natürlich nicht das eigene Arbeiten ersetzen. Aber man kann so gut vergleichen, ob die eigenen Ableitungen und Integrale stimmen. Oder Teillösungen. Oder eine Idee entwicklen, was man falsch gemacht hat.
    - Außerdem gibt es Online-Tools, um Funktionen zu differenzieren und integrieren. Manche von denen können einem einen kompletten Rechenweg anzeigen. Das hilft ebenfalls, eigene Fehler nachzuvollziehen. Mir hat das sehr geholfen, bei der partiellen Integration und der Integration durch Substitution, eine gewisse Routine zu entwickeln. Bei der partiellen Integration muss man sich entscheiden: Was ist mein u? was ist mein v? Wenn man sich hier falsch entscheidet, muss man wieder von vorne anfangen, was Zeit kostet. Ebenso bei der Substitution: Was substituiere ich? Und überhaupt: Substituiere ich oder nutze ich partielle Integration? Bei manchen Aufgaben sieht man nicht sofort, was sich anbietet. Dafür bekommt man ein Gefühl, wenn man viele Beispiele gesehen hat. Und dabei helfen solche Online-Tools. Aber nicht das Tool die ganze Arbeit machen lassen, sondern aktiv mitarbeiten, möglichst viel selber machen und dann Schritt für Schritt durchgehen, wo es gehakt hat.
    - Ebenso gibt es tolle Online-Tools für die Themen der linearen Algebra. Das hat mir besonders beim Lösen von Gleichungssystemen und umfangreicheren Rechnungen mit Matrizen und Determinanten geholfen. Hier hat man oft sehr viele einfache Rechenoperationen, die aufeinander aufbauen. Ein dummer Vorzeichenfehler am Anfang und man produziert in der Folge nur noch Mist. Dank der Tools konnte ich meine eigenen Fehlerquellen identifizieren (bei mir vor allem Vorzeichenwechsel) und dann genau darauf verstärkt achten.
    - Laut Studienbüro liegt die Durchfallquote in diesem Modul beim ersten Anlauf bei 20-25%. Man sollte sich nicht entmutigen lassen, wenn man dazu gehört. Ich habe mehrere Kommillitonen kennengelernt, die Mathe-Module wiederholen mussten und in zweiten Anlauf geschafft haben, was beim ersten mal nicht klappte.
     
    Fazit
     
    Die lineare Algebra hat mir richtig Spaß gemacht. Analysis musste sein, aber da bin ich froh, dass es jetzt vorbei ist. Ich habe noch nicht das Ergebnis der Klausur, aber ich bin mir ziemlich sicher, dass ich sie nicht noch einmal schreiben muss. Mathe2 ist machbar.
     
    Nachtrag: Das Ergebnis
     
    Heute habe ich das Ergebnis zu Mathe2 erhalten. 88 von 100 Punkten in der Präsenzklausur. Das wäre eine 1,7, aber da die Online-Tests und die Online-Klausuren ziemlich gut gelaufen waren, konnte ich mit Bonuspunkten über die magische Schwelle von 95 Punkten kommen. So ist es am Ende eine glatte 1 geworden. Ich freue mich sehr, weil ich in Mathe2 wirklich eine Menge Arbeit gesteckt habe.
     
    Bloß nicht aufgeben in Mathe! Das war auch an den Präsenztagen immer wieder Thema: Es gibt zwar nur wenige Leute, denen Mathe auf Anhieb leicht fällt. Aber mit Übung wird vieles erreichbar, was am Anfang unmöglich erscheint. Also packt's an!
  8. kurtchen
    Am Präsenztag der W3L Akademie am 24.09.2016 informierte Dr. Olaf Zwintzscher aus dem Vorstand der W3L AG über die bevorstehende Übernahme der W3L Akademie durch Springer Campus. Als Studierender im Studiengang Web- und Medieninformatik habe ich am Präsenztag teilgenommen. Ich habe mich bemüht, seine Ausführungen zu protokollieren, um sie an dieser Stelle zu teilen.
     
    Laut Herrn Zwintzscher unterliegt der Fernstudienmarkt in Deutschland einer starken Konkurrenz. Es gibt Player, die breiter als die W3L aufgestellt sind. Die W3L Akademie bietet bislang nur 2 Studiengänge an - Web- und Medieninformatik sowie Wirtschaftsinformatik. Andere Anbieter können ein deutlich breiteres Angebot machen, haben insgesamt mehr Studierende und ein größeres Finanzvolumen. Damit haben Sie auch die Möglichkeit, Werbung im öffentlichen Raum zu platzieren, z.B. auf U-Bahnen, Plakatwänden, in Zeitschriften. So etwas wäre für die W3L Akademie zu teuer. Da sie eine kleinere Zielgruppe anspricht, wäre es auch ineffektiv. Im Marketing der eigenen Studiengänge kann die W3L mit größeren Anbietern nicht mithalten.
     
    Aus diesem Grunde war die W3L schon längere Zeit auf die Suche nach Kooperationspartnern. Dabei hoffte man zunächst auf Firmen, die Angebote der W3L für die Weiterbildung ihrer Mitarbeiter nutzen wollten. Nachdem dies nicht aufging, suchte man auch nach Partnern, die das bestehende Konzept weiterführen wollten.
     
    Es gab schon längere Zeit eine Zusammenarbeit zwischen der W3L Akademie und dem Springer Verlag. Zum Beispiel verlegt Springer die Lehrbücher zur Softwaretechnik von Herrn Balzert, der die W3L Akademie aufgebaut hat. Diese Lehrbücher werden auch in den Softwaretechnik-Modulen der W3L verwendet.
    Springer bietet mit Springer Campus eigene Fernstudiengänge in Biologie, Chemie und Elektrotechnik an. Sie fanden das Studienangebot der W3L gut, wollten aber keine Kooperation sondern kaufen.
     
    Die W3L hat sich entschieden, ihr Angebot an Springer Campus abzugeben, weil andere mögliche Partner das bestehende Konzept ändern wollten. Mit Springer soll das nicht passieren. Die Ansprechpartner für die Studierenden im Studienbüro bleiben die gleichen. Sie wechseln zu Springer Campus. Auch die Dozenten sollen die gleichen bleiben, was auch Herrn Zwintzscher selbst einschließt. Erhalten bleiben soll ferner der Standort Dortmund.
     
    Springer Campus wird die bestehende Kooperation mit der FH Dortmund fortsetzen, die auch in Zukunft die Bachelor-Abschlüsse verleiht. Laut Herrn Zwintzscher war dies sowohl für die W3L als auch für Springer wichtig.
     
    Mit der Übernahme durch Springer verbinden sich verschiedene Hoffnungen:
    - Möglichkeiten für besseres Marketing, weil Springer größer ist als die mittelständische W3L.
    - Weil Springer in der Wirtschaft gut vernetzt ist, könnte es ihnen gelingen, Kooperationen mit Firmenkunden aufzubauen.
    - Mehr Studierende in den beiden Studiengängen.
    - Wenn dies aufginge, könnte es auch mehr Prüfungsstandorte geben.
    - Das Studienangebot könnte schließlich erweitert werden, z.B. um einen Masterstudiengang (sobald es genügend Bachelor-Absolventen gibt).
     
    Herr Zwintzscher glaubt ferner, dass Springer Campus größere unternehmerische Hürden nehmen kann als das mittelständige Unternehmen W3L. Die Sicherheit für die Studierenden sollte damit steigen.
     
    Ändern könnte sich in absehbarer Zeit die Lernplattform. Es ist möglich, dass Springer Campus auf Dauer nicht verschiedene Plattformen parallel betreiben sondern alle Inhalte in einer Plattform zusammenfassen möchte. Allerdings ist solch eine Migration aufwendig, weshalb die meisten Bestandsstudierenden das wahrscheinlich nicht mehr erleben werden.
     
    Soweit die Ausführungen von Herrn Zwintzscher zur bevorstehenden Übernahme der W3L Akademie durch Springer Campus.
  9. kurtchen
    Das Modul "Computernetze" wird der Fachgruppe "IT-Systeme" zugerechnet. Für Studierende im Studiengang "Web- und Medieninformatik" ist es Pflicht. Die angehenden Wirtschaftsinformatiker können es als Wahlpflichtmodul belegen. Formal betrachtet gibt es keine Teilnahmevoraussetzungen. Empfohlen wird ein grundlegendes Verständnis von IT-Systemen und Informationsarchitekturen.
     
    Meiner Meinung nach lässt sich ein solches Verständnis gut mit dem Modul "Rechnerstrukturen und Betriebssysteme" aufbauen. Dies sollte nach empfohlenem Studienplan im 1. Semester belegt werden. Computernetze ist dann schon für das 2. Semester vorgesehen. Ich finde die beiden Module ähneln einander. In beiden Fällen sieht das Lehrbuch recht dünn aus. Beim Durcharbeiten merkt man dann, dass es sehr komprimiert geschrieben ist. Jeder Satz hat es in sich. Man kommt also beim Bearbeiten langsamer voran als bei anderen Modulen, die auf den ersten Blick umfangreicher wirken.
     
    Der Stoff ist - wie bei Rechnerstrukturen - zunächst einmal recht trocken und formal. Man verbringt viel Zeit damit, z.B. den bitweisen Aufbau von Headern zu verstehen, ohne an diesem Punkt zu ahnen, wozu das gut sein wird. Man muss sich auch bei diesem Modul durch einige Kapitel beißen, die die nötigen Voraussetzungen für späteres Verständis schaffen. Das macht es manchmal schwierig, die Studienmotivation aufrecht zu erhalten. Der Stoff dieses Kurses ist im Vergleich zu anderen Modulen recht technisch und formal.
     
    Das verwendete Lehrbuch "Technische Grundlagen von Computernetzen" ist von Patrick-Benjamin Bök und Andreas Noack. Es hat ca. 270 Seiten, die aber recht eng bedruckt sind und auch die Schriftgröße ist etwas kleiner als bei der W3L üblich. Lasst euch also von der Seitenzahl nicht täuschen. Das ist kein Modul, das man nebenbei belegt. Das Buch enthält viele Abbildungen, häufig schematische Darstellungen des Aufbaus von Headern oder an Graphen erinnernde Darstellungen der Topologie von Netzen. Der inhaltliche Aufbau ist wie folgt:
    - (technische) Grundlagen
    - Kommunikation auf physikalischer Ebene
    - Kommunikation auf logischer Ebene
    - Kommunikation auf Anwendungsebene
    - Performance Engineering
     
    Die Grundidee ist also, sich von der Übertragung einzelner Bits (z.B. über einen Kupferdraht) Stufe für Stufe zu immer komplexeren Protokollen hochzuarbeiten, die aufeinander aufbauen oder präsizer ineinander geschachtelt sind wie Zwiebelschalen. So landet man am Ende bei Themen wie Voice-over-IP.
     
    Es gibt Lehrbücher, die den umgekehrten Weg gehen, also von den Protokollen höherer Stufen hinabsteigen zur Bitübertragungsschicht. Der Ansatz, den die Autoren gewählt haben, scheint der gängige zu sein. Er hat für mich auch gut funktioniert, weil man an jedem Punkt versteht, auf welchem Fundament man ruht. Der Nachteil dieses Ansatzes ist, dass man viel Stoff lernen muss, bevor man schließlich mit etwas zu tun bekommt, das man aus eigener Alltagserfahrung kennt, z.B. der Übetragung einer Webseite per HTTP oder einer E-Mail per IMAP.
     
    Ziemlich zu Beginn des Kurses werden zwei Referenzmodelle eingeführt, das ISO/OSI-Modell und das TCP/IP-Referenzmodell. An ihnen verdeutlicht man sich die schichtweise Struktur der aufeinander aufbauenden Protokolle. Diese Modelle tauchen im Verlauf des Kurses immer wieder auf, um zu zeigen, wo im Schichtenmodell der gerade behandelte Stoff angesiedelt ist. Dies ist nützlich, um bei der Auseinandersetzung mit den vielen technischen Einzelheiten nicht den Überblick zu verlieren: Worauf baut das aktuelle Thema auf? Und worauf läuft es hinaus? Gerade bei diesem Modul ist es leicht, den Kompass zu verlieren. Die wiederkehrenden Verweise auf das Schichtenmodell sollen dem vorbeugen. Für mich hat das gut funktioniert.
     
    Gleichwohl musste ich mich immer wieder damit abfinden, vieles zunächst einmal nur halb zu verstehen. Das Lehrbuch war so geschrieben, dass ich das WAS und das WIE meist gut nachvollziehen konnte. Aber das WOZU, das mir auch geholfen hätte, den Stoff für mich einzuordnen und mir besser zu merken, musste manchmal vorläufig im Dunkeln bleiben. Mein Eindruck ist: Das ist kein Versäumnis der Autoren sondern der Struktur des Stoffes geschuldet. Netze entwickelten sich über die Zeit, es wurden neue Protokolle auf vorhandene Protokolle aufgesetzt. Man muss also ein Stück weit diesen historischen Entwicklungsprozess nachvollziehen.
     
    Die Online-Tests waren zum Teil etwas spitzfindig formuliert, was mich aber zwang, den Stoff der einzelnen Wissensbausteine noch einmal genauer durchzuarbeiten. Die Aufgaben waren anders, als ich erwartet hatte. Kommilitonen, die eine frühere Version dieses Moduls belegt hatten, hatten mir berichtet, dass vor allem Wissen abgefragt würde. In der aktuellen Auflage des Kurses geht es eher darum, die gelernten Konzepte anzuwenden.
     
    Man sollte z.B. zeigen, wie mit dem Spanning Tree Protocol redundante Pfade aus einem vermaschten Netz entfernt werden, so dass eine Baumstruktur entsteht. Oder erklären, wie ein Routing-Algorithmus ausgehend von einer bestimmten Ausgangssituation Schritt für Schritt eine Routing-Tabelle aufbaut. Oder durchspielen, welche Pakete bei bestimmten Formen des Queuings in welcher Reihenfolge bedient werden. Bei den Aufgaben zur Verwaltung von IP-Adressen muss man auch immer wieder ein bisschen rechnen. Da ist es gut, wenn man im Umgang mit Dualzahlen und Hexadezimalzahlen noch recht fix ist.
     
    Bei diesem Kurs sind zur Klausur keinerlei Hilfsmittel zugelassen. Um die Fülle an Stoff in den Kopf zu bekommen, habe ich an die 150 eng beschriebene A4 Seiten eigene Notizen angefertigt. Vieles davon waren Diagramme zum Aufbau der vielen verschiedenen Header, wobei ich pro Bit ein Kästchen auf Karopapier verwendet habe. Diese Zeichnungen habe ich dann stark kommentiert. Außerdem habe ich viele Fragen niedergeschrieben, die sich mir beim Bearbeiten des Kurses stellten und die Antworten, die ich darauf gefunden habe, sauber ausformuliert. Meine Notizen sahen also auf manchen Seiten aus wie Sammlungen von Quizfragen. Schließlich habe ich viele Diagramme aus dem Kurs abgezeichnet, bei denen es vor allem um Kommunikationsflüsse und die dabei ausgetauschten Daten ging. Ich habe dabei bewusst von Hand gearbeitet, weil ich gehofft habe, den Stoff so gleichsam "in die Finger" zu bekommen.
     
    Mein Tutor war der Ansicht, bei diesem Kurs ginge es nicht um das Abfragen von Wissen. Es ginge um das Verständnis von Zusammenhängen; und die Fähigkeit, dieses Verständnis problemlösend anzuwenden. In der Klausur erwies das als einerseits richtig. Aber andererseits auch wieder nicht. Ja, es gab nur wenige Wissensfragen. Meistens musste man Wissen anwenden, zeigen, wie sich eine Situation entwickelt, wer, wann, was und in welcher Form an wen sendet, damit ein Paket den Weg von A nach B finden kann. Aber um solche Probleme lösen zu können, braucht man auch Wissen: Längen von Headern, ihren Aufbau, den genauen Ablauf wechselseitig gesendeter Botschaften. Es war schon vorteilhaft, eine Menge Fakten im Kopf zu haben. Hier hätte ich in der Präsenzklausur noch etwas mehr rausholen können. Müsste ich die Klausur noch einmal schreiben, dann würde ich mehr Fakten mit Karteikarten lernen. Man verstehe mich nicht falsch: Fakten zu lernen reicht auf keinen Fall, um diese Klausur zu bestehen. Aber es ist oft nötig, um mit der eigentlichen Arbeit beginnen zu können. Ich musste an vielen Stellen raten und war hinterher überrascht, dass ich oft richtig gelegen hatte.
     
    Erwähnen möchte ich noch die sehr intensive Betreuung durch meinen Tutor. Bei diesem Modul hatte ich viele Verständnisfragen und weiterführende Fragen. Die Antwort kam oft noch am gleichen Tag und hat mich eigentlich immer weiter gebracht.
     
    Für mich war das bislang die schwierigste Präsenzprüfung meines Studiums. Dank der Bonuspunkte aus Online-Test und Online-Klausur habe ich mit einem schönen Ergebnis abschließen können, auch wenn mein Punktwert aus der Klausur im Vergleich zu vielen anderen Modulen etwas schlechter ausgefallen ist. Ich habe mich aber hier besonders über das Ergebnis gefreut, weil ich das Gefühl hatte, mir hier wirklich etwas erarbeitet zu haben.
     
    Für Studierende, die nach diesem Modul noch mehr über Netze wissen wollen, gibt es ein aufbauendes Modul "Planung und Auslegung von Computernetzen", das man als Wahlpflichtmodul belegen kann.
     
    "Computernetze" wird als Grundlage für das Modul "IT-Sicherheit" empfohlen. Das ist das nächste von insgesamt 4 Modulen aus dem Studienbereich "IT-Systeme", das ich belegen möchte. Ein bisschen dauert das aber noch, denn als weitere Grundlage wird Mathe3 empfohlen, wo unter anderem kryptographische Basistechniken behandelt werden. Nun habe ich aber Mathe2 noch nicht bestanden. Die IT-Sicherheit muss also noch ein wenig warten.
     
    "Computernetze" war ein ordentliches Stück Arbeit. Ich bin froh, dass ich das geschafft habe.
  10. kurtchen
    Das Modul "Web-Design und Web-Ergonomie" ist für das 3. Semester vorgesehen. Die W3L hält es für wünschenswert, zuvor "Web-Programmierung" belegt zu haben. Formal nötig ist das aber nicht. Ich meine, man könnte dieses Modul auch gute als erstes im Fachbereich Web-Informatik belegen. Viele Kommilitonen halten es für vergleichsweise leicht zu bewältigen. Allerdings haben auch sehr viele Studierende beruflich mit Web-Technologien zu tun. Das relativiert diese Einschätzung natürlich.
     
    Basis ist ein Lehrbuch von Heide Balzert und Uwe Klug. Herr Klug hat auch die Lehrbücher zum Modul "SQL und realationale Datenbanken verfasst". Die fand ich didaktisch sehr gut aufgebaut und auch gut verständlich geschrieben, so dass ich mit der Erwartung in den Kurs ging, hier wieder gut durch den Stoff geführt zu werden. 
    Auch dieses Kursmodul entwickelt parallel zum Stoff ein Fallbeispiel: Die Gestaltung eines Web-Auftritts für einen Ökostromanbieter. Diesen Auftrag übernimmt die fiktive Firma Websoft, die mehrere Mitarbeiter hat, die sich in unterschiedlichen Berufsrollen an der Planung der Webseite beteiligen. Diesen Ansatz kannte ich schon aus anderen Modulen der W3L. Man bekommt so nicht nur  das Fachwissen vermittelt. Man entwickelt auch eine erste Vorstellung davon, wie es in einer Anwendungssituation genutzt wird. So wird deutlich, dass die Entwicklung einer Webseite in der Regel ein kollaborativer Prozess ist, in dem verschiedene Akteure in unterschiedlichen Rollen intensiv kommunizieren müssen, um ihr gemeinsames Ziel zu erreichen.
     
    Ich hatte mir vorgestellt, in diesem Modul in erster Linie etwas über Gestaltungsregeln zu erfahren. Was für Farben zusammenpassen, ein bisschen Typographie, wie man eine Seite aufteilt, so dass die Proportionen gefällig wirken. So etwas ist durchaus auch Thema dieses Moduls, aber eigentlich geht es um etwas anderes. Eine der hier vermittelten Thesen ist, dass man an der reinen Anmutung einer Seite nicht beurteilen kann, ob das Design etwas taugt. Man muss Webdesign im Hinblick auf die Ziele bewerten, die ein Kunde mit seinem Web-Auftritt verfolgt. An wen will er sich richten und wozu?
     
    Dementsprechend geht es in den ersten Kapiteln vor allem darum, sich Gedanken über die Nutzer einer Website oder eine Web-Anwendung zu machen. Was für Aufgaben haben die zu bewältigen und was für Vorkenntnisse und Erfahrungen bringen sie mit. Eine der ersten Aufgaben beinhaltet daher die Entwicklung einer "Persona", also eines fiktiven Charakters der einen typischen Nutzer oder eine Nutzergruppe der geplanten Web-Anwendung repräsentieren soll. Dieser Charakter soll so konkret beschrieben werden, dass ein Team, das eine Web-Anwendung plant, am Ende eine gemeinsame Vorstellung von diesem Menschen hat. Man entwickelt auch Kontextszenarien: Beschreibungen von Situationen, in denen die Persona eine Web-Anwendung nutzt, um ein bestimmtes Problem zu lösen. Und schließlich entwickelt man Nutzungsszenarien, kleinschrittigere Beschreibungen von Nutzungssituationen, bei denen einzelne Handlungsschritte des Nutzers beschrieben werden und wie das geplante System darauf reagiert.
     
    Auch wenn der Kurs "Web-Design und Web-Ergonomie" heißt, lassen sich meiner Meinung nach viele Konzepte z.B. auf Desktop-Anwendungen übertragen. Das Modul ist auch ein Kurs über Software-Ergonomie.
     
    Eine große Rolle spielen verschiedene Methoden, Entwürfe zu evaluieren oder Inhalte in einer Weise zu strukturieren und kategorisieren, wie sie für die Nutzer einer Web-Anwendung intuitiv und einleuchtend ist. Dabei kommt oft etwas anderes heraus als Fachleute, die Web-Anwendungen erstellen, für plausibel halten. 
    In diesem Kurs geht es also um mehr als den schönen Schein. Er hat mehr mit sozialen Prozessen zu tun, als ich im Vorfeld für möglich gehalten hätte. Auch mit den sozialen Prozessen in den Teams, die Web-Anwendungen entwickeln.
     
    Eine interessante Nebenwirkung des Moduls: Bei privater Internetnutzung merkte ich immer häufiger, dass mich bestimmte Aspekte des Designs einer Seite störten. Da war zuvor nur eine leichte Irritation. Oder vielleicht auch nur eine gewisse Unlust, eine Seite weiter zu nutzen. Oder auch ein spontaner Impuls, eine begonnene Aktion abzubrechen oder einen Tab zu schließen. Ich fing an, solche Reaktionen an mir wahrzunehmen. Oft habe ich mir dann gedacht: "Das hat mich schon länger gestört." Viel seltener aber immerhin immer häufiger dachte ich: "So wäre es wahrscheinlich besser gewesen." Natürlich kann man nicht erwarten, nach einem Modul von 5 ECTS ein Experte in UI-Design zu sein. Aber es trägt auf jeden Fall dazu bei, ein Problembewusstsein zu entwickeln und mit etwas anderen Augen auf Web- und Benutzeroberflächen zu schauen.
     
    Natürlich geht es auch um Layout, Navigation, um Farben und Typographie, um multimediale Elemente, um Formulargestaltung und ganz zum Schluss auch ein bisschen um barrierefreies Web-Design. Aber es gab auch Themen, die für mich überraschend waren, zum Beispiel über die Aufbereitung von Texten für das Lesen im Web. Und hier ist eben nicht die Schriftgestaltung oder das Layout gemeint. Es geht tatsächlich darum, dass es vorteilhaft ist, Texte für's Web anders zu formulieren und zu gliedern als für den Druck.
     
    Dies ist ein Modul über das WAS und nicht über das WIE einer Web-Anwendung. Dementsprechend habe ich für die Einsendeaufgaben vor allem Texte geschrieben und Entwürfe mit Papier und Bleistift gezeichnet. Die technische Umsetzung der Entwürfe z.B. mit HTML, CSS, client- und serverseitigen Sprachen ist nicht Thema dieses Kurses. Davon handeln andere Module.
     
    Insgesamt kam ich mit dem Modul gut zurecht und war auch mit meiner Note zufrieden. Die Rückmeldungen durch meinen Tutor kamen sehr zügig, was es mir erleichterte, schnell im Kurs voran zu kommen.
     
    "Web-Design und Web-Ergonomie" ist ein Modul für Web-Informatiker, nicht für Kommunikations-Designer. Es bleibt das einzige Modul im Studiengang, dass UI-Design so in den Mittelpunkt stellt. Gemessen an diesem Platz im Gesamtkonzept dieses Studiengangs finde ich es sehr gelungen. Leider befürchte ich, dass UI-Desing nicht meine Stärke werden wird. Ich finde es interessanter, was für eine Verarbeitungslogik im Hintergrund arbeitet. Insofern habe ich mich am Ende auch gefreut, mich wieder anderen Themen zuwenden zu können.
     
    Auf jeden Fall hat dieser Kurs meine Wertschätzung für das gesteigert, was ein guter Software-Ergonom leistet. Und es macht Spaß, wenn man im Alltag etwas wiedererkennt. Wenn man sich erinnert: "Hey, das kam doch im Modul Web-Design vor."
     
    Dieser Effekt des Moduls scheint nachhaltig zu sein.
  11. kurtchen
    Das Modul "Grundlagen der Informatik 4: Algorithmen und Datenstrukturen" ist Pflicht für Studierende im Studiengang Web- und Medieninformatik. Die Wirtschaftsinformatiker dürfen es als Wahlpflicht-Modul belegen. Die W3L schlägt vor, es im vierten Semester nach GdI3 zu belegen. Nötig sind aber nur die Kenntnisse aus GdI2. Konkret sollte man gute Grundkenntnisse in objektorientierter Programmierung und in generischer Programmierung haben. Letzteres, weil die meisten Algorithmen im Kurs für generische Typen entwickelt werden. Wer sich auf diesen Kurs ein wenig vorbereiten will, sollte vor allem noch einmal das Kapitel zu generischer Programmierung aus GdI2 wiederholen.
     
    Auf GdI4 hatte ich mich sehr gefreut, weil Kenntnisse im Bereich Algorithmen und Datenstrukturen zu meinem Bild von einem Informatiker gehören. Mathematik oder BWL sind Teil sehr vieler Studiengänge und viele Naturwissenschaftler und Ingenieure lernen programmieren. Aber Algorithmen sind für mich ein wesentlicher Teil dessen, was die Informatik als eigenständige Disziplin auszeichnet.
     
    Ein bisschen hatte ich mich schon einmal mit dem Thema beschäftigt. Zu Schulzeiten hatte ich mal ein Buch über Algorithmen und Datenstrukturen, die damals noch in einer strukturierten Programmiersprache behandelt wurden. Hier ging es zum Beispiel um Sortieralgorithmen, Binärbäume und verkettete Listen. Als Schüler habe ich leider vieles nicht verstanden, obwohl ich das Thema sehr spannend fand. Nun wollte ich herausfinden, ob mir diese Konzepte inzwischen zugänglicher waren.
     
    Schon im ersten Teil des Kurses gab es erste Überlegungen zur Korrektheit und Komplexität von Algorithmen. Überlegungen zur Komplexität bei wachsender Problemgröße ziehen sich durch den ganzen Kurs. Dies ist wichtig, um später für ein gegebenes Problem eine vorteilhafte Datenstruktur oder einen geeigneten Algorithmus auswählen zu können. Das zweite Kapitel handelte von Rekursion. Hier ging es darum, ein Verständnis dafür zu entwickeln, was beim rekursiven Methodenaufruf im Speicher passiert. Klassisches Fallbeispiel ist das Problem der Türme von Hanoi. Interessant war eine allgemeine Strategie, rekursive Algorithmen in iterative Algorithmen umzuwandeln. Oft ist der Algorithmus dann nicht mehr so übersichtlich und nachvollziehbar. Dafür verbessert sich die Laufzeit und der Speicherbedarf. Bis hier fand ich den Kurs noch recht trocken. Der Stoff war durchaus interessant aber nicht das, was ich erwartet hatte.
     
    Das änderte sich im nächsten Kapitel, wo es um Suchalgorithmen ging. Im wesentlichen wurden hier die drei grundlegenden Strategien sequentielle Suche, binäre Suche und Hashing-basierte Suche behandelt. Der Kurs entwickelt die Codebeispiele in Java, weil das an der W3L die Lehrsprache ist. Aber ich habe rasch den Eindruck gewonnen, dass es in diesem Kurs eben nicht um Java sondern um ein Verständnis der Algorithmen und Datenstrukturen ging. Auch wenn immer wieder darauf verwiesen wird, was die Java-Klassenbibliothek schon fix und fertig anbietet. Denn natürlich wird man selten selbst die Algorithmen und Datenstrukturen aus dem Kurs implementieren. In der Regel wird man Bibliotheken benutzen, die sie zur Verfügung stellen. Sinn des Kurses ist eher, das man versteht, was man da benutzt und was das für Implikationen hat. Das macht sich auch ein wenig bei den Einsendeaufgaben bemerkbar. Ich hätte erwartet, hier vor allem Algorithmen implementieren zu müssen. Tatsächlich wurden viele Implementierungen im Lehrbuch schrittweise entwickelt. Oft ging es eher darum, diesen Code in kleinen Problemstellungen zu benutzen, ihn zu erweitern, zu ergänzen oder zu modifizieren.
     
    Im nächsten Kapitel ging es um Sortierverfahren. Es zerfiel in zwei Teile. Im ersten Teil ging es um die sogenannten direkten Verfahren: - Sortieren durch direkte Auswahl
    - Sortieren durch direktes Einfügen
    - Sortieren durch direktes Austauschen
    Diese Verfahren sind leicht zu verstehen aber sie sind langsam. Im zweiten Teil werden diese einfachen Verfahren schrittweise verbessert. Aus dem langsamen BubbleSort wird so z.B. der sprichwörtlich schnelle QuickSort-Algorithmus. HeapSort, QuickSort, ShellSort und MergeSort sind schon etwas schwieriger zu verstehen als die direkten Verfahren. Auch hier ist die Implementierung in Code das geringste Problem. Wichtiger ist, zu begreifen, wie auf der Datenstruktur (in der Regel ein Array) gearbeitet wird, wieviele Vergleiche und Tauschoperationen für große n anfallen, warum ein Verfahren terminiert und so weiter. Eine wichtige Frage ist auch immer wieder die sogenannte Stabilität eines Verfahrens. Hierbei geht es darum, ob sich die Reihenfolge von Elementen mit gleichem Schlüssel im Laufe des Sortierens ändern kann, oder ob sie "stabil" bleibt. Bei diesem Kapitel bedauerte ich nur, dass der BucketSort-Algorithmus nicht ausführlich vorgestellt wurde.
     
    Im nächsten Kapitel ging es um Datenstrukturen. Hier wurden eigene Implementierungen von Feldlisten (ArrayList) und verketteten Listen, von Stapeln (Stack) und Schlangen (Queue), von Mengen (Set) und Abbildungen (Map) entwickelt. Hier wurden immer wieder Bezüge zu den Klassen hergestellt, die Java von Haus aus mitbringt. Es war für mich wirklich schön, zu begreifen, was ich bislang nur benutzt hatte, endlich zu verstehen, was "unter der Haube" passiert. Im Rest des Kapitels ging es um Bäume, um das Einfügen und Löschen in Bäumen und um ausgeglichene Bäume. Also darum, wie man Bäume reorganisieren kann, um zu verhindern, dass sie im schlimmsten Fall zur Liste entarten. Die verschiedenen Baumrotationen fand ich leider im Lehrbuch zu knapp erklärt, um sie nachvollziehen zu können. Zum Glück werden Algorithmen und Datenstrukturen in praktisch allen Informatik-Studiengängen gelehrt. Es war so kein Problem im Internet Skripte und Folien anderer Unis und FHs zu finden und da war dann schließlich auch eine Darstellung dabei, mit der auch ich gut zurechtkam.
     
    Bis hier war ich mit dem Modul sehr zufrieden. Mit diesem Themen war dann wohl auch der Grundstock dessen abgehandelt, was zu einer einführenden Lehrveranstaltung "Algorithmen und Datenstrukturen" gehört. Von hier aus hätte es in verschiedene Richtungen weitergehen können. Die Autoren dieses Modul haben sich dafür entschieden, Algorithmen auf Texten zu behandeln. Konkret ging es um den KMP und den Boyer-Moore-Algorithmus. Dieses Kapitel ist mir sehr schwer gefallen. Ich war zunächst mit der Darstellung des Stoffes unzufrieden. Meine Suche nach alternativem Material, das verständlicher aufbereitet ist, blieb leider erfolglos. Möglicherweise haben die Autoren also ihr bestes getan und ich hatte hier einfach nicht den richtigen Dreh raus. Ich verstand die Algorithmen schon, aber nach ein bis zwei Tagen war alles wieder weg, während ich mich an den Rest des Stoffes gut erinnerte. Zum Glück kamen die Algorithmen auf Texten in der Präsenzklausur nicht dran.
     
    Das letzte Kapitel handelte von kombinatorischen Algorithmen. Zunächst ging es um Backtracking. Damit kann man einige klassische Probleme lösen, zum Beispiel das Färben von Landkarten. Oder klassische Denksportaufgaben, die sich um das geschickte Positionieren von Springern oder Damen auf einem Schachbrett drehen. Schließlich wurde ein Constraint-Solver entwickelt. Dessen Funktionsweise konnte ich leider nicht in allen Details nachvollziehen, denn nun wurde es doch sehr komplex. Hier bewegt man sich schon in Richtung KI. Ich fand es irre spannend, dass dieses Thema im Kurs enthalten war, auch wenn es zum Glück nicht klausurrelevant war. Gerne hätte ich an dieser Stelle noch weiter gemacht, aber es passt eben nicht beliebig viel Stoff in ein Modul.
     
    Mein Tutor hatte in diesem Modul einen einfach zu begreifenden Arbeitsrhythmus. Korrekturen kamen am Samstag, ganz gleich, wieviel man die Woche über eingereicht hatte. Ich konnte mein Arbeitsverhalten gut daran anpassen. Hilfestellung bei Problemen gab es schneller. Interessant für mich: Während in GdI1 noch sehr viel Wert auf einen sehr sauber strukturierten und expliziten Code gelegt wurde, ermutigte mich mein Tutor in GdI4, meinen Code kompakter zu schreiben, mehr Operationen in einer Zeile zusammen zu fassen. Meine Programme wurden so kürzer, waren aber auch nicht mehr ganz so leicht leserlich. Man erinnere sich: Dieser Kurs ist fürs 4. Semester vorgesehen. Da traut man den Studierenden schon einen dichteren Programmierstil zu.
     
    Die Präsenzklausur lief für mich ziemlich gut. Anscheinend lag mir das Thema, denn ich konnte hier eines meiner besten Ergebnisse erzielen. In der Vorbereitung hatte ich mich auf die Grundkonzepte Suchalgorithmen, Sortierverfahren und Datenstrukturen konzentriert. Überraschend für mich: Java-Code musste ich nur wenig schreiben. Es wurde geprüft, ob man die Verfahren und Strukturen begriffen hatte, unabhängig von der Implementierung in einer bestimmten Programmiersprache. Ein Vorteil bei diesem Modul: Hier gibt es in der Regel ein eindeutiges "richtig" und "falsch", während es in anderen Modulen - nennen wir z.B. "Webdesign" - ein bisschen mehr Interpretationsspielräume gibt.
     
    Was ich gerne noch gelernt hätte:
    - Algorithmen zu Pfadsuche in Graphen
    - etwas über genetische Algorithmen
    - etwas über neuronale Netze
    Am liebsten wäre mir, die W3L würde ein eigenes Modul "Künstliche Intelligenz" anbieten. Aber vielleicht passt das nicht zum Profil eines Studiengangs "Web- und Medieninformatik".
     
    Im Kurs ist noch eine ganz knappe Einführung in die funktionale Sprache "Clojure" enthalten, letztlich ein Lisp-Dialekt auf der Java Virtual Machine. Auf dieses Kapitel war ich sehr neugierig, weil ich immer wieder höre, dass es sinnvoll ist, andere Programmierparadigmen kennen zu lernen. Nicht, um in exotischen Sprachen zu programmieren, sondern weil sich das Verständnis für Programmierung insgesamt entwickelt. Ich höre solche Aussagen einerseits mit einer gewissen Faszination und andererseits mit einer gewissen Skepsis. (Sie erinnern mich an die These, man müsse Latein lernen, weil man dann ... besser versteht/kann/lernt.) Jedenfalls wäre ich durchaus neugierig gewesen, eine lispoide Sprache zu lernen. Das Kapitel im Kurs GdI4 ist für diesen Zweck allerdings viel zu knapp. Ich verstehe also leider immer noch nicht, was genau den Reiz funktionaler Sprachen ausmacht. Gerne würde ich diesen Faden eines Tages wieder aufgreifen und zum Beispiel das legendäre "Structure and Interpretation of Computer Programs" von Abelson und Sussman durcharbeiten. Aber ich fürchte, während meines Fernstudiums werde ich die Zeit dazu nicht finden.
     
  12. kurtchen
    Nach dem für mich nicht so befriedigenden Modul "Webprogrammierung" wollte ich zügig zum Modul "Webanwendungen 1" übergehen. Da ich schon einmal einen Blick ins Lehrbuch geworfen hatte, erwartete ich, hier die gründliche Einführung in HTML und CSS zu erhalten, die ich im Vorgängermodul vermisst hatte. Außerdem behandelt "Web-Anwendungen 1" HTML5 und nicht XHTML wie noch in "Webprogrammierung". Mein oberflächlicher Eindruck war, dass ich dieses Modul viel lieber als erstes belegt hätte. Und so kam es auch.
     
    Weil ich von meiner Tutorin wusste, dass die Rückmeldungen zu den Aufgaben in den nächsten Wochen nicht in gewohnter Geschwindigkeit kommen würden, hatte ich für die Bearbeitung dieses Moduls etwas mehr Zeit eingeplant. Genauer gesagt bearbeitete ich es parallel zu GdI4 "Algorithmen und Datenstrukturen". Auf diese Weise kam ich im Studium insgesamt zügig voran, obwohl das Tempo im Modul niedriger war. Normalerweise bearbeite ich die Themen lieber schön nacheinander, aber in diesem Fall erwies es sich als gute Strategie. Ich war auch froh, dass mir meine Tutorin realistisch mitgeteilt hatte, dass es etwas länger dauern könnte. So konnte ich mich auf die Situation einstellen und entsprechend planen. (Von vielen Modulen bei der W3L bin ich auch etwas verwöhnt. Aktuell bearbeite ich zum Beispiel "Softwaretechnik 1". Da bekomme ich meine Einsendeaufgaben oft einen Tag nach Einsendung korrigiert zurück. Das ist schon irre schnell, vor allem wenn man sich klarmacht, dass die Tutoren ihre Tätigkeit nur zusätzlich ausüben.)
     
    Das Lehrbuch zu "Web-Anwendungen 1" hat an die 480 Seiten und behandelt in erster Linie HTML5, CSS und ein bisschen Javascript. Deutlich weniger Themen als im Vorgängermodul "Webprogrammierung". So bleibt mehr Zeit, in die Tiefe zu gehen. Ebenfalls angenehm: Am Fallbeispiel eines (zugegebenermaßen sehr einfachen) Web-Anzeigenmarktes werden die verschiedenen Konzepte aus dem Kurs in einer Anwendungssituation gezeigt.Im Fallbeispiel geht es nicht allein um das zu erstellende Produkt Webanzeigenmarkt sondern auch um die fiktive Firma, die ihn im Auftrag eines Kunden entwickelt. Und um die verschiedenen Berufsrollen in diesem Entwicklungsprozess und wie sie miteinander kooperieren. Das trägt sehr zum Verständnis bei. Solche Fallbeispiele kenne ich auch aus anderen Kursen der W3L, aber gerade in diesem Modul fand ich es sehr gelungen umgesetzt.
     
    In diesem Modul geht es um statische Webseiten. Erst in "Web-Anwendungen 2" geht es wieder darum, HTML-Code dynamisch zu erzeugen. Das Buch beginnt mit dem für die W3L üblichen Schnelleinstieg. Hier geht es um den Aufbau eines HTML5-Dokumentes, um das Anlegen von Links, das Einfügen von Bildern, die Verwendung von Formularen und Tabellen und um erste Schritte mit CSS. Alle diese Themen werden später im Buch in eigenen Kapiteln vertieft.
     
    Es gibt ein kurzes Kapitel zum HTTP-Protokoll, aber das wird detaillierter im Modul "Computernetze" behandelt und soll hier nur Hintergrundinformationen für die eigentlichen Kursinhalte liefern.
     
    Nun kommen 60 Seiten Einführung in HTML5. Hier merkte ich sowohl beim Durcharbeiten des Lehrbuches als auch beim Bearbeiten der Einsendeaufgaben: Es bleibt viel mehr hängen. Die Aufgaben waren auch weniger technisch und boten Möglichkeiten, ein bisschen kreativ zu sein. Themen hier sind z.B.:
    - Strukturelemente
    - Zeichensätze
    - Block- und Inline-Elemente
    - Hyperlinks
    - Einführung in Webserver
     
    Besonders interessant fand ich die Ausführungen zur Modellierung von Webseiten mit UML und die Hinweise zur systematischen Programmierung.
     
    Weiter ging es mit einem Kapitel zum Einbinden von Multimedia-Elementen in Webseiten, also Bilder, Audio und Video. Hier geht es auch um Grafik-, Audio- und Videoformate und um Link-sensitive Bilder.
     
    Im nächsten Kapitel ging es um CSS:
    - Trennung von Struktur und Präsentation
    - Stilregeln
    - Textgestaltung und Schrift
    - Farbe und Hintergrund
    - Textformatierung
    - und das Boxmodell
     
    Speziell beim Boxmodell empfehle ich, aufmerksam zu arbeiten, denn das ist etwas, dass sich in einer Klausur in knapper Form abprüfen lässt, ohne dass man viel Code schreiben muss.
     
    Zwischen den Kapiteln kommt der Lehrtext immer wieder auf das Fallbeispiel Webanzeigenmarkt zurück, dass mit den neuen Techniken erweitert und verfeinert wird. So erlebt man den neuen Stoff im Zusammenspiel mit bekannten Inhalten. Das finde ich wirklich didaktisch gut gemacht.
     
    Nun folgen zwei Kapitel zu Tabellen und Formularen. Insbesondere Formulare sind ja für die Interaktion mit den Nutzern einer Seite sehr wichtig. Hier gibt es inhaltliche Überschneidungen mit dem Modul "Web-Design und Web-Ergonomie", wobei es in "Web-Design" um Aufbau und Gestaltung von Formularen geht und in diesem Modul um die technische Umsetzung. Die Module wirken an dieser Stelle gut aufeinander abgestimmt. Auch Tabellen und Formulare werden ins Fallbeispiel Webanzeigenmarkt integriert.
     
    Im nächsten Kapitel geht es um Javascript. Mit "Webprogrammierung" im Hintergrund kam ich diesmal ganz gut zurecht, wenngleich der Stoff auch hier recht komprimiert vermittelt wurde. Ca. 25 Seiten mussten genügen.
     
    Das nächste Kapitel war das einzige im Buch, dass ich nicht so gelungen fand. Hier ging es um neue Features in HTML5, z.B. zur Validierung von Formularen, für Drag&Drop, um das Canvas-Element, um die lokale Speicherung von Web-Ressourcen und um sematische Auszeichnung. Hier war man bemüht, aktuelle Inhalte zu vermitteln. Beim Ausprobieren der Fallbeispiele erlebte ich, dass die Browser neue Elemente zum Teil sehr unterschiedlich darstellen, so dass man sich gut überlegen muss, was man davon in der Praxis verwenden möchte. Oft schienen Codebeispiele erst nicht zu funktionieren, bis ich sie in einem anderen Browser testete. Am besten liefen die Sachen noch im Firefox. (Ich verwende meist Chrome.) Der Grund, weshalb ich von diesem Kapitel nicht so begeistert war: Es fehlte der rote Faden, der sich sonst durch das ganze Lehrbuch zog. Eher war es eine bunte Sammlung von Themen, die in einer recht beliebig scheinenden Reihenfolge präsentiert wurden und zwischen denen es wenig inhaltliche Zusammenhänge gab. Das erinnerte ein wenig an den eher technischen Charakter des Vorgängermoduls "Webprogrammierung". Entsprechend war der Stoff dieses Kapitels auch nicht mit dem Fallbeispiel verknüpft.
     
    Das folgende Kapitel zu CSS war wiederum sehr gelungen. Hier ging es um:
    - Selektoren
    - Pseudoelemente und Pseudoklassen
    - um medienspezifische Präsentation, also um Seiten die z.B. auf einem Smartphone anders aussehen als auf einem Bildschirm
    - um den Elementfluss
     
    Wenn man hier gut aufpasste, konnte das schon als erster Einstieg in responsive Web-Design dienen, auch wenn das nicht explizit Thema des Moduls ist. Meine Tutorin hat mir hier ein sehr gutes weiterführendes Buch empfohlen und ich habe auch einige Aufgaben aus dem Modul nach diesem Kapitel neu bearbeitet, um z.B. Formulare so umzugestalten, dass sie auch auf einem Handydisplay gut zu bedienen sind. An diesem Punkt hatte ich das Gefühl, dass nun alle Kursinhalte schön ineinander greifen und ich die Dinge im Zusammenhang sehe. Ein befriedigender Abschluss.
     
    Das letzte Kapitel handelte von barrierefreiem Webdesign. Es ist aber zu kurz, um danach wirklich Ahnung vom Thema zu haben. Trotzdem finde ich es gut, dass es im Modul enthalten ist. Behörden müssen sich mit dem Thema auseinandersetzen. Firmen machen es seltener. Ich finde das Thema wichtig. Das Internet ist längst im Alltag unverzichtbar, aber man vergisst gerne, dass es viele Menschen gibt, die aufgrund von Einschränkungen Webseiten nicht so nutzen und betrachten können wie die meisten von uns. Aber auch diese Menschen brauchen die Informationen und Dienste, die das Web bereitstellt. In "Web-Design und Web-Ergonomie" taucht dieses Thema noch einmal auf. Leider auch dort in recht kompakter Form. Klar wird allerdings: Barrierefreiheit per se gibt es nicht. Barrierefrei ist eine Seite immer im Hinblick auf die Fähigkeiten und Möglichkeiten ihres Nutzers. Ein blinder Mensch hat zum Beispiel andere Bedürfnisse als jemand mit motorischen Einschränkungen.
     
    Die Einsendeaufgaben haben mir in diesem Modul viel Spaß gemacht und bauten zum Teil auch aufeinander auf. Die Rückmeldung kam zum Teil recht langsam, dann oft schubweise für mehrere Aufgaben, aber das war mir ja so angekündigt worden und ich hatte entsprechend geplant. Auch die Korrektur der Präsenzklausur ließ ein Weilchen länger auf sich warten. Dies mag aber auch den Sommerferien geschuldet gewesen sein.
     
    Die Präsenzklausur fand ich leider nicht so einfach, obwohl viele meiner Kommilitonen der Ansicht waren, im Falle von "Web-Anwendungen 1" sei sie ja besonders leicht. Viele meiner Mitstudierenden arbeiten als Web-Entwickler und haben täglich mit den Inhalten dieses Moduls zu tun. Solche Routine ist natürlich mit Pauken nicht zu ersetzen. Mein Problem war denn auch in erster Linie die Zeit, die ich für die Aufgaben brauchte. Hier ist es mir leider nicht gelungen, alles zu bearbeiten. Ein weiteres Problem war das Arbeiten mit Stift und Papier, ohne zwischendurch einmal sehen zu können, wie das nun im Browser dargestellt wurde. Ich hatte zwar auch für diese Klausur einige Aufgaben noch einmal von Hand bearbeitet, aber dieser Aspekt blieb für mich schwierig.
     
    So befürchtete ich denn, bei diesem Modul schlechter abzuschneiden als bei "Webprogrammierung". Das hätte mich sehr geärgert, weil ich das Gefühl hatte, diesmal den Stoff viel besser verstanden zu haben. Zum Glück hatte ich beim Abschlusstest und der Online-Klausur ziemlich gut abgeschnitten, so dass mir die Bonuspunkte halfen, ein paar Schwächen in der Präsenzklausur auszugleichen. Insgesamt endete es nicht schlechter als in "Webprogrammierung", so dass ich nicht nur mit dem Modul sondern auch mit dem Ergebnis zufrieden war.
     
    Anderen Studierenden im Studiengang Web- und Medieninformatik würde ich empfehlen, sowohl in "Webprogrammierung" als auch in "Web-Anwendungen 1" reinzuschnuppern. Und sich dann zu überlegen, ob sie "Web-Anwendungen 1" nicht entgegen der Empfehlung der W3L zuerst belegen möchten.
  13. kurtchen
    Nach Datenbanken, Mathe1 und SQL hatte ich richtig Lust, wieder einen Kurs mit Java zu belegen. Der nächste Kurs aus dieser Gruppe war "Grundlagen der Informatik 3: Anwendungen programmieren". Der Kurs deckt verschiedene Themen ab, die mit Anwendungsentwicklung zu tun haben. Aus meiner Sicht gibt es aber 3 inhaltliche Schwerpunkte:
    - GUI-Programmierung
    - Persistenz mit relationalen Datenbanksystemen
    - Erzeugung und Verarbeitung von XML-Dateien
     
    Der Kurs beginnt wie bei der W3L üblich mit einem Schnelleinstieg, der eine Art Überblick über die Themen des Kurses gibt. Bei GdI3 handelt dieser Schnelleinstieg aber nur von den GUI-Kapiteln, die auch mehr als die Hälfte des Kursumfangs ausmachen. Die GUI-Programmierung wird noch am Beispiel Swing behandelt, obwohl mit JavaFX ja ein aktuellerer Rahmen zur Verfügung steht. Das hat mich anfangs ein bisschen enttäuscht.
     
    Auf den ersten 40 Seiten lernt man das Grundgerüst einer Swing-Anwendung kennen; lernt, wie man ein Fenster durch Kompositon oder Vererbung erzeugt, macht erste Erfahrungen mit Event-Handling und lernt einfache Komponenten wie Textfelder und Buttons kennen. In diesem Zusammenhang muss man auch mit inneren Klassen und mit Lambda-Ausdrücken umgehen. Hier geht es zunächst gemächlich voran. Eine wichtige Rolle spielt stets die Darstellung der Zusammenhänge zwischen den Swing-Klassen durch Klassendiagramme in UML. Es geht in erster Linie um das Verstehen der Grundkonzepte. Für meinen Geschmack war es ein bisschen viel UML und ein bisschen wenig Code. Auch das Herumexperimentieren mit den Komponenten kam mir ein bisschen zu kurz. Hier musste ich mir selber zusätzliche Gelegenheiten suchen, das Gelernte durch kleine Experimente zu vertiefen. Auf das Buch, das ich ergänzend verwendet habe, verweise ich am Ende meines Beitrages.
     
    Es folgen 3 kürzere Kapitel über das Testen von GUIs, über GUI-Grafikeditoren und über Applets, die ja inzwischen keine so große Rolle mehr spielen. Da Applets am Anfang sehr wichtig für die Etablierung der Sprache Java waren, konnte man sie wohl nicht übergehen. Die Kapitel über Grafikeditoren sind nicht so umfangreich, dass man hinterher wirklich mit so einem Werkzeug umgehen könnte. Man weiß, dass es so etwas gibt und welche Vor- und Nachteile die Arbeit mit einem Editor haben kann. Ich habe die Aufgaben alle von Hand gecodet und ich glaube, so lernt man in diesem Stadium auch am meisten.
     
    Das Kapitel über Grafikprogrammierung fand ich nicht sehr zugänglich. Natürlich hätte man hier schnell zeigen können, wie man ein paar Linien und Formen zeichnet, aber die Intention war, zu vermitteln, was der Grafikontext ist und wozu man die Methode paint() überschreibt. Später im Kurs ist das einmal Grundlage dafür, Swing-Komponenten ein wenig zu erweitern und mit einer eigenen Optik auszustatten. Außerdem lernt man, wie man Grafiken lädt und anzeigt.
    Interessanter ist das Kapitel, das die Ereignisverarbeitung in Java im Detail behandelt. Hier lernt man das Beobachter-Muster kennen und begreift, wie Adapterklassen die Ereignisverarbeitung vereinfachen. Das Praxisbeispiel ist ein sehr einfacher UML-Editor.
     
    An diesem Punkt des Kurses begann mir zu dämmern, das GUI-Programmierung eine recht zeitaufwändige Angelegenheit sein kann. Man landet schnell bei ziemlich umfangreichem Code, der gar nicht mehr so leicht zu navigieren ist.
     
    Das für mich interessanteste Kapitel war "GUI-Gestaltung - Theorie und Praxis". Hier lernt man viele verschiedene Swing-Komponenten im Zusammenspiel kennen: Fenster, Menüs, Multifunktionsleisten, Listen, Dialoge und die unterschiedlichsten darin enthaltenen Interaktionselemente. Als Fallbeispiel dient eine Artikel- und Lieferantenverwaltung. Konzeptionell lernt man etwas über das MVC-Muster. Sehr interessant fand ich die Abschnitte, wie man auf der Grundlage der objektorientierten Analyse ein GUI konzipieren kann. Die hier vorgestellten Heuristiken sind für kaufmännisch-administrative Anwendungen gedacht, aber der Stoff war sehr aufschlussreich, weil einem klar wird, dass man nicht immer das Rad neu erfinden muss. Lohnend war auch der Abschnitt über Layout-Manager. Hier ging es zunächst um die Layout-Manager, die Swing von Haus aus mitbringt. Es brauchte eine Weile, bis ich das Konzept des schon recht flexiblen GridBag-Layoutmanagers verstanden hatte. Wirklich schwierig fand ich die Ausführungen zur Entwicklung eigener Layout-Manager. Hier konnte ich nicht in allen Punkten folgen.
     
    Nach einem kurzen Kapitel über modellgetriebene Entwicklung am Beispiel von Enterprise Architekt landete man beim zweiten großen inhaltlichen Block: Persistenz mit relationalen Datenbanken. Ich hatte mir vorgestellt, recht pragmatisch zu lernen, wie ich mit JDBC eine Verbindung zu einer relationalen Datenbank wie z.B. MySQL aufbaue. Darum ging es auch zunächst, aber eigentlich ging es vor allem um das DAO-Muster, das Fachkonzept und Datenbank schön entkoppelt, so dass man z.B. die verwendete Datenbank relativ leicht wechseln könnte, ohne Code in den Fachkonzeptklassen ändern zu müssen. Man arbeitet allein an der schlanken Schnittstelle. Das wird dann schon recht komplex und ich habe eine ganze Weile gebraucht, bis ich das Zusammenspiel der vielen verschiedenen Klassen begriffen habe. Der Clou an der Angelegenheit ist natürlich, dass nicht jeder Entwickler verstehen muss, was hier im Detail passiert. In der Regel wird interessieren was vor der Schnittstelle passiert. Diese Abschnitte waren für mich sehr lohnend, weil ich hier das Gefühl hatte, nicht allein etwas über Java zu lernen.
     
    Weniger gelungen fand ich den Abschnitt über die Java Persistence API. Hier ist es mir leider auch nicht gelungen, die Codebeispiele aus dem Kurs zum Laufen zu bringen.
     
    Es folgt ein kurzes Kapitel über Nebenläufigkeit. Das ist nötig, weil Swing nicht threadsicher ist. Wer in Java GUIs programmiert muss sich mit Nebenläufigkeit auseinander setzen. Hier lernt man aber nur das nötigste, denn es gibt ein eigenes Modul "Nicht-sequentielle Programmierung", in dem Nebenläufigkeit viel ausführlicher behandelt wird.
     
    Nun folgte ein umfangreiches Fallbeispiel "Auftragsverwaltung", bei dem die verschiedenen Abschnitte der Entwicklung vorgestellt wurden: Pflichtenheft und Glossar, OOA-Modell, GUI, Architektur und Komponenten, OOD des Fachkonzeptes, Persistenzschicht und natürlich auch die Ausprogramierung der entwickelten Modelle. An diesem Punkt möchte ich erwähnen, dass die Code-Beispiele in diesem Kurs viel umfangreicher sind als in GdI1 und GdI2. Anliegen des Kurses ist auch, dass der Lernende den Überblick über größere Mengen Code behalten kann. Die BlueJ-IDE aus den ersten beiden Modulen reicht hier nicht mehr aus. Die Studierenden sollen sich mit Eclipse vertraut machen. Die herunterladbaren Codebeispiele sind auch dafür aufbereitet. Ich mag Eclipse nicht und habe lieber mit Netbeans gearbeitet, was natürlich auch in Ordnung war, aber manchmal ein bisschen Mehrarbeit bedeutet hat. Bei vielen Aufgaben programmiert man nicht mehr "from scratch" sondern soll vorhandenen Code weiterentwickeln. Interessant waren auch Aufgaben, bei denen man Fehler aufspüren und beheben sollte. Dazu musste man erkunden, wie das Zusammenspiel vieler Klassen in unterschiedlichen Paketen funktioniert. Hier genügte oft wenig Code, um das Problem zu lösen, aber es kostete viel Zeit, zu verstehen, wo dieser Code hin musste, um seine Wirkung zu entfalten. Es verschaffte mir eine gewisse Befriedigung, mich in umfangreicheren Code einarbeiten zu können und mich dann auch darin zurecht zu finden. Den Abschluss dieses sehr aufschlussreichen Fallbeispiels bildeten 2 Abschnitte über Berechtigungssteuerung und Internationalisierung.
     
    Und nun begann der dritte größere inhaltiche Block des Kurses. Am Fallbeispiel der technischen Anwendung "Wetterstation" wurde die Verarbeitung von XML-Dateien behandelt. Die Wetterstation ist eine GUI-Anwendung, die sich Wetterdaten von einem Server holt und am Bildschirm in Form verschiedener Instrumente darstellt. Die Wetterdaten kommen im XML-Format und müssen geparst werden. Hier war ich froh, Webprogrammierung schon belegt zu haben, denn so hatte ich Vorkenntnisse in XML. Zwar gab es auch hier eine knappe Einführung in XML, aber allein damit wären mir diese Abschnitte schwer gefallen.
     
    Im letzten Kapitel wurde am Beispiel Othello (oder auch Reversi) ein Strategiespiel mit GUI entwickelt. Hier spielt Grafikprogramierung eine Rolle, aber eigentlich ging es um den Minimax-Algorithmus, der den besten Zug ermitteln sollte. Im Prinzip schon ein kleiner Vorgeschmack auf GdI4 "Algorithmen und Datenstrukturen".
    Für die Online-Klausur ist es nützlich, den Code der Übungen und Aufgaben griffbereit zu haben. Manche Aufgaben hätte ich in der zur Verfügung stehen Zeit nicht ausprogrammieren können, wäre mir nicht recht früh aufgefallen, dass ich Code aus vorangegangenen Übungen anpassen kann. Ich nehme an, dass war hier auch Zweck der Übung.
     
    Da man bei der GUI-Programmierung recht schnell bei umfangreichem Code landet, war ich natürlich sehr gespannt auf die Präsenzklausur. Wie wollte man den umfangreichen Inhalt in der kurzen Zeit abprüfen? Tatsächlich musste ich relativ wenig Code schreiben. Hier ging es um das Verständnis für die Zusammenhänge zwischen den verschiedenen Swing-Klassen und sehr allgemein um die objektorientierten Konzepte aus dem Modul. Sehr nützlich wäre es hier gewesen, noch einmal Stoff aus GdI2 zu wiederholen. In UML sollte man fit sein. Reines Programmieren genügte hier nicht.
     
    Ich hatte aber Glück und konnte das Modul mit einem schönen Ergebnis abschließen. Auch mit meinem Tutor hatte ich Glück. Er war derselbe wie in GdI2 und es war schön, in 2 aufeinanderfolgenden Modulen die auch noch inhaltlich eng zusammenhingen vom gleichen Tutor betreut zu werden. Von ihm habe ich nicht nur gute und schnelle Rückmeldungen zu meinen Aufgaben bekommen. Ich hatte auch immer wieder Fragen, die eher auf Nebengleise führten und gelegentlich bekam ich sehr interessante Anregungen. Das hat mal wieder Spaß gemacht.
     
    Anderen Studierenden, die GdI3 belegen wollen, würde ich empfehlen, zuvor "Webprogrammierung" und "SQL und relationale Datenbanken" zu belegen, um die Kapitel über XML-Parsing und Datenbankanbindung zu zu verstehen. Ein nicht zu großer zeitlicher Abstand zu GdI2 erscheint mir ebenfalls günstig. Insgesamt würde ich empfehlen, beim Bearbeiten von GdI2 gründlich vorzugehen. Die hier behandelten Grundlagen verfolgen euch über viele Module. GdI3 ist dafür ein gutes Beispiel.
     
    Ich hatte ja schon erwähnt, dass mir das praktische Herumprobieren mit Code im Modul ein wenig zu kurz kam. Hier habe ich mir selber eine alternative Möglichkeit gesucht, nämlich das Buch "Swing - A Beginner's Guide" von Herbert Schildt. Das ist kein Uni-Lehrbuch sondern ein praktisches Programmierbuch. Im wesentlichen stellt Herr Schildt Swing-Komponenten vor und zeigt an kleinen Codebeispielen, wie man sie benutzt. In jedem Kapitel gibt es auch kleine Übungsaufgaben. Das hat mir sehr viel gebracht, um zu lernen, wie ich die sehr gut aufbereiteten Konzepte aus dem W3L-Modul ganz praktisch in Java ausprogrammieren kann. Von Herrn Schildt gibt es auch ein einführendes Buch in JavaFX, das allerdings sehr dicht geschrieben ist und sich klar an Leser richtet, die Swing-Vorkenntnisse haben.
  14. kurtchen
    Mein letztes Modul im ersten Semester sollte "Webprogrammierung" werden. Für Studierende im Studiengang "Web- und Medieninformatik" wird es als erstes Modul in diesem Fachgebiet empfohlen. Es ist zugleich Pflichtmodul im Studiengang "Wirtschaftsinformatik", wo es dem Fachgebiet Softwaretechnik zugeordnet ist. Für die Wirtschaftsinformatiker bleibt es das einzige Pflichtmodul, dass sich speziell mit Webtechnologien beschäftigt. (Sie belegen allerdings noch ein Modul zu Content Management Systemen.) Für die Webinformatiker ist es der Auftakt zu vertiefenden Modulen in HTML und CSS, in Multimedia, XML, Webdesign und serverseitiger Programmierung mit Java Server Pages. Der Wahlpflichtbereich bietet dann weitere Möglichkeiten, sich in diesem Bereich zu entwickeln, auch für die Wirtschaftsinformatiker.
     
    Doch zurück zum Modul "Webprogrammierung". Es handel von folgenden Themen:
    - XHTML
    - CSS
    - Javascript
    - XML
    - PHP
    - Java Server Pages
    - ASP.Net
    - und eine sehr knappe Einführung in Ajax
     
    Der Kurs beschäftigt sich also mit semantischem Markup, Styling und Layout, clientseitiger Programmierung und serverseitiger Programmierung.
     
    Das erste Kapitel behandelt XHTML. HTML5 war anscheinend bei der letzten Überarbeitung noch nicht so weit, auch wenn es im einführenden Kapitel kurz vorgestellt wird. Für die Bearbeitung der Aufgaben ist die XHTML-Syntax verbindlich, die in verschiedenen Punkten ein bisschen strenger ist.
    Inhalte hier sind z.B.:
    - Grundlegender Aufbau eines XHTML-Dokumentes
    - Links
    - Bilder
    - Bereiche
    - Tabellen
    - Formulare
     
    Im Grunde keine schlechte Einführung, die aber für meinen Geschmack ein wenig knapp ausgefallen ist. Möglicherweise ging man bei der Konzipierung des Moduls davon aus, dass viele Studierende in diesem Gebiet Vorkenntnisse haben. Dies trifft auch für viele meiner Kommilitonen zu, die z.B. als PHP-Entwickler arbeiten. Mit solch einem Hintergrund sollte das Kapitel zu XHTML tatsächlich recht leicht fallen. Ich ging mit wenig Vorkenntnissen in den Kurs, hatte keine Schwierigkeiten, die vorgestellten Konzepte zu verstehen, merkte aber bei den Übungen, dass ich in der Anwendung nicht richtig sicher wurde.
     
    Ein Besonderheit in diesem Kurs: Es gibt vergleichsweise wenige Einsendeaufgaben; in der Regel zu jedem Kapitel eine. Vor Bearbeitung jeder Einsendeaufgabe wird die Bearbeitung einiger Übungsaufgaben vorgeschlagen, zu denen man sich Musterlösungen runterladen kann. So kann man selbst vergleichen und schauen, ob die eigene Lösung sinnvoll und richtig war. Natürlich kann man so eine Menge lernen und ich fand die Übungen auch didaktisch gut gewählt und erkannte einen sinnvollen Aufbau. Ein wenig mehr Tutorinteraktion hätte mir aber besser gefallen, zumal das in anderen Modulen ja auch möglich ist. Die Einsendeaufgaben fassten aber meist ganz gut die einzelnen Fähigkeiten aus den vorangegangenen Übungen zu einer komplexeren Gesamtaufgabe zusammen.
     
    Im nächsten Kapitel ging es um CSS. Themen waren hier zum Beispiel:
    - Vererbung, Kaskadierung
    - Tabellengestaltung
    - Layoutgestaltung mit float
    - Absolutes Layout

    Responsive Webdesign spielte in diesem Modul keine Rolle.
     
    Weiter ging es mit Javascript als clientseitige Programmiersprache. Hier ging es ums DOM, um Event Handler und um die Validierung von Formularen. Auch dieses Kapitel war für meinen Geschmack recht knapp. Ich hatte keine Schwierigkeiten, den Stoff nachzuvollziehen, merkte aber bei den Übungen, dass es einfach zu schnell gegangen war, um eine gewisse Sicherheit im Umgang mit der Sprache zu entwickeln. Auch merkte ich, dass mir die solide Grundlage in HTML und CSS fehlte, so dass ich immer wieder im Lehrtext zurückgehen musste.
     
    Javascript sieht Java auf den ersten Blick ähnlich, hat aber ein anderes Sprachkonzept. Bei den Übungen hatte ich oft das Problem, die gewohnte Java-Syntax und die noch ungewohnte Javascript-Syntax zu mischen, was dazu führte, dass ich immer wieder viel Zeit für Fehlersuche aufbringen musste. Diese Verwirrung sollte sich um Laufe des Kurses noch steigern, wenn ähnliche Anwendungsbeispiele in verschieden Sprachen gezeigt wurden. So merkte man einerseits gut die Unterschiede zwischen den Sprachen, aber zugleich fiel es mir schwer, die Codebeispiele in meiner Erinnerung auseinander zu halten.
     
    Im folgenden Kapitel über XML ging es um:
    - den grundlegenden Aufbau einer XML-Datei
    - XML-Parser
    - die DTD
    - das XML-Schema
    - um XSL-Stylesheets

    Außerdem lernte man die Vorzüge eines XML-Editors kennen. Hier möchte ich erwähnen, dass die W3L ein eigenes Modul "XML" hat, dass wesentlich tiefer geht und das im Studiengang "Web- und Medieninformatik" Pflicht ist. Als Einführung ins Thema XML fand ich dieses Kapitel sehr gelungen.
     
    In den folgenden Kapiteln sollte es um serverseitige Sprachen gehen. Hier folgten im Schnelldurchgang:
    - PHP
    - Java Server Pages
    - ASP.Net
     
    Im PHP-Kapitel ging es natürlich um die Anbindung an MySQL, aber auch um einfache Dateiverarbeitung und die Realisierung eines Gästebuches.
     
    Eine Herausforderung im JSP-Kapitel ist, dass die Syntax häufig wechselt, denn auch EL, JSTL und JSF werden kurz angerissen. Das soll wohl einen Überblick über verfügbare Techniken vermitteln, stiftet aber aus meiner Sicht in dieser knappen Form eher Verwirrung. JSP hat nur einen geringen Marktanteil. Trotzdem lohnt es sich, dieses Kapitel gründlich zu bearbeiten, denn das Pflicht-Modul "Web-Anwendungen 2" behandelt ausführlich JSP. Auch im Wahlpflichtbereich kann man sich weiter mit Java als serverseitiger Sprache befassen, während es zum Beispiel zu PHP keine weiteren Module gibt.
     
    Sehr gelungen fand ich dafür das Kapitel zu ASP.Net. Hier ging es unter anderem um das Konzept der code behind Technik, die eine saubere Arbeitsteilung zwischen Front-End- und Back-End-Entwicklern ermöglichen soll. Hier habe ich gemerkt, dass die Einführung in C# aus dem Modul "Grundlagen der Informatik 2" doch recht knapp war. Mit meinen Java-Kenntnissen fand ich mich zwar schnell zurecht, aber an Details blieb ich doch oft hängen und verbrachte viel Zeit mit Fehlersuche. Gleichwohl hat mir besonders dieses Kapitel gut gefallen, weil ich dabei den Net-Framework als ein schönes Stück Technik schätzen gelernt habe. Schade, dass weder ASP noch C# im weiteren Curriculum der W3L eine Rolle spielen.
     
    Das letzte Kapitel stellte in sehr knapper Form die Möglichkeiten von Ajax vor. Hier habe ich definitiv nichts mehr mitnehmen können. Ich war einfach übersättigt von den rasch wechselnden Themen und hatte zu viel neue Syntax in zu kurzer Zeit verdauen müssen. Bei der Bearbeitung der Aufgaben merkte ich das daran, dass ich immer wieder die verschiedenen Sprachen mischte und verwechselte.
     
    Zusätzlich hatte ich in diesem Modul das Problem, dass meine Tutorin länger für die Korrektur meiner Aufgaben brauchte, als ich das bislang von der W3L gewohnt war. Wenn Feedback kam, war ich oft schon 2 Kapitel weiter, was es mir schwerer machte, die durchaus guten Tipps zu verwerten. Auch die Korrektur der Online-Klausur dauerte ein wenig länger, so dass ich beim Schreiben der Präsenzklausur noch nicht wusste, wieviele Bonuspunkte ich hatte.
     
    Für mich war es das erste Modul mit dem ich insgesamt unzufrieden war. Für meinen Geschmack wollte man hier zu viel auf einmal. Die Intention, einen Überblick über gängige Webtechnologien zu geben, die Themen semantisches Markup, Styling, client- und serverseitige Programmierung in einem Modul vorzustellen, war für mich nachvollziehbar. Aber nach der Bearbeitung hatte ich den Eindruck, dass weniger mehr gewesen wäre. Lieber hätte ich zunächst eine gründlichere Einführung in HTML und CSS erhalten. Diese Grundlage bringen natürlich viele Studierende schon mit, weshalb dieses Modul von vielen meiner Kommilitonen als eines der leichteren beschrieben wird.
     
    Für die Präsenzklausur hatte meine Tutorin mir den wertvollen Tipp gegeben, ein paar Aufgaben noch einmal mit Stift und Papier zu bearbeiten. Das hat mir tatsächlich geholfen, ein paar syntaktische Grundstrukturen "in die Finger" zu kriegen, wodurch ich in der Klausur etwas schneller war. Die Note war für mich zwar erfreulich, aber das gute Gefühl, sich den Stoff richtig angeeignet zu haben, blieb in diesem Modul für mich aus. Die Klausur deckte die Themen des Kurses recht breit ab, so dass ich anderen Studierenden empfehlen würde, alle Kapitel zu wiederholen. 
     
    Meine Tutorin hat mir übrigens am Ende erklärt, warum die Bearbeitung in meinem Fall etwas länger gedauert hat als üblich, und das war für mich auch gut nachvollziehbar. Da ich bald das Modul "Web-Anwendungen 1" belegen wollte, das ebenfalls von ihr betreut wurde, plante ich eine etwas längere Bearbeitungszeit ein und belegte parallel GdI3 "Anwendungsprogrammierung". Rückblickend muss ich sagen, dass es hilfreich war, das Thema der längeren Korrekturzeiten anzusprechen. Das Problem ließ sich dadurch zwar nicht sofort lösen, aber immerhin habe ich so einen guten Workaround finden können. Ich nehme daraus mit, dass es sich lohnt, sich mit den Tutoren über die eigenen Lernziele auszutauschen, auch und gerade was Klausurtermine und die angepeilte Bearbeitungszeit angeht. Wenn man rechtzeitig weiß, was einen erwartet - z.B. vorrübergehend etwas längere Korrekturzeiten - kann man einen Plan B machen.
     
    Rückblickend betrachtet, hätte ich lieber das Modul "Webanwendungen 1" als erstes bearbeitet. Hier erhält man die sehr gründliche Einführung in HTML5 und CSS, die ich mir von einem einführenden Modul in Webtechologien erhofft hätte. Dieser Kurs orientiert sich außerdem an Fallbeispielen, was für mich sehr zum Verständnis beigetragen hat. Aus meiner Sicht sollte "Web-Anwendungen 1" das erste Modul zu Webtechnologien sein. Doch darüber schreibe ich zu einem anderen Zeitpunkt mehr.
     
    Ich meine, das Modul leidet etwas unter seiner Doppelfunktion: Für die Wirtschaftsinformatiker ist es sozusagen die eierlegende Wollmilchsau. Es verschafft ihnen einen Überblick über verschiedene Webtechnologien, ohne allzu sehr in die Tiefe zu gehen. Für die Webinformatiker soll es zugleich eine Einführung sein, auf die umfangreiche Vertiefungsmodule folgen. Das erfordert ein paar didaktische Kompromisse.
     
    Als Sekundärliteratur für dieses Modul habe ich "HTML & CSS: Design and Build Websites" und "Javascript & JQuery: Interactive Front-End Web Development" verwendet. Beide Titel sind von Jon Ducket. Sie glänzen durch ein sehr aufgeräumtes Layout. Der Stoff wird in appetitlichen, kleinen Häppchen serviert und man hat eine schöne Gegenüberstellung von Code und grafischer Darstellung. Ich habe diese Bücher parallel zum Kurs gelesen und empfand die besonders ästhetische Form der Darstellung als ideale Ergänzung zum sachlichen und systematischen Stil des im Kurs verwendeten Lehrbuches.
  15. kurtchen
    Das Modul Mathe1 - "Mathematisch-logische Grundlagen der Informatik" hat drei Autoren. Man bearbeitet ein Lehrbuch von etwa 300 Seiten. Da die Mathematik als Wissenschaftsdisziplin eine sehr komprimierte formale Ausdrucksform entwickelt hat, kann man auf wenigen Seiten viel sagen. Im Vergleich zu anderen Lehrbüchern auf FH-Niveau, die mir bekannt sind, beschränkt sich dieses Buch nicht allein auf die knappe formale Darstellung, z.B. bei Beweisen. Es hat auch viele ausführliche, beschreibende, kommentierende und informierende Passagen. Man kommt also beim Lesen stellenweise recht fix voran und hält sich dann wieder längere Zeit an wenigen Seiten, manchmal sogar an wenigen Zeilen auf. Ich nehme an, dies liegt in der Natur der Sache.
     
    Wie bei der W3L üblich, ist der gesamte Lehrtext in der Lernplattform aufbereitet verfügbar. Dort steht er im Mix mit Online-Tests, Einsendeaufgaben und natürlich Abschlusstest und Online-Klausur. Ich finde es entspannter und effektiver, mit dem Buch zu arbeiten. Mit Stift und Papier daneben, um Beispiele und Beweise gleich aktiv nachvollziehen zu können. Die Lernplattform rufe ich dann für Tests und Aufgaben auf. (Dies hat den Nachteil, dass die automatisch erstellte Statistik zur Bearbeitungszeit des Moduls nichts aussagt.)
     
    Das Buch soll erkennbar einen sanften Einstieg in das Thema Mathematik bieten, das für Informatik-Studiengänge unumgänglich aber auch bei vielen Studierenden unbeliebt und zum Teil sogar gefürchtet ist. Zunächst geht es um:
    - Aussagenlogik
    - Prädikatenlogik

    Hier gibt es inhaltliche Bezüge zum Modul "Rechnerstrukturen und Betriebssysteme", wo man z.B. Schaltnetze und Schaltwerke aufbaut. Dort ist sozusagen die Aussagenlogik in Hardware realisiert. Hier nähert man sich dem Thema auf formale Weise, arbeitet mit Stift und Papier. Dieser Abschnitt des Kurses fiel mir recht leicht, weil ich einmal an der Uni meiner Heimatstadt mehrere Kurse in formaler Logik belegt hatte. Das war an der philosophischen Fakultät, die auch einen Schwerpunkt in analytischer Philosophie hatte und darum viele Veranstaltungen zum Thema Logik und formale Sprachen anbot. Bei mir war es das Interesse an den Arbeiten von Ludwig Wittgenstein, das mich in diese Veranstaltungen getrieben hat. Dort haben wir zum Beispiel Vollständigkeitsbeweise geführt. Im Modul der W3L wird vergleichsweise weniger verlangt, gerade im Bereich der Prädikatenlogik.
     
    Für Leser, die im Bereich der Logik noch wenig Vorkenntnisse haben: In der Aussagenlogik ist die kleinstmögliche Einheit, die betrachtet werden kann, die Aussage. Sie kann wahr oder falsch sein. Einfache Aussagen werden nun mit Verknüpfungen wie "und" und "oder" oder auch der "Implikation" verknüpft zu komplexeren Aussagen und man möchte untersuchen, welche Wahrheitswerte diese komplexeren Aussagen in Abhängigkeit von den Wahrheitswerten der einfachen Aussagen annehmen. Elektronisch kann man die Verknüpfungen in Formen von Logik-Bausteinen realisieren und Spannung oder keine Spannung steht für wahr oder falsch. In der Programmierung begegnet einem die Aussagenlogik vor allem bei bedingten Verzweigungen im Programm, wenn verschiedene Bedingungen mit logischen Operatoren verknüpft werden, in Java z.B. mit "!","&&","||".
     
    In der Prädikatenlogik wird die Aussage logisch weiter zerlegt. "Der Ball ist rot." wäre in der Aussagenlogik eine atomare  (also nicht weiter zerlegbare) Aussage. In der Prädikatenlogik wird hier von einem Objekt behauptet, dass es eine Eigenschaft hat. Genauer gesagt, behauptet man von einem Objekt, dass es einer Klasse zugehörig ist. "Das Objekt Ball ist der Klasse der roten Dinge zugehörig." Interessant wird es, wenn man solche Aussagen mit sogenannten Quantoren verknüpft. Diese entsprechen dem natürlich-sprachlichen "es gibt ein..." und "für alle ... gilt ...". Hier kann man vielleicht schon ahnen, dass das schon eine Menge mit Mathematik und mathematischen Beweisen zu tun hat. Es ist auch der Stoff, aus dem viele Logikrätsel in Zeitschriften sind.
     
    Den Abschluss des Kapitels bietet ein kurzer Überblick über Thema Vollständigkeit, Konsistenz, Entscheidbarkeit. Gödels Unvollständigkeitssatz wird erwähnt, auch seine Bezüge zum Halteproblem in der Informatik. Erwähnt wird auch, dass sich für die Aussagenlogik und Prädikatenlogik sowohl die Widerspruchsfreiheit als auch die Vollständigkeit beweisen lässt. Geführt wird dieser Beweis im Lehrbuch allerdings nicht. Hier wird von Philosophiestudenten der ersten Semester mehr erwartet als von angehenden FH-Informatikern. Schön finde ich trotzdem, dass das Thema vorgestellt wurde, denn es hat interessante erkenntnistheoretische Implikationen, auch wenn es für die Programmierung nicht direkt relevant ist. Wer Lust hat, sich diesem Thema einmal auf recht amüsante und gut verdauliche Weise zu nähern, dem möchte ich gerne das Comic "Logicomix: Eine epische Suche nach Wahrheit" von Apostolos Doxiadis und Christos Papadimitriou empfehlen. Es handelt vom Leben Bertrand Russells und dem Projekt des logischen Positivismus. Gödel, Wittgenstein und Frege treten als Nebenfiguren auf. Es macht viel Spaß.
     
    Im nächsten Kapitel werden zwei Anwendungen der klassischen Logik vorgestellt:
    - Boolesche-Netze
    - Expertensysteme
    Expertensysteme sind ja vielen im Zusammenhang mit dem Thema klassische KI geläufig. Von booleschen Netzen hatte ich noch nicht gehört. Sie sind letztlich eine Dynamisierung der Aussagenlogik. Es gibt ein Netz aus Knoten, die miteinander verbunden sein können. Jeder Knoten hat einen von 2 Zuständen - wahr oder falsch. Insofern entsprechen die Knoten Aussagen. Das Netz hat zu jedem Zeitpunkt einen Zustand - die Wahrheitswerte der Knoten. Das interessante ist nun, dass Knoten im Booleschen Netz ihren Zustand an verknüpfte Knoten senden und deren Zustand empfangen. Es sind logische Verknüpfungen (Junktoren) definiert, wie sich der Zustand jedes Knotens in Abhängigkeit vom Zustand  der verknüpften Knoten ändert. Das ist die Dynamik. Nun untersucht man, ob wie das System in einen stabilen Zustand (Attraktor) hineinläuft. Man kann zeigen, dass boolesche Netze äquivalent zu Turingmaschinen sind. Aber keine Angst, das ist dann nicht  mehr Gegenstand dieses Moduls. Für die Klausur  erwartet wird lediglich, dass man in einem gegebenen booleschen Netz Folgezustände aus einem Anfangszustand berechnen kann und etwas über Attraktoren und nach welcher Vorperiode sie erreicht werden sagen kann.
     
    Es folgt ein kleiner Ausflug in die Modallogik, eine Erweiterung der klassischen Logik. Sie ermöglicht Aussagen über das MÖGLICHE und das NOTWENDIGE. Philosophisch betrachtet kann man sich  vorstellen, dass es etwas, das falsch ist, in einer alternativen Welt war sein könnte. (Möglichkeit) Oder dass etwas, das wahr  ist, in jeder alternativen Welt wahr sein muss. (Notwendigkeit) Dieses Kapitel ist NICHT klausurrelevant. Ich erwähne das, weil es im Modul immer wieder kleinere Ausflüge in benachbarte Themengebiete gibt, um Bezüge zwischen Mathematik/Logik und anderen Wissensgebieten zu zeigen. Die Modallogik ist z.B. vor allem für Philosophen interessant. Wer möchte, kann sich hier ein bisschen breitere Bildung holen. Wer nur auf Bestehen der Klausur aus ist, könnte hier auch ein paar Seiten überspringen, würde aber etwas verpassen. Insgesamt bemühen sich die Autoren sehr, immer wieder Verknüpfungen zwischen der Mathematik, praktischen Anwendungen und anderen Wissenschaftsdisziplinen herzustellen, was diesen Kurs für mich auch zu einem ästhetischen Erlebnis gemacht hat.
     
    Nun kommt ein - für mich eher trockenes - Kapitel über Beweistechniken. Die größte Herausforderung für Studierende ohne Abitur dürfte hier das Prinzip der vollständigen Induktion sein, dass einem in diesem Modul immer wieder begegnet und auch in den Modulen Mathe2 und Mathe3 immer wieder aufblitzt. Wenn ich mich recht erinnere, tauchte das Thema bei mir auch in der Abschlussklausur auf. Wer also gerne richtig gut abschneiden möchte, sollte hier die praktischen Übungen (kleinere Beweise) nicht überspringen. Wer nur bestehen möchte, kann sich durchaus eine Lücke erlauben, aber seid vorgewarnt: Das Thema vollständige Induktion ist grundlegend und ihr werdet es so schnell nicht los.
     
    Weiter geht es mit  Mengenlehre, die manchen älteren Semestern vielleicht noch aus der Schule bekannt sein dürfte. Unmögliches wird hier nicht verlangt. Die Mengenlehre war ja früher Teil des Schulcurriculums und war vor allem bei Eltern sehr unbeliebt, die nicht verstanden haben, warum man "so einen Blödsinn" lernt, statt im Mathematik-Unterricht anständig zu rechnen. Für Mathematiker ist Mengenlehre ein ungeheuer mächtiges Ausdrucksmittel und ein Werkzeug, mit dem sich viele Beweise führen lassen. Darum ist es gut, sich damit einmal auseinander zu setzen, auch im Hinblick auf spätere Module. Für die Klausur wichtig sind auch Betrachtungen zur Kombinatorik, also wie viele Kombinationen von a Elementen kann ich aus einer Auswahl von b Elementen bilden, je nachdem ob das gleiche Element mehrfach vorkommen darf oder auch nicht. Hier treten Begriffe wie Fakultät oder auch Binomialkoeffizient auf. Auch das wird in späteren Modulen wichtig, wenn es zum Beispiel um Bernstein-Grundpolynome geht.
     
    Bis hierhin bin ich gut zurechtgekommen, aber nun kam das Kapitel "Relationen". Und spätestens beim Thema "Ordnungsrelationen" wurde die Darstellung dann schon recht formal. Im Grunde beschreiben Ordnungsrelationen etwas einfaches. Sie stellen in einer Menge eine Rangfolge von Elementen her. Zum ordnet die Relation "x ist größer als y" die Menge der natürlichen Zahlen. Es gibt aber z.B. auch Ordnungen, in denen ein Element  mehrere verschiedenen Nachfolger oder Vorgänger haben kann. Und dann kann es auch Elemente geben, die ich nicht paarweise vergleichen kann. Hier waren bei den Übungen durchaus Nüsse dabei, die ich nicht mehr knacken konnte. Und das bringt mich zu einem wichtigen Thema für Leute, die dieses Modul bearbeiten und auf Schwierigkeiten stoßen: Die Autoren EMPFEHLEN sehr viele Übungen und VERLANGEN die Bearbeitung von Online-Tests und Einsende-Aufgaben. Der Schwierigkeitsgrad der Übungen ist zum Teil viel höher als der der Einsendeaufgaben und Tests. Lasst euch also nicht entmutigen, wenn ihr nicht alle vorgeschlagenen Übungen schafft. In der Klausur werden vor allem die grundlegenden Konzepte aus den Themengebieten abgeprüft, keine Spitzfindigkeiten und Spezialfälle. Die Übungen sind eine Einladung, sich einmal herauszufordern und sich wesentlich gründlicher für die Prüfung vorzubereiten.
     
    Im Kapitel Relationen ging es dann auch um die sehr grundlegenden Begriffe der Abbildungen und Funktionen. Hier muss man z.B. prüfen, ob eine gegebene Funktion injektiv, surjektiv oder sogar beides (also bijektiv) ist. Außerdem geht es um Komposition von Abbildungen oder auch ihre Umkehrbarkeit. Wirkt alles oft sehr theoretisch, aber Achtung: Diese Konzepte kommen in den höheren Modulen wieder. Schafft euch hier eine solide Grundlage und ihr habt es später leichter.
     
    Es folgt das sehr ästhetische Kapitel  über Graphentheorie, ein Thema, von dem die meisten Schulabgänger nie gehört haben. Graphen begegnen einem in der Informatik tatsächlich ständig. Viele Strukturen in der realen Welt lassen sich damit sehr schön und kompakt beschreiben. Das ist ein Kapitel, das mir Spaß gemacht hat, weil man auch immer wieder viel zeichnet und es überhaupt recht graphisch zugeht. Hier lernt man als kleinen Nebenschauplatz das berühmte "Königsberger Brückenproblem" kennen, das man in verschiedenen Variationen aus Rätselbüchern kennen könnte. Graphenalgorithmen spielen keine Rolle. Hier geht es um die begrifflichen Grundlagen. Die sind auch der klausurrelevante Stoff. Die Inhalte dieses Kapitels werden euch wieder begegnen in Modulen wie "Softwaretechnik", "XML", "Web-Anwendungen", "Algorithmen und Datenstrukturen" oder "Computernetze". Haltet den Stoff nicht für irrelevant, bloß weil hier Formeln eine weniger dominante Rolle spielen.
     
    Das Kapitel über Topologie hat mich intellektuell zum Teil überfordert. Zum Glück ist es nicht klausurrelevant.
     
    Nun kam das sehr wichtige Kapitel über algebraische Strukturen. Wichtig, weil es zum Beispiel im Modul Mathe3 "Angewandte Mathematik" wieder auftaucht, und zwar in den Kapiteln zur Kryptik. Dort wird zwar alles noch mal schnell wiederholt, aber arbeitet lieber hier gründlich, dann habt ihr es später leichter. Knapp gesagt geht es um Gruppen, Ringe, Körper und Vektorräume. Für die Klausur bekommt man zum Beispiel eine Menge und Verknüpfungen und muss dannuntersuchen, ob man es mit einem Körper zu tun hat. Macht das gründlich, auch wenn es euch zunächst sehr abstrakt vorkommt, und ihr nicht seht, wofür man es brauchen kann. Ihr werdet es brauchen, nicht nur für die Abschluss-Klausur.
     
    Im nächsten Kapitel geht es um Rekursivität. Die Konzepte und Begriffe, die ihr hier lernt, tauchen z.B. in den Programmiermodulen wieder auf, und zwar durchaus in sehr praxisrelevanter Form. Zur Auflockerung gibt es hier einen kleinen Ausflug in die fraktale Geometrie, der nicht klausurrelevant ist. Wenn ihr schon immer mal wissen wolltet, was es mit dem schönen "Apfelmännchen" auf sich hat, das ja zwischenzeitlich mal zur populären Ikone wurde, dann gönnt euch den Spaß. Sonst könntet ihr hier auch ein paar Seiten überspringen.

    Wichtiger für den angehenden Informatiker ist der Ausflug in die theoretische Informatik. Hier geht es um Zustandsautomaten und formale Sprachen. Das ganze wird nur angerissen und hier bedauere ich ein wenig, dass ein eigenes Modul "Theoretische Informatik" im Curriculum der W3L NICHT vorgesehen ist. Ein paar Themen tauchen in "Softwaretechnik 1" noch einmal vertiefter auf. Wer mehr "Appetit" auf so etwas hat, muss sich sein "Futter" woanders suchen.
     
    Erwähnt wird in diesem Kapitel auch die ungewöhnliche deklarative Programmiersprache PROLOG, mit der man logische Beziehungen gut ausdrücken kann. Leider viel zu knapp, um wirklich etwas damit anfangen zu können, aber immerhin schön, dass hier ein wenig Neugierde geweckt wurde. Praxisrelevanter sind die Abschnitte über "Wege aus endlosen Schleifen". Konkret geht es darum, dass Programme in der Regel irgendwann halten sollten, statt unendlich weiter zu laufen, und wie man das sicherstellen kann.
     
    Im folgenden Kapitel geht es um eine interessante Erweiterung der klassischen Logik - die sogenannte Fuzzy Logic, die eigentlich eher ein Fuzzy Set Theory ist. In der klassischen Mengenlehre ist ein "Ding" Element einer Menge oder nicht. In der Fuzzy Set Theory, kann es unterschiedliche Grade der Zugehörigkeit geben. Eine Schwalbe wäre dann "vogeliger" als ein "Pinguin" und eine Fledermaus, die in der klassischen Mengenlehre kein Vogel ist, könnte doch ein bisschen "vogelig" sein. Der Grad der Zugehörigkeit wird in der Regel als Zahl zwischen 0 und 1 ausgedrückt. Verknüpfe ich nun Aussagen über diese unscharfe Zugehörigkeit, bin ich bei der unscharfen Logik. Die kann man tatsächlich praktisch anwenden, zum Beispiel in der Steuerung. Klassisches Beispiel ist das Beschleunigen und Bremsen eines Portalkrans mit einer darunter hängenden Nutzlast. Das schöne an der Fuzzy Logic ist, dass man damit gut Faustregeln von Praktikern oder Fachleuten in einem Gebiet modellieren kann, so dass ein technisches System mit Faustregeln arbeiten kann. Im Kurs geht es allerdings zunächst mal um die begrifflichen Grundlagen, nicht um das, was der Ingenieur macht. Die Fuzzy Set Theory ist klausurrelevant.
     
    Den Abschluss bildet ein sehr knappes Kapitel über Komplexitätstheorie. Das Thema taucht zum Beispiel im Modul "Algorithmen und Datenstrukturen" wieder auf, wenn man verschiedene Such- und Sortieralgorithmen vergleicht. Ein wenig beschäftigt man sich auch mit zellulären Automaten, aber das ist eher ein reinschnuppern und hier würde ich mir für spätere Module mehr "Futter" erwarten.
     
    Insgesamt hat mir das Modul sehr viel Spaß gemacht. Ich kann mich noch gut an mein Heureka-Erlebnis  erinnern, als ich Cantors Diagonalverfahren begriffen habe und endlich verstanden habe, warum es zwar unendlich viele natürliche Zahlen, rationale Zahlen und reele Zahlen gibt, aber wieso es gleich viele rationale und natürliche Zahlen aber mehr reele Zahlen gibt. Für so etwas zahlt einem später niemand ein Gehalt, aber der Mensch lebt nicht vom Brot allein.
     
    Zum Spaß am Modul hat auch die hervorragende Betreuung durch meinen Tutor beigetragen. Als ich mich ihm vorgestellt habe, habe ich gleich erwähnt, dass ich aus einem fachfremden Beruf komme und lange aus dem Thema Mathematik "raus" bin. Er hat mir ein wenig von seinem eigenen Werdegang erzählt, der ihn mehrmals über Fachgrenzen geführt hat, und mich sehr ermutigt, meinen Weg zu gehen. Wir hatten immer wieder einen interessanten fachlichen Austausch. In diesem Modul nicht allein zu konkreten Problemen mit Aufgaben, denn ich kam ganz gut zurecht. Ich hatte auch Fragen zu den vielen Ausflügen in benachbarte Themengebiete, die im Kurs skizziert waren. Hier merkte ich deutlich: Ich habe es mit einem Menschen zu tun, der gewohnt ist, über die Grenzen seines fachlichen Biotops hinaus zu denken und Wissensgebiete zu verknüpfen. So etwas gefällt mir grundsätzlich und so habe ich hier viele Anregungen für mich mitgenommen. Sehr spürbar war in diesem Modul auch ein aufrichtiges Bemühen, den Wieder- und Neueinsteigern ein bisschen mehr Begleitung zukommen zu lassen. Für das Modul Mathe1 aus meiner Sicht optimal. In den späteren Modulen ist die Betreuung auch sehr gut, aber die Atmosphäre ist ein bisschen sachlicher, der Ton etwas knapper und es wird schon mehr Selbstständigkeit erwartet. Das passt aus meiner Sicht alles gut zusammen.
  16. kurtchen
    Im Bereich Mathematik möchte ich nicht nur die einzelnen Module beschreiben, sondern auch etwas zum Gesamtkonzept sagen, wie es für mich bislang erkennbar ist. Aus Gesprächen mit Kommilitonen weiß ich, dass Mathematik für viele Studierende ein "Angstfach" ist. Auch eine lästige Pflicht, die man irgendwie "abhaken" und dann hinter sich lassen möchte. Selten wird Mathematik als etwas beschrieben, das Spaß gemacht hat.
     
    Die anscheinend weit verbreitete Abneigung gegen Mathematik teile ich nicht. Zu Schulzeiten habe ich im Abitur einen Mathe-Leistungskurs gewählt. (Damals, als es noch Leistungskurse gab.) Mathematik gehörte für mich zu den Schulfächern, die mir Spaß gemacht haben und die mir relativ leicht gefallen sind. Das muss man vielleicht im Hinterkopf behalten, wenn man meine folgenden Modulberichte liest. Ich bin bislang gut zurechtgekommen, aber ich mag Mathe auch.
     
    Allerdings ist mein Abitur schon lange her. Und seit der Schule hatte ich wenig Gelegenheit, mich mit Mathematik zu beschäftigen, weil ich mir einen Beruf ausgesucht habe, der keinerlei Bezüge zu diesem Gebiet hat. Als ich mich über Informatik-Studiengänge informiert habe, spielte es also schon eine Rolle für mich, was in Mathematik verlangt wird. Verschiedene Unis und FHs bieten auch Vorkurse an, die den Einstieg erleichtern sollen. Einen solchen Kurs durchgearbeitet hatte ich nicht, aber reingeschnuppert. Und dabei gemerkt, dass ich mich noch ziemlich gut an den Stoff bis zur 10. Klasse erinnerte, von der Oberstufenmathematik aber nicht mehr viel übrig war.
     
    Die W3L bietet die Möglichkeit, sich zu den Modulen Probekapitel runterzuladen und mal "reinzuschnuppern". Darum wusste ich, dass es im Modul "Mathe2" bzw. "Mathematik für Informatiker" um Analysis und Lineare Algebra geht. Inhalte, die mir zu Abiturzeiten geläufig waren, mir aber nach vielen Jahren fremd vorkamen. Der Stoff von "Mathe3" bzw. "Angewandte Mathematik" war mir unbekannt. Hier geht es um Numerik, Grafik, Kryptik. 
    Ich hatte also vor Mathematik nicht unbedingt Angst aber doch Respekt, weil mir dämmerte, dass es schon ein Stück Arbeit werden würde, mich nach langer Abstinenz wieder in dem Thema einzufinden.
     
    Im Bachelor-Studiengang "Web- und Medieninformatik" der W3L gibt es insgesamt 4 Mathematik-Module mit je 5 ECTS. Sie heißen:
    - Mathe1: Mathematisch-logische Grundlagen der Informatik
    - Mathe2: Mathematik für Informatiker
    - Mathe3: Angewandte Mathematik
    - Statistik
     
    Die Studierenden im Studiengang "Wirtschaftsinformatik" müssen Mathe3 "Angewandte Mathematik" nicht belegen, können es aber im Wahlpflichtbereich buchen.
    Da ich inzwischen das dritte Modul "Angewandte Mathematik" bearbeite, kann ich sagen, dass Mathe2 und Mathe3 inhaltlich sehr eng aufeinander aufbauen. Die beiden Module sind vom gleichen Autor geschrieben, der zugleich auch mein Tutor ist. Hier ist ein modulübergreifendes Konzept aus "einem Guss" erkennbar.
     
    Das Modul Mathe1 hat drei Autoren. Man merkt hier einen anderen Stil. Es geht erkennbar darum, den Studierenden einen sanften (Wieder-)Einstieg ins Fach zu bieten. In allen drei Modulen gibt es ein Bemühen, inhaltliche Bezüge zur Informatik herzustellen. Sehr gelungen finde ich das bislang in Mathe1 und Mathe3 gelöst. In Mathe2 wirkt es auf mich bislang ein wenig bemüht. Allerdings muss man sich klarmachen, dass Lineare Algebra und Analysis unbedingte Voraussetzungen für die anwendungsbezogenen Themen Numerik, Grafik und Kryptik aus dem dritten Modul sind. Da muss man also einfach durch, auch wenn man zwischenzeitlich nicht sieht, was das genau mit Informatik zu tun hat.
     
    An den Präsenztagen werden üblicherweise Tutorien zur Mathematik angeboten. Die bezogen sich bislang immer auf das Modul Mathe2, es ging also um Analysis und/oder Lineare Algebra. Dies scheinen die Themen zu sein, die den Studierenden am meisten Mühe machen.
     
    Zu Statistik kann ich bislang noch nichts sagen, da ich dieses Modul noch nicht belegt habe.
     
    Die W3L muss damit zurechtkommen, dass die Studierenden mit recht unterschiedlichen Vorkenntnissen kommen. Es gibt Studierende mit Abitur, das im Idealfall noch nicht lange zurückliegt. Die finden insbesondere im Modul Mathe2 viel bekannten Stoff. Es gibt aber auch Studierende ohne Abitur, die z.B. nach einer Ausbildung zum Fachinformatiker studieren. Für die ist der in den Mathe-Modulen behandelte Stoff oft Neuland und die Bearbeitung ist entsprechend zeitaufwändiger. Es gibt aber auch Abiturienten, die sich mit den Mathe-Modulen schwerer tun, z.B. mit den Modulen Mathe1 und Mathe3. Weil dort nämlich Stoff behandelt wird, denn man aus der Schule in der Regel nicht kennt.
     
    Manche Studierende möchten die Mathe-Module einfach nur bestehen. Mathematik gilt als eines der Fächer, an denen sich entscheidet, ob man das Studium beenden kann. Viele Studierende sind daher der Meinung, dass man die Mathe-Module nicht vor sich herschieben sondern zügig angehen sollte. Wenn es schief geht, soll es bald schiefgehen, bevor man viel Zeit und Geld investiert hat.
     
    Aber natürlich gibt es auch Studierende, die die Mathematik-Module mit dem Ehrgeiz studieren, dort gute Leistungen zu erbringen. Mein bisheriger Eindruck ist: Die W3L hat ein Mathematik-Konzept, dass beiden Fraktionen etwas bietet. Wer die Klausuren einfach gerade so bestehen möchte, hat eine gute Chance, wenn er sich in der Vorbereitung auf bestimmte Grundlagen konzentriert, mit denen er relativ sicher Punkte holen kann. Wer wirklich gut abschneiden möchte, muss auch bereit sein, sich breiter vorzubereiten und etwas mehr Selbstständigkeit zeigen. Das betrifft hier vor allem den Bereich Bonuspunkte. Für die Präsenzklausuren ist die Stoffmenge ein bisschen eingeschränkt. Nicht alles, was im Kurs behandelt wird, kann auch in der Klausur drankommen. Das gibt den Leuten, die nur bestehen wollen, die Möglichkeit, sich bei der Vorbereitung ein bisschen zu spezialisieren. Bei den Abschlusstests kann aber ALLES drankommen und auch bei den Online-Klausuren wird breit geprüft. Wer also mit ein paar Bonuspunkten in die Abschlussklausur gehen möchte, der muss sich schon mit dem ganzen Stoff so auseinandersetzen, dass er sein Verständnis unter Beweis stellen kann.
     
    Mir gefällt, dass es hier ein Angebot gibt, aus dem Leute, die Mathematik mögen, etwas machen können; das aber auch Leuten, denen Mathematik nicht so leicht fällt, eine realistische Chance bietet, ihr Studium erfolgreich zu beenden und ihre Stärken in den anderen Bereichen auszuspielen.
     
    Bedenken muss man allerdings: Sowohl für die Web- und Medieninformatiker als auch für die Wirtschaftsinformatiker ist Mathematik Pflicht und die Module gehen genau wie alle anderen Module  in die Berechnung der Endnote ein.
     
    Abschließend möchte ich noch bemerken, dass die W3L ja mit der FH Dortmund zusammenarbeitet, die Mathematik-Module also FH und nicht Uni-Niveau haben. Gefragt ist also eher problemlösende Anwendung mathematischer Konzepte und weniger das Führen von Beweisen. Damit kann man eventuell in den Klausuren das letzte Quäntchen rausholen. Bestehen kann man aber auch, wenn man im Beweisen nicht so stark ist.
  17. kurtchen
    Weiter ging es in meinem Online-Studium mit dem Modul "SQL und relationale Datenbanken". Dieses Modul war laut empfohlenem Studienplan für das zweite Semester vorgesehen. Bei den nötigen Grundlagen war allerdings nur "Grundlagen der Informatik 1" genannt. Grundkenntnisse der strukturierten und prozeduralen Programmierung sollten also reichen. Ich hatte schon "Grundlagen der Informatik 2" bestanden, war also der Meinung, gut gerüstet in den Kampf zu ziehen.
     
    In diesem Kurs gab es zwei Lehrbücher:
    - SQL: Der Einstieg in die deklarative Programmierung
    - Datenbank-Anwendungen entwerfen & programmieren
     
    Im SQL-Buch ging es zunächst um eine Einführung in diese Sprache. Wie bei der W3L üblich, gab es ein einführendes Kapitel, indem alle Themen des Buches knapp angerissen waren, so dass man ungefähr wusste, was im Laufe des Moduls auf einen zukommen würde. Das nächste Kapitel war dann detaillierter. Es ging um:
    - Anlegen von Tabellen, Schlüsselspalten, Primärschlüssel
    - Datentypen, Domains als selbst-definierte Wertebereiche
    - Werteeinschränkungen durch Regeln
     
    Hier fiel mir die erste Sache auf, an der ich mich im Kurs stören sollte: Zu Beginn des Kurses war erklärt worden, wie man auf seinem System MySQL und Firebird installiert. Ich war davon ausgegangen, das eine ODER das andere zu brauchen und MySQL bzw. MariaDB ist ja bei den meisten Linux-Systemen sowieso dabei. Der Kurs hat aber nicht den Anspruch, den Studierenden in ein bestimmtes Datenbanksystem einzuführen. Vielmehr geht es um SQL als Sprachstandard, der in verschiedenen Implementierungen mehr oder weniger konsequent und umfassend realisiert ist. MySQL und Firebird dienen als Beispiele für Implementierungen, die sich in verschiedenen Punkten unterscheiden. Viele Code-Beispiele aus dem Lehrbuch liefen unter MySQL nicht. Ich sah mich so gezwungen, zwischen MySQL und Firebird zu wechseln, Code in beiden Umgebungen auszuprobieren, meine eigenen Datenbanktabellen in beiden Systemen anzulegen, was Zeit kostete. Das kam mir anfangs sehr umständlich und didaktisch nicht gelungen vor. Im Laufe der Zeit wurde mir jedoch klar, um was es dem Kursautor ging. Ich sollte verstehen, was relationale Datenbanken sind und was SQL als allgemeiner Sprachstandard ist, unabhängig von einem bestimmten Produkt. Im Laufe des Kurses wurde ich flexibler und habe mir parallel auch noch PostgreSQL installiert, habe auch mit verschiedenen graphischen Tools experimentiert und dann wieder viel auf der Kommandozeile gearbeitet. Man bekommt ein Gefühl dafür, was den Kern von SQL ausmacht, der sich nicht so schnell ändert. Man erhält auch einen Eindruck davon, wie man arbeiten müsste, um eine Datenbank leichter auf eine andere Implementierung migrieren zu können. Am Ende des Moduls wusste ich, dass ich mich wenn nötig in jede Implementierung einarbeiten kann, weil einfach Grundlagen da sind, auf die ich mich verlassen kann. Es dauerte natürlich eine Weile, an diesem Punkt zu kommen, und so war ich in den ersten Kapiteln oft unzufrieden mit dem didaktischen Asatz, dessen Sinn ich noch nicht verstand.
     
    Weitere Themen waren:
    - Selektionen und Projektionen
    - Spaltenausdrücke
    - Suchen mit Mustern,
    - Verknüpfte Ausdrücke
    - Mengen als Vergleichswerte
    - Einfügen und Aktualisieren von Datensätzen
    - Restrukturieren von Tabellen
    - Änderungen an Tabellen mit Daten
    - Änderungen von Domänen
    - Löschen von Informationen
    - Spaltenfunktionen von Gruppierungen
     
    Bis hierhin hatte man in der Regel mit einzelnen Tabellen gearbeitet. Der Kurs war bis hier auch recht syntaxlastig. Das machte sich auch in den Online-Tests bemerkbar, die zum Teil etwas spitzfindig formuliert waren. So halbwegs begriffen zu haben, reichte nicht. Zum Teil schien es mir, als seien bewusst kleine Ungenauigkeiten in die Fragen eingebaut, um dem Lernenden eine kleine Falle zu stellen und zu checken, ob er wirklich genau aufgepasst hatte. Auch das ärgerte mich zunächst. Ich lernte aber so auch, genauer hinzuschauen. Im Laufe der Zeit habe ich diese Art der Tests zu schätzen gelernt.
     
    Auch die Einsendeaufgaben wurden auf diese Weise korrigiert. Ungefähr richtig reichte nicht. Mein Tutor erwartete Präzision. Die Rückmeldungen im Fehlerfall waren recht knapp, so dass ich gerade am Anfang oft nachhaken musste. Der Sinn blieb mir zunächst verborgen. Im Laufe der Zeit merkte ich, dass mir der Tutor immer nur einen kleinen Brocken hinwarf. Gerade genug, um selber einen Schritt weiter zu kommen. Ich habe gelernt, die Online-Dokumentationen intensiv zu nutzen und auch mit Sekundärliteratur zu arbeiten. Ein Stück weit meine Probleme selbstständig zu lösen, statt immer gleich um Hilfe zu bitten. Das Tolle war: Im Laufe der Zeit merkte ich, dass ich besser darin wurde, selbst nach Lösungen zu suchen.
     
    Im letzten Kapitel des ersten Buches ging es dann erstmals um das, was relationale Datenbanken ausmacht: Um die Verknüpfung von Tabellen über Fremdschlüsselbeziehungen und die damit verknüpften Probleme der Konsistenzhaltung. Ein kleiner Nebenschauplatz war die Einrichtung von dynamischen Wertebereichen über Fremdschlüsselbeziehungen.
     
    Nun kam das zweite Lehrbuch und das war deutlich anders als das erste. Ging es im ersten Lehrbuch relativ konkret darum, was man mit der Sprache SQL machen kann und wie man das konkret macht, kam hier erst mal viel Theorie:
    - Relationen und Operationen auf Relationen
    - relationsinterne und relationsübergreifende Abhängigkeiten
    Hier ging es zum Teil recht mathematisch zu. Der Vorteil: Mit dem eher praktischen Vorwissen aus dem ersten Lehrbuch war dieser Teil etwas leichter verdaulich. Gut wäre es hier gewesen, ich hätte schon das Modul Mathe1 beendet. Das war aber bei mir nicht der Fall, weshalb dieser Teil des Kurses für mich etwas zäher ablief.
     
    Es folgte ein recht umfangreicher Teil über Entwicklungsphasen einer Datenbank und darüber, wie man Sachverhalte und Beziehungen in Datenbanken modelliert. Insbesondere ging es darum, wie man Klassen, Vererbungsstrukturen und Assoziationen zwischen Klassen in Datenbanktabellen modelliert, also das, was man objekt-relationales Mapping nennt. Dieser Teil des Kurses war für mich sehr interessant, weil hier deutlich wurde, wie man objektorientierte Programmierung und Persistenz mit einem RDBMS zusammenbringen kann. Hier war ich heilfroh, "Grundlagen der Informatik 2" bereits bearbeitet zu haben, also die Einführung in die objektorientierte Programmierung. Ohne diese Grundlage wäre mir dieses Kapitel viel schwerer gefallen und ich finde, dass es für alle Studierenden sinnvoll wäre, diese Grundlage zu haben. Der Autor verwendete hier eine Erweiterung der UML, um Tabellenstrukturen zu modellieren und zu visualisieren. Dafür war auch ein graphisches Tool in Java mitgeliefert worden, dass auf meinem System allerdings gelegentlich "Zicken" machte und nicht immer stabil lief. Ich habe dann ein anderes Tools benutzt, um UML-Diagramme und Diagramme in erweiterter UML zu erstellen, was dann auch problemlos ging um vom Tutor ohne weiteres akzeptiert wurde.
     
    In nächsten Teil des Kurses ging es um Verbunde:
    - Theta-Verbunde
    - Auto-Join
    - Innere Verbunde
    - Verschachtelung von Verbunden
    - Äußere Verbunde
    Eine Rolle spielte hier auch immer wieder, was mathematisch gesehen passiert, wenn kartesische Produkte großer Tabellen gebildet werden und wie der User oder das RDBMS diesen Aufwand minimiert.
     
    Es folgten Kapitel über Unterabfragen, wobei insbesondere die korrelierten Unterabfragen schon etwas anspruchsvoller waren. Schließlich ging es noch um Mengenoperationen und den Umgang mit Views. Damit war der klausurrelevante Teil des Moduls abgedeckt.
     
    Das Modul war aber noch lange nicht vorbei. Es kamen Kapitel zu:
    - Datenschutz, Authentisierung, Gewährung von Privilegien, Entzug von Rechten, Rollen
    - Stored Procedures, Mengenverarbeitung von Datensätzen, Trigger, Transaktionen
     
    Gerade bei den letzten Themen gibt es große Unterschiede zwischen den Implementierungen. Hier begann ich auch, parallel zu Firebird mit PostgreSQL zu experimentieren.
     
    Es folgte eine kurze Einführung in JDBC. Der letzte Teil war dann ein Überblick über alternative bzw. konkurrierende Konzepte zur relationalen Datenbank. Hier wurde ein theoretischer Überblick gegeben. Und es gab ein paar praktische Übungen mit der CouchDB. Das war jedoch eher ein Reinschnuppern und vertiefte in erster Linie das Verständnis für die besonderen Eigenschaften und auch Nachteile relationaler Datenbanken.
     
    In diesem Kurs gab es zwei Abschlusstests und zwei Online-Klausuren, eine für jeden Kursteil. Die Bonuspunkte, die man so erwerben konnte, zählten darum nur jeweils zur Hälfte.
     
    Für die Präsenzklausur hatte ich mich nicht optimal vorbereitet. Ich hatte vor allem den Umgang mit den Sprachelementen von SQL geübt. Bei den Aufgaben ging aber viel Zeit für Modellierung und Normalisierung drauf. Es mussten UML-Diagramme bzw. Diagramme in erweiterter UML gezeichnet werden, was in der Klausur natürlich von Hand geschieht. Da muss man sich beim Zeichnen schon ein bisschen Gedanken machten, wie am Ende alles gut aufs Blatt passt. Hier habe ich ein bisschen Zeit vergeudet. Zwar hatte ich das Zeichnen von Hand geübt, aber ich hätte hier noch mehr Energie reinstecken können. Dann wäre der Rest der Klausur entspannter gelaufen. Es folgte nämlich ein Teil, bei dem es konkreter um dem Umgang mit der Sprache SQL ging. Gegeben war eine Tabellenstruktur und nun sollten Abfragen formuliert werden, die bestimmte Informationen aus den Tabellen extrahierten. Viele Abfragen! Hier musste ich in kurzer Zeit eine Abfrage nach der anderen "hinschmieren", ohne Zeit zu haben, irgendetwas noch einmal zu überprüfen oder lange über die Antwort nachzudenken. Insofern war ich nach der Klausur in großer Sorge, viele Punkte verschenkt zu haben.
     
    Diese Sorge war zum Glück unnötig. Ich hatte zu Hause geübt, solche Aufgaben auf Tempo zu lösen und hatte anscheinend viele Treffer, obwohl ich in der knappen Zeit nur "aus der Hüfte schießen" konnte. Trotzdem würde ich mich rückblickend betrachtet anders vorbereiten und vor allem den Themen "Modellierung" und "Normalisierung" mehr Aufmerksamkeit widmen.
     
    Der Kurs ist eine gute Grundlage für "Grundlagen der Informatik 3". Dort geht es zwar hauptsächlich um GUI-Programmierung, aber Persistenz und Schnittstellen zu Datenbanken ist ein weiterer großer Themenbereich. Zwar erhält man in GdI3 eine knappe Einführung in MySQL, aber ich war schon sehr froh, mit einem umfangreicheren Vorwissen zu arbeiten.
     
    Insgesamt habe ich aus dem Modul etwas anderes mitgenommen, als ich mir zu Beginn erwartet hatte: Ich wollte lernen, mit MySQL umzugehen. Gelernt habe ich etwas nützlicheres, nämlich was eine relationale Datenbank ist. Auch mit meinem Tutor war ich am Ende sehr zufrieden, der mich eben nicht "mit dem Löffel gefüttert" hat, sondern mir durch seine eher knappen Hilfestellungen immer gerade genug Material gegeben hat, um selber eine Lösung zu finden.
  18. kurtchen
    Mein drittes Modul bei der W3L war "Grundlagen der Informatik 2". Dieses Modul ist eine Einführung in die objektorientierte Programmierung mit Java. Eigentlich wäre dieser Kurs erst für das zweite Semester vorgesehen gewesen, aber nachdem mir GdI1 so viel Spaß gemacht hatte, war ich neugierig, wie es weitergehen würde.
     
    Inhalte des Moduls sind:
    - Objekte, Klassen, Konstruktoren, Botschaften
    - Attribute, Klassenattribute, Klassenoperationen
    - Pakte
    - Nutzen vorhandener Klassen (z.B. aus der Klassenbibliothek)
    - Hüllklassen für einfache Typen, Autoboxing, Autounboxing
    - Ausnahmebehandlung
     
    Sehr schön finde ich, dass es ein eigenes Kapitel über Assoziationen gibt. Die werden als wichtiges Grundkonzept der objektorientierten Programmierung oft übersehen. Es geht um:
    - Beziehungen zwischen Objekten und zwischen Klassen
    - Rollen
    - Assoziationsklassen, die allein existieren, um bestimmte Objekte zu verknüpfen
    - Navigierbarkeit
    - Containerklassen
    - den Abschluss bildet eine Einführung in das Singleton-Muster als erstes Entwurfsmuster
     
    Weiter geht  es mit Vererbung:
    - Klonen vs. Kopieren
    - Identität vs. Gleichheit
    - Polymorphismus
     
    Echte Mehrfachvererbung gibt es in Java nicht. Einen gewissen Ersatz bietet das Schnittstellenkonzept.
     
    Um diese Konzepte zu vertiefen gab es eine sehr  schöne Einsendeaufgabe, bei der das Beladen einer Autofähre mit verschiedenen Fahrzeugtypen simuliert werden sollte. Die Fahrzeugtypen stehen untereinander in einer Vererbungsbeziehung. Außerdem braucht man eine Containerklasse, die Fahrzeuge verschiedener Typen aufnehmen kann. Diese Aufgabe war umfangreicher, hat aber auch besonders viel Spaß gemacht. In GdI2 arbeitet man noch immer mit der relativ einfach BlueJ-Umgebung. (Wird jedenfalls von der W3L so empfohlen. Kann man natürlich auch anders machen.) Hier ist sehr schön, dass Klassenbeziehungen in der IDE graphisch dargestellt werden, was das Verständnis an diesem Punkt des Lernprozesses erleichtert. Mit zunehmender Komplexität wird die Darstellung allerdings unübersichtlich und es beginnt zu dämmern, dass man nicht für alle Ewigkeit mit BlueJ arbeiten wird.
     
    Schön an dem Kurs ist auch, dass die UML eine große Rolle spielt. Alles, was man in Java lernt, wird parallel in UML gezeigt, so dass man nebenbei lernt, Klassen-, Objekt- und Sequenzdiagramme zu lesen und selbst anzufertigen. Die von der W3L empfohlenen Tools fand ich allerdings zu mächtig und ressourcenhungrig. Ich arbeite meist am Laptop, wo allein die Bildschirmgröße eine Rolle dafür spielt, wie viele Informationen ich gleichzeitig angezeigt bekommen möchte. Hier habe ich mir wesentlich einfachere Tools gesucht, z.B. UMLet, mit dem man  schnell einfache Klassendiagramme erstellen kann. Oder PlantUML, eine Skriptsprache zur Erstellung nicht nur von UML-Diagrammen. Um das Zeichnen von Diagrammen ging es immer wieder in den Einsendeaufgaben, nicht nur ums Programmieren.
     
    Es folgten Kapitel zu Persistenz und Datenhaltung. Hier ging es um:
    - sequentielles Lesen und Schreiben von Dateien
    - einfache Indexverwaltung
    - die Serialisierung von Objekten
    Schnittstellen zu Datenbanken blieben noch ausgeklammert. Das kommt erst in GdI3.
     
    Schließlich ging es um generische Programmierung. Hier verwendet man bei der Deklaration von Klassen und Methoden keine Typen sondern Platzhalter für Typen. So kann man eine Methode für alle möglichen Datentypen programmieren und behält trotzdem den Vorzug der Typsicherheit. Generische Programmierung kann man gut mit objektorientierter Programmierung kombinieren, aber jetzt wurde es schon ganz schön komplex.
     
    Nun kamen zwei Kapitel über Qualitätssicherung. Zuerst über konstruktive Qualitätssicherung. Hier geht es um Prinzipien des guten Klassen- und Methodenentwurfs, so dass Code zum Beispiel gut zu warten ist oder später leichter refaktoriert werden kann. Dieses Kapitel fand ich sehr interessant. Letztlich sind es Strategien, Qualität zu sichern, indem man Software auf saubere Weise plant und konzipiert. Dann ging es um analytische Qualitätssicherung. Das bedeutet, Qualität im Nachhinein zu messen, z.B. indem man Software testet. Dieses Kapitel fand ich sehr trocken, weswegen ich es nur halbherzig bearbeitet habe. Hier wollte ich auf Lücke lernen.
     
    Den Abschluss bildeten 2 kurze Kapitel über C++ und C# als Beispiele für andere objektorientierte Programmiersprachen als Java. Die waren allerdings viel zu kurz, um hinterher in diesen Sprachen programmieren zu können. Sie dienten eher dazu, ein gewisses Bewusstsein für die Besonderheiten von Java zu entwickeln. Am Beispiel von C++ kann man zum Beispiel lernen, was echte Mehrfachvererbung ist und wie diese sich von der Schnittstellenvererbung von Java unterscheidet. Außerdem begreift man, wieviel Arbeit einem Java mit der Garbage-Collection abnimmt. C# ist deswegen interessant, weil es für den .NET-Framework viele Sprachen gibt. Das Kapitel über C# ist auch nützlich, weil man in einem späteren Modul zur Webprogrammierung in ASP-NET reinschnuppert. Da ist es nützlich, C# einmal ausprobiert zu haben.
     
    In der Klausur hatte ich zwar ein zufriedenstellendes Ergebnis, aber das vor allem dank der Bonuspunkte, die ich in diesem Modul einfahren konnte. Rückblickend hätte  ich mich ganz anders vorbereiten müssen. Nach den Erfahrungen mit GdI1 hatte ich erwartet, wieder viel Code schreiben zu müssen. Stattdessen spielte das Zeichnen von UML-Diagrammen eine große Rolle. Es wäre sinnvoll gewesen, solche Diagramme öfter von Hand zu zeichnen. Das hatte ich in der Bearbeitung des Moduls immer mit Software erledigt. Die kümmert sich darum, dass alles richtig proportioniert ist und auf die Seite passt. Beim Zeichnen von Hand muss man etwas vorausdenken. Das hätte man gut üben können und das hätte mir in der Klausur viel Zeit und damit verbundenen Stress erspart. Außerdem spielte die analytische Qualitätssicherung in der Klausur eine Rolle. Hier hatte ich nichts wiederholt, weil ich gehofft hatte, dieses für mich nicht so spannende Thema würde ausgespart bleiben. Auch, weil es ein eigenes Pflichtmodul zum Softwaretesten gibt. Aber nein, alles kann drankommen. Anderen Studierenden würde ich raten, in der Vorbereitung auf die Klausur alle Themen abzudecken und sich dabei auf die Grundkonzepte zu konzentrieren.
     
    Rückblickend betrachtet ist das Anliegen dieses Kurses nicht allein die Programmierung in Java sondern vor allem die Vermittlung objektorientierter Grundkonzepte. Diesen Kurs fand ich didaktisch sehr gelungen. Allerdings bin ich mit Vorkenntnissen hineingegangen. Ich hatte  zuvor das Buch "Java lernen mit BlueJ" von David Barnes und Michael Kölling durchgearbeitet. Das war eine sehr  gute Vorbereitung auf das, was mir in GdI2 abverlangt wurde. Dieses Buch kann ich jedem empfehlen, der sich auf einen einführenden Kurs in objektorientierter  Programmierung vorbereiten möchte. Besonders ist hier der "objects first"-Ansatz. Während die meisten Lehrbücher zunächst einmal strukturierte Programmierung zeigen und dann die objektorientierten Konzepte nachschieben, beginnen Barnes und Kölling mit Objekten und Klassen. Möglich wird dies durch die BlueJ-Umgebung, einer IDE die nicht  nach Produktivitäts- sondern nach didaktischen Gesichtspunkten konzipiert ist. Und durch viele halbfertige Projekte, wo schon viel Code da ist, den man noch nicht im Detail verstehen muss. Aber beim Arbeiten mit diesen Bausteinen lernt man viel über die objektorientierten Konzepte. Vieles in GdI2 wäre mir ohne diese Grundlage schwerer gefallen.
     
    Lobend erwähnen möchte ich auch meinen sehr guten Tutor, der mir viele Fragen beantwortete, die nicht direkt mit den Anforderungen des Kurses zu tun hatten. Bei ihm merkte man deutlich, dass er aus der Praxis kommt. Im Gegensatz zur Tutorin aus GdI1 forderte er an vielen Stellen schon einen knapperen, weniger expliziten Programmierstil.
  19. kurtchen
    Mein zweites Modul bei der W3L war "Rechnerstrukturen und Betriebssysteme". Es ist eines von 4 Pflichtmodulen im Studienbereich IT-Systeme. Ich hatte es früh belegt, weil ich wusste, dass es dort auch um Digitalelektronik geht. Da hatte ich ein bisschen Vorkenntnisse, weil ich in der 9. und 10. Klasse einen Differenzierungskurs Mathematik belegt hatte, und da hatten wir uns ein halbes Jahr lang mit Digitalelektronik beschäftigt und z.B. Serienaddierer gebaut. Insofern hatte ich gehofft, dass mir dieses Modul etwas leichter fallen würde, was für den Einstieg ins Studium ja nicht schlecht gewesen wäre. Ein bisschen Zweifel an dieser Entscheidung kamen auf, als beim Präsenztag mehrere Kommilitonen meinten, dieses Modul habe es in sich. Aber da hatte ich schon gebucht und musste die Sache angehen.
     
    Inhalte des Moduls waren:
    - Codierung von Zahlen.
    - Boolesche Algebra:  Ausdrücke, Funktionen, Normalformen
    - Umformung und Minimierung boolescher Ausdrücke
    - darauf aufbauend Schaltnetze: Das sind zustandslose Schaltungen, die bei einem bestimmten Eingangsvektor immer den gleichen Ausgangsvektor liefern.
    - und Schaltwerke: Die haben einen inneren Zustand, der mit dem Eingangsvektor verknüpft wird. Und darum liefern die nicht immer den gleichen Ausgangsvektor bei gleichem Eingangsvektor.
    - Rückkopplungselemente, Flip-Flops, Steuerwerke
     
    Bis  hierhin kam ich mit meinem Schulwissen ziemlich gut mit.
     
    Aber nun ging es weiter mit:
    - Grundstruktur des Prozessors
    - Rechenwerk des Prozessors
    - Steuerwerk des Prozessors
    - Prozessorarchitekturen
    - Befehls- und Programmabarbeitung
    - Koprozessoren
    - Optimierungskonzepte
    - Multiprozessorsysteme
    - Prozessorcaches
    - Ein-/Ausgabe-Komponenten
     
    Da hatte ich weniger Vorkenntnisse und das fiel mir schon schwerer.
     
    Nun kam der Schwenk zur Software also zu Betriebssystemen. Hier ging es vor allem um:
    - Prozessverwaltung
    - Speicherverwaltung
    - Dateiverwaltung
     
    Einsendeaufgaben waren z.B. einen Fehler in einem Schaltwerk finden, ein Schaltnetz vereinfachen, die Vorzüge verschiedenen Prozessorarchitekturen gegeneinander abwägen, virtuelle Speicheradressen berechnen.
     
    Eine Herausforderung bei diesem Kurs war, dass das Lehrbuch sehr dicht geschrieben war. Es hatte nur an die 200 Seiten, was mir zunächst sehr wenig vorkam. Aber die hatten es in sich. Jeder Satz zählte. Am Anfang hatte ich mit diesem Stil meine Schwierigkeiten. Ich hatte mir viel Sekundärliteratur aus der Uni-Bibliothek besorgt, um alles noch einmal und ausführlicher zu lesen. Nach einer Weile merkte ich jedoch: Das knappe Buch der W3L enthält alles was man braucht. Man muss nur sehr genau lesen und sich klar machen, dass jeder Satz wichtige Informationen enthält. Nachdem ich  das begriffen hatte, war ich von dem  Buch sogar ziemlich begeistert. Wegen der knappen Form konnte man es sehr gut zum Nachschlagen benutzen. Es dauerte nie lange, etwas zu finden.
     
    Sehr hilfreich war auch bei diesem Kurs die recht intensive Betreuung durch meinen Tutor, der viele weitergehende Fragen von meiner Seite in kurzer Zeit beantwortete und auch mal auf Nachfrage zusätzliches Material per PDF schickte. So bekam ich im Laufe der Zeit doch ziemlich viel Spaß an der Auseinandersetzung mit den Themen des Kurses.
     
    Die Klausur lief dann auch  ganz gut. Ich hatte sogar Zeit, vieles noch einmal gründlich zu checken. Geholfen hat mir hier, dass ich die Einsendeaufgaben in der Vorbereitung noch einmal  gründlich durchgegangen war und auch die Online-Klausur geschrieben hatte. Das gab schon einen ganz guten Eindruck von dem, was einen erwartete.
     
    Nach dem Kurs hätte ich Lust gehabt, vertiefende Kurse mit Hardwarebezug zu buchen. Internet of things ist ja ein aktuelles Schlagwort und es gibt auch immer mehr embedded systems, die in irgendeiner Weise vernetzt sind. Leider hat die W3L hierzu bislang nichts im Angebot. Das Studium heißt "Web- und Medieninformatik", insofern spielen Web-Technologien die entscheidende Rolle. Hardware ist eher ein Grundlagenthema, mit dem man sich einmal auseinander gesetzt haben sollte. Um mehr  davon zu bekommen, hätte ich wohl eher  technische  Informatik studieren müssen. Vielleicht kommt ja später einmal eine Gelegenheit, mich mit solchen Themen vertieft zu beschäftigen.
     
  20. kurtchen
    Mein erstes Modul bei der W3L war "Grundlagen der Informatik 1". Dies ist das erste von insgesamt 5 aufeinander aufbauenden Modulen zur Programmierung in Java. In GdI1 fängt man an mit strukturierter Programmierung. Objektorientierte Konzepte werden in diesem Modul noch umschifft. Das heißt auch, dass man lediglich Konsolenprogramme schreiben kann, denn der Umgang mit GUI-Bibliotheken setzt voraus, dass man objektorientierte Konzepte verstanden hat.
     
    Hier geht es zunächst einmal um grundlegende Dinge:
    - Datentypen
    - Probleme und Fehlerquellen bei Fließkommaarithmetik
    - Variablen und Zuweisungen, Konstanten
    - Felder
    - Funktionen bzw. Methoden
    - Lokale Variablen
    - Übergabe von Parametern
    - Call-by-value vs. call-by-reference
    - Bedingte Verzweigungen und andere Kontrollstrukturen
    - Schleifen
    - Darstellung des Programmflusses, zunächst mal klassisch mit Nassi-Shneidermann-Diagrammen
    - Und dann mit UML
    - Felder
    - einfaches Sortieren
    - Rekursion
     
    Es wird empfohlen, die Programmierübungen in der Entwicklungsumgebung BlueJ zu machen. Daran habe ich mich gehalten und ich fand das für den Einstieg gut.
     
    Es gibt ein erstes Kapitel über Software-Tests, z.B. über Regressionstests. Ferner gibt es ein Kapitel über Verifikation. Hier geht es darum, die Korrektheit eines Programms formal zu beweisen. Dies war das einzige Kapitel, das ich nicht so gut verständlich fand. Hier ist es mir auch nicht gelungen, die Einsendeaufgabe zur vollen Zufriedenheit meiner Tutorin zu lösen.
     
    Um auch mal etwas anderes kennen zu lernen, endet der Kurs mit zwei recht knappen Kapiteln über andere Programmiersprachen. Man experimentiert ein wenig mit C. Das ist aber vom Umfang her nicht genug, um diese Sprache zu lernen. Eher bekommt man ein Bewusstsein dafür, was Java einem alles abnimmt und worum man sich in einer vergleichweise maschinennahen Sprache selber kümmern muss. Und dann kam noch ein recht kurzes Kapitel über Processing. In dieser Sprache kann man mit geringen Vorkenntnissen Grafik und Animationen programmieren. Processing basiert letztlich auf Java. Ich habe das als spaßiges Element erlebt, um am Ende auch mal etwas anderes zu machen als immer nur Konsolenanwendungen.
     
    Die wenigsten Inhalte des Kurses waren völlig neu für mich. Aber ich fand den didaktischen Aufbau recht gelungen und habe noch einmal viele eigentlich bekannte Dinge in einem anderen Licht oder in einem anderen Zusammenhang gesehen. So war ich am Ende doch sehr froh, diesen Kurs als solide Grundlage gemacht zu haben.
     
    Die Rückmeldungen und Antworten meiner Tutorin waren in diesem Kurs besonders ausführlich. Hier gab es ein erkennbares Bemühen, dem Einsteiger ein bisschen mehr Hilfe zu geben. Die Rückmeldungen in den fortgeschritteneren Kursen sind deutlich knapper, vor allem, wenn die eingereichten Lösungen passen.
     
    Einen kleinen Schock erlebte ich, als ich durch die freiwillige Online-Klausur am Ende des Kurses durchgefallen bin. Hier hatte ich mich zeitlich völlig verzettelt. Außerdem hatte ich unterschätzt, dass ich ein wenig Zeit extra einplanen musste, um Lösungen zu zippen und hochzuladen. In der Bedienung der Lernplattform war ich noch etwas unerfahren und ungeschickt. Darum gab es da ein paar Fehlbedienungen und am Ende war die Zeit um, bevor ich alles hochladen konnte.
     
    Hier hat mir sehr weitergeholfen, dass meine Tutorin mich motiviert hat, trotzdem zügig die Präsenzklausur anzugehen. Ich habe auch ein paar gute Tipps zur Zeiteinteilung in der Klausur bekommen und generell zum Thema Prüfungsvorbereitung. Im Grunde alles Sachen, die einem der gesunden Menschenverstand hätte sagen sollen, aber es war für mich schon lange her, dass ich mich einer Prüfung unterzogen hatte. Und so war das wirklich sehr hilfreich, das noch mal so gesagt zu bekommen. (In späteren Modulen wird allerdings schon vorausgesetzt, dass man seine Lerntechnik drauf hat, sich selbst motivieren und auch mit Rückschlägen umgehen kann.)
     
    Nach der verpatzten Online-Klausur bin ich doch mit großen Respekt und ziemlichem Bammel in die Präsenzklausur gegangen. Ungewohnt war hier, nur mit Papier und Stift arbeiten zu können und keine IDE zu haben. Darauf hatte mich meine Tutorin aber vorbereitet und mir geraten, auch mal zu üben, ein paar Aufgaben nur mit Stift und Papier zu lösen, um ein bisschen auf Tempo zu kommen. Man schreibt ja heute nur noch selten mit der Hand. Zu meiner großen Überraschung, fiel mir die Präsenzklausur dann recht leicht. Ich war innerlich ruhig, konnte mich gut konzentrieren, mir die Zeit gut einteilen und meine Leistung erbringen. Mit dem Ergebnis war ich dann auch zufrieden.
     
    Nach dem Abschlusstest jedes Moduls bekommt man einen Link zu einer Online-Befragung geschickt. Hier kann man das Modul und auch seinen Tutor bewerten.
     
    Auf mein Klausurergebnis musste ich ca. 3 Wochen warten. Das kam mir ewig vor, aber heute weiß ich, dass das eigentlich ein recht guter Wert war. Meistens dauert es noch ein bis zwei Wochen länger.
     
    Fazit: Dieser Einstieg ins Studium hat mir viel Spaß gemacht, mein Selbstvertrauen gestärkt und mich stark motiviert, die nächsten Schritte zu gehen. Programmieren war natürlich auch ein bisschen das, was ich mir noch ganz naiv unter einem Informatik-Studium vorgestellt hatte. Mein nächstes Modul sollte dann "Rechnerstrukturen und Betriebssysteme" werden und das war natürlich ganz anders. Aber davon erzähle ich ein andermal.
  21. kurtchen
    Bislang habe ich folgende Module abgeschlossen:
     
    3. Semester - Wintersemester 2016/2017
    - Mathematik 3
    - Softwaretechnik 1
    - Nicht-sequentielle Programmierung
    - Statistik
    - IT-Sicherheit
    - Mobile Computing
     
    2. Semester - Sommersemester 2016
    - Grundlagen der Informatik 3
    - Grundlagen der Informatik 4
    - Web-Anwendungen 1
    - Web-Ergonomie und Web-Design
    - Computernetze
    - Mathematik 2
     
    1. Semester - Wintersemester 2015/2016
    - Grundlagen der Informatik 1
    - Grundlagen der Informatik 2
    - Rechnerstrukturen und Betriebssysteme
    - Datenbanken und SQL
    - Mathematik 1
    - Web-Programmierung
     
    Aktuell in Bearbeitung
    - Web-Anwendungen 2
    - Softwaretechnik 2
  22. kurtchen
    Mit diesem Blog möchte ich Leser informieren, die sich für ein Fernstudium der Informatik interessieren. Ich studiere seit September 2015 für einen Bachelor in Web- und Medieninformatik an der W3L in Dortmund. Bislang gefällt mir das Studium ziemlich gut. Leider ist der Studiengang wenig bekannt, weswegen ich in meiner Region nur wenige Studierende kenne, die in etwa so weit sind wie ich. Das erschwert natürlich den Erfahrungsaustausch im Studium. Anlass für den Blog ist darum auch mein Wunsch, das Studium an der W3L ein wenig bekannter zu machen, in der Hoffnung, dass künftige Studierende es ein wenig leichter haben mögen als ich.
     
    Ich bin berufstätig, habe eine Familie und muss nun auch noch Zeit zum Lernen finden. Darum habe ich mir vorgenommen, nicht zu viel Zeit in den Blog zu stecken. Tägliche Berichte, wie es mir gerade geht oder wie sich meine Studienmotivation entwickelt, möchte ich hier nicht einstellen.
     
    Geplant sind Berichte über Module des Studienganges, die ich abgeschlossen habe. Die Modulberichte werden also alle in der Rückschau sein.
     
    Kurz zu den Rahmenbedingungen des Studiums:
    - Der Studienvertrag wird geschlossen mit der W3L. Zugleich schreibt man sich an der FH-Dortmund ein. Man bucht Module über die W3L und nutzt deren Lernplattform. Der Bachelor wird am Ende von der FH-Dortmund verliehen. Das ist vielleicht interessant für Leute, die wert auf einen Abschluss einer staatlichen FH legen.
    - Ich zahle eine monatliche Rate von 332 Euro über 36 Monate. Dazu musste ich mich vertraglich binden. Man kann auch flexibel studieren. Dann zahlt man nur die Module, die man gerade bucht, ohne irgendeine weitere Verpflichtung einzugehen. Diese Flexibilität erkauft man aber mit höheren Kosten. Ich habe die ersten Monate flexibel studiert und bin dann in den Vertrag gewechselt, als ich gemerkt habe, dass ich gut zurechtkomme. Soweit ich informiert bin, ist im Vertrag eine Probezeit vorgesehen, so dass man auch von Anfang an von den günstigen Bedingungen eines Studienvertrages profitieren könnte.
    - An der W3L gibt es auch die Möglichkeit, durch Abschluss bestimmter Modulkombinationen ein Zertifikat über wissenschaftliche Weiterbildung zu erhalten. Das wird ebenfalls verliehen von der FH Dortmund. Für mich war das ein wichtiger Grund, mich für das Studium bei diesem Anbieter zu entscheiden. Ich war mir anfangs nicht sicher, ob ich die Ausdauer für ein ganzes Studium haben würde. Inzwischen bin ich recht zuversichtlich, dass meine Puste für die ganze Strecke reichen kann. Trotzdem finde ich den Gedanken beruhigend, dass ich nicht mit leeren Händen aussteigen muss, sollten sich meine Lebensumstände ändern.
    - Die Module schließen mit einer schriftlichen Prüfung ab. Prüfungstermine gibt es etwa alle 6-7 Wochen. Leider gibt es bislang nur 3 Prüfungsstandorte: Dortmund, München, Wien. In München fällt eine Gebühr von 50 Euro pro Prüfungstermin an, egal wie viele Klausuren man an dem Termin schreibt. Das ist für mich ärgerlich, weil München für mich am besten zu erreichen ist und ich die meisten Klausuren dort schreibe. Die schriftlichen Prüfungen dauern in der Regel 2 Stunden.
    - In manchen  Modulen gibt es zusätzlich eine mündliche Prüfung, z.B. wenn man "Präsentation" oder "Rhetorik" belegt.
    - Zwei Mal pro Jahr gibt es einen Präsenztag mit Vorträgen und Workshops zu verschiedenen Themen mit Informatik-Bezug. Die Teilnahme ist nicht verpflichtend. Ich mache das aber gerne, denn es ist eine gute Möglichkeit, einmal andere Kommilitonen zu treffen und sich über Belange des Studiums auszutauschen. Das hilft bei der Auswahl der nächsten Module, der Zeiteinteilung im Studium, auch bei der Klausurvorbereitung. Ich nehme an, auch für die Wahl der Wahlpflichtmodule wird dieser Austausch wertvoll sein. Beim Präsenztag gibt es auch Workshops zur Zeiteinteilung im Studium oder Mathe-Tutorien. Insbesondere letzteres ist für viele Kommilitonen nützlich. Da man an der W3L auch Wirtschaftsinformatik studieren kann, gibt es am Präsenztag auch Vorträge zu solchen Themen.
    - In jedem Kurs hat man einen Tutor, der einen betreut, Aufgaben korrigiert und Fragen zum Stoff beantwortet. Hier habe ich überwiegend sehr positive Erfahrungen gemacht. Bei manchen Tutoren ist die Reaktionszeit etwas länger. Das ist unpraktisch, wenn man auf einen Prüfungstermin hinarbeitet und mit einem Problem alleine nicht weiterkommt. Zum Glück hatte ich dieses Problem bislang nur selten.
    - Zu jedem Kurs gehören Tests und Aufgaben. Tests löst man am Computer. Es sind meist Multiple-Choice-Tests, manchmal Zordnungstests oder Lückentexte. Test werden automatisch ausgewertet. Man kann sie beliebig oft wiederholen. Der Sinn der Tests ist, den Lernstoff zu festigen, sich aktiv damit auseinander zu setzen und beim Durcharbeiten ein Feedback zu haben, ob man alles gut verstanden hat. Die Anzahl der Tests kann unterschiedlich sein. Oft sind es so um die 80 Tests.
    - Aufgaben werden an den Tutor geschickt und von diesem bewertet. Im Gegensatz zu den Tests erfordern Aufgaben eine aktivere Auseinandersetzung mit dem Stoff. Hier muss man z.B. etwas programmieren, UML-Diagramme zeichnen, Skizzen für Web-Oberflächen zeichnen, den Einsatz verschiedener Techniken argumentativ gegeneinander abwägen. In den Aufgaben muss man 50% der möglichen Punkte holen, um zur Abschlussklausur zugelassen zu werden.
    -  In jedem Modul gibt es einen Abschlusstest, den man bei Nichtbestehen zwei mal wiederholen darf. Die Aufgabentypen sind ähnlich wie in den Tests. Der Abschlusstest muss bestanden werden, um zur Klausur zugelassen zu werden. Für besonders gutes Abschneiden bekommt man Bonuspunkte, mit denen man die Klausurnote ein wenig verbessern kann.
    - Außerdem kann man freiwillig eine Online-Klausur schreiben. Hier sind unter Zeitdruck mehrere Aufgaben zu bearbeiten, die vom Tutor korrigiert werden. Die Online-Klausur ist eine Art Probelauf für die Präsenzklausur, weil man einen Eindruck von der Art der Aufgaben und auch vom Zeitdruck in der Klausur bekommt. Auch hier kann man für gutes Abschneiden Bonuspunkte bekommen, mit denen man das Klausurergebnis noch einmal ein bisschen verbessern kann. Der Vorzug ist, dass man etwas gelassener in die Präsenzprüfung gehen kann, weil man sich zumindest ein paar kleinere Ungenauigkeiten erlauben kann. Eine fehlgeschlagene Online-Klausur darf man nicht wiederholen.
    - Zu jedem Modul erhält man ein Lehrbuch. Man kann, muss aber nicht am Bildschirm lernen. In vielen Modulen finde ich es praktischer, mit dem Buch zu arbeiten, z.B. in Mathematik. In anderen Modulen arbeite ich eher in der Lernplattform, z.B. bei den Programmiermodulen, weil ich da schnell zwischen IDE und Lernplattform wechseln kann. Es gefällt mir, hier die freie Wahl zu haben. Videos spielen auf der Lernplattform eine recht geringe Rolle. Man lernt vorwiegend durch Text und Bild.
    - Mit der Betreuung durch das Studienbüro bei organisatorischen Fragen und Problemen habe ich bislang sehr positive Erfahrungen gemacht. Man merkt, dass die W3L ein recht kleiner Anbieter ist. Das gefällt mir aber gut, denn ich habe ich der Regel die gleichen Ansprechpartner am Telefon und lande nicht in einem Callcenter.
    - Die vorherrschende Programmiersprache ist bislang Java. Serverseitige Webprogrammierung läuft mit JSP. Das ärgert manche Kommilitonen, die beruflich meist PHP einsetzen. Mein Eindruck ist, dass die W3L im Bereich Softwaretechnik stark ist. An den Mathemodulen gefällt mir, die gute tutorielle Betreuung. Das ist für viele Kommilitonen eine Hürde und ich habe den Eindruck, dass man hier gute Lehrkräfte gefunden hat, die helfen können, diese Herausforderung zu meistern. Bislang nicht so ganz so gut finde ich die Module zu Webtechnologien. Das ist für mich ein wenig enttäuschend, weil der Studiengang ja "Web- und Medieninformatik" heißt. Hier hat sich in den letzten Jahren mit dem Siegeszug des mobilen Internets viel getan, was sich noch nicht in den Modulen wiederspiegelt.
    - Man kann die Module in beliebiger Reihenfolge belegen, auch wenn für viele Module empfohlen wird, bestimmte Module zuvor abgeschlossen zu haben. Im flexiblen Studienmodell kann man buchen was man will und wann man will. Im Vertragsmodell kann man jeden Monat ein Modul freischalten lassen. Wie lange man für ein Modul braucht, entscheidet man selbst. Man kann sich zu jedem Modul an jedem beliebigen Prüfungstermin zur Klausur anmelden, solange man sich rechtzeitig - also ca. 10 Tage vorher - meldet.
    - Die Lernplattform bietet technisch Möglichkeiten, sich mit Kommilitonen auszutauschen. Foren, Chats und solche Sachen. Da ist aber nie jemand unterwegs, so dass einem das rein gar nichts nützt. Wer auf so etwas wert legt, nimmt bei den Klausurterminen oder Präsenztagen Kontakt zu Kommilitonen auf und organisiert einen direkten Austausch, per Mail, WhatsApp, Facebook oder was es sonst so gibt.
     
    Ich hoffe auf interessierte Leser.
     
    Kurtchen
     
×
  • Neu erstellen...