Zum Inhalt springen

kurtchen

Communitymitglied
  • Gesamte Inhalte

    879
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von kurtchen

  1. Bislang war ich von allen Mathematik-Modulen bei Springer Campus begeistert. An Mathe 1 "Mathematisch-logische Grundlagen der Informatik" habe ich vor allem die sehr intensive Betreuung durch meinen Tutor geschätzt. Das war gerade bei meinem ersten Mathe-Modul sehr hilfreich war. An Mathe 2 "Lineare Algebra" und "Analysis" und Mathe 3 "Angewandte Mathematik" gefielen mir die sehr guten PDF-Tools von Herrn Lenze, mit denen man sich selbst nach Bedarf Übungsaufgaben generieren konnte. Die Messlatte für das letzte Mathematik-Modul "Statistik" lag also schon ziemlich hoch. Nachdem ich diesen Kurs am letzten Freitag abgeschlossen habe, kann ich sagen: Das beste kommt zum Schluss. Auf das Modul Statistik war ich... sagen wir mal gespannt. Ich gehöre ja zu denen, die Mathematik zu Schulzeiten mochten. Aber mit Statistik habe ich mich tatsächlich in der Schule nie beschäftigt. Nicht mal mit Wahrscheinlichkeitsrechnung. In der Mittelstufe legte unser Lehrer das Thema immer ans Ende des Schuljahres, weil er es für unwichtig hielt. Und Jahr für Jahr kamen wir mit dem Stoff nicht schnell genug voran, so dass es am Ende wegfiel. In der Oberstufe war in meinem Bundesland Analysis für alle Abiturienten Pflicht. Außerdem konnte wahlweise Statistik oder Lineare Algebra mit analytischer Geometrie behandelt werden. An meiner Schule wurde nur lineare Algebra angeboten. Das war natürlich eine gute Grundlage für das Modul Mathe 2. Aber was Statistik angeht, hatte ich tatsächlich nur ganz geringe Vorkenntnisse. Dabei spräche vieles dafür, gerade dieses Gebiet der Mathematik im Schulunterricht zu betonen. Analysis und lineare Algebra sind wichtig in technischen und naturwissenschaftlichen Studiengängen. Statistik braucht man in Biologie und Medizin, in den Wirtschaftswissenschaften und in allen Sozialwissenschaften. Und wenn Geisteswissenschaftler überhaupt Mathematik brauchen, so ist es wohl Statistik. Wer Nachrichten schaut oder Zeitung liest, ist laufend mit Statistiken konfrontiert. Statistische Grundkenntnisse müssten eigentlich zur Allgemeinbildung gehören. Last but not least ist die Statistik der Teil der Mathematik, der sich mit dem Ungewissen und Unpräzisen beschäftigt, während die meisten anderen Gebiete der Schulmathematik den Eindruck erwecken, Mathematik handele allein vom Exakten. Ich war also sehr neugierig darauf, diese Lücke meiner Bildungsbiographie zu schließen. Das Lehrbuch "Basiswissen Statistik" von Michael Müller und Werner Poguntke ist Grundlage für diesen Kurs. Es hat an die 180 Seiten, was für ein Modul bei Springer Campus sehr wenig ist. Wie schon bei den anderen mathematischen Kursen ist die Informationsdichte sehr hoch. Die 180 Seiten erfordern durchaus vergleichbar viel Arbeit wie 500 Seiten Software-Engineering. Das Buch ist aber keine reine Formel- und Beweisorgie. Anwendungsbeispiele zu allen Themen machen dieses Buch besonders lebendig und praxisnah. Man merkt, dass Statistik ein Fach ist, dass man in vielen Wissens- und Lebensbereichen brauchen kann. Während in anderen Mathematik-Modulen die Anwendungsbeispiele gelegentlich ein bisschen konstruiert wirkten, konnte man hier immer gleich den Nutzen des ganzen erkennen. Wie schon beim Lehrbuch "IT-Sicherheit" hat Herr Poguntke auch hier viele Verweise innerhalb des Buches eingebaut. Er verweist auf künftige Kapitel, in denen ein aktuell behandeltes Thema noch einmal relevant werden wird. Und er verweist auf vorangegangene Kapitel, in denen man Grundlagen für den aktuellen Stoff noch einmal nachlesen kann. Das hat mir sehr geholfen, die Bezüge zwischen den Kursthemen zu erkennen und den Stoff im Zusammenhang zu denken. Darum bin ich der Meinung, "Basiswissen Statistik" ist das beste unter den guten Mathematik-Lehrbüchern im Studiengang. Lehrbuch, Online-Tests und Übungsaufgaben sind in diesem Modul besonders gut aufeinander abgestimmt. Es gibt Übungsaufgaben zu allen Themen des Kurses. PDF-Tools, mit denen man sich selbst neue Aufgaben generieren kann, gibt es in diesem Kurs leider nicht. Ich habe aber festgestellt, dass das Übungsmaterial genügt, um sich gut auf die Prüfung vorzubereiten. Der Kurs zerfällt im wesentlichen in zwei Teile: - deskriptive Statistik - induktive Statistik Der Unterschied ist folgender: In der deskriptiven Statistik habe ich eine vollständige Sammlung von Daten oder Werten, die ich verdichten möchte, um eine allgemeine Aussage zu treffen. Aus dem Alltag geläufig ist zum Beispiel der Durchschnitt, der in der deskriptiven Statistik Mittelwert heißt. Er fasst zum Beispiel alle Noten eines Studium in einem Wert zusammen. In der induktiven Statistik habe ich eine Stichprobe, von der ich auf eine Gesamtmenge schließen möchte. Es gibt Millionen Wahlberechtigte Bürger, aber befragt habe ich nur ein paar Tausend. Nun möchte ich eine Prognose abgeben, wie die Wahl ausfallen wird und ich möchte abschätzen können, mit welcher Wahrscheinlichkeit meine Prognose zutrifft. Kennzeichnend für die induktive Statistik ist also, dass... ... mir ein großer Teil der relevanten Daten unbekannt ist. ... ich wahrscheinlichkeitstheoretische Überlegungen anstellen muss. Themen in der deskriptiven Statistik sind: - Lage- und Streuungsmaße - Graphische Darstellungen von Häufigkeiten - Konzentration und Disparität - Lorenzkurve - Konzentrationskoeffizient nach Gini - Messzahlen und Indizes - Geometrisches Mittel - Zusammenhangsanalyse - Kreuztabellen - Unabhängigkeit und Kontingenzmaße - der Korrelationskoeffizient nach Pearson und nach Spearman - Lineare Regression - Zeitreihenanalyse Die Themen sind sehr lebensnah präsentiert. Mathematisch ist relativ leicht nachzuvollziehen, was hier geschieht. Dieser Teil des Kurses ist vergleichsweise einfacher. Wer sich mit Mathematik schwer tut, sollte sich auf diesen Teil konzentrieren, weil man hiermit in der Klausur einen guten Punktesockel aufbauen kann, so dass man zumindest nicht durchfällt. Die induktive Statistik ist ein bisschen schwieriger und mathematisch raffinierter. Im Grunde wird die Sache in drei Schritten aufgebaut: 1. Die Kombinatorik handelt davon, auf wieviele Arten man aus Mengen etwas auswählen kann. Ein aus dem Alltag bekanntes Beispiel ist die Ziehung von 6 Lottozahlen aus 49. 2. Die Wahrscheinlichkeitsrechnung weist auf dieser Grundlage bestimmten Ereignissen und Kombinationen von Ereignissen eine Zahl zwischen 0 und 1 zu, die man Wahrscheinlichkeit nennt. Was genau eine Wahrscheinlichkeit ist, bleibt letztlich eine philosophische Frage. (Psychologisch interessant ist, dass man beim Umgang mit Wahrscheinlichkeiten leicht in gewisse "kognitive Tunnel" rennt. Das sind Irrwege des Denkens, die einem zeigen, dass man leider gerade im praktisch relevanten Gebiet der Wahrscheinlichkeitsrechnung nicht gut beraten ist, auf Intuition zu setzen. Die Autoren präsentieren in diesem Zusammenhang ein paar interessante Paradoxien, z.B. das Simpson Paradox. Dieses wird im Lehrbuch anhand von zwei Gruppen präsentiert, in denen der Anteil der nichtrauchenden Männer höher ist als der der nichtrauchenden Frauen. Vereint man diese beiden Gruppen zu einer, so ist der Anteil nichtrauchender Frauen höher. Das überrascht und verwirrt, auch wenn man alles wiederholt nachrechnet.) 3. Auf der Grundlage von Kombinatorik und Wahrscheinlichkeitsrechnung beschäftigt man sich nun mit verschiedenen Wahrscheinlichkeitsverteilungen, von denen die bekannteste die Standard-Normalverteilung ist. Sie ist auch als Glockenkurve bekannt. Normalverteilungen sind deshalb so nützlich, weil dort, wo sich viele zufällige Phänomene überlagern, regelmäßig eine Normalverteilung zu beobachten ist. Themen in der induktiven Statistik sind: - Kombinatorik - Rechnen mit Wahrscheinlichkeiten - Bedingte Wahrscheinlichkeiten - Kontingenztabellen und Wahrscheinlichkeitsbäume - die Bayes-Formel - Gemeinsame Wahrscheinlichkeiten - Zufallsvariablen - Bernoulli-Verteilung - Binomial-Verteilung - Hypergeometrische Verteilung - Poisson-Verteilung - Stetige Verteilungen - Exponential-Verteilung - Normalverteilung - t-Verteilung - zentraler Grenzwertsatz - Approximation mit der Normalverteilung - Schätzen und Testen - Schätzung unbekannter Parameter - Testverfahren Es folgt ein knappes Kapitel über Statistik mit Rechnern, das aber nicht klausurrelevant ist. In diesem Kurs lernt man, Statistik sozusagen mit Papier und Bleistift zu treiben. Dabei merkt man durchaus, dass viel mechanische Rechenarbeit anfällt. Aus diesem Grund darf in der Klausur ein nicht-programmierbarer Taschenrechner verwendet werden. Wer einmal erlebt hat, wie viel Mühe es macht, eine größere Menge von Messwerten zu verdichten, der kommt schnell auf die Idee, das man das mit Software automatisieren müsste. Das ist allerdings nicht mehr Thema dieses Moduls. Die Betreuung durch meinen Tutor war auch in diesem Mathematik-Modul hervorragend. Die Rückmeldungen kamen schnell. Spannend wurde es gerade dann, wenn ich nicht alles richtig hatte. Hier gab es dann Anregungen, wie man doch noch selbst auf die richtige Lösung kommen konnte. Einmal bin ich in einen der besagten kognitiven Tunnel getappt, so dass ich alles richtig gerechnet und am Ende doch die falschen Schlüsse gezogen habe. Das war ein recht witziger Austausch, bis bei mir endlich der Groschen fiel. (Kurz gesagt, bin ich auf eine Variante des bekannten "Ziegenproblems" reingefallen. Wer das nicht kennt, einfach mal googlen.) Der Online-Test und die Online-Klausur waren beide gut machbar, wenn man seine "Hausaufgaben" erledigt hatte. Hier konnte man sich noch mal ein kleines Bonuspunktepolster für die Klausur erarbeiten. Geschenkt bekommt man es aber nicht. Die Online-Klausur gibt einen realistischen Vorgeschmack auf das Niveau der Präsenzklausur. Schwierig für mich war: Mein gewohnter Taschenrechner ist programmierbar und funktioniert mit RPN-Logik. Für die Klausur musste ich mir den Taschenrechner meiner Tochter ausleihen. Es hat mich tatsächlich ausgebremst, ständig suchen zu müssen, wo welche Taste ist. Mal schauen, wie verheerend sich das ausgewirkt hat. Unterm Strich ist das aber eine faire Klausur, die die Themen des Kurses breit abdeckt. Man hat ein bisschen Zeitdruck, kann aber alles schaffen, wenn man ordentlich vorbereitet ist. Damit wäre nun der Studienbereich Mathematik abgeschlossen. Was mir jetzt noch gefallen würde, wäre ein aufbauendes Modul zur Statistik mit Rechnern. Ich denke zum Beispiel an Datenanalyse mit R oder Statistik-Programmierung mit Python. (Da gibt es ein tolles Buch von Allen B. Downey.) Auch ein Modul zur Datenvisualisierung fände ich für einen Studiengang Web- und Medieninformatik ziemlich cool. Gibt es leider bislang nicht, aber ein paar Wünsche dürfen ja noch offen bleiben.
  2. Das Modul "Mobile Computing" kann als eines von drei Vertiefungsmodulen im Studiengang Web- und Medieninformatik gewählt werden. Springer Campus schlägt vor, es in den letzten beiden Semestern zu belegen. Gleich vier Module werden als sinnvolle Vorbereitung genannt: - Grundlagen der Informatik 1 - Grundlagen der Informatik 2 - Web-Programmierung - Web-Design und Web-Ergonomie Der Grund dafür ist der siebte Kursabschnitt "Programmierung für mobile Endgeräte", der eine Einführung in die Android-Programmierung gibt. Um hier folgen zu können, benötigt man Grundkenntnisse der objektorientierten Programmierung in Java. Die Layouts für die GUIs werden mit XML beschrieben. Darum sind Vorkenntnisse in Web-Programmierung von Vorteil. Für Studierende im Studiengang "Wirtschaftsinformatik" ist "Mobile Computing" ein Pflichtmodul und wird dem Studienbereich "Grundlagen der Informatik" zugerechnet. Für die Web- und Medieninformatiker gibt es zwei gute Gründe, ausgerechnet dieses Modul als Vertiefung zu belegen: Es ist Pflichtmodul für die Hochschulzertifikate "Anwendungs-Programmierer" und "Software-Architekt", die als Meilensteine auf dem langen Weg zum Bachelor dienen können. Ich persönlich hätte erwartet, dass es in diesem Modul vorwiegend um Android-Programmierung gehen würde. Tatsächlich nimmt diese aber nur einen relativ kleinen Teil des Kurses ein. Hier wird eher ein Einblick gegeben, der meiner Meinung nach noch nicht ausreicht, um wirklich loszulegen. Es ist allenfalls ein Einstieg und man wird auf jeden Fall vertiefende Literatur benötigen, um Fortschritte zu machen. Tatsächlich geht es in diesem Modul allgemein um mobile Rechner, die vernetzt sind und standortbezogene Informationen einbeziehen. Das Smartphone ist dafür nur das prominenteste Beispiel. Mobile Computing ist etwas schneller durchgearbeitet als andere Module bei Springer Campus. Das Lehrbuch hat lediglich 200 Seiten, wenngleich diese ein bisschen größer ausfallen als bei anderen Lehrbüchern und auch ein bisschen enger bedruckt sind. Das Lehrbuch wird ergänzt durch 84 Tests und 12 Einsendeaufgaben, von denen lediglich eine mit Android-Programmierung zu tun hat. Die meisten Aufgaben haben eine Art Aufsatzform. Es sind oft Texte bei denen man etwas abwägen muss. So soll man z.B. entscheiden, ob man für einen bestimmten Einsatzzweck einem Android- oder IOS-Gerät den Vorzug geben würde, ob man ein bestimmtes Projekt nativ oder plattformübergreifend entwickeln würde oder was für Sicherheitsmaßnahmen man für die Handynutzung eines hochrangigen Politikers für nötig erachtet. Diese Art der Aufgaben, bei denen man in erster Linie Text produziert, fällt etwas aus dem Rahmen, den ich im Studium sonst gewohnt bin. Die Rückmeldungen meines Tutors kamen in diesem Modul sehr zügig. Die 7 Kapitel decken folgende Themen ab: 1. Was ist mobile Computing? Hier geht es auch um technische Meilensteine auf dem Weg zum mobile Computing. 2. Mobile Geräte. Hier werden verschiedene Mobiltelefon-Plattformen vergleichend betrachtet. Obwohl die zweite Auflage des Lehrbuches von 2015 ist, merkt man hier deutlich, dass der Markt sich rasant weiterentwickelt. So werden z.B. die Vorzüge von Blackberry diskutiert, was ja mittlerweile Geschichte ist. 3. Hardware für mobile Geräte: Hier erfährt man etwas über die Besonderheit von Prozessoren für mobile Geräte, aber auch über Akkutechnik und Grafikhardware. 4. Drahtlose Kommmunikation: Hier beschäftigt man sich mit verschiedenen Mobilfunkstandards, mit Formen der Modulation und des Multiplexings, mit WLAN, Bluetooth aber auch mit Nahfeldkommunikation mit RFIDs. 5. Location Based Services: Hier geht es um verschiedene Verfahren der Positionsbestimmung per Satellit (GPS) oder gestützt durch stationäre Netze (Handynetze oder auch WLAN-Accesspoints). Außerdem geht es um Techniken zur Positionsbestimmung in Gebäuden. 6. Sicherheit für mobile Geräte und mobile Kommunikation: Aus meiner Sicht das interessanteste Kapitel. Hier werden verschiedene Bedrohungsszenarien für mobile Geräte vorgestellt und die Wirksamkeit von Gegenmaßnahmen erörtert. 7. Programmierung für mobile Endgeräte: Ich hätte erwartet, dass es nun endlich um Android-Programmierung geht. Aber hier spielten zum Beispiel auch Besonderheiten des UI-Designs für mobile Geräte eine größere Rolle, unabhängig von bestimmten Platformen. Im Schnelldurchgang lernt man dann, wie man ein einfaches GUI programmiert, Positionsbestimmung nutzt und Google Maps in eine eigene Applikation einbindet. Auch persistente Datenspeicherung - unter anderem mit SQLite - wird knapp behandelt. Obwohl ich noch nicht weiß, wie ich in der Klausur abgeschnitten habe, würde ich sagen, dass dies einer der leichtesten Kurse im Angebot von Springer Campus ist. Das berichten mir auch immer wieder Kommilitonen. Mobile Computing gilt als ein Modul, mit dem man seinen Notendurchschnitt etwas verbessern kann. Bei mir hinterlässt das Modul einen gemischten Eindruck. Viele Inhalte könnten einem durchaus geläufig sein, wenn man regelmäßig Meldungen bei Heise oder Golem verfolgt. Mir fehlte hier das Erlebnis, ab und zu auch mal eine richtige harte Nuss knacken zu müssen. Auch die Abschlussklausur fiel etwas aus dem Rahmen. Sie besteht aus ungewöhnlich vielen Fragen, bei denen in erster Linie Faktenwissen abgeprüft wird. Selbstständiges Problemlösen steht bei dieser Klausur nicht im Mittelpunkt. Kann man so machen, aber ich persönlich bevorzuge Aufgaben, bei denen mehr Kreativität gefragt ist. Weil ich es insgesamt ein bisschen zu einfach fand und mir die echte Herausforderung fehlte, würde ich dieses Modul nur solchen Studierenden empfehlen, die - so wie ich - eines der Hochschulzertifikate als Etappenziel und kleinen Motivationskick in den Händen halten wollen. Wer eine gründliche Einführung in die Android-Programmierung sucht, wird sich an anderer Stelle umsehen müssen. Wegen Umfang, Schwierigkeitsgrad und dem sehr hohen Rückmeldetempo des Tutors ist Mobile Computing ein Modul, dass man sich für Situationen aufsparen könnte, in denen die Zeit fürs Studium knapp ist und man trotzdem zum nächsten Prüfungstermin noch etwas abschließen möchte. Solche Situationen, in denen Arbeit oder Familienleben einem kaum Zeit zum Studieren lassen, kennt wohl jeder Fernstudent. Da ist es vielleicht ganz schön, wenn es im Studium auch ein Modul gibt, dass man sozusagen "als Joker" spielen kann.
  3. Sehr gute Darstellung. Ich glaube zwar nicht, dass ich die Puste habe, in meinem Leben noch mal eine Promotion zu machen, aber zumindest weiß ich nun etwas besser, was nötig wäre, um diese Option zu haben. Vielen Dank!
  4. Solche Vergleiche sollte man natürlich nicht überbewerten. Ich habe an der WINGS ja lediglich EIN Modul kennengelernt. Und das war auch noch eines, das mich inhaltlich sehr interessiert hat. Aber es war schon interessant, mal einen kleinen Einblick zu bekommen, wie es an einer anderen FH läuft. Ich fühle mich auf jeden Fall ermutigt, so etwas zu wiederholen, falls ich wieder einmal ein interessantes Angebot sehe.
  5. Wenn ich schon auf Master-Niveau wäre, würde ich mir wahrscheinlich auch mal das Modul "Automatentheorie" aus dem Weiterbildungsmaster Informatik der HS Trier anschauen. Das ist auf 10 ECTS angelegt und basiert auf dem Lehrbuch "Grundkurs theoretische Informatik" von Vossen und Witt. Die Themen sind im Prinzip die gleichen, aber es scheint mathematisch noch etwas tiefer zu gehen. Ist ja auch mehr Zeit angesetzt. Das hätte mich auch interessiert, aber das hätte ich zeitlich parallel zum Bachelorstudium nicht geschafft. In erster Linie wollte ich ja die Voraussetzungen schaffen, um im nächsten Semester "Künstliche Intelligenz" belegen zu können.
  6. 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.
  7. Ok, das scheint tatsächlich eine andere Welt gewesen zu sein. Gedeiht dieses Idyll noch? Oder ziehen die Leute weg wegen Arbeit?
  8. Und zu DM statt zur Drogerie gehe ich seit vielen Jahren, weil unsere Drogerie vor 20 Jahren Schlecker hieß. Da bin ich von Herzen gern ein Stückchen weiter gefahren. um meinen Kram nicht da kaufen zu müssen.
  9. Also, ich weiß ja nicht, wo Du vor 20 Jahren gelebt hast, aber getankt habe ich damals schon selbst. Online-Banking hatte ich damals noch nicht, Telefonbanking gab es aber schon. Oder Überweisungen per BTX. Und bis zum Onlinebanking war es definitiv nicht mehr weit. Backregale in den Supermärkten und Aufbacksemmeln kannte ich auch. Ikeamöbel haben wir schon damals selbst zusammengeschraubt. Die gute alte Zeit muss schon ein bisschen länger her sein.
  10. Ich würde mir wünschen, dass Springer Campus einen konsekutiven Master anbietet, der auf dem Bachelor in Web- und Medieninformatik aufbaut.
  11. Nein. Das war eher dem Gefühl geschuldet, dass es noch nicht reichen würde. Ich hatte beim ersten Durcharbeiten zunächst den Eindruck, die verschiedenen Konzepte zu verstehen. Beim Bearbeiten der Einsendeaufgaben habe ich aber immer wieder gemerkt, dass mein Verständnis doch noch zu oberflächlich war. Außerdem fiel es mir schwerer als bei anderen Modulen, die Themen im Gedächtnis zu behalten. Ich musste immer wieder zurückblättern und Dinge noch mal nachschlagen. Das machte mir Sorge im Hinblick auf die Klausur. Das Lehrbuch ging Nebenläufigkeit ja aus verschiedenen Blickwinkeln an. Erst Theorie und Konzepte. Dann Umsetzung in Java. Dann Modellierung in UML. Später im Modul noch mal Java-Sprachkonstrukte, die die Implementierung z.B. von eigenen ausgefalleneren Monitor-Konstrukten ermöglichen. Beim zweiten Lesen habe ich gemerkt, dass ich die theoretischen Konzepte besser verstand, weil ich nun wusste, wie die in Java umgesetzt werden. Und natürlich weil ich darauf bezogene Aufgaben gelöst hatte. Umgekehrt habe ich die Implementierungen in Java wieder besser verstanden, weil mir die theoretischen Hintergründe klarer waren. Ich hatte dann auch mehr eigene Ideen, wie man den Code verändern kann. Beim zweiten Lesen habe ich mir viele Anmerkungen ins Buch geschrieben. Das mache ich normalerweise schon beim ersten Mal, aber diesmal hatte ich beim ersten Lesen noch nicht das Gefühl, ganze Absätze treffend auf eine kurze Aussage verdichten zu können. Erst beim dritten Durchgang und auch mit den Rückmeldungen aus der Online-Klausur hatte ich das Gefühl, jetzt wird es leichter. Ich habe die Aufgaben aus der Online-Klausur noch mal überarbeitet. Das war auch toll von meinem Tutor, dass er da noch mal drüber geschaut hat und mir Rückmeldungen gegeben hat. Offiziell endet die tutorielle Betreuung nämlich mit der Korrektur der Online-Klausur.
  12. 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.
  13. Heute kam noch eine Mail vom Studienbüro. Wer lieber mit der alten Plattform weiterlernen möchte, kann eine Mail ans Studienbüro schicken und das für sich umstellen lassen. Ich habe mich erst mal dagegen entschieden, weil ich finde, dass es Zeit wurde für ein Design, das sich flexibel an verschiedene Bildschirmgrößen anpasst. Besser finde ich, Feedback zu geben, wo es noch hakt, damit die unvermeidlichen Kinderkrankheiten behoben werden. Es hat sich in den letzten 2 Wochen ja auch schon etwas getan. Aber wer die alte Plattform zurück will, der kann sie haben.
  14. Inzwischen hat sich an der neuen Plattform ein schon bisschen was getan. Die Aktualisierung der Farben in der Navigation scheint nun z.B. zuverlässig zu funktionieren. Mir fallen auch kleine sinnvolle Verbesserungen auf. Beim Absenden von Aufgaben war es z.B. empfehlenswert, die hochgeladenen Dateien oder die ins Textfeld eingetippten Texte zunächst mal zu speichern. Dafür gab es einen Button "Zwischenspeichern". Dann erst sollte man Absenden drücken. Sonst konnte es passieren, dass beim Tutor ein leeres Formular ankam. Inzwischen gibt es nur den Button "Zwischenspeichern". Erst wenn man den gedrückt hat, erscheint der "Absenden"-Button. Fehlbedienung somit ausgeschlossen. Es sind Kleinigkeiten, aber viele Kleinigkeiten summieren sich. Die neue Plattform hat ihre Vorzüge. Auf Änderungen beim Farbschema hoffe ich weiter.
  15. Allgemein wird ja angenommen, schwarze Schrift auf hellem Hintergrund sei gut zu lesen. Und so ist man es ja auch vom Papier gewohnt. Während bei Röhrenmonitoren früher helle Schrift auf dunklem Hintergrund üblich war, verwendet man seit dem Aufkommen graphischer UIs auch für den normalen Home- und Office-Nutzer dunkle Schrift auf hellem Grund. So ist es ja auch hier auf Fernstudium-Infos. Grundsätzlich finde es nicht so leicht zu lesen wenn: - der Hintergrund relativ hell, also fast weiß ist - die Schrift relativ klein ist - die Schrift relativ dünn ist - die schrift nicht richtig schwarz sondern grau ist Problematisch ist vor allem ein zu heller Hintergrund, der die Schrift "überstrahlt" oder eine nicht schwarze Schrift. Fernstudium-Infos hat einen recht hellen Hintergrund. Die dunklen Hintergründe im Kopfbereich der Seite und die etwas dickere helle Schrift sind dagegen für mich angenehm. Wenn ich in der IDE arbeite, verwende ich immer ein dunkles Farbschema also helle Schrift auf schwarzem Grund. Texte schreibe ich oft erst in einem Editor, weil mich das diszipliniert, mir erst mal über den Inhalt Gedanken zu machen und nicht zwischendurch mit dem Layout rumzuspielen. Auch meine Editoren bieten alle helle Schrift auf dunklem Grund. Das kann ich natürlich nicht erwarten, das Homepages so designed werden. Es gibt Browserplugins, die so etwas regeln. Auch habe ich die Angewohnheit, Abschnitte, die ich gerade lese, mit der Maus als Textblock zu markieren, wobei die Darstellung invertiert. Das wirkt auf Leute in meiner Umgebung oft irritierend. Darum gefiel es mir ja auch so gut, dass man in der alten Plattform der W3L zwischen verschiedenen Farbschemata wählen konnte.
  16. Tipp für künftige Studierende in diesem Modul: Ich habe lange darüber nachgedacht, was ich beim nächsten Mal besser machen würde, um in der Klausur nicht so unter Druck zu sein und meine Leistung besonnen erbringen zu können. Meine Achillesferse waren die Petri-Netze. Ich konnte sie gut nachvollziehen, aber sie aktiv entwerfen, um damit Probleme zu modellieren, da war ich einfach nicht routiniert genug. Ein Problem ist, dass es dazu im Kurs nur eine Einsendeaufgabe gibt. Im Lehrbuch waren verschiedene Netze für archetypische Problemstellungen vorstellt. Die habe ich zur Vorbereitung alle abgezeichnet und mir vorgestellt, wie die Marken-Wanderung ablaufen würde. Heute würde ich die wahrscheinlich in Visual Objekts Net++ nachbauen und noch mehr damit rumspielen, verschiedene Anfangsszenarien setzen, die Netze ein bisschen umbauen und schauen, was passiert. Das wäre ein möglicher Ansatz, um im AKTIVEN Umgang mit Petri-Netzen besser zu werden. Außerdem würde ich versuchen, mir zusätzliches Übungsmaterial zum Thema zu besorgen. Sprich: Ich würde in die lokale Uni-Bibliothek fahren und nach Lehrbüchern suchen, die Übungsaufgaben zu Petri-Netzen enthalten. Solche, wo man wirklich etwas entwerfen soll, was ein Problem löst. Und dann würde ich viel mit Visual Objects Net++ rumspielen. Ich hoffe, dass es künftigen Studierenden mit diesen Tipps möglich ist, ihre Abschlussklausur ein wenig gelassener anzugehen als ich.
  17. Eigentlich müsste ich heute dringend für "Nicht-sequentielle Programmierung" lernen. Aber man muss sich auch Zeit nehmen, seine Erfolge zu feiern. Softwaretechnik 1 ist bestanden. Und zwar sogar mit gar nicht so wenigen Punkten. Zusammen mit den Bonuspunkten ist es ein schönes Ergebnis geworden. Mit der Note bin zufrieden, mit meiner Leistung in der Klausur nicht. Ich war ganz schön unter Zeitdruck und bin einfach drauf los geprescht, um in der knappen Zeit irgendwie durchzukommen. Da hätte ich auch gut in der Sackgasse landen können. Ich würde sagen, es war schon eine gute Portion Glück dabei, dass der erste "Riecher" anscheinend doch oft richtig war. Was soll's? Softwaretechnik 1 ist geschafft und sogar mit respektablem Ergebnis. Ich freu mich.
  18. 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.
  19. Zum Kommentar von jadasklappt möchte ich hier noch einmal öffentlich bemerken: Die Präsenzveranstaltungen sind seit dem Sommersemester 2016 freiwillig. Dementsprechend entschuldigt man sich nicht mehr, wenn man verhindert ist. Man meldet sich an, wenn man teilnehmen möchte. Ich versuche, die Präsenzveranstaltungen möglichst zu nutzen, weil es schön (und oft auch hilfreich) ist, andere Leute zu treffen, die vor den gleichen Problemen und Herausforderungen stehen, wie man selbst.
  20. Wenn man sich auf der Lernplattform einloggt, kommt eine Begrüßung mit einer knappen sachlichen Info zur Übernahme der W3L durch Springer Campus. Abgesehen von dem Springer-Logo in der linken oberen Ecke sieht alles aus wie gewohnt und funktioniert auch so.
  21. 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.
  22. 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.
  23. 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.
  24. http://www.integralrechner.de/ http://www.ableitungsrechner.net/ https://matrixcalc.org/de/ https://rechneronline.de/funktionsgraphen/ Nur ein paar Beispiele für nützliche Tools. Auf Youtube findet man mittlerweile auch sehr nützliche Videos. Es gibt Leute, die richtig gut komplizierte Sachen erklären können. Also ehe man verzweifelt und wegen Mathe hinschmeißt, lieber nutzen, dass man heute sehr leicht an Informationen kommt.
×
  • Neu erstellen...