IT-Berufe-Podcast

IT-Berufe-Podcast

Download on the App Store

IT-Berufe-Podcast episodes

  • Reguläre Ausdrücke – IT-Berufe-Podcast #160
    Um reguläre Ausdrücke - das Schweizer Taschenmesser für ITler - geht es in der einhundertsechzigsten Episode des IT-Berufe-Podcasts.
    TL;DR
    Ich arbeite fast täglich mit regulären Ausdrücken, um Texte nach Mustern zu durchsuchen und gefundene Inhalte zu verändern. Mit wenigen Grundbausteinen kannst du beispielsweise E-Mail-Adressen herausfiltern oder Vor- und Nachnamen vertauschen. Als IT-Azubi kannst du diese Kenntnisse in vielen Editoren und auf der Kommandozeile einsetzen. Für beliebige HTML- und XML-Dokumente brauchst du einen passenden Parser; bei Anwendungen mit hohen Anforderungen an die Laufzeit solltest du den Rechenaufwand regulärer Ausdrücke beachten.
    Kapitelmarken
    [00:00:01] Einstieg: Reguläre Ausdrücke im IT-Alltag
    [00:00:49] Was reguläre Ausdrücke leisten
    [00:03:04] Die Syntax verstehen und mit Websites ausprobieren
    [00:06:13] Muster beschreiben und Zeichen getrennt von ihrer Anzahl festlegen
    [00:09:35] Unterschiedliche Schreibweisen von Meier suchen
    [00:10:50] E-Mail-Adressen aus Dateien herausfiltern
    [00:12:03] Einsatz in Systemintegration und beim Bearbeiten von Listen
    [00:13:06] Wörtlich suchen und Sonderzeichen escapen
    [00:14:40] Erlaubte Zeichen und Grenzen des E-Mail-Beispiels
    [00:18:12] Zeichenbereiche mit eckigen Klammern bilden
    [00:20:30] Zeichenbereiche negieren
    [00:22:01] Zeilenanfang und Zeilenende erkennen
    [00:24:15] Der Punkt als Platzhalter
    [00:25:19] Quantifizierer und genaue Anzahlen
    [00:28:53] Ein vereinfachtes Suchmuster für E-Mail-Adressen
    [00:31:16] Alternativen mit der Pipe verbinden
    [00:33:03] Gruppen bilden und Inhalte beim Ersetzen wiederverwenden
    [00:36:40] Die wichtigsten Syntaxbausteine im Überblick
    [00:38:41] Praxisbeispiel: UUIDs herausfiltern
    [00:40:28] E-Mail-Adressen suchen und Namen vertauschen
    [00:41:33] Leerzeichen am Zeilenende entfernen
    [00:42:07] Markdown-Aufzählungszeichen einfügen
    [00:43:47] Felder für Klassen vorbereiten und im Blockmodus bearbeiten
    [00:45:54] Links zwischen HTML und Markdown umschreiben
    [00:47:29] Grenzen beim Verarbeiten von HTML und XML
    [00:49:17] Rechenaufwand und der Ausfall von Stack Overflow
    [00:50:37] Reguläre Ausdrücke in Shells, Editoren und IDEs
    [00:51:51] Literaturempfehlung und Websites zum Lernen
    [00:53:14] Feedback und Abschied
    Inhalt
    Ich schwärme immer mal wieder von regulären Ausdrücken. Das liegt wohl einfach daran, dass ich fast täglich mit ihnen arbeite. Sie sind einfach so unglaublich vielseitig verwendbar und machen ITlern das Leben leichter - wenn man sie beherrscht. Nicht umsonst gibt es diesen "Witz":
    Ich hatte ein Problem und versuchte es mit regulären Ausdrücken zu lösen. Nun habe ich zwei Probleme.
    In den Händen eines erfahrenen Anwenders sind reguläre Ausdrücke allerdings äußerst hilfreich.
    Sinn regulärer Ausdrücke
    Reguläre Ausdrücke dienen der Mustererkennung in Zeichenketten und sind quasi Platzhalter on steroids. Statt der einfachen Platzhalter wie * oder ? z.B. in Dateinamen, gibt es viele verschiedene Platzhalter, Quantifizierer und weitere Regeln, um Muster in Texten zu definieren. Nach diesen Mustern kannst du suchen oder du kannst sie zum Ersetzen von Inhalten benutzen. Teilmuster lassen sich gruppieren und beim Ersetzen wiederverwenden. So gut wie jede Programmiersprache enthält eine eingebaute Unterstützung für reguläre Ausdrücke. Jeder vernünftige Texteditor unterstützt reguläre Ausdrücke beim Suchen und Ersetzen genauso wie eine gute Shell (z.B. Bash oder PowerShell).
    Grundlegende Muster
    konkreten Zeichen(-folgen): hallo
    Bereiche: [], z.B. [a-z], [0-9], [aeiou]
    Negation mit ^, z.B. [^abc]
    Zeilenanfang: ^ (nicht mit der Negation verwechseln!)
    Zeilenende: $
    Platzhalter für ein beliebiges Zeichen: .
    Alternativen: A|B
    Quantifizierer (stehen hinter dem Muster)
    einmal oder keinmal (0..1): ?
    keinmal, einmal oder mehrmals (0..n): *
    einmal oder mehrmals (1..n): +
    genaue Anzahl: {8}, {2,5} (2 bis 5 mal)
    Gruppen: (), Referenz mit $1
    Escapen von besonderen Zeichen (insb. alle obigen): \
    Anwendungsfälle aus meiner Praxis
    Reguläre Ausdrücke gehören in den Werkzeugkasten jedes ITlers! Egal ob Anwendungsentwicklung oder Systemadministration, reguläre Ausdrücke können vielfältig eingesetzt werden. In der Linux-Administration können z.B. Black- und Whitelists für Hostnamen mit regulären Ausdrücken definiert werden. Die Apache-Konfiguration verwendet ebenfalls reguläre Ausdrücke. Auf der Linux-Kommandozeile kannst du mit grep in Dateien nach regulären Ausdrücken suchen. sed ermöglicht dir die Massenverarbeitung von Dateien. Das Suchen und Ersetzen im vi wird standardmäßig auch mit regulären Ausdrücken gemacht und du kannst sogar mit ihnen navigieren ($ springt z.B. zum Ende der Zeile).
    Suchen und Ersetzen in Dateien
    Listen umformatieren
    Nachname/Vorname zu Vorname/Nachname
    Anfang oder Ende von Zeilen manipulieren
    Markdown in HTML und umgekehrt
    Feldnamen mit public String ; umschließen
    Batchdatei generieren zum Verschieben von Dateien
    Whitespace trimmen
    UUIDs/Domains/Mails in Text/Logs finden
    Konkrete Beispiele
    Gerade vor wenigen Tagen hatte ich die - eigentlich triviale - Aufgabe, ein paar Dateien umzubenennen, die ein bestimmtes Präfix hatten. Dieses Präfix sollte ausgetauscht werden. Anstatt die Dateien per Hand umzubenennen (oder die entsprechende Shell-Funktion zu nutzen ;-) ), habe ich mir mit einem simplen regulären Ausdruck in wenigen Sekunden ein Shell-Script gebaut, das die Aufgabe für mich löst.
    Basis war die Liste der Dateien, die ich in der PowerShell mit dir | ac liste.ps1 erstellt habe.
    prefix-Datei1.txt
    prefix-Datei2.txt
    ...
    prefix-Datei100.txt
    Mit dem Suchen-/Ersetzen-Muster /^(prefix-(.*))$/move $1 neuerPrefix-$2/g im Vim wurde daraus:
    move prefix-Datei1.txt neuerPrefix-Datei1.txt
    move prefix-Datei2.txt neuerPrefix-Datei2.txt
    ...
    move prefix-Datei100.txt neuerPrefix-Datei100.txt
    Die Datei konnte ich dann einfach mit .\liste.ps1 ausführen und war fertig!
    UUIDs suchen
    Text: Text mit UUIDs wie z.B. 550e8400-e29b-11d4-a716-446655440000 mittendrin
    RegEx: [a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}
    Suchergebnis: 550e8400-e29b-11d4-a716-446655440000
    E-Mail-Adressen suchen
    Text: Stefan Macke ([email protected]) hat einen Podcast.
    RegEx: [a-z]+@[a-z]+\.[a-z]{2,3} (nicht ausreichend für echte Mails!)
    Suchergebnis: [email protected]
    Vor-/Nachnamen vertauschen
    Text: Stefan Macke
    RegEx: (.+) (.+)
    Ersetzen durch: $2, $1
    Ergebnis: Macke, Stefan
    Trailing Whitespace entfernen
    Text: Zeile mit Leerzeichen am Ende
    RegEx: +$
    Ersetzen durch: ``
    Ergebnis: Zeile mit Leerzeichen am Ende
    Aus Zeilen Markdown-Aufzählungen machen
    Text: Listenpunkt 1
    RegEx: ^
    Ersetzen durch: * (Asterisk muss ggfs. escapet werden)
    Ergebnis: * Listenpunkt 1
    Aus Namen Java-Attribute machen
    Text: alterDerPersonInJahren
    RegEx: (.+)
    Ersetzen durch: private Integer $1;
    Ergebnis: private Integer alterDerPersonInJahren;
    Aus HTML-Links Markdown machen
    Text: IT-Berufe-Podcast
    RegEx: ([^<]+)
    Ersetzen durch: [$2]($1 "$2") (Klammern müssen ggfs. escapet werden)
    Ergebnis: [IT-Berufe-Podcast](https://it-berufe-podcast.de "IT-Berufe-Podcast")
    Grenzen regulärer Ausdrücke
    Wofür du reguläre Ausdrücke nicht benutzen solltest:
    XML und HTML auseinandernehmen: Dafür brauchst du einen echten XML-Parser, da diese Sprachen zu "hoch" für reguläre Ausdrücke sind.
    Performance-kritische Aktionen: Reguläre Ausdrücke sind teuer im Vergleich zu "normalem" Suchen und Ersetzen, da sie geparst und in einen Zustandsautomaten übersetzt werden müssen. Ein suboptimaler regulärer Ausdruck hat sogar schon einmal StackOverflow zum Absturz gebracht.
    Programme mit Unterstützung für reguläre Ausdrücke
    Kommandozeile: grep (Bash), Select-String (PowerShell)
    Editoren: Vim, Notepad++, Visual Studio Code
    IDEs: Eclipse, IntelliJ, Visual Studio
    Und viele mehr...
    Literaturempfehlungen
    In diesem (zumindest für mich) spannenden Artikel zeigt Liz Bennett die - teils sehr deutlichen - Performance-Unterschiede zwischen guten und schlechten regulären Ausdrücken: Regexes: the Bad, the Better, and the Best.
    In diesem tollen Artikel geht Nikita Popov auf die Hintergründe von regulären Ausdrücken ein und erklärt ganz nebenbei noch die Chomsky-Hierarchie und warum man HTML nicht mit regulären Ausdrücken parsen sollte: The true power of regular expressions. Ein wirklich spannender Artikel, der mir wieder mal zeigt, wie sinnvoll es ist, reguläre Ausdrücke zu beherrschen.
    Eine witzige Möglichkeit, reguläre Ausdrücke zu lernen, ist übrigens das Regex Crossword. Damit habe ich auch schon einige Stunden verbracht! :-D
    In Kapitel 10 (Konzepte der Programmierung) geht Sascha Kersken im IT-Handbuch für Fachinformatiker* auf reguläre Ausdrücke ein und zeigt Programmierbeispiele in Java und Python.
    *
    Links
    Permalink zu dieser Podcast-Episode
    RSS-Feed des Podcasts
    RegEx101
    RegExTester
    Zusammenfassung
    Muster in Texten finden
    Ich setze reguläre Ausdrücke fast täglich ein, etwa wenn ich aus großen Dateien bestimmte Angaben herausfiltern möchte. Du beschreibst damit, wie ein gesuchter Text aufgebaut ist, und kannst anschließend die passenden Stellen bearbeiten. Dabei legst du fest, welche Zeichen vorkommen dürfen und wie oft sie erscheinen sollen.
    Ein Beispiel sind unterschiedliche Schreibweisen des Nachnamens Meier. Ein Suchmuster kann mehrere Varianten erfassen. Auch E-Mail-Adressen lassen sich anhand ihres Aufbaus in einer Datei finden, obwohl dir die konkreten Adressen vorher unbekannt sind.
    Für dich als IT-Azubi gehört das Thema sowohl zur Anwendungsentwicklung als auch zur Systemintegration. Systemadministrator:innen bearbeiten beispielsweise Listen mit Benutzernamen oder filtern Angaben aus Dateien.
    Die Grundbausteine verstehen
    Wörtlicher Text: Hallo sucht genau diese Zeichenfolge.
    Escaping: Hat ein Zeichen eine besondere Bedeutung, setzt du für die wörtliche Suche einen Backslash davor. Mit \. suchst du einen Punkt....
    54 min
  • Anforderungsermittlung (nicht nur für dein Abschlussprojekt) – IT-Berufe-Podcast #159
    Um die Ermittlung und Dokumentation von Anforderungen für Projekte geht es in der einhundertneunundfünfzigsten Episode des IT-Berufe-Podcasts.
    TL;DR
    Für dein Abschlussprojekt empfehle ich dir, die Anforderungen selbst mit den beteiligten Stakeholdern zu klären und nachvollziehbar aufzuschreiben. Dabei gehören funktionale und nicht funktionale Anforderungen dazu, denn Qualität bemisst sich daran, wie gut das Ergebnis die Erwartungen erfüllt. Mit Interviews oder weiteren Methoden findest du heraus, was gebraucht wird; präzise und testbare Anforderungen helfen dir anschließend, den Aufwand zu schätzen und das Ergebnis zu prüfen. User Stories und das MoSCoW-Prinzip bieten dafür einen überschaubaren Rahmen, wobei du dich an der Arbeitsweise deines Unternehmens orientieren solltest.
    Kapitelmarken
    [00:00:36] Anforderungsermittlung für IT-Abschlussprojekte
    [00:01:50] Deine Aufgaben beim Klären der Anforderungen
    [00:02:57] Lastenheft und Pflichtenheft
    [00:05:45] Qualität und unterschiedliche Erwartungen
    [00:10:42] Funktionale und nicht funktionale Anforderungen
    [00:14:36] Stakeholder für dein Projekt finden
    [00:15:52] Anforderungen aus Fachbereich, Entwicklung und Support
    [00:19:07] Gesetze, Standards und Audits
    [00:21:52] Anforderungen aus dem kulturellen Umfeld
    [00:24:52] Den Betriebsrat einbeziehen
    [00:25:25] Interviews und weitere Methoden zum Ermitteln
    [00:28:18] Arbeitsabläufe beobachten und bestehende Systeme untersuchen
    [00:31:53] Anforderungen verständlich und präzise formulieren
    [00:33:24] Eindeutige, kleine und schätzbare Anforderungen
    [00:37:41] Den fachlichen Zweck einer Anforderung hinterfragen
    [00:39:44] Anforderungen testbar machen
    [00:40:58] Ein einheitlicher Aufbau für Anforderungen
    [00:42:59] Snow Cards und das Volere-Template
    [00:45:24] Geänderte Anforderungen und agiles Arbeiten
    [00:47:00] Zufriedenheit und Unzufriedenheit getrennt bewerten
    [00:50:04] Anforderungen als User Stories beschreiben
    [00:53:16] Mit MoSCoW priorisieren
    [00:55:00] Projektumfang abgrenzen und Feature Creep vermeiden
    [00:58:10] Die passende Methode für dein Abschlussprojekt
    [00:59:06] Rückblick und Hinweise zur Episode
    Inhalt
    Spätestens für das Abschlussprojekt im dritten Ausbildungsjahr müssen alle Azubis in den IT-Berufen Anforderungen ermitteln. Wen man dabei berücksichtigen sollte, wie man die Anforderungen erhebt und wie man sie verständlich dokumentiert, das erkläre ich hier.
    Qualität
    Beginnen wir zunächst mit den Anforderungen selbst. Dabei starte ich gerne mit dem Begriff der Qualität. Qualität ist definiert als Übereinstimmung mit den Anforderungen. Dabei können diese Anforderungen von sehr unterschiedlichen Personen oder Personengruppen gestellt werden. Daher ist es wichtig, alle am Projekt beteiligten Personen zu befragen.
    Anforderungen
    Es gibt grundsätzlich zwei verschiedene Arten von Anforderungen: funktionale und nicht-funktionale. Funktionale Anforderungen beziehen sich direkt auf die zu erbringende Leistung des Produkts, bspw. die Möglichkeit, Text in einer Textverarbeitungssoftware fett darzustellen.
    Nicht-funktionale Anforderungen beschreiben den ganzen Rest "drumherum", also z.B. die Performance, Sicherheit, Stabilität, Fehlertoleranz, Benutzbarkeit usw. Sie sind meistens sehr schwer zu definieren, da sie oftmals nicht bewusst wahrgenommen, sondern einfach erwartet werden. Daher werden sie oft vergessen oder können nur schwer quantifiziert werden. Es ist unsere Aufgabe als Projektleiter diese Anforderungen trotzdem so gut es geht zu dokumentieren, damit es am Ende kein böses Erwachen gibt, wenn sie nicht umgesetzt sind.
    Eine gute Übersicht über die zahlreichen möglichen nicht-funktionalen Anforderung bietet die Norm ISO 9126, die den Begriff der Softwarequalität definiert.
    Stakeholder
    Wer definiert überhaupt die Anforderungen an eine Software (oder allgemein an ein zu fertigendes Produkt)? Ein Stakeholder ist jede Person, Gruppe oder Institution, die an dem zu entwickelnden Produkt oder dessen Herstellungsprozess in irgendeiner Weise – positiv oder negativ – interessiert ist.
    Hier kommt eine nicht vollständige Liste möglicher Stakeholder unserer Projekte.
    Kunde: Der Kunde bezahlt uns für das Projekt. Seine Anforderungen sollten wir auf jeden Fall berücksichtigen.
    Anwender: Der Anwender ist die Person, die letztendlich mit unserem Produkt täglich arbeiten muss.
    Management: Auch das Management könnte Anforderungen an unser Produkt stellen.
    Marketing: Aus dem Bereich des Marketings kommen Anforderungen wie die Corporate Identity.
    Entwickler: Die Entwickler haben ganz eigene Anforderungen, wie z.B. eine Versionverwaltung.
    Support: Der Support muss nach Einführung des Produkts den Anwendern Hilfestellung leisten und bringt seine ganz eigenen Anforderungen mit.
    Gesetzgeber: In fast jedem Projekt gilt es auch bestimmte Gesetze und Richtlinien einzuhalten.
    Standards: Gerade in der IT gibt es eine Fülle von Standards, an die wir uns halten sollten, z.B. HTTP für Webserver.
    Auditoren: Wirtschaftsprüfer und andere Auditoren stellen ebenfalls Anforderungen an unsere Software, wie z.B. die Nachvollziehbarkeit von Benutzeraktionen.
    Kulturkreis: Auch der Kulturkreis, in dem die Software eingesetzt wird, hat bestimmte Anforderungen. So kann sich z.B. die Sprache je nach Land deutlich unterscheiden.
    Methoden zur Anforderungsermittlung
    Wenn wir wissen, wenn wir nach Anforderungen fragen müssen, ist die nächste Aufgabe, die Anforderungen auch wirklich aus diesen Menschen herauszukommen. Dafür gibt es neben dem Interview auch verschiedene weitere Methoden.
    Interview: Die einfachste Methode ist wohl, den Stakeholder direkt zu befragen.
    Selbstaufschreibung: Wenn dies nicht möglich ist, kann er seine Anforderungen auch selbst verschriftlichen.
    Fragebogen: Etwas mehr Struktur bietet dabei eventuell ein vordefinierter Fragebogen.
    Brainstorming: Gerade zu Beginn eines Projekts kann sich ein Brainstorming zur allgemeinen Definition von Anforderungen anbieten.
    Mind-Mapping: Auch eine Mind-Map hilft vielleicht die verschiedenen Bereiche der Projektes zu betrachten.
    Apprenticing: Hierbei spielt der Anforderungsermittler "Azubi" und lässt sich vom Anwender die Aufgaben erklären.
    Feldbeobachtung: Hierbei setzt sich der Anfoderungsermittler einfach neben den Anwender und beobachtet ihn bei seiner Arbeit.
    Workshop: In einem Workshop können mehrere Teilnehmer gemeinsam Anforderungen erarbeiten.
    Systemarchäologie: Wenn es schon ein bestehendes System gibt, können aus diesem Anforderungen für das neue System abgeleitet werden.
    Raten: Zuletzt kann es durchaus auch sinnvoll sein, einfach mal aufs Blaue drauflos zu raten.
    Anforderungen an Anforderungen
    Wenn wir nun wissen, wen wir was fragen müssen und wie wir dies tun können, müssen wir nur noch eine geeignete Form der Dokumentation der Anforderungen finden. Einige Anforderungen an die Definition der Anforderungen selbst folgen hier.
    eindeutig: Eine Anforderung soll immer eindeutig und nicht mehrdeutig sein, damit es keine Missverständnisse gibt.
    atomar: Anforderungen sollen nicht weiter unterteilbar sein.
    klein: Anforderungen dürfen nicht zu groß sein.
    schätzbar: Für die Projektplanung ist es wichtig, dass Anforderungen auch geschätzt werden können.
    unabhängig: Im besten Fall sind die Anforderungen unabhängig voneinander, damit die Umsetzung parallelisiert werden kann.
    nützlich: Die Anforderungen sollten auch einen echten Nutzen bringen.
    testbar: Wichtig ist auch festzulegen, wie die Umsetzung der Anforderungen geprüft werden kann.
    einheitlich: Zuletzt sollten Anforderungen immer gleichartig definiert werden. Wir schreiben keinen blumigen Roman.
    Methoden zur Dokumentation von Anforderungen
    Snow Cards aus dem Volere-Template
    Snow Cards aus dem Volere-Template sind eine Möglichkeit, um Anforderungen detailliert zu definieren. Sie umfassen für jede Anforderung mehrere Felder, die ausgefüllt werden müssen. Damit ist eine Klassifizierung und Priorisierung sehr einfach möglich. Allerdings erfordern sie auch einen enormen Zeitinvest.
    Allein das Inhaltsverzeichnis über die möglichen verschiedenen Anforderungen, die sich im Projekt ergeben können, ist mehrere Seiten lang. Auch wenn das Template selbst Geld kostet, kann dir die Übersicht der möglichen Anforderungen auf der Website vielleicht ein paar Hinweise geben, an was du in deinem Projekt noch denken musst.
    User Stories
    Eine einfache Möglichkeit, Anforderungen zu dokumentieren, stellen die User Stories aus dem Extreme Programming dar. Jede Anforderung besteht aus einem Satz, der aus der Sicht eines Anwenders beschreibt, was er mit der Software tun will und warum.
    As a bank client,
    I would like to log into the bank’s internet banking
    in order to check my account balance.
    Anhand dieser wenigen Informationen, die auch super auf kleine Karteikarten passen, können wir schon eine Priorisierung vornehmen, mögliche Alternativen finden und den Fokus auf die Umsetzung legen. Deswegen sind sie gerade in agilen Vorgehensmodellen wie Scrum, Kanban oder eXtreme Programming so beliebt.
    MoSCoW
    Außerdem kann man Anforderungen auch nach dem MoSCoW-System vorpriorisieren.
    The system...
    MUST have this
    SHOULD have this if at all possible
    COULD have this if it does not affect anything else
    WON’T have this time but WOULD like in the future
    Die MoSCoW-Methode finde ich sehr oft in Abschlussprojekten von IT-Azubis. Mit ihr lassen sich Anforderungen recht einfach priorisieren. Und oftmals reicht dies auch für den sehr begrenzten Umfang der Abschlussprojekte (80 bzw. 40 Stunden) aus.
    Literaturempfehlung
    Das Lehrbuch der Softwaretechnik* von Helmut Balzert hat zwar einen großen Umfang, beschreibt aber sehr gut das Vorgehen beim Requirements Engineering, also dem englischen Wort für Anforderungsermittlung. Die Buchreihe kann ich sehr empfehlen, auch wenn sie vielleicht eher an Studenten gerichtet ist und nicht so sehr an Auszubildende.
    *
    Links
    Permalink zu dieser Podcast-Episode
    ...
    1 hr 1 min
  • Buchclub: Funktionale Programmierung in Java von Herbert Prähofer – IT-Berufe-Podcast #158
    Um den Buchclub zu Funktionale Programmierung in Java geht es in der einhundertachtundfünfzigsten Episode des IT-Berufe-Podcasts.
    TL;DR
    Ich empfehle dir "Funktionale Programmierung in Java" von Herbert Prähofer als Lektüre ab dem zweiten Ausbildungsjahr. Das Buch vermittelt funktionale Grundlagen mit ausführlichen Codebeispielen und behandelt auch asynchronen Code sowie eigenschaftsbasierte Tests. Für deine Praxis und mögliche Prüfungsfragen sind besonders reine Funktionen, Funktionen höherer Ordnung und unveränderbare Daten interessant. Mit map und flatMap kannst du Daten verarbeiten und Funktionsaufrufe verketten, während CompletableFuture dir hilft, mit später verfügbaren Ergebnissen zu arbeiten.
    Kapitelmarken
    [00:00:00] Buchclub: Funktionale Programmierung in Java
    [00:01:53] Funktionale Konzepte für IT-Azubis und Prüfungen
    [00:05:09] Stärken des Buchs und praxisnahe Beispiele
    [00:08:38] Java-Schwerpunkt und anspruchsvolle Beispiele
    [00:11:41] Buchkapitel: Einstieg und sprachliche Grundlagen
    [00:13:08] Seiteneffekte und Funktionsparameter
    [00:14:28] Funktionen kombinieren und funktionale Datenstrukturen
    [00:15:47] Streams und parallele Verarbeitung
    [00:17:11] Asynchronität und Reactive Streams im Buch
    [00:18:30] Eigenschaftsbasierte Tests und Shrinking
    [00:20:54] Weiterführende Konzepte und Leseempfehlung
    [00:22:04] Funktionale Grundlagen für mögliche Prüfungsfragen
    [00:23:06] Lambda-Ausdrücke als anonyme Funktionen
    [00:25:00] Typ-Inferenz und statische Typisierung
    [00:27:41] Algebraische Datentypen: Produkt- und Summentypen
    [00:32:13] Pattern-Matching
    [00:34:47] Generics und parametrisierbare Klassen
    [00:37:34] Ko- und Kontravarianz
    [00:42:15] Begrenzte Wildcards in Java
    [00:43:25] Grundprinzipien der funktionalen Programmierung
    [00:44:01] Funktionen als First Class Citizens
    [00:45:22] Reine Funktionen und Seiteneffekte
    [00:47:52] Funktionen höherer Ordnung
    [00:50:43] Bedarfsauswertung und unendliche Folgen
    [00:53:18] Unveränderbare Datenstrukturen
    [00:55:40] Rekursion und Tail Call Optimization
    [00:58:21] Referenzielle Transparenz
    [00:59:59] Funktoren und map
    [01:01:24] Monoide, fold und neutrale Elemente
    [01:04:52] Monaden und flatMap
    [01:08:46] Funktionsketten und Streams im Alltag
    [01:11:18] Asynchrone Abläufe und reagierende Anwendungen
    [01:13:09] CompletableFuture und später verfügbare Ergebnisse
    [01:14:32] Optional und Future über Funktionen verarbeiten
    [01:16:48] Rückblick und Einordnung für die Prüfung
    [01:19:16] Ergänzende Links und Feedback
    Inhalt
    Die folgenden Inhalte werden im Buch besprochen. Meiner Meinung nach sollte jeder Azubi zum Fachinformatiker Anwendungsentwicklung diese Begriffe wenigstens einmal gehört haben, besser noch sie mit eigenen Worten erklären können. Die funktionale Programmierung ist neben der Objektorientierung heutzutage sicherlich eine gängige Vorgehensweise.
    Für die anderen IT-Berufe sind viele Inhalte sicherlich etwas zu speziell. Allerdings sollte jeder ITler zumindest die verbreiteten Programmierparadigmen auseinanderhalten können. Und dazu zählen meiner Meinung nach auch einige wichtige Schlagworte. So wie bei der Objektorientierung Vererbung und Polymorphie erklärt werden müssen, sollte man bei der funktionalen Programmierung Funktionen höherer Ordnung oder reine Funktionen erläutern können.
    Grundlagen
    Lambda-Ausdrücke: Anonyme Funktionen in einer kurzen Schreibweise, meist mit einem "Pfeil" als Trenner zwischen Methodenkopf und -rumpf (z.B. ->).
    Typinferenz: Implizite Ableitung der Datentypen z.B. von Funktionsparametern aus dem Kontext, z.B. var text = "Text" (text ist "automatisch" ein String).
    Algebraische Datentypen
    Produkttypen: Der Datentyp wird definiert durch die Kombination verschiedener Werte. Das sind letztlich unsere bekannten Objekte bzw. Structs.
    Summentypen: Der Datentyp wird definiert als Liste möglicher Alternativen bzw. Varianten, z.B. ist eine Krankenversicherung entweder eine GesetzlicheKrankenversicherung oder eine PrivateKrankenversicherung. Hierbei müssen die Alternativen nicht in einer Vererbungsbeziehung stehen, wie man am Beispiel vermuten könnte.
    Pattern Matching: Kontrollstruktur, die Datentypen "zerlegen" kann. Quasi switch "on steroids".
    Generics: Datentypen, die mit anderen Datentypen parametriert werden können. Sie bieten allgemeingültige Algorithmen an, die auf mehreren Datentypen ausgeführt werden können.
    Ko- und Kontravarianz: Legen fest, welche Verallgemeinerungen bzw. Spezialisierungen bei Typparametern von generischen Klassen erlaubt sind. Beispiele:
    Kovarianz: List students = new List();
    Kontravarianz: List students = new List();
    Prinzipien der funktionalen Programmierung
    Funktionsobjekte (first class citizens): Funktionen sind fester Bestandteil der Sprache und können z.B. Variablen zugewiesen oder als Parameter übergeben werden.
    Reine Funktionen (pure functions): Funktionen haben keine Seiteneffekte. Sie liefern zum gleichen Input immer den gleichen Output.
    Funktionen höherer Ordnung (higher order functions): Funktionen, die andere Funktionen zurückgeben oder als Parameter bekommen.
    Bedarfsauswertung (lazy evaluation): Ein Ausdruck wird erst dann ausgewertet, wenn sein Wert auch wirklich benötigt wird.
    Unveränderbarkeit (immutability): Bestehende Werte sollen nicht mehr verändert werden. Stattdessen werden immer neue Werte erzeugt.
    Rekursion (recursion): Das Mittel der Wahl zur Iteration ohne veränderliche Variablen.
    Referentielle Transparenz (referential transparency): Ein Ausdruck kann jederzeit durch seinen Wert ersetzt werden und umgekehrt.
    Funktionale Datenstrukturen
    Funktoren: Bieten die Funktion map() an, um den enthaltenen Datentypen in einen anderen zu transformieren. Beispiel: Optional.
    Monoide: Mit Monoiden kann man eine Menge von Elementen zu einem Gesamtergebnis verknüpfen, es also reduzieren (fold). Dafür wird ein neutrales Element und eine Reduktionsfunktion benötigt. Beispiel: Addition ganzer Zahlen mit neutralem Element 0.
    Monaden: Bieten die Funktionen of() und flatMap() an, um den enthaltenen Datentypen in einen anderen zu transformieren, wobei das Ergebnis dieser Transformation selbst wieder eine Monade ist. Beispiel: Stream.
    Listenverarbeitung mit Streams
    Grundlagen von map(), filter() und reduce.
    Parallele Streams und Eignung von Aufgaben für die Parallelisierung
    Sonstiges
    Asynchronität mit CompletableFutures und Reactive Streams
    Property Based Testing mit Quickcheck
    Ein komplett anderer Ansatz, um Funktionen zu testen. Statt Input und erwarteten Output selbst zu definieren, werden zufällige Input-Werte generiert und allgemeine Eigenschaften des Ergebnisses geprüft, z.B. dass bei einer Konkatenation zweiter Strings die Länge des Ergebnisses immer größer oder gleich der Länge des ersten Strings sein muss.
    Was mir am Buch sehr gut gefällt
    Es werden nicht nur die Grundlagen der funktionalen Programmierung erläutert, sondern auch viele andere wichtige Begriffe rund um die moderne Programmierung.
    Gerade die Grundlagen werden sehr verständlich erklärt und mit vielen praxisnahen Beispielen angereichert.
    Es werden auch sehr moderne Konzepte wie wie Reactive Streams und Property Based Testing erläutert.
    Einige Grundlagen, die jeder Informatiker einmal gehört haben sollte, werden ebenfalls behandelt, z.B. Algorithmen zur Tiefensuche.
    Auch einige Entwurfsmuster werden im Detail erklärt und mit der funktionalen Lösung verglichen.
    Die technischen Hintergründe der Implementierung in Java werden gut verständlich erläutert. Das sollte heutzutage jeder Java-Entwickler kennen!
    Was mir am Buch nicht ganz so gut gefällt
    Die Inhalte haben natürlich einen starken Fokus auf die Implementierung in Java. Man kann zwar auch als Nicht-Java-Entwickler im Bereich der Grundlagen einiges mitnehmen, aber am besten geeignet ist das Buch wohl für Hardcore-Java-Entwickler.
    Man merkt, dass der Autor Hochschuldozent ist. Die Beschreibungen und Beispiele sind teilweise etwas akademisch. Auch wenn die funktionale Programmierung ihren Ursprung in der Mathematik hat, ist das vielleicht für Azubis manchmal etwas schwere Kost.
    Die verwendeten Beispiele sind teilweise sehr umfangreich. Sehr lange Codeausschnitte, die schwer nachzuvollziehen sind, hätten vielleicht gekürzt werden können.
    Fazit
    Ich kann das Buch uneingeschränkt weiterempfehlen. Es vermittelt einen sehr guten Überblick über moderne Programmmiertechniken und die funktionale Programmierung.
    Auch Azubis werden es gut verstehen können. Ich empfehle die Literatur allerdings erst ab dem zweiten Lehrjahr, wenn schon einige Programmierprojekte umgesetzt wurden.
    Auch als Nachschlagewerk für zentrale Begriff der funktionalen Programmierung finde ich das Buch sehr gut, da die Begriffe kurz und prägnant definiert und mit Beispielen erklärt werden.
    Insbesondere für Java-Entwickler empfehle ich das Buch zum Verständnis der technischen Implementierung der funktionalen Programmierung in Java.
    Literaturempfehlungen
    Naja, was soll ich wohl anderes empfehlen als das besprochene Buch Funktionale Programmierung in Java*? :-)
    *
    Links
    Permalink zu dieser Podcast-Episode
    RSS-Feed des Podcasts
    Gregor Trefs über funktionale Programmierung, Konferenzen und Fachartikel
    Algebraic data type
    Summentypen
    Produkttypen
    Property-based Testing mit JUnit QuickCheck
    Präsentation: Property-based Testing mit JUnit-Quickcheck
    Railway Oriented Programming in Java
    Präsentation: Railway Oriented Programming - Funktionaler programmieren ohne Exceptions
    Zusammenfassung
    Das Buch für deine Ausbildung
    Mit meinen IT-Azubis lese ich regelmäßig Fachbücher. "Funktionale Programmierung in Java" von Herbert Prähofer, Professor an der Universität Linz, empfehle ich dir als deutschsprachigen Einstieg in funktionale Konzepte und ihre Umsetzung in Java. Meine Besprechung stammt aus dem Jahr 2020.
    Durch die ausführlichen Codebeispiele kannst du nachvollziehen, wie die Konzepte im Alltag funktionieren....
    1 hr 21 min
  • Datenschutz vs. Datensicherheit vs. Datensicherung – IT-Berufe-Podcast #157
    Um den Unterschied zwischen Datenschutz, Datensicherheit und Datensicherung geht es in der einhundertsiebenundfünfzigsten Episode des IT-Berufe-Podcasts.
    TL;DR
    Aus meinen IHK-Prüfungen kenne ich die Fragen zu Datenschutz, Datensicherheit und Datensicherung, auf die du dich als IT-Azubi vorbereiten solltest. Datenschutz schützt personenbezogene Daten natürlicher Personen vor Missbrauch und wahrt ihre informationelle Selbstbestimmung. Zur Datensicherheit gehören technische und organisatorische Maßnahmen, mit denen du die Schutzziele für sämtliche Daten erfüllst. Durch Datensicherung, also Backups und das Wiederherstellen gesicherter Daten, schützt du dich vor Datenverlust und trägst zur Verfügbarkeit bei.
    Kapitelmarken
    [00:00:00] Einführung in Datenschutz, Datensicherheit und Datensicherung
    [00:00:20] Bedeutung für IHK-Prüfungen und IT-Ausbildung
    [00:03:16] Datenschutz und personenbezogene Daten
    [00:06:02] Informationelle Selbstbestimmung und persönliche Freiheit
    [00:09:42] Risiken durch späteren Missbrauch erfasster Daten
    [00:11:20] Datenschutz im Arbeitsalltag und bei Gesundheitsdaten
    [00:12:16] Grundgesetz und informationelle Selbstbestimmung
    [00:13:56] Cookies, Tracking und politische Einflussnahme
    [00:15:12] EU-Grundrechtecharta, DSGVO und Strafzahlungen
    [00:17:45] Datenschutzthemen für Prüfung und Abschlussprojekt
    [00:19:46] Datensicherheit und ihre Schutzziele
    [00:21:32] Technische und organisatorische Maßnahmen
    [00:22:51] BSI und IT-Grundschutz-Kompendium
    [00:24:24] Zusammenhang zwischen Datenschutz und Datensicherheit
    [00:26:02] Angriffe, Schutzmaßnahmen und weitere Prüfungsthemen
    [00:28:20] Datensicherung als Backup und Restore
    [00:30:14] Ursachen für Datenverlust und Restore testen
    [00:31:31] Schützenswerte Daten und Sicherungsmedien auswählen
    [00:33:30] Sicherungsintervalle, Verschlüsselung und Kompression
    [00:34:26] Backup-Arten und Medienrotation
    [00:35:10] Vollsicherung, differenzielle und inkrementelle Sicherung
    [00:36:12] Hot Backup und Cold Backup
    [00:36:33] Daten bewerten und Risiken gezielt verringern
    [00:37:11] Begriffe für die Prüfung einordnen
    [00:38:42] Weiterführende Links und Kontakt
    Datenschutz vs. Datensicherheit vs. Datensicherung
    In dieser Episode werden die drei Begriffe zunächst oberflächlich erläutert und abgegrenzt. Über jedes einzelne Thema kann man aber noch im Detail sprechen und Prüflinge müssen sich auch intensiv damit auseinandersetzen.
    Die Begriffe klingen zwar sehr ähnlich, sind aber klar voneinander abzugrenzen und insb. in Prüfungen sauber auseinanderzuhalten. In der Novellierung der IT-Berufe im Jahr 2018 wurden die Begriffe Datenschutz und Datensicherheit explizit in den Ausbildungsrahmenplan mit aufgenommen. Und auch in der Neuordnung 2020 gehören sie zum festen Bestandteil der Berufsausbildung in den IT-Berufen.
    Datenschutz
    Datenschutz ist der Schutz personenbezogener Daten natürlicher Personen vor Missbrauch durch Dritte.
    Personenbezogene Daten sind laut DSGVO "alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person [...] beziehen; als identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt, insbesondere mittels Zuordnung zu einer Kennung wie einem Namen, zu einer Kennnummer, zu Standortdaten, zu einer Online-Kennung oder zu einem oder mehreren besonderen Merkmalen identifiziert werden kann, die Ausdruck der physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder sozialen Identität dieser natürlichen Person sind". Beispiele: Name, Adresse, IP-Adresse, Bankdaten, Gesundheitsdaten, Standortdaten.
    Das Recht auf informationelle Selbstbestimmung sichert jedem Bürger das Recht zu, über die Verwendung seiner Daten selbst zu bestimmen.
    Das sogenannte Recht auf informationelle Selbstbestimmung wurde vom Bundesverfassungsgericht im Volkszählungsurteil von 1983 aus dem Grundgesetz abgeleitet. Dort heißt es:
    Jeder hat das Recht auf die freie Entfaltung seiner Persönlichkeit, soweit er nicht die Rechte anderer verletzt und nicht gegen die verfassungsmäßige Ordnung oder das Sittengesetz verstößt. (Grundgesetz, Artikel 2, Satz 1)
    Warum ist das wichtig? Menschen sollen in ihrer persönlichen Freiheit nicht eingeschränkt werden. Sie würden sich aber ggfs. anders verhalten, wenn anderen Menschen (zu) persönliche Daten über sie bekannt wären, wie z.B. Krankheiten oder sexuelle Vorlieben. Außerdem würden viele Menschen sich einschränken, wenn sie befürchten müssten, dass ihr Verhalten protokolliert würde.
    Das Grundgesetz gewährleistet jeder Bürgerin und jedem Bürger das Recht, über Verwendung und Preisgabe seiner persönlichen Daten zu bestimmen (Grundrecht auf informationelle Selbstbestimmung). Geschützt werden also nicht Daten, sondern die Freiheit der Menschen, selbst zu entscheiden, wer was wann und bei welcher Gelegenheit über sie weiß. (Bundesbeauftragter für den Datenschutz und die Informationsfreiheit)
    Die EU formuliert es noch deutlicher:
    Jede Person hat das Recht auf Schutz der sie betreffenden personenbezogenen Daten. (Grundrechtecharta der EU, Artikel 8, Satz 1)
    Seit 2018 gilt die DSGVO, die europaweit strenge Richtlinien zum Datenschutz und auch empfindliche Strafen bei Verstößen definiert.
    Prüfungs- und praxisrelevante Inhalte
    Obige Definitionen, insb. personenbezogene Daten
    Begründung und Verständnis, warum Datenschutz wichtig ist
    Kernaussagen der DSGVO
    Betroffenenrechte: Auskunftsrecht, Berichtigung, Löschung, Datenübertragbarkeit, Widerspruchsrecht
    Pflichten von datenverarbeitenden Unternehmen, "goldene Regeln" des Datenschutzes: Rechtmäßigkeit, Einwilligung, Zweckbindung, Erforderlichkeit, Transparenz, Datensicherheit, Kontrolle
    ggfs. Berücksichtigung des Datenschutzes beim eigenen Abschlussprojekt
    Datensicherheit
    Datensicherheit umfasst alle technischen und organisatorischen Maßnahmen, die dem Schutz von Daten dienen. Dabei handelt es sich nicht nur um personenbezogene Daten. Die Datensicherheit verfolgt die grundlegenden Schutzziele Vertraulichkeit, Integrität und Verfügbarkeit der Daten.
    Vertraulichkeit der Daten bedeutet, dass nur befugte Personen auf die Daten zugreifen können.
    Integrität soll die Unversehrtheit der Daten sicherstellen und insb. Manipulation verhindern bzw. vor technischen Defekten schützen.
    Verfügbarkeit stellt sicher, dass die Daten auch wirklich verwendet werden können, wenn Bedarf besteht.
    Bei der Datensicherheit geht es in erster Linie darum, technische Mängel und unerlaubten Zugriff Dritter auf die Daten zu verhindern. Hierzu gibt es eine Reihe technischer Maßnahmen wie z.B. Berechtigungskonzepte, Verschlüsselung und elektronische Signaturen, aber auch organisatorische, wie z.B. Gebäudesicherung oder Zutrittskontrollen.
    Das Bundesamt für Sicherheit in der Informationstechnik (BSI) gibt das sogenannte IT-Grundschutz-Kompendium heraus, das in Deutschland quasi die "Bibel" der Datensicherheit bzw. Informationssicherheit darstellt. Viele Unternehmen halten sich an die dortigen Vorgaben z.B. zur Komplexität von Passwörtern oder zu verwendenden Verschlüsselungs- oder Hashalgorithmen.
    Abgrenzung zum Datenschutz: Datensicherheit umfasst mehr Daten (nicht nur personenbezogene). Datenschutz umfasst mehr Maßnahmen (nicht nur technische).
    Prüfungs- und praxisrelevante Inhalte
    Schutzziele: Vertraulichkeit, Integrität, Verfügbarkeit
    Technische und organisatorische Maßnahmen (TOM): Zutrittskontrolle, Zugangskontrolle, Zugriffskontrolle, Weitergabekontrolle, Eingabekontrolle, Auftragskontrolle, Verfügbarkeitskontrolle, Trennung von Daten unterschiedlicher Zwecke
    konkrete Bedrohungsszenarien und mögliche Gegenmaßnahmen, z.B. SQL-Injection, DDoS, Man-in-the-Middle, Trojaner, Viren, RAID, VPN, (a)symmetrische Verschlüsselung
    Authentifizierung vs. Authorisierung
    IT-Grundschutz des BSI
    Zertifizierungen wie z.B. ISO 27001 und Systeme wie ISMS
    Datensicherung
    Datensicherung ist quasi das deutsche Wort für Backup und behandelt das Sichern und Wiederherstellen von Daten auf Sicherungsmedien wie Magnetbändern, externen Festplatten oder der Cloud. Es geht hierbei um den Schutz vor Datenverlust. Die Datensicherung ist daher ein Teil der Datensicherheit, der sich um das Schutzziel Verfügbarkeit kümmert.
    Datenverlust kann durch technische Defekte (z.B. Erschütterung, Überspannung, Stromausfall) verursacht werden, aber auch durch böswillige Aktionen von Mitarbeitern oder externen Angreifern.
    Bei der Datensicherung müssen geeignete Sicherungsmedien ausgewählt und sinnvolle Verfahren für die Identifikation schützenswerter Daten und die konkrete Sicherung inkl. Wiederherstellungsszenarien angewendet werden.
    Dabei sind verschiedene Kriterien wie Sicherungs- und Wiederherstellungsdauer, Kosten und Langlebigkeit der Medien und zu sichernde Datenmengen zu berücksichtigen.
    Bei der Bewertung der zu schützenden Daten müssen Kriterien wie ihr Wert für das Unternehmen bzw. den Besitzer, die Änderungshäufigkeit oder gesetzliche Anforderungen berücksichtigt werden.
    Aber auch die Verschlüsselung der Daten kann nötig sein, wenn Medien extern aufbewahrt werden (z.B. in einer Bank), und auch die Kompression der Daten ist von Interesse, um Speicherplatz zu sparen.
    Prüfungs- und praxisrelevante Inhalte
    Backup-Medien wie Bänder, CDs, Cloud unterscheiden und auswählen
    Backup-Arten: inkrementell/differentiell/Vollsicherung, Großvater/Vater/Sohn, hot/cold
    Identifikation schützenswerter Daten: maschinell/manuell wiederherstellbar, unersetzlich
    mögliche Gründe für Datenverluste und Gegenmaßnahmen
    Literaturempfehlungen
    Diese beiden "klassischen" Romane passen gut zum Oberthema Datenschutz.
    1984 von George Orwell*
    Fahrenheit 451 von Ray Bradbury*
    Links
    Permalink zu dieser Podcast-Episode
    RSS-Feed des Podcasts
    Datenschutz
    GG - Grundgesetz für die Bundesrepublik Deutschland
    Die Grundrechtecharta der EU
    Datenschutz
    Wichtige Datenschutz-Grundlagen
    Datenschutz-Grundverordnung (DSGVO)
    Internetauftritt des Bundesbeauftragten für den Daten
    40 min
  • Law of Demeter (LoD) – Wissenshäppchen #8
    Law of Demeter (LoD)
    Um das Law of Demeter (Gesetz von Demeter) in der Softwareentwicklung geht es im achten Wissenshäppchen.
    TL;DR
    Mit dem Law of Demeter hältst du deinen Code unabhängig vom inneren Aufbau anderer Objekte, indem du Aufgaben an die zuständigen Objekte weitergibst. An einem Versicherungsbeispiel zeige ich dir, wie dadurch fachliche Logik in die passenden Klassen gelangt und Tests einfacher werden. Zusätzliche Methoden können dabei Boilerplate erzeugen, weshalb du bei weitgehend festen Objektstrukturen abwägen solltest, wie konsequent du die Regel anwendest.
    Kapitelmarken
    [00:00:00] Einstieg ins Law of Demeter
    [00:00:39] Woher der Name Demeter stammt
    [00:01:18] Definition und Prinzip des geringsten Wissens
    [00:03:08] Verkettete Zugriffe am Beispiel Person und Adresse
    [00:05:02] Kapselung und Geheimnisprinzip
    [00:06:32] Abhängigkeiten bei internen Änderungen
    [00:08:04] Aufwand für Tests und Stubs
    [00:09:37] Merkhilfe: Methoden sprechen mit ihren Freunden
    [00:10:29] Globale Variablen und Singletons
    [00:11:26] Praxisbeispiel: Gesamtbeitrag einer Versicherungspolice
    [00:13:09] Fachliche Logik auf die zuständigen Klassen verteilen
    [00:15:28] Vorteile für verständlichen und testbaren Code
    [00:16:43] Boilerplate und weitgehend feste Objektstrukturen
    [00:19:07] Regel im Überblick
    [00:19:54] Warum Zwischenvariablen die Abhängigkeit erhalten
    [00:20:31] Buchhinweis und weiterführende Codebeispiele
    Inhalt
    Das Law of Demeter sagt aus, dass eine Methode nur Zugriff auf die folgenden Objekte/Methoden haben sollte:
    Andere Instanzmethoden in ihrer eigenen Klasse
    Ihre Parameter
    Methoden in Objekten, die sie selbst erzeugt
    Globale Variablen
    Eine einfache andere Definition lautet: Verkette keine Methodenaufrufe ("method chaining"). Oder: Verwende nicht mehr als einen ., wenn du auf etwas zugreifst. Ein anderer Name für das LoD ist "Prinzip des geringsten Wissens" ("principle of least knowledge").
    Der Name stammt von Demeter, einer griechischen Göttin. Der "Erfinder" des Prinzips entwickelte in den 80er-Jahren ein System mit diesem Namen.
    Erklärung
    Vorweg: Globale Variablen waren in den 80ern hip, heute nicht mehr. Bitte verwende sie am besten gar nicht.
    Je mehr "Punkte" in einer Aufrufhierarchie auftreten, desto mehr Kenntnis hat eine Komponente vom "Innenleben" der aufgerufenen Komponenten.
    Je mehr Kenntnis eine Komponente über die von ihr verwendeten Komponenten hat, desto stärker bindet sie sich an diese. Wenn sich die genutzten Komponenten ändern, muss sie sich mit ändern bzw. ist kaputt.
    Das verletzt das Geheimnisprinzip und die Kapselung, nach der wir eigentlich in der Objektorientierung arbeiten wollen.
    Je mehr solcher Abhängigkeiten eine Methode hat, desto schwerer ist sie zu verstehen und zu testen.
    Code, der sich an das LoD hält, gilt auch als "schüchtern", weil er "nur mit seinen Freunden spricht".
    Beispielcode
    Um an den Gesamtbeitrag einer Versicherungspolice zu kommen, ist die Kenntnis über die darin enthaltenen versicherten Personen und deren Tarife nötig. Da es sich dabei jeweils um Listen handelt, ist sogar noch ein "Flachklopfen" der Strukturen nötig. Der Code sieht vielleicht cool aus, ist aber stark an die Strukturen gekoppelt. Das heißt, ein Test müsste sehr viel Aufwand betreiben, um die nötigen Strukturen zu schaffen (z.B. mit Mocks).
    class Tarif
    def initialize(name)
    @name = name
    end
    def beitrag
    123.45
    end
    end
    class VersichertePerson
    def initialize(name)
    @name = name
    @tarife = [ Tarif.new("KFZ"), Tarif.new("Hausrat") ]
    end
    def tarife
    @tarife
    end
    end
    class Versicherungspolice
    def initialize
    @versicherte_personen = [ VersichertePerson.new("Stefan Macke"), VersichertePerson.new("Klaus Meyer") ]
    end
    def versicherte_personen
    @versicherte_personen
    end
    end
    # cool, aber schwer verständlich, anfällig für Anpassungen und auch schwer zu testen
    puts Versicherungspolice.new
    .versicherte_personen
    .flat_map { |vp| vp.tarife }
    .inject(0){|summe,tarif| summe + tarif.beitrag }
    Um dies zu vermeiden, können die einzelnen Klassen von ihren inneren Strukturen abstrahieren und stellen simple Zugriffsmethoden für die gewünschten Ergebnisse bereit. Der finale Aufruf sieht nun schon fast langweilig aus. Dafür liegt die fachliche Berechnungslogik da wo sie hingehört: in den jeweiligen Klassen und nicht beim Aufrufer.
    class Tarif
    def initialize(name)
    @name = name
    end
    def beitrag
    123.45
    end
    end
    class VersichertePerson
    def initialize(name)
    @name = name
    @tarife = [ Tarif.new("KFZ"), Tarif.new("Hausrat") ]
    end
    def beitragssumme
    @tarife.inject(0){|summe,tarif| summe + tarif.beitrag }
    end
    end
    class Versicherungspolice
    def initialize
    @versicherte_personen = [ VersichertePerson.new("Stefan Macke"), VersichertePerson.new("Klaus Meyer") ]
    end
    def gesamtbeitrag
    @versicherte_personen.inject(0){|summe,vp| summe + vp.beitragssumme }
    end
    end
    # langweilig, aber einfach zu verstehen und zu testen
    puts Versicherungspolice.new.gesamtbeitrag
    Vorteile
    Der Code wird verständlicher, weil nicht mehrere Strukturen bekannt sein müssen.
    Fachliche Logik landet evtl. eher da, wo sie hingehört. Anstatt externen Komponenten Zugriff auf die inneren Daten zu geben, werden Abstraktionen geschaffen.
    Die Komponenten sind unabhängiger voneinander und lassen sich leichter testen.
    Große Test-Setups mit vielen Mocks, die weitere Mocks zurückgeben, lassen sich vermeiden.
    Interne Änderungen an verwendeten Komponenten wirken sich nicht auf deinen Code aus. Du hast also weniger Anpassungsaufwand.
    Nachteile
    Wenn du die Regel exakt befolgen möchtest, musst du womöglich recht viel Boilerplate-Code schreiben, z.B. simple Getter, die an Instanzvariablen delegieren.
    Wenn sich die verwendeten Strukturen selten ändern, ist der zusätzliche Aufwand vermutlich unnötig.
    Literaturempfehlungen
    Zu diesem Wissenshäppchen gibt es ein separates Kapitel in einem meiner absoluten Lieblingsbücher zur Softwareentwicklung: The Pragmatic Programmer*. Es ist vor Kurzem in der 20-Jahre-Edition neu aufgelegt worden, aber das Law of Demeter ist immer noch Thema.
    *
    Links
    Permalink zu dieser Podcast-Episode
    RSS-Feed des Podcasts
    Gesetz von Demeter – Wikipedia
    Law Of Demeter
    Demeter’s Law: Don’t talk to strangers!
    Zusammenfassung
    Was das Law of Demeter bedeutet
    Wenn du als IT-Azubi Methoden schreibst, hilft dir das Law of Demeter, die Abhängigkeiten zu anderen Objekten überschaubar zu halten. Es heißt auch Prinzip des geringsten Wissens beziehungsweise Principle of Least Knowledge. Der Name stammt aus einem Softwareprojekt namens Demeter, das nach der griechischen Göttin benannt wurde. Die Regel kommt aus den 1980er-Jahren.
    Eine Methode sollte nach der vorgestellten Definition auf Folgendes zugreifen dürfen:
    Andere Instanzmethoden ihrer eigenen Klasse.
    Objekte, die sie als Parameter erhält.
    Methoden von Objekten, die sie selbst erzeugt.
    Globale Variablen.
    Den letzten Punkt streiche ich für heutigen Code aus meiner Empfehlung. Globale Variablen können von überall verändert werden, wodurch sich bei der Fehlersuche schwer nachvollziehen lässt, wer ihren Wert geändert hat. Dieselbe Empfehlung gilt hier für Singletons.
    Als Merkhilfe kannst du dir vorstellen, dass eine Methode nur mit ihren "Freunden" spricht: mit Objekten, die ihr unmittelbar bekannt sind.
    Was bei verketteten Aufrufen passiert
    Bei einem Aufruf wie person.getAdresse().getStrasse().getErsterBuchstabe() bewegst du dich durch mehrere Ebenen einer Objektstruktur. Damit du diesen Code schreiben kannst, musst du wissen, wie die Person ihre Adresse enthält und wie du darüber zur Straße gelangst.
    Die Faustregel "höchstens ein Punkt beim Objektzugriff" macht solche Zugriffe sichtbar. Je nach Programmiersprache steht dafür ein anderer Operator, etwa ein Pfeil.
    Bei Stream-Operationen wie map, filter oder reduce bleibst du innerhalb einer Stream-Verarbeitung. Für das Law of Demeter sind insbesondere Ketten relevant, bei denen du schrittweise innere Bestandteile anderer Objekte hervorholst.
    Auch wenn du die Adresse und anschließend die Straße jeweils in einer eigenen Variablen speicherst, bleibt dein Code an dieselbe innere Struktur gebunden. Die Abhängigkeit besteht über mehrere Zeilen hinweg weiter.
    Warum der innere Aufbau verborgen bleiben sollte
    Durch Getter, die innere Objekte herausgeben, kann aufrufender Code tief in deren Struktur eingreifen. Damit wird die Kapselung aufgebrochen, die Daten und zugehörige Methoden als Einheit zusammenhalten soll.
    Brauchst du den ersten Buchstaben der Straße einer Person, kann die Person dafür eine passende Methode anbieten. Sie kümmert sich intern darum, wie sie diesen Wert ermittelt. Für deinen Aufruf reicht die öffentliche Methode.
    Führt ein:e Entwickler:in später eine zusätzliche Ebene ein oder benennt einen Bestandteil um, müssen alle Aufrufe angepasst werden, die diesen Aufbau kennen. Das Geheimnisprinzip erlaubt es, den inneren Aufbau einer Klasse zu ändern, während ihre öffentliche Schnittstelle bestehen bleibt. Dadurch bleiben aufrufende Komponenten von solchen internen Änderungen unabhängig.
    Wie sich das auf Tests auswirkt
    Um eine tief verkettete Methode zu testen, musst du die beteiligten Objekte passend aufbauen oder durch Stubs ersetzen. Im Personenbeispiel muss die Adresse eine Straße liefern, über die sich der gewünschte Buchstabe abrufen lässt. Fehlt ein benötigtes Objekt, kann ein Null-Pointer-Fehler entstehen.
    Sobald sich die Struktur ändert, betrifft das auch dieses Test-Setup. Mit einer direkten Methode für den benötigten Wert werden die Tests kürzer und hängen weniger stark vom inneren Aufbau ab.
    Mein Beispiel: Beiträge einer Versicherungspolice
    Für mein Beispiel enthält eine Versicherungspolice mehrere versicherte Personen. Jede Person besitzt wiederum Tarife, etwa für eine Kfz- oder Hausratversicherung.
    ...
    22 min
  • Effektive Informationsrecherche mit Suchmaschinen (insb. Google) – IT-Berufe-Podcast #156
    Um den effektiven Umgang mit Suchmaschinen wie Google zur Recherche von Informationen geht es in der einhundertsechsundfünfzigsten Episode des IT-Berufe-Podcasts.
    TL;DR
    Ich suche beim Programmieren mehrmals täglich nach Lösungen, wobei präzise Suchbegriffe auf Englisch helfen, passende Informationen zu finden. Als IT-Azubi brauchst du dafür Grundwissen und musst gefundene Inhalte selbst prüfen, besonders das Datum und die Softwareversion. Über die Adresszeile und eigene Suchkürzel kommst du schneller zu Ergebnissen; mit Suchoperatoren grenzt du deine Anfrage weiter ein. Meine Beispiele aus September 2020 behandeln außerdem personalisierte Treffer und Google-Funktionen wie die Bilder-Rückwärtssuche.
    Kapitelmarken
    [00:00:00] Thema: Effektiv im Internet suchen
    [00:03:03] Warum du als IT-Azubi sicher recherchieren solltest
    [00:07:01] Gefundene Inhalte und Code selbst prüfen
    [00:08:20] Kurze Suchanfragen und Stopwords
    [00:10:29] Die gewünschte Aufgabe präzise beschreiben
    [00:11:56] Bei IT-Themen auf Englisch suchen
    [00:13:43] Wie Google Suchergebnisse personalisiert
    [00:16:14] Privat suchen und Datenschutz beachten
    [00:19:17] Schneller suchen und Kleinschreibung verwenden
    [00:20:16] Standardsuche und Tastenkürzel im Browser
    [00:21:49] Eigene Suchkürzel für Websites einrichten
    [00:25:41] Direkt auf passenden Plattformen suchen
    [00:27:15] Ecosia als weitere Suchmaschine
    [00:28:38] Anzeigen und organische Treffer erkennen
    [00:32:05] SEO und die Reihenfolge der Treffer
    [00:34:30] Nischenthemen auf späteren Ergebnisseiten finden
    [00:35:54] Datum und Softwareversion prüfen
    [00:38:36] Suchoperatoren und Wörter ausschließen
    [00:40:23] Genaue Wortfolgen mit Anführungszeichen suchen
    [00:41:14] Mit site: auf einer Website suchen
    [00:42:17] Verlinkende Websites mit link: suchen
    [00:43:04] Teile einer URL mit inurl: suchen
    [00:43:50] Dateitypen mit filetype: eingrenzen
    [00:44:25] Fachbegriffe mit define: nachschlagen
    [00:46:24] Bilder-Rückwärtssuche und Bildquellen
    [00:48:30] Mit Google rechnen
    [00:49:07] Währungen umrechnen
    [00:50:06] Gespeicherte Website-Versionen mit cache: aufrufen
    [00:51:45] Feedback und weiterführende Beispiele
    Inhalt
    Warum ist die richtige Suche im Internet wichtig?
    Reines Faktenwissen ist nicht mehr zeitgemäß. Dafür haben wir Suchmaschinen.
    Die "falsche" Suche führt dich ggfs. zu veralteten oder falschen Informationen. Das behindert dich in der täglichen Arbeit.
    Gerade für ITler ist die Suchmaschine ein tägliches Werkzeug. Wir können nicht alle Programmiersprachen oder Konfigurationseinstellungen auswendig kennen.
    Es ist wichtig, dass du deinen Verstand bemühst und die Ergebnisse bewertest. Überlass der Suchmaschine nicht das Denken für dich!
    Wie "google" ich richtig? Allgemeine Tipps zum Umgang mit Suchmaschinen.
    Denk nicht wie ein Mensch, sondern wie eine Maschine! Formuliere also keine Prosatexte, sondern kurze und knappe Suchanfragen mit den wichtigsten Suchbegriffen. Statt "Wie öffne ich eine Datei in Java?" solltest du nach "java datei öffnen" suchen.
    Suche so spezifisch wie möglich, indem du einschränkende weitere Suchbegriffe hinzufügst. Statt "java dateiverarbeitung" solltest du nach "java datei schreiben anhängen", wenn du etwas an eine Datei anhängen möchtest.
    Verwende gerade im IT-Umfeld Englisch als Sprache für deine Suchanfragen. Das wird zu deutlich mehr Ergebnissen führen. Statt "java datei öffnen" solltest du also nach "java file open" suchen.
    Vermeide sogenannte Stopwords und Satzzeichen, die von der Suchmaschine ohnehin ignoriert werden. Statt "how do i open a file in java?" solltest du also nach "java file open" suchen.
    Manchmal kann es sinnvoll sein, "anonym" zu suchen, damit die Suchergebnisse nicht anhand deines Profils angepasst werden oder die Suchmaschine ein solches von dir erstellt.
    Produktivitätstipps
    Ignoriere Groß-/Kleinschreibung bei deiner Suche. Die Suchmaschine ignoriert das eh.
    Stelle deine Browser-Suche direkt auf deine Standard-Suchmaschine ein, z.B. Google. Dadurch kannst du durch die Eingabe von Suchbegriffen in der Adresszeile direkt eine Suche starten.
    Richte dir Such-Abkürzungen für häufig verwendete Suchmaschinen im Browser ein. Dadurch kannst du mit wenigen Tastendrücken direkt in der gewünschten Suchmaschine suchen. Das geht auch für interne Anwendungen wie dein Ticket-System.
    Es gibt nicht nur Google! Je nachdem, was du suchst, kann die direkte Suche bei YouTube oder Amazon sinnvoller sein. Und wenn du umweltbewusster suchen willst, empfehle ich dir Ecosia.
    Bewertung von Suchergebnissen
    Unterscheide zwischen organischen und bezahlten Suchergebnissen. Erstere sind meist die bessere Wahl.
    Platz 1 ist nicht automatisch das beste Ergebnis für dich. Viele Websites verdienen ihr Geld mit Suchmaschinenoptimierung und tun alles dafür, auf den ersten Plätzen zu landen. Sie müssen aber nicht unbedingt den besten Inhalt bieten.
    Öffne auch mal die zweite Suchergebnisseite. Im sogenannten Long Tail verbergen sich durchaus auch Perlen.
    Achte auf das Erstelldatum der Seite. Gerade in der IT sind aktuelle Inhalte wichtig.
    Achte auf korrekte Versionen der verwendeten Software. Eine Anleitung zu Java 6 hilft dir nicht, wenn du mit Java 11 arbeitest.
    (Google-)Suchoperatoren zur treffgenaueren Suche
    Unpassende Wörter ausschließen: -. Beispiel: javascript dom -react
    Exakt passende Treffer (wörtliche Suche): "". Beispiel: "Einhaltung der Präsentationszeit" fachinformatiker
    Bestimmte Website durchsuchen: site:. Beispiel: site:it-berufe-podcast.de presenter
    Seiten mit Verlinkung auf Zielseite suchen: link:. Beispiel: link:it-berufe-podcast.de
    Konkreten Bestandteil der URL suchen: inurl:. Beispiel: projektdokumentation inurl:gerda
    Konkreten Dateityp suchen: filetype:. Beispiel: filetype:pdf projektdokumentation vorlage
    Schnell kurze Definitionen finden: define:. Beispiel: define:REST
    Zusätzliche Möglichkeiten der Google-Suche
    Bilder-Rückwärtssuche, z.B. für Quellenangaben bei verwendeten Bildern.
    Währungs- und Taschenrechner. Beispiele: 100 usd in eur oder 19 * (3 + 2) / 100
    Alte Versionen von Websites anzeigen (cache:).
    Links
    Permalink zu dieser Podcast-Episode
    RSS-Feed des Podcasts
    Mit Google suchen - Google-Suche-Hilfe
    Websuchen optimieren - Google-Suche-Hilfe: Liste der möglichen Suchoperatoren bei Google
    27+ Google Suchoperatoren für bessere Suchergebnisse: noch mehr mögliche Suchoperatoren
    Richtig googeln: So nutzt ihr die Google-Suchoperatoren
    Zusammenfassung
    Im IT-Alltag nach Informationen suchen
    Beim Programmieren suche ich mehrmals täglich nach Lösungen und stoße dabei auch auf bereits vorhandene Funktionen einer Sprache. Als IT-Azubi baust du dir Grundwissen auf, etwa zu Netzwerkprotokollen. Einzelne technische Daten kannst du nachschlagen, sobald du sie für eine Aufgabe brauchst, weil sich vieles in der IT schnell verändert.
    Wenn du Suchmaschinen sicher bedienst, sparst du bei solchen Aufgaben Zeit. Prüfe gefundene Inhalte selbst und verstehe Code, bevor du ihn übernimmst. Das gilt ebenso für Skripte, die du als Administrator:in ausführst und die deine Systeme verändern können.
    Die folgenden Beispiele beziehen sich auf Google und stammen aus September 2020.
    Präzise Suchbegriffe eingeben
    Formuliere deine Anfrage kurz und konkret. Mit java datei öffnen beschreibst du bereits, was du suchst. Häufige Wörter wie "eine" oder "in" gelten als Stopwords und werden bei der Suche weitgehend ignoriert. Auch gewöhnliche Satzzeichen kannst du weglassen.
    Beschreibe die gewünschte Aufgabe genauer. Die Anfrage java datei schreiben anhängen enthält genug Kontext, um nach Beispielen für das Anhängen von Text an eine Datei zu suchen.
    Suche bei IT-Themen auf Englisch. Viele Fachbegriffe und Befehle sind ohnehin englischsprachig. Mit java file open erreichst du mehr Quellen. Falls du nur die deutsche Bezeichnung einer Oberfläche kennst, kannst du den passenden englischen Begriff durch Übersetzen oder anhand von Bildschirmfotos finden.
    Bei meinem damaligen Vergleich lieferte java file open rund 460 Millionen Treffer, während java datei öffnen etwa 596.000 ergab. Welche Ergebnisse du erhältst, hängt allerdings auch von deinem Gerät und Standort ab.
    Personalisierte Treffer und Datenschutz
    Google berücksichtigt bei Suchergebnissen unter anderem, ob du angemeldet bist und welche Suchanfragen du zuvor gestellt hast. Auch das Gerät beeinflusst, welche Seiten erscheinen. Deshalb können dieselben Suchbegriffe bei dir andere Treffer liefern als bei mir.
    Wenn du den Einfluss deiner bisherigen Suchhistorie verringern möchtest, melde dich von deinem Google-Konto ab und öffne ein privates Browserfenster. Dadurch wird es schwieriger, deine Suche deinem bisherigen Verlauf zuzuordnen. Google kann weiterhin versuchen, dich anhand technischer Merkmale deines Browsers zu erkennen. Als weitere Möglichkeit für datenschutzbewusstes Suchen kommt der Tor-Browser zur Sprache.
    Beim Testen meiner eigenen Google-Anzeigen habe ich erlebt, dass sie im angemeldeten Browser häufig ausblieben. In einem anderen Browser oder privaten Fenster erschienen sie.
    Über den Browser schneller suchen
    Groß- und Kleinschreibung beeinflussen die Suche nicht. Du kannst deine Suchbegriffe durchgehend kleinschreiben.
    Stelle deine bevorzugte Suchmaschine als Standardsuche im Browser ein. Mit Strg+L springst du in die Adresszeile, wo du deine Suchbegriffe eingibst und mit Enter suchst. In Firefox funktioniert dafür auch F6.
    Für Seiten, auf denen du häufig suchst, kannst du eigene Suchkürzel anlegen. So richtest du sie in Firefox ein:
    Führe auf der gewünschten Website eine Suche mit einem leicht erkennbaren Begriff aus.
    Kopiere die entstandene URL und ersetze den Suchbegriff darin durch %s.
    Speichere diese Adresse als Lesezeichen und gib ihr ein Schlüsselwort, etwa yt für YouTube.
    Gib anschließend beispielsweise yt suchbegriff in die Adresszeile ein. Firefox setzt deinen Begriff an der Stelle von %s ein und öffnet die Ergebnisse.
    Das funktioniert bei Websites,...
    54 min
  • Stellenangebote Softwareentwicklung und Systemadministration in Vechta – IT-Berufe-Podcast
    In dieser Sonder-Episode des IT-Berufe-Podcasts geht es um drei Stellenausschreibungen für Softwareentwickler und Systemadministratoren bei meinem Arbeitgeber.

    Inhalt
    Bei meinem Arbeitgeber, der ALTE OLDENBURGER Krankenversicherung AG aus Vechta, suchen wir zum nächstmöglichen Zeitpunkt Unterstützung im IT-Bereich. Wir schreiben aktuell drei Stellen aus: zwei Softwareentwickler und einen Systemadministrator. Selbstverständlich sind Bewerbungen von Personen aller Geschlechter erwünscht.
    Kurzübersicht der Stellen

    * Bezeichnung: Softwareentwickler (m/w/d) bzw. Systemadministrator (m/w/d)
    * Art der Anstellung: unbefristete Festanstellung
    * Arbeitsort: ALTE OLDENBURGER Krankenversicherung AG, Alte-Oldenburger-Platz 1, 49377 Vechta
    * Beginn: schnellstmöglich
    * Ende der Bewerbungsfrist: 05.07.2020
    * Gehalt: attraktive Vergütung nach dem Tarifvertrag für das private Versicherungsgewerbe
    * Sonderleistungen: Urlaubs- und Weihnachtsgeld (13,3 Gehälter), Fahrtkostenzuschuss zur Arbeitsstelle, 40 EUR vermögenswirksame Leistungen pro Monat, Firmenfitness über qualitrain, Mitarbeiterrabatte für Versicherungen, arbeitgeberfinanzierte Direktversicherung
    * Wöchentliche Arbeitszeit: 38 Stunden im Gleitzeitmodell ohne Kernarbeitszeit (bei einer Vollzeitbeschäftigung)
    * Jährlicher Urlaubsanspruch: 30 Tage
    * Weiterbildungsmöglichkeiten: (Duales) Studium (z.B. Wirtschaftsinformatik, technische Informatik), IHK-Weiterbildungen, externe Technologieschulungen, Konferenzbesuche
    * Sonstiges: frisches Obst, kostenloser Kaffee, modern und ergonomisch ausgestattete Arbeitsplätze in max. 4er-Büros, betriebliche Gesundheitsförderung, eine kostenfreie Rückenmassage pro Monat (außerhalb der Arbeitszeit), ein hervorragendes Betriebsrestaurant mit bezuschussten Speisen, ein Employee-Assistance-Program, viele gemeinsame Aktivitäten wie z.B. Weihnachtsfeier, Betriebsausflug oder Spargelessen

    Technische Highlights der Arbeit bei der AO

    * Moderne IT-Infrastruktur

    * Windows 10 und SUSE Linux
    * Virtualisierung mit Citrix und VMware


    * Moderne Softwareentwicklung

    * Continuous Integration und Deployment
    * Test Driven Development, Unit-Tests, Codeanalyse mit SonarQube
    * Java 14, Jakarta EE 8, JBoss EAP 7.3


    * Fokus auf optimale Kollaboration

    * Code Reviews, Pair Programming, Pull Requests


    * Fokus auf DevOps

    * Gute Zusammenarbeit zwischen Administration und Entwicklung
    * Auf- und Ausbau der Container-Infrastruktur mit Docker und Kubernetes



    Detailinformationen zu den drei Stellenangeboten
    Unter den folgenden Links kannst du dir alle Details zu den ausgeschriebenen Stellen anschauen und findest auch die notwendigen Daten für deine Bewerbung bei uns.


    Softwareentwickler für Java-Services


    20 min
  • Plain-Text-Markup-Formate für Texte (Markdown, Asciidoc) – IT-Berufe-Podcast #155
    Um die Vorteile und Einsatzgebiete von Plain-Text-Markup-Formaten für längere Texte geht es in der einhundertfünfundfünfzigsten Episode des IT-Berufe-Podcasts.
    TL;DR
    Mit Plain-Text-Markup-Formaten schreibst du strukturierte Texte in einfachen Textdateien, die du mit Git verwalten und per Skript weiterverarbeiten kannst. Ich empfehle dir Markdown für den Einstieg; für umfangreiche technische Dokumente eignet sich AsciiDoc, während du mit PlantUML Diagramme als Text beschreibst. LaTeX bietet viele Möglichkeiten für deine Projektdokumentation und braucht Zeit zum Einarbeiten. Mit Pandoc wandelst du Formate ineinander um, während dir Editoren wie Visual Studio Code beim Schreiben eine Vorschau zeigen.
    Kapitelmarken
    [00:00:00] Plain-Text-Markup für deinen Ausbildungsalltag
    [00:02:00] Überblick über die vorgestellten Formate
    [00:03:04] Anlass: Plain Text im Pragmatic Programmer
    [00:03:58] Textdateien mit Git verwalten
    [00:04:25] Binärformate und der Aufbau von DOCX-Dateien
    [00:07:31] Diffs, Merges und Branches für Dokumente
    [00:09:44] Texte langfristig lesen und bearbeiten
    [00:12:20] Mit Tastatur und Kommandozeile arbeiten
    [00:13:58] Den Editor frei wählen
    [00:16:02] Textdateien per Skript verarbeiten
    [00:18:22] Markdown und das Rendern von Texten
    [00:20:20] Markdown in Apps und Editoren
    [00:21:36] Markdown-Syntax und mögliche Ausgabeformate
    [00:24:39] AsciiDoc für umfangreiche technische Dokumente
    [00:26:35] Dokumente im Build-Prozess erzeugen
    [00:28:20] Quelltext direkt in AsciiDoc einbinden
    [00:29:01] LaTeX für deine Projektdokumentation
    [00:30:28] LaTeX lernen und Vorlagen verwenden
    [00:32:54] UML-Diagramme mit PlantUML beschreiben
    [00:34:04] PlantUML in AsciiDoc und Redmine einbetten
    [00:36:03] Textile für Texte in Redmine
    [00:38:11] Formate mit Pandoc umwandeln
    [00:40:24] Visual Studio Code als Markup-Editor
    [00:41:44] MarkdownPad und weitere Editoren
    [00:42:49] Empfehlungen für deinen Einstieg
    [00:43:39] Buchtipp: The Pragmatic Programmer
    [00:44:40] Syntaxbeispiele, Links und Feedback
    Inhalt
    Plain-Text-Formate sind Formate, die in reinen (menschenlesbaren) Text-Dateien abgelegt werden, also keine binären Formate wie z.B. in Microsoft Word oder LibreOffice.
    Vorteile von Plain-Text-Formaten
    Versionierung: Diff, Merge, Branches möglich
    Langlebigkeit: Keine proprietäre Bearbeitungssoftware nötig, keine Abhängigkeit von Herstellern
    Produktivität: Arbeit ausschließlich mit der Tastatur ohne Maus
    Flexibilität: Konvertierbar, zur Not selbst parsbar, mit jedem beliebigen Editor änderbar
    Automatisierung: Mächtige Tools zur Manipulation vorhanden
    Beispiele für Formate
    Markdown
    leicht zu lernen, geringer Sprachumfang
    Output hauptsächlich HTML
    breite Unterstützung in Tools, z.B. Wordpress, GitHub
    AsciiDoc
    sehr großer Sprachumfang, sogar geeignet für Bücher
    viele verschiedene Output-Formate, z.B. HTML, PDF, EPUB
    gut in übliche Build-Prozesse integriert, z.B. in Gradle
    Textile
    ähnelt der Wiki-Syntax
    Redmine
    LaTeX
    komplettes Textsatz-System, "perfekter" Textsatz
    geeignet für komplette Bücher inkl. Verzeichnissen, Index, Literaturverzeichnis
    PlantUML
    Gestaltung von UML-Diagrammen
    kann u.a. in LaTeX und AsciiDoc eingebunden werden, aber auch in Wikis
    Tools
    Pandoc: Konvertiert automatisch Dateien zwischen beliebigen Formaten
    VSCode: Editor für beliebige Markup-Formate inkl. Preview-Funktion
    MarkdownPad: Editor für Markdown
    Quelltextbeispiele
    Es folgen Beispiele für das gezeigte HTML-Fragment in den unterschiedlichen Markup-Sprachen.
    HTML
    Markup-Sprachen: HTML

    Ein normaler Absatz in HTML.

    Überschrift

    Fetter Text und kursiver Text.

    Listen
    • Ungeordnete Liste
      • Mit Unterpunkten
      • Noch ein Unterpunkt
      • Noch ein Punkt
        1. Geordnete Liste
          1. Mit Unterpunkten
          2. Noch ein Unterpunkt
          3. Noch ein Punkt
          4. Links

            IT-Berufe-Podcast

            Bilder
            Bildbeschreibung
            Code

            Inline Code mit code.

            public static void main(String[] args) {
            System.out.println("Hallo!");
            }
            Zitate

            Zitate sehen so aus.

            Markdown
            # Markup-Sprachen: Markdown
            Ein normaler Absatz in Markdown.
            ## Überschrift
            **Fetter Text** und *kursiver Text*.
            ## Listen
            * Ungeordnete Liste
            * Mit Unterpunkten
            * Noch ein Unterpunkt
            * Noch ein Punkt
            1. Geordnete Liste
            1. Mit Unterpunkten
            2. Noch ein Unterpunkt
            2. Noch ein Punkt
            ## Links
            [IT-Berufe-Podcast](https://it-berufe-podcast.de "Website des IT-Berufe-Podcasts")
            ## Bilder
            ![Bildbeschreibung](https://it-berufe-podcast.de/Abbildungen/LogoITBerufePodcast500px.jpg "Das Logo des IT-Berufe-Podcasts")
            ## Code
            Inline Code mit `code`.
            \```java
            public static void main(String[] args) {
            System.out.println("Hallo!");
            }
            \```
            ## Zitate
            > Zitate sehen so aus.
            AsciiDoc
            == Markup-Sprachen: AsciiDoc
            Ein normaler Absatz in AsciiDoc.
            === Überschrift
            *Fetter Text* und _kursiver Text_.
            === Listen
            * Ungeordnete Liste
            ** Mit Unterpunkten
            ** Noch ein Unterpunkt
            * Noch ein Punkt
            . Geordnete Liste
            .. Mit Unterpunkten
            .. Noch ein Unterpunkt
            . Noch ein Punkt
            === Links
            https://it-berufe-podcast.de[IT-Berufe-Podcast]
            === Bilder
            image:https://it-berufe-podcast.de/Abbildungen/LogoITBerufePodcast500px.jpg[Bildbeschreibung,title="Das Logo des IT-Berufe-Podcasts"]
            === Code
            Inline Code mit `code`.
            [source,java]
            ----
            public static void main(String[] args) {
            System.out.println("Hallo!");
            }
            ----
            === Zitate
            ____
            Zitate sehen so aus.
            ____
            Textile
            h1(#markup-sprachen-markdown). Markup-Sprachen: Textile
            Ein normaler Absatz in Textile.
            h2(#überschrift). Überschrift
            *Fetter Text* und _kursiver Text_.
            h2(#listen). Listen
            * Ungeordnete Liste
            ** Mit Unterpunkten
            ** Noch ein Unterpunkt
            * Noch ein Punkt
            # Geordnete Liste
            ## Mit Unterpunkten
            ## Noch ein Unterpunkt
            # Noch ein Punkt
            h2(#links). Links
            "IT-Berufe-Podcast":https://it-berufe-podcast.de
            h2(#bilder). Bilder
            !https://it-berufe-podcast.de/Abbildungen/LogoITBerufePodcast500px.jpg(Das Logo des IT-Berufe-Podcasts)!
            Bildbeschreibung
            h2(#code). Code
            Inline Code mit @code@.
            bc(java). public static void main(String[] args) {
            System.out.println("Hallo!");
            }
            h2(#zitate). Zitate
            bq. Zitate sehen so aus.
            LaTeX
            \hypertarget{markup-sprachen-markdown}{%
            \section{Markup-Sprachen: LaTeX}\label{markup-sprachen-markdown}}
            Ein normaler Absatz in LaTeX.
            \hypertarget{uxfcberschrift}{%
            \subsection{Überschrift}\label{uxfcberschrift}}
            \textbf{Fetter Text} und \emph{kursiver Text}.
            \hypertarget{listen}{%
            \subsection{Listen}\label{listen}}
            \begin{itemize}
            \tightlist
            \item
            Ungeordnete Liste
            \begin{itemize}
            \tightlist
            \item
            Mit Unterpunkten
            \item
            Noch ein Unterpunkt
            \end{itemize}
            \item
            Noch ein Punkt
            \end{itemize}
            \begin{enumerate}
            \def\labelenumi{\arabic{enumi}.}
            \tightlist
            \item
            Geordnete Liste
            \begin{enumerate}
            \def\labelenumii{\arabic{enumii}.}
            \tightlist
            \item
            Mit Unterpunkten
            \item
            Noch ein Unterpunkt
            \end{enumerate}
            \item
            Noch ein Punkt
            \end{enumerate}
            \hypertarget{links}{%
            \subsection{Links}\label{links}}
            \href{https://it-berufe-podcast.de}{IT-Berufe-Podcast}
            \hypertarget{bilder}{%
            \subsection{Bilder}\label{bilder}}
            \begin{figure}
            \centering
            \includegraphics{https://it-berufe-podcast.de/Abbildungen/LogoITBerufePodcast500px.jpg}
            \caption{Bildbeschreibung}
            \end{figure}
            \hypertarget{code}{%
            \subsection{Code}\label{code}}
            Inline Code mit \texttt{code}.
            \begin{Shaded}
            \begin{Highlighting}[]
            \KeywordTok{public} \DataTypeTok{static} \DataTypeTok{void} \FunctionTok{main}\NormalTok{(}\BuiltInTok{String}\NormalTok{[] args) \{}
            \BuiltInTok{System}\NormalTok{.}\FunctionTok{out}\NormalTok{.}\FunctionTok{println}\NormalTok{(}\StringTok{"Hallo!"}\NormalTok{);}
            \NormalTok{\}}
            \end{Highlighting}
            \end{Shaded}
            \hypertarget{zitate}{%
            \subsection{Zitate}\label{zitate}}
            \begin{quote}
            Zitate sehen so aus.
            \end{quote}
            PlantUML
            Und zum Schluss noch ein Beispiel für ein Klassendiagramm in PlantUML.
            class Auto {
            hersteller : String
            farbe : String
            kilometerstand : Integer
            neupreis : Double
            fahre() : void
            hupe() : void
            }
            Gerendert sieht das dann so aus.
            Literaturempfehlungen
            Eines meiner absoluten Lieblingsbücher widmet ein eigenes Kapitel dem Thema "Plain Text": The Pragmatic Programmer*. Dave Thomas und Andy Hunt erklären dir auch noch einmal die Vorteile von einfachen Textdateien.
            *
            Links
            Permalink zu dieser Podcast-Episode
            RSS-Feed des Podcasts
            Markdown
            AsciiDoc
            Textile
            LaTeX
            PlantUML
            Pandoc
            Visual Studio Code
            MarkdownPad
            Zusammenfassung
            Texte in einfachen Textdateien schreiben
            Für meine Blogartikel und Newsletter schreibe ich Texte mit Markup direkt in Textdateien. Auch Softwaredokumente, E-Mail-Vorlagen und deine Projektdokumentation lassen sich so erstellen. Als IT-Azubi kannst du dabei mit einem Texteditor arbeiten, den du bereits kennst.
            Mit wenigen Zeichen kennzeichnest du beispielsweise Überschriften oder Listen. Ein passendes Werkzeug erzeugt daraus HTML oder ein PDF....
            46 min
          5. Checkliste für die Projektpräsentation und das Fachgespräch der IHK-Prüfung – IT-Berufe-Podcast #154
            Eine umfangreiche Checkliste mit allem, was du zur mündlichen IHK-Prüfung (Projektpräsentation und Fachgespräch) mitbringen solltest, gibt es in der einhundertvierundfünfzigsten Episode des IT-Berufe-Podcasts.
            TL;DR
            Mit meiner Checkliste für den Tag der mündlichen Abschlussprüfung kannst du prüfen, welche Unterlagen du einpackst und wie du deine Präsentation technisch absicherst. Zusätzliche Kopien deiner Folien sowie Hilfsmittel auf Papier helfen dir, wenn Geräte ausfallen. Übe Antworten fürs Fachgespräch laut und schau dir den Prüfungsraum vorher an, damit du am Prüfungstag mit ausreichend Zeit ankommst. Die Angaben zu Pflichtunterlagen beziehen sich auf den Stand der Aufnahme im Mai 2020.
            Kapitelmarken
            [00:00:01] Informationen zum Fachgespräch
            [00:00:37] Checkliste für die mündliche Abschlussprüfung
            [00:01:33] Checkliste als PDF herunterladen
            [00:02:15] Pflichtunterlagen und Vorsorge für technische Probleme
            [00:04:29] Prüfungseinladung und gültiger Personalausweis
            [00:07:07] Ausbildungsnachweis und Berichtsheft
            [00:08:54] Berufsschulnote auf dem IHK-Zeugnis
            [00:09:54] Präsentationsgerät und Folien testen
            [00:11:05] Desktop und Titelfolie vorbereiten
            [00:12:24] Presenter für die Präsentation
            [00:15:02] Passende Kabel und Adapter mitbringen
            [00:16:16] Eigenen Beamer organisieren
            [00:18:38] Anwendung oder Projektergebnis mitbringen
            [00:20:33] Wasser und etwas zu essen einpacken
            [00:23:00] Passende Kleidung für die Prüfung
            [00:26:27] Präsentation auf USB-Stick und in der Cloud sichern
            [00:27:57] Projektdokumentation lesen und mitnehmen
            [00:29:17] Ausgedruckte Folien für technische Ausfälle
            [00:30:31] Prüfungszeit mit einem separaten Timer verfolgen
            [00:32:50] Notizen auf Karteikarten vorbereiten
            [00:35:06] Häufige Fragen im Fachgespräch laut üben
            [00:36:50] Prüfungsraum vorab anschauen
            [00:38:47] Folien von den Plätzen der Prüfer:innen aus testen
            [00:39:26] Frühzeitig zum Prüfungstermin kommen
            [00:42:42] Checkliste im Überblick
            [00:43:59] Links und ergänzende Materialien
            [00:44:18] Feedback und Podcastbewertungen
            Inhalt
            Der Tag der Projektpräsentation ist sicher für viele Prüflinge stressig. Es geht ja immerhin um nichts weniger als den (meist ersten) Berufsabschluss und die letztendliche Abschlussnote. Da sollte man sich als Prüfling nicht noch unnötig zusätzlich Stress verursachen durch vergessene wichtige Unterlagen oder Utensilien, die unbedingt bei dieser letzten Prüfung benötigt werden.
            Um es dir etwas einfacher zu machen, kommt hier meine ultimative Liste aller Dinge, die du zur Prüfung mitbringen bzw. vorher erledigen solltest.
            Unterlagen
            Prüfungseinladung der IHK: Mitbringen, damit der Prüfungsausschuss dich identifizieren kann.
            Gültigen Personalausweis: Mitbringen, damit der Prüfungsausschuss dich identifizieren kann. Auch falls du dem Prüfungsausschuss persönlich bekannt bist, weil z.B. dein Lehrer teilnimmt. Er könnte am Prüfungstermin krank sein.
            Ausbildungsnachweis: Das allseits beliebte Berichtsheft bzw. ein Projektbericht bei externen Prüflingen oder dualen Studenten solltest du auf Papier in einem vernünftig prüfbaren Format (z.B. Schnellhefter) dabei haben. Ohne das Berichtsheft wirst du nicht geprüft!
            Zeugnis der Berufsschule: Falls du deine Abschlussnote mit auf das IHK-Zeugnis drucken lassen willst.
            Technik
            Laptop mit deiner Projektpräsentation: Vorher nochmal testen, ob alle verwendeten Schriftarten, Bilder, Videos usw. eingebettet oder korrekt verknüpft sind. Kein "witziges" oder unpassendes Hintergrundbild einstellen. Desktop vorher aufräumen.
            Presenter*: Damit du nicht ständig zum Laptop rennen musst, um die Folien durchzuschalten, und etwas in der Hand hast, an dem du dich festhalten kannst. Nutze nicht dein Handy (ist verboten) oder deine Maus (du kannst dich "verklicken").
            VGA-/DVI-/HDMI-Kabel bzw. -Adapter für deinen Laptop: Oft gibt es Probleme mit dem Beamer vor Ort, der nicht den erwarteten Anschluss hat.
            Eigener Beamer: Nicht nur falls in deinem Prüfungsraum kein Beamer bereitgestellt wird. Der kann durchaus kaputt sein oder zu lichtschwach.
            Programmierte Anwendung bzw. dein Projektartefakt: Falls du sie live demonstrieren willst, wovon ich aber in den meisten Fällen abraten würde.
            Sonstiges
            Wasser: Oder irgendetwas anderes zu trinken. Viele Prüflinge haben durch die Aufregung einen trockenen Hals und das ist für den Vortrag nicht gerade förderlich.
            Nervennahrung: Schokoriegel oder lieber eine gesunde Nussmischung verkürzt die Wartezeit bis zur Prüfung.
            Vernünftige Kleidung: Nicht "overdressed", aber schicke Klamotten wie Hemd oder Bluse sind schon angebracht.
            Fallback
            Projektpräsentation: Deine Präsentation solltest du auf einem USB-Stick und/oder in der Cloud ablegen, falls dein Laptop den Geist aufgibt oder du Probleme mit dem Beamer bekommst.
            Projektdokumentation: Zumindest digital solltest du deine Projektdokumentation griffbereit haben, falls es Rückfragen zu deinen Inhalten gibt.
            Handout der Präsentation: Als Backup falls die gesamte Technik versagt. Nicht für jeden Prüfer ausdrucken!
            Timer*: Alternativ eine Uhr als Fallback für den nicht funktionierenden Präsentationsmodus in PowerPoint.
            Karteikarten/Vortragshilfen: Solltest du dich sicherer fühlen, kannst du statt des Präsentationsmodus auch Handkarten verwenden.
            Vorbereitung
            Standardfragen: Gut vorbereitete Antworten auf die klassischen Fragen im Fachgespräch solltest du auswendig im Kopf haben.
            Prüfungsraum begutachten: Wenn es dir möglich ist, kannst du vielleicht sogar deine Präsentation vor Ort live durchspielen. Nur so kannst du sicher sein, dass aus der späteren Position der Prüfer heraus alle Texte gut lesbar (Schriftgröße usw.) und Grafiken erkennbar (Kontrast usw.) sind.
            Zeit: Komm lieber deutlich zu früh zur Prüfung als ein wenig zu spät. Wir konnten z.B. schon öfter Prüflinge spontan um eine Stunde vorziehen, weil andere ausgefallen sind oder ihr Berichtsheft vergessen haben. Da macht es einen guten Eindruck, wenn du spontan reagieren kannst und bereitstehst.
            Download der Checkliste
            Hier kannst du dir die obige Checkliste in Kurzform zum Ausdrucken herunterladen: Checkliste für die Projektpräsentation und das Fachgespräch der IHK-Prüfung.
            Produktempfehlungen
            Ich nutze seit Jahren den Logitech R700 Professional Presenter* und kann ihn uneingeschränkt weiterempfehlen.
            *
            Ob als Pomodoro-Timer oder als Countdown bei Präsentationen, ich nutze fast täglich den TFA 38.2025 elektronischen 2-fach Timer*.
            *
            Links
            Permalink zu dieser Podcast-Episode
            RSS-Feed des Podcasts
            Warum du bei deiner Projektpräsentation unbedingt einen Presenter nutzen solltest
            Kleiderordnung bei der Abschlussprüfung (Projektpräsentation und Fachgespräch)
            Meine Hörbücher zur Vorbereitung auf das Fachgespräch
            Live-Demo in der Projektpräsentation
            Handout zur Projektpräsentation
            Einhaltung der Vortragszeit (15 Minuten) bei der Projektpräsentation
            Weitere Infos zur ProjektpräsentationDu suchst noch mehr Tipps rund um die Projektpräsentation? Dann schau doch mal in diese Artikel- und Podcast-Kategorie: Alle Artikel rund um die Projektpräsentation.Und wenn du dich für meinen Newsletter einträgst, kannst du dir jetzt sofort meine Checkliste für die Projektpräsentation herunterladen.Jetzt anmelden!
            Zusammenfassung
            Unterlagen einpacken
            Für deine mündliche Abschlussprüfung mit Projektpräsentation und Fachgespräch habe ich eine Checkliste zusammengestellt. Sie enthält Pflichtunterlagen sowie Empfehlungen, mit denen du dich auf technische Probleme vorbereitest. Die Angaben zu den Prüfungsregeln beziehen sich auf Mai 2020, als ich die Folge aufgenommen habe. Welche Unterlagen deine IHK verlangt, steht auch in deiner Prüfungseinladung.
            Prüfungseinladung der IHK: Der Prüfungsausschuss gleicht sie mit deinem Ausweis ab, um dich zu identifizieren.
            Gültiger Personalausweis: Prüfe rechtzeitig, wann er abläuft. Auch wenn du eine:n Prüfer:in kennst, brauchst du einen gültigen Ausweis, weil sich der Ausschuss personell ändern kann.
            Ausbildungsnachweis beziehungsweise Berichtsheft: Nach dem beschriebenen Stand ist er Voraussetzung dafür, dass du zur Abschlussprüfung zugelassen wirst, und muss zum Termin mitgebracht werden. Ich empfehle dir, ihn auszudrucken und ordentlich abzuheften. Bereits damals waren Änderungen denkbar, durch die einzelne IHKs das Berichtsheft nur noch bei der Anmeldung verlangen könnten.
            Kopie des Berufsschulzeugnisses: Sie ist optional. Gib sie ab, wenn deine Berufsschulabschlussnote auf dem IHK-Zeugnis erscheinen soll. Bei einer guten Note empfehle ich dir das, weil eine fehlende Berufsschulnote bei einer Bewerbung Fragen aufwerfen kann.
            In meiner Prüfungspraxis konnte ein:e IT-Azubi ein vergessenes Berichtsheft noch zu Hause holen, weil sich zwei Prüfungstermine tauschen ließen. Solche Ausnahmen hängen davon ab, ob vor Ort genug Zeit bleibt. Wenn du die Prüfung an diesem Tag nicht ablegen kannst, droht nach dem beschriebenen Ablauf ein halbes Jahr Wartezeit bis zum nächsten Termin.
            Geräte und Präsentation testen
            Laptop oder anderes Präsentationsgerät: Öffne deine Präsentation vorab auf dem Gerät, das du mitbringst. Kontrolliere sämtliche Folien und achte dabei auf Schriftarten, Bilder sowie eingebettete oder verknüpfte Inhalte. Verschobene Dateien können dazu führen, dass Inhalte fehlen.
            Aufgeräumter Desktop: Wähle ein neutrales Hintergrundbild. Die Titelfolie als Hintergrund ermöglicht einen ruhigen Übergang, wenn du den Präsentationsmodus erst zum Beginn startest und dadurch auch der Timer passend losläuft.
            Presenter: Damit schaltest du Folien weiter, während du frei im Raum stehst. Du kannst dir einen im Betrieb oder bei einem:einer anderen IT-Azubi ausleihen. Ein Smartphone kann der Prüfungsausschuss untersagen; bei einer Funkmaus können Klicks versehentlich andere Aktionen auslösen.
            Kabel und Adapter: Erkundige dich vorher nach den Anschlüssen des Beamers vor Ort. Für passende Adapter bist du selbst zuständig, wobei auch ältere VGA-Anschlüsse vorkommen können.
            ...
            47 min
          6. Agile Ausbildung bei DATEV mit Uwe Ritthammer – IT-Berufe-Podcast #153
            Über die Agile Ausbildung bei DATEV in Nürnberg spreche ich mit Uwe Ritthammer in der einhundertdreiundfünfzigsten Episode des IT-Berufe-Podcasts.
            TL;DR
            Im Gespräch mit Uwe Ritthammer habe ich das agile Ausbildungskonzept der DATEV kennengelernt: Als IT-Azubi lernst du in zweitägigen Modulen, deren Inhalte an dein Vorwissen angepasst werden. Dabei arbeitest du mit einem Backlog und übernimmst schrittweise Aufgaben aus Scrum, während du dein Wissen bereits im Fachbereich einbringst. Durch regelmäßiges Feedback und Retrospektiven entwickelst du deine Arbeitsweise weiter; dein:e Ausbilder:in passt die Module anhand der Rückmeldungen an. Die Anforderungen des Ausbildungsrahmenplans werden dabei fortlaufend mit den behandelten Inhalten abgeglichen.
            Kapitelmarken
            [00:00:00] Einstieg in die agile Ausbildung
            [00:01:27] Uwe Ritthammer und die Ausbildung bei DATEV
            [00:04:34] Uwes Weg von der Softwareentwicklung zur Ausbildung
            [00:07:15] Programmiersprachen bei DATEV
            [00:10:10] Agile Werte und der Ausbildungsrahmenplan
            [00:14:02] Individuelle Ausbildungspläne und die Anforderungen der Beteiligten
            [00:17:09] Scrum als Grundlage und der Blick auf EduScrum
            [00:18:45] Warum DATEV die IT-Schulungen verändert hat
            [00:21:26] Zweitägige Module mit Backlog und Retrospektive
            [00:23:13] Algorithmen und User-Stories am Beispiel Kniffel
            [00:25:16] Selbsttest und Gruppen mit ähnlichem Vorwissen
            [00:27:07] Von Programmierlogik bis zu Vererbung und Interfaces
            [00:29:13] Erfahrungen mit Lerntempo und Selbstständigkeit
            [00:31:12] Wie sich das Feedback der IT-Azubis verändert
            [00:34:52] Module durch kurze Feedbackzyklen verbessern
            [00:36:46] Gemeinsame Grundlagen für verschiedene IT-Berufe
            [00:39:02] Das Backlog am Board und die Rolle des Product Owners
            [00:40:21] Scrum-Rollen übernehmen und eine Projektwoche durchführen
            [00:42:10] Das Gelernte im Fachbereich anwenden
            [00:43:19] Aufgaben der Ausbilder:innen und das Gewöhnen an die Methode
            [00:46:13] Lernstand durch Feedback begleiten
            [00:48:31] IHK-Aufgaben in den Modulen
            [00:49:57] Module vorbereiten und passende Lernmedien auswählen
            [00:53:12] Human Resource Machine und Project Euler
            [00:55:53] Inhalte mit dem Ausbildungsrahmenplan abgleichen
            [00:58:13] Abschlussprojekt und gegenseitiges Feedback
            [01:00:28] Wie das agile Ausbildungskonzept entstanden ist
            [01:03:00] Buchempfehlung: von Kopf bis Fuß
            [01:04:48] Kontakt zu Uwe Ritthammer
            [01:05:57] Das Konzept an den eigenen Betrieb anpassen
            [01:06:59] Anregungen für die eigene Ausbildung und Shownotes
            Inhalt
            Allgemeines zur Person
            Wie ist dein Name und wo arbeitest du?
            Ich bin Uwe Ritthammer und ich komme aus dem schönen Nürnberg in Franken (nicht Bayern! ;-))
            Ich arbeite bei DATEV. Wir entwickeln u.a. Software für Steuerberater. Wir haben ca. 8.000 Mitarbeiter, darunter 200 Azubis und Duale Studierende.
            In meiner Abteilung sind wir mit insg. 8 Personen für die Ausbildung zuständig. Wir übernehmen das volle Programm inkl. Marketing, Recruiting, Betreuung und Übernahme.
            Der IT-Bereich überwiegt bei uns. Ca. 65% der Azubis arbeiten in der IT, der Rest ist kaufmännisch unterwegs, aber es gibt u.a. auch Dialogmarketing.
            An welchen Projekten arbeitest du zur Zeit in deinem Tagesjob?
            Ich arbeite operativ mit den Azubis. Ich bin seit 2018 Ausbildungleiter und habe seitdem leider etwas weniger Zeit für aktive Zusammenarbeit.
            Wie bist du zur Informatik bzw. Softwareentwicklung gekommen?
            Ich habe schon als Kind gerne Computerspiele gespielt. Ich bin über Atari 2600, C64 und Amiga 500 zur Programmiersprache BASIC gekommen. Außerdem habe ich Assembler und C programmiert.
            Dann habe ich eine Ausbildung zum Datenverarbeitungskaufmann gemacht und nachher noch studiert.
            Zur Ausbildung bin ich über meine Berufspraxis gekommen. Dort habe ich lange Zeit IT-Schulungen durchgeführt.
            Welche Ausbildung bzw. welches Studium hast du im Bereich der Informatik absolviert?
            Ich habe klassisch Informatik studiert mit Schwerpunkt Wirtschaft.
            Mit welchen Programmiersprachen arbeitest du im Alltag?
            Wir entwickeln klassischerweise Windows-Anwendungen, daher hauptsächlich C#. Aber das wird weniger und wandert ins Web. Dort bin ich mit Java unterwegs. Auch die üblichen Frameworks wie Bootstrap zusammen mit JavaScript setze ich ein. Ich habe aber auch mal COBOL auf dem guten alten Mainframe entwickelt.
            Was ist deine Lieblingsprogrammiersprache und warum?
            C! Privat nutze ich gerne Linux und hacken geht mit C dort sehr gut. Dafür nehme ich sogar die möglichen Speicherlecks in Kauf.
            Agile Ausbildung
            Wie ist die Idee zur agilen Ausbildung entstanden?
            Wir haben das agile Manifest auf die Ausbildung übertragen. Dessen Werte fanden wir sehr passend: Individuen über Prozesse, funktionierende Software über Dokumentation, Zusammenarbeit über Vertragsverhandlungen, Reaktion auf Veränderungen über Verfolgen eines Plans.
            Der Ausbildungsrahmenplan der IHK steht dem nur scheinbar genau gegenüber. Die Berufsbilder sind seit 1997 recht technologieunabhängig formuliert. Der Rahmen wurde zwar vorgegeben, kann aber gedehnt werden. Auch nach 20 Jahren sind die Inhalte noch aktuell.
            Dieser Rahmen ist daher gar nicht so starr wie er scheint. Wir können uns frei bewegen innerhalb der Grenzen.
            Es gibt dafür sogar einen eigenen Paragraphen: man kann vom Rahmen abweichen, wenn dies notwendig oder sinnvoll ist. Das Berufsbild gibt nur die Mindestanforderungen vor.
            Wie funktioniert die agile Ausbildung genau?
            Das ist an der Organisation der Ausbildung ersichtlich. Es gibt keinen festen Durchlaufplan mehr (z.B. 5 Wochen Buchhaltung usw.), sondern die Azubis lernen agiler. Der Durchlaufplan wird nun für jeden Azubi individuell festgelegt und der Plan wird iterativ angepasst.
            Wir hatten z.B. einen Azubis, der die kaufmännischen Inhalte zunächst als störend empfand und der einfach hacken wollte. Darauf konnten wir flexibel reagieren.
            Das Ganze haben wir aufgezogen wie ein agiles Projekt. Zunächst haben wir evaluiert, wer unsere Stakeholder sind.
            IHK -> Gibt das Berufsbild vor.
            Azubis -> Wollen eine gute Ausbildung bekommen und viel lernen.
            DATEV -> "Kunde" der zukünftigen Mitarbeiter.
            Wie genau sieht die agile Ausbildung denn nun aus?
            Wir sind angefangen mit den Schulungen für die IT-Azubis. Aktuell benötigte Anforderungen des Unternehmens wurden über die Schulen nicht abgedeckt. Dort wird immer noch das gleiche gelehrt wie vor 20 Jahren. Und Microsoft Office hat einfach nichts mit Informatik zu tun!
            Daher hat DATEV einen hohen Initialaufwand, um junge Leute auf ein Level zu heben, das für die aktive Mitarbeit im Projekt reicht. Daher haben wir schon immer viel Schulungsaufwand gehabt.
            Aber 2 Wochen C++ am Stück sind z.B. zu viel für viele Azubis. Daher haben wir die Schulungen "agilisiert" und leichter verdaulich gemacht.
            Der Kern der agilen Ausbildung sind Zwei-Tagesmodule, die aufeinander aufbauen. Sie haben ein einheitliches Muster. Die Schulungsinhalte stehen z.B. im "Backlog". Ein Daily Standup gehört direkt dazu. Beim ersten Treffen wird u.a. das Vorwissen der Teilnehmer abgeklärt/abgeglichen.
            Die Schulungen starten zu Beginn oft mit einem Rechercheauftrag. Kleine Teams (meist 2 Leute) bleiben zusammen, z.B. für diese Recherche oder ein Pair Programming.
            Dann gibt es eine Mini-Projektaufgabe zum Umsetzen, oft z.B. Spiele für Algorithmen. Kniffel bietet sich dabei an ("kleine Straße" erkennen usw.). Das Spiel wird auch wirklich einmal gespielt, um dann User Stories daraus abzuleiten. Wie in einem echten Projekt!
            Dann kommt die Umsetzung am Computer und eine Retrospektive am Ende jedes Bausteins. Dort klären wir u.a. was wir (Dozenten und Azubis) besser machen könnten?
            Was ist denn euer "Einstiegsbaustein" zu Beginn der Ausbildung?
            Es gibt einen "Selbsttest", um den individuellen Stand der Azubis zu erfassen, z.B. in den Bereichen Coding, Java, Struktogramme verstehen, Reihenfolge von Algorithmen.
            Am Ende gibt es dann Feedback: Wo stehen die Teilnehmer? Dann werden homogene Gruppen gebildet, die in einem gleichen Lerntempo arbeiten können. Heterogene Teams funktionieren nicht so gut, weil Fortgeschrittene Fehler der Schlechten einfach korrigieren.
            "Logik der Programmierung" ist dann der der erste "echte" Baustein. Er ist ein Pflichtteil oder optional, je nach Azubi und dessen Kenntnisstand.
            Die Bausteine bauen alle aufeinander auf. Im Standup wird immer der letzte Baustein reflektiert.
            Es geht weiter mit Datentypen, Algorithmen, Objektorientierung, Vererbung usw. (insg. 6 Monate).
            Wie gut funktioniert dieses Vorgehen?
            Wir fragen uns oft, ob wir noch Zeit sparen können oder ob es nicht schneller oder mit weniger Aufwand gehen könnte.
            Die Azubis legen ein hohes Tempo vor nach der Anpassung an Scrum. Sie gewinnen an Selbstständigkeit. Gerade bei abstrakten Themen wie Vererbung sind die Schulungen fast ein Selbstläufer.
            Die Azubis lernen das Lernen. Im letzten Block halten sie die Scrum-Meetings schon selbst. Sie verinnerlichen die Scrum-Methodik einfach.
            Anhand der Retrospektive (1h Feedback am zweiten Tag) sieht man die Verbesserung der Azubis. Aus "Der Kaffee war gut" und "Die Logik war mir zu technisch" werden über die Zeit deutlich sinnvollere Kommentare und echte Anregungen und Bewertungen.
            Die Azubis sind sehr "getriggert" durch die Schule. Eine Aufgabe gemeinsam zu lösen und auch die eigene Selbstständigkeit müssen erst trainiert werden.
            Es werden auch komplett andere Inhalte und fachliches Feedback von den Azubis eingebracht, z.B. SQL Island oder mehr eigene Präsentationen.
            Wird das Feedback direkt in die nächsten Bausteine eingebaut?
            Wir haben meist mehr als drei Azubis in einer Gruppe, oft ca. 10 Leute.
            Ein Baustein wird 3x mit unterschiedlichen Gruppen gemacht, also können wir sogar direkt das Feedback für die nächste Gruppe einfließen lassen.
            Die Azubis bekommen mit, dass die Dozenten wirklich Feedback wollen und sich verbessern möchten und liefern dann auch konstruktives Feedback.
            ...
            1 hr 9 min

          About IT-Berufe-Podcast

          From the publisher's feed

          Der Podcast rund um die Ausbildung in den IT-Berufen (insb. Fachinformatiker für Anwendungsentwicklung) von Stefan Macke.

          More shows like IT-Berufe-Podcast

          Streitkräfte und Strategien by NDR

          Streitkräfte und Strategien

          43 Listeners

          Sternengeschichten by Florian Freistetter

          Sternengeschichten

          45 Listeners

          Geschichten aus der Geschichte by Richard Hemmer und Daniel Meßner

          Geschichten aus der Geschichte

          176 Listeners

          c’t uplink - der IT-Podcast aus Nerdistan by c’t Magazin

          c’t uplink - der IT-Podcast aus Nerdistan

          10 Listeners

          MORD AUF EX by Leonie Bartsch & Linn Schütze

          MORD AUF EX

          112 Listeners

          {ungeskriptet} - Der Meinungsfreiheit verpflichtet. by Ben Berndt

          {ungeskriptet} - Der Meinungsfreiheit verpflichtet.

          48 Listeners