- Häufige Fragen im Fachgespräch – Objektorientierung – Anwendungsentwickler-Podcast #2
- Häufige Fragen im Fachgespräch – Kapselung – Anwendungsentwickler-Podcast #6
- Häufige Fragen im Fachgespräch – Vererbung – Anwendungsentwickler-Podcast #8
- Häufige Fragen im Fachgespräch – Polymorphie – Anwendungsentwickler-Podcast #10
- Häufige Fragen im Fachgespräch – Programmierung (Teil 1) – Anwendungsentwickler-Podcast #12
- Häufige Fragen im Fachgespräch – Programmierung (Teil 2) – Anwendungsentwickler-Podcast #13
- Relationale Datenbanken – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #17
- Normalisierung – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #18
- SQL – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #19
- Erläuterung der Gehaltsabrechnung – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #46
- Zusammensetzung des Stundensatzes – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #47
- Testverfahren für Software – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #94
- Unit-Tests – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #95
- Rückblick auf die Fachgespräche der Sommerprüfung 2022 (Fachinformatiker:in Anwendungsentwicklung) – IT-Berufe-Podcast #177
- Handelskalkulation, Skonto und Rabatt – Häufige Fragen im Fachgespräch – Anwendungsentwickler-Podcast #148
Einen Rückblick auf die Fachgespräche (Fachinformatiker:in Anwendungsentwicklung) zu Teil 2 der gestreckten Abschlussprüfung im Sommer 2022 gibt es in der einhundertsiebenundsiebzigsten Episode des IT-Berufe-Podcasts.
TL;DR
Aus meinen Fachgesprächen der Sommerprüfung 2022 für Fachinformatiker:innen Anwendungsentwicklung habe ich häufige Fragen zusammengestellt, mit denen du dich auf deine Prüfung vorbereiten kannst. Dabei spielen wirtschaftliche Themen wie Stundensatz und laufende Projektkosten ebenso eine Rolle wie technische Grundlagen. Alles, was du in deinem Projekt einsetzt, solltest du erklären und begründen können, möglichst mit Beispielen aus deinem eigenen Code. Welche Fragen dir dein Prüfungsausschuss stellt, hängt von deinem Projekt und den beteiligten Prüfer:innen ab.
Podcast: Play in new window | Download (Duration: 1:05:17 — 36.3MB)
Abonnieren: Apple Podcasts | Spotify | RSS
Kapitelmarken
- [00:00:01] Informationen zum Fachgespräch
- [00:00:37] Rückblick auf die Fachgespräche der Sommerprüfung 2022
- [00:02:17] Eigene Prüfungserfahrungen und projektbezogene Fragen
- [00:03:15] Häufig falsch beantwortete Themen
- [00:04:17] Wirtschaftswissen und die Technologien deines Projekts
- [00:07:30] Bestandteile des Stundensatzes
- [00:08:31] Sozialversicherung und Beiträge des Unternehmens
- [00:10:33] Normalformen in Datenbanken
- [00:11:58] Kapselung und Sichtbarkeitsmodifizierer
- [00:13:06] Klassen und Objekte
- [00:14:35] Lambda-Ausdrücke
- [00:15:50] Vererbung
- [00:16:43] Polymorphie und dynamisches Binden
- [00:19:02] Datenbankanomalien
- [00:21:06] Einfügeanomalie anhand von Bestellungen
- [00:22:08] Löschanomalie und getrennte Tabellen
- [00:23:14] Kardinalitäten und passende Beispiele
- [00:25:32] Statische, dynamische, starke und schwache Typisierung
- [00:28:08] Generische Klassen
- [00:29:24] REST-APIs absichern und OAuth
- [00:31:35] Softwarequalität
- [00:32:33] Kostenarten und Gemeinkostenzuschläge
- [00:35:32] Hashverfahren und Kollisionen
- [00:37:32] Laufende Kosten des Projekts
- [00:38:19] Lohn, Gehalt und Ausbildungsvergütung
- [00:39:49] Architekturmodelle wie MVC
- [00:40:58] Redundante Daten
- [00:41:20] REST als Architekturprinzip
- [00:42:29] Scrum und agile Grundlagen
- [00:42:58] Betriebsabrechnungsbogen
- [00:44:29] Lastenheft und Pflichtenheft
- [00:45:07] Referenzielle Integrität
- [00:46:08] Signatur einer Methode
- [00:47:48] Testverfahren
- [00:48:38] Datenbanktransaktionen und ACID
- [00:50:35] Asynchron programmieren mit async und await
- [00:52:11] Fehlerarten beim Programmieren
- [00:53:37] HTTP-Statuscodes und Methoden
- [00:55:53] Kanban und Work-in-Progress-Limits
- [00:57:48] Exception Handling und finally
- [00:58:41] Abschreibungen
- [01:00:09] Datenschutz und personenbezogene Daten
- [01:01:15] Variablen in JavaScript mit var, let und const
- [01:02:29] Weitere Materialien und Hilfe durch dein:e Ausbilder:in
- [01:03:55] Newsletter und Feedback zu Prüfungserfahrungen
Inhalt
Fachgespräche Sommer 2022 (Fachinformatiker:in Anwendungsentwicklung)
- Disclaimer: Meine Erfahrungen aus den Prüfungen, an denen ich beteiligt war, ist nicht stellvertretend für alle Prüfungsausschüsse in Deutschland.
- Viele der genannten Themen für das Fachgespräch gelten 1-zu-1 in allen IT-Berufen, da sie gar nichts mit Anwendungsentwicklung zu tun haben (insb. die wirtschaftlichen Themen).
- Fast immer falsch beantwortet wurden Fragen nach Stundensatz, laufenden Kosten, Lösch-Anomalie, Lambda-Ausdrücken, generischen Klassen.
Häufige Fragen im Fachgespräch
Das hier ist meine Liste mit den häufigsten Fragen im Fachgespräch für Fachinformatiker:innen Anwendungsentwicklung, absteigend nach Anzahl sortiert.
Man erkennt deutlich, dass unter der Top-Themen sehr viele Wirtschaftsthemen sind, weil viele „Techniker:innen“ diesen Bereich bei der Prüfungsvorbereitung vernachlässigen und dementsprechend in Projektdokumentation und Projektpräsentation falsch machen, was dann entsprechende Fragen im Fachgespräch provoziert.
Viele der anderen Themen ergeben sich aus Technologien, die die Prüflinge selbst eingesetzt haben. Ich sage immer wieder: Alles, was man benutzt (oder in der Projektpräsentation erwähnt), muss man auch erklären können. Da viele Projekte aktuell als Single-Page-Application in JavaScript mit einer anderen Programmiersprache im Backend (z.B. Java) umgesetzt werden, kommen z.B. Fragen nach REST, OAuth, Typisierung und JavaScript-Spefizika immer öfter vor.
- Stundensatz (15)
- Fast immer falsch berechnet (nur Brutto-Ausbildungsvergütung enthalten).
- Normalisierung (13)
- Oft nicht sauber mit Fachbegriffen erklärt.
- Sozialversicherung (13)
- Viele kennen den Arbeitgeberanteil nicht.
- Kapselung (11)
- Getter/Setter, Sichtbarkeitsmodifizierer usw.
- Klasse vs. Objekt (11)
- „Ein Objekt ist ein Teil einer Klasse“ usw.
- Lambda-Ausdrücke (11)
- Werden ständig genutzt, aber nur sehr wenige Prüflinge können sie erklären.
- Vererbung (10)
- Wir insb. in Frameworks häufig benötigt, aber zu den Details fehlen häufig Kenntnisse.
- Anomalien (Einfüge-/Änderungs-/Löschanomalie) (9)
- Die Löschanomalie wurde dieses Jahr nicht einmal korrekt erklärt.
- Einzel- vs. Gemeinkosten (9)
- Viele Prüflinge haben offensichtlich noch nie etwas von einem Kostenträger gehört.
- Polymorphie (9)
- Viele Prüflinge werfen das mit Vererbung durcheinander und können es nicht sauber abgrenzen.
- Kardinalitäten (8)
- Dieses Thema haben die meisten Prüflinge gut beantwortet, aber teilweise mit seltsamen Beispielen.
- Typisierung (8)
- Die wenigsten Prüflinge können statisch/dynamisch und vor allem stark/schwach abgrenzen.
- Generische Klassen (7)
- Sauber erklären können das die wenigsten Prüflinge.
- OAuth (6)
- REST-APIs werden heute offensichtlich ohne jegliche Absicherung erstellt.
- Softwarequalität (6)
- Die gute alte (und neue) ISO-Norm ist nur wenigen Prüflingen bekannt.
- fixe vs. variable Kosten (5)
- Sie werden oft mit Einzel-/Gemeinkosten verwechselt.
- Hashverfahren (5)
- Die Eigenschaften eines guten Hashverfahrens können die wenigsten Prüflinge nennen, wissen aber wenigstens, wofür man sie braucht.
- laufende Kosten (5)
- In vielen Projekten gibt es keine (!) laufenden Kosten.
- Lohn vs. Gehalt (5)
- Und natürlich darf auch die Ausbildungsvergütung nicht fehlen!
- MVC/MVVM/MVP usw. (5)
- Die Architektur der eigenen Anwendung sollte man erklären und auch von Alternativen abgrenzen können.
- Redundanzen (5)
- Der Feind jedes Datenbankmodellierers. Wird häufig richtig erklärt.
- REST (5)
- Jeder nutzt es, kaum jemand kann es korrekt erklären.
- Scrum (5)
- Quasi Grundwissen für alle IT-Berufe.
- Betriebsabrechnungsbogen (4)
- Oft eine Anschlussfrage bei Einzel-/Gemeinkosten.
- Lastenheft/Pflichtenheft (4)
- Viele Prüflinge verwechseln die Begriffe oder vergessen, dass das Pflichtenheft Vertragsbestandteil ist.
- referentielle Integrität (4)
- Wird oft mit Redundanz durcheinander gebracht.
- Signatur (4)
- Viele Prüflinge zählen die Sichtbarkeit, den Rückgabewert,
staticusw. mit zur Signatur.
- Viele Prüflinge zählen die Sichtbarkeit, den Rückgabewert,
- Testverfahren (4)
- Es gibt soooo viele Testverfahren, aber meist sind nur Black- und White-Box-Test bekannt.
- Transaktionen (4)
- Ja, auch die ACID-Kriterien darf man kennen.
- async/await (3)
- Wenn man es benutzt, muss man es erklären können. Auch inkl. der technischen Umsetzung in der gewählten Programmiersprache.
- Fehlerarten bei der Programmierung (3)
- Compile-Fehler, semantische Fehler, Laufzeitfehler usw. sollte man auseinanderhalten können.
- HTTP-Methoden (3)
- Ganz oft werden
POST,PUTundPATCHverwechselt.
- Ganz oft werden
- Kanban (3)
- Für viele Prüflinge besteht der Prozess nur aus dem Kanban-Board.
- try/catch (3)
- Das können die meisten Prüflinge erklären.
- Abschreibungen (2)
- Meist eine Folgefrage zu Einzel-/Gemeinkosten. Mit ein wenig Hilfe kommen die meisten Prüflinge darauf.
- Datenschutz (2)
- Traurig, wie wenige Prüflinge das sauber erklären und von Datensicherheit abgrenzen können.
- let/var/const in JavaScript (2)
- Ein zentrales Feature von JavaScript, das auch häufig in Code-Beispielen der Prüflinge verwendet wird.
Links
- Permalink zu dieser Podcast-Episode
- RSS-Feed des Podcasts
- Zusammensetzung des Stundensatzes – Häufige Fragen im Fachgespräch
- Normalisierung – Häufige Fragen im Fachgespräch
- Erläuterung der Gehaltsabrechnung – Häufige Fragen im Fachgespräch
- Häufige Fragen im Fachgespräch – Kapselung
- Einführung in die Programmierung und Objektorientierung
- Häufige Fragen im Fachgespräch – Vererbung
- Häufige Fragen im Fachgespräch – Polymorphie
- Kryptographie – Hashverfahren und elektronische Signatur
- Scrum
- Lasten- und Pflichtenheft in der Projektdokumentation
- Algorithmen und Methoden (Lernzielkontrolle)
- Testverfahren für Software – Häufige Fragen im Fachgespräch
- Datenschutz vs. Datensicherheit vs. Datensicherung
Zusammenfassung
Welche Fragen im Fachgespräch vorkommen
Für meinen Rückblick auf die Sommerprüfung 2022 habe ich die Fragen aus den Fachgesprächen festgehalten, an denen ich als Prüfer beteiligt war. Die Liste enthält Themen, die mindestens zweimal vorkamen. Sie richtet sich vor allem an dich als IT-Azubi zum/zur Fachinformatiker:in Anwendungsentwicklung; wirtschaftliche Fragen betreffen auch andere IT-Berufe.
Die Häufigkeiten stammen aus meinen eigenen Prüfungen. Dein Prüfungsausschuss kann andere Schwerpunkte setzen. Häufig beginnt das Fachgespräch mit deinem Abschlussprojekt, bevor allgemeinere Fragen folgen.
Wenn du dich vorbereitest, beschäftige dich mit den Technologien und Entscheidungen in deinem Projekt. Dazu gehört, dass du Eigenschaften deiner Programmiersprachen erklären und deine Architektur begründen kannst. Bei einer Single-Page-Application können etwa Fragen zu Alternativen und zu ihren Vor- und Nachteilen folgen. Beispiele aus deinem Projekt helfen dir dabei, dein Wissen verständlich zu zeigen.
Besonders häufig blieben Antworten zu folgenden Themen falsch oder unvollständig:
- Bestandteile des Stundensatzes
- Laufende Kosten des Projekts
- Löschanomalien in Datenbanken
- Lambda-Ausdrücke
- Generische Klassen
Wirtschaftliche Fragen
Stundensatz und Sozialversicherung
In meinen Prüfungen wurde fast in jedem Fachgespräch nach dem Stundensatz gefragt. Darin stecken deine Ausbildungsvergütung sowie die Sozialversicherungsbeiträge des Unternehmens. Hinzu kommen Gemeinkosten und bei externen Projekten gegebenenfalls ein Gewinnaufschlag.
Aus den einzelnen Bestandteilen ergeben sich Anschlussfragen, etwa zu Kostenarten oder dazu, wer die Sozialversicherung bezahlt. Für den im Rückblick betrachteten Stand 2022 gehören dazu:
- Rentenversicherung
- Krankenversicherung
- Pflegeversicherung
- Unfallversicherung
- Arbeitslosenversicherung
Bei vier dieser Versicherungen teilen sich Beschäftigte und Unternehmen die Beiträge grundsätzlich ungefähr zur Hälfte, wobei Ausnahmen bestehen. Die Unfallversicherung bezahlt das Unternehmen vollständig. Seine Beiträge fließen in den Stundensatz ein. Wenn du dich vertiefend vorbereitest, schau dir auch die jeweiligen Beitragssätze an.
Kostenarten und Betriebsabrechnungsbogen
Anhand einer Tischlerei lassen sich die Kostenarten erklären:
- Fixe Kosten: Die Miete fällt unabhängig davon an, wie viele Tische entstehen.
- Variable Kosten: Für Tischbeine entstehen Kosten, sobald Tische gebaut werden.
- Einzelkosten: Die vier Beine eines Tisches lassen sich diesem Tisch direkt zurechnen.
- Gemeinkosten: Die Miete betrifft die gesamte Tischlerei und wird auf die hergestellten Tische verteilt.
Diese Begriffe beschreiben unterschiedliche Eigenschaften von Kosten. Eine Ausgabe lässt sich deshalb sowohl nach ihrem Bezug zur produzierten Menge als auch danach einordnen, ob sie einem Kostenträger direkt zugeordnet werden kann.
Mit dem Betriebsabrechnungsbogen werden Gemeinkosten verteilt und Zuschlagssätze ermittelt, die anschließend auf Einzelkosten aufgeschlagen werden. Als Grundlage für das Verteilen kommen beispielsweise die Fläche eines Bereichs oder die Zahl der dort arbeitenden Personen infrage.
Laufende Projektkosten und Abschreibungen
Wenn deine Anwendung auf einem vorhandenen Server läuft, entstehen weiterhin Kosten. Der Server braucht Strom und seine Hardware wird beansprucht. Schau deshalb auch bei bereits vorhandenen Geräten nach, welche Kosten deinem Projekt zugerechnet werden müssen.
Über Abschreibungen fließen die Kosten für Arbeitsmittel wie PCs oder Büromöbel in die Gemeinkosten ein. Im vereinfachten Beispiel wird ein Rechner für 3.000 Euro über drei Jahre mit jeweils 1.000 Euro abgeschrieben. Diese Beträge gehen über die Gemeinkostenzuschläge in die Produktpreise ein und werden damit durch die Kund:innen finanziert.
Lohn, Gehalt und Ausbildungsvergütung
Beim Lohn richtet sich der Betrag beispielsweise nach geleisteten Stunden oder hergestellten Stückzahlen. Ein Gehalt wird regelmäßig in gleicher Höhe gezahlt.
Als IT-Azubi erhältst du eine Ausbildungsvergütung, mit der du deinen Lebensunterhalt während der Ausbildung bestreiten kannst. Sie unterstützt dich dabei, deine Ausbildung zu absolvieren, und bleibt monatlich gleich, auch wenn deine Arbeitsleistung schwankt.
Datenbanken
Normalformen und Redundanzen
Wenn du für dein Projekt eine Datenbank entwirfst, solltest du die Normalformen und die Schritte bis zur üblichen dritten Normalform erklären können. Dazu gehören konkrete Beispiele sowie Fragen zu den Beziehungen zwischen Tabellen.
Redundante Daten stehen mehrfach in der Datenbank. Dadurch können Anomalien entstehen, die du an einem Beispiel erläutern solltest.
Anomalien anhand von Kund:innen und Bestellungen
Stell dir eine gemeinsame Tabelle vor, in der Kundennummer und Name zusammen mit Bestellnummer und Bestelldatum gespeichert werden.
- Änderungsanomalie: Der Name einer Person steht in mehreren Zeilen. Wenn du bei einer Namensänderung einzelne Zeilen übersiehst, enthält die Datenbank widersprüchliche Angaben.
- Einfügeanomalie: Du möchtest eine Person als Kund:in erfassen, während die Tabelle zugleich Bestelldaten verlangt. Ohne eine Bestellung lässt sich der gewünschte Datensatz dann nicht vollständig anlegen.
- Löschanomalie: Wenn du eine Bestellung löschst, entfernst du mit der gemeinsamen Zeile zugleich Angaben zur Person. Dabei gehen Daten verloren, die du behalten wolltest.
Werden Kund:innen und Bestellungen in getrennten Tabellen gespeichert und über Schlüssel verknüpft, lassen sich ihre Daten unabhängig voneinander bearbeiten. Eine Person kann dann beispielsweise bereits erfasst werden, bevor sie etwas bestellt.
Kardinalitäten und referenzielle Integrität
Zu den Kardinalitäten gehören 1:1, 1:n und m:n. Bereite für jeden Beziehungstyp ein passendes Beispiel vor, möglichst aus deinem Projekt.
Postleitzahl und Ort ergeben in Deutschland eine m:n-Beziehung: Ein Ort kann mehrere Postleitzahlen haben, während eine Postleitzahl mehreren Orten zugeordnet sein kann. Als 1:1-Beispiel dient ein System, in dem zu einem Benutzerkonto genau ein separater Login-Datensatz gehört und jeder Login-Datensatz genau einem Konto zugeordnet ist.
Bei der referenziellen Integrität bleiben Schlüsselbeziehungen konsistent. Ein Fremdschlüssel muss auf einen vorhandenen Datensatz verweisen. Die Datenbank kann deshalb das Löschen eines Datensatzes verhindern, solange andere Datensätze darauf verweisen.
Transaktionen und ACID
Eine Datenbanktransaktion fasst zusammengehörige Befehle zu einer Einheit zusammen. Scheitert ein Teil, werden die bereits ausgeführten Teile zurückgerollt.
Bei einer Überweisung müssen beispielsweise sowohl das Abbuchen auf Konto A als auch das Gutschreiben auf Konto B gemeinsam erfolgreich sein. Zu diesem Thema gehören die ACID-Kriterien:
- Atomicity: Atomarität
- Consistency: Konsistenz
- Isolation: Isolation
- Durability: Dauerhaftigkeit
Programmieren und Objektorientierung
Kapselung, Klassen und Objekte
Zur Kapselung solltest du erklären können, welche Aufgabe Getter und Setter haben und wie Sichtbarkeitsmodifizierer den Zugriff steuern. Auch der Zweck dieser Mechanismen kann zu Anschlussfragen führen.
Eine Klasse beschreibt als Bauplan, welche Attribute und Methoden ihre Objekte besitzen. Aus ihr lassen sich mehrere Objekte erzeugen, deren Attributwerte verschieden sein können. Ein Objekt wird auch Instanz genannt. Als anschauliches Beispiel verwende ich eine Bauanleitung, nach der mehrere einzelne Schränke entstehen.
Vererbung und Polymorphie
Bei der Vererbung übernehmen Subklassen Eigenschaften und Methoden einer Basisklasse. Bereite dich auch darauf vor, Sichtbarkeit und sprachspezifische Regeln zu erklären, etwa das Verhindern des Überschreibens einer Methode mit final in Java.
Polymorphie bedeutet Vielgestaltigkeit. Wo ein bestimmter Typ erwartet wird, kann auch ein passender Subtyp eingesetzt werden, beispielsweise eine Subklasse oder eine Klasse, die das erwartete Interface implementiert.
Beim dynamischen Binden wird zur Laufzeit die passende Implementierung einer überschriebenen Methode aufgerufen. So kann Code gegen Basistypen geschrieben und später durch weitere Subtypen erweitert werden. Damit lässt sich beispielsweise das Open-Closed-Principle umsetzen.
Lambda-Ausdrücke und generische Klassen
Ein Lambda-Ausdruck beschreibt eine anonyme Funktion. Er kann beispielsweise als Parameter an eine Funktion höherer Ordnung übergeben werden und ausführlichen Code verkürzen. Wenn solche Ausdrücke in deinem Projekt vorkommen, solltest du auch erklären können, wie deine Sprache damit umgeht.
Generische Klassen stellen Code bereit, der für verschiedene Datentypen verwendet werden kann. Über einen Typparameter wird der konkrete Typ festgelegt, etwa bei List<String>. Dadurch kann dieselbe Listenlogik wiederverwendet werden, ohne für jeden Elementtyp eine eigene Klasse zu schreiben.
Typisierung und JavaScript-Variablen
Bei deinen Programmiersprachen solltest du zwei Ebenen der Typisierung kennen:
- Statisch oder dynamisch: Dabei geht es darum, ob der Datentyp bereits zur Compile-Zeit feststeht.
- Stark oder schwach: Hier steht im Mittelpunkt, welche impliziten Typumwandlungen die Sprache erlaubt.
Als Beispiel dient eine Zahl in einer if-Bedingung, die in PHP implizit in einen Wahrheitswert umgewandelt wird. Bereite dazu Beispiele aus deinen eingesetzten Sprachen vor.
Bei JavaScript sind außerdem die Schlüsselwörter var, let und const relevant. Mit var wird eine Variable im Funktions-Scope definiert; let beschränkt ihren Scope auf den umgebenden Block. Bei const ist die Bindung konstant. Beschäftige dich mit den Details dieser Schlüsselwörter, wenn du JavaScript einsetzt.
Methodensignatur und asynchroner Code
Die Methodensignatur umfasst im erläuterten Java-Beispiel den Methodennamen und die Parameter mit ihrer Anzahl, ihren Datentypen sowie ihrer Reihenfolge. Damit kann der Compiler die aufzurufende Methode bestimmen.
Wenn dein Code async und await enthält, solltest du ihren Zweck erklären können. Asynchrone Abläufe helfen beispielsweise dabei, dass eine Oberfläche während eines längeren Downloads bedienbar bleibt. Nach dem Ende des Downloads kann sie das Ergebnis anzeigen.
Fehlerarten und Exception Handling
Syntaxfehler werden vom Compiler erkannt. Laufzeitfehler treten während des Ausführens auf, während semantische Fehler zu fachlich oder logisch falschen Ergebnissen führen. Tests helfen dabei, diese Fehler zu finden.
Beim Exception Handling solltest du das Zusammenspiel von try und catch kennen. Der finally-Block wird auch durchlaufen, wenn im catch-Block erneut eine Exception auftritt, etwa weil das Protokollieren eines Fehlers scheitert.
Webschnittstellen, Architektur und Sicherheit
REST und HTTP
REST ist ein Architekturprinzip mit festgelegten Eigenschaften. Dazu gehört eine einheitliche Schnittstelle. Bei HTTP stehen dafür unter anderem die Methoden GET, PUT, POST und DELETE bereit.
Zu HTTP solltest du Statuscodes erklären können: 200er-Codes kennzeichnen erfolgreiche Antworten, 400er-Codes Fehler auf Clientseite und 500er-Codes Fehler auf Serverseite. 404 steht für eine nicht gefundene Ressource.
Im erläuterten Beispiel legt POST einen neuen Datensatz an. Mit PUT wird der vollständige Datensatz zum Ändern übertragen; bei PATCH werden die Änderungen übermittelt. Wenn du nur einen Namen ändern möchtest, kann PATCH dadurch weniger Daten übertragen.
APIs absichern und Hashverfahren erklären
Eine API, die sensible Daten liefert, braucht passende Zugriffskontrollen. Als Beispiele kommen Basic Auth und OAuth vor. Für OAuth-basierte Abläufe können Frameworks eingesetzt werden; Keycloak wird als mögliche Serverlösung mit Benutzerverwaltung genannt. Bereite dich darauf vor, das Verfahren deiner eigenen Anwendung zu erklären.
Ein Hashverfahren bildet Eingangsdaten auf einen Wert fester Länge ab. Als Einwegverfahren lässt es sich nicht zurückrechnen. Bei Passwörtern kann der Hash einer Eingabe mit dem gespeicherten Hash verglichen werden. Hashwerte spielen auch beim Prüfen heruntergeladener Dateien und bei Signaturen eine Rolle.
Wenn verschiedene Eingaben denselben Hash erzeugen, liegt eine Kollision vor. Diese Eigenschaft gehört ebenfalls zu den möglichen Fragen.
Architekturmodelle und Datenschutz
Wenn du MVC einsetzt, solltest du Model-View-Controller ausschreiben und die Aufgaben der Komponenten in ihrem Zusammenspiel erklären können. Bei MVVM oder MVP gehören die jeweiligen Besonderheiten und die Gründe für deine Wahl dazu.
Datenschutz schützt personenbezogene Daten natürlicher Personen vor Missbrauch durch Dritte. Dazu zählen Angaben, die einer identifizierbaren Person zugeordnet werden können, etwa E-Mail-Adressen oder IP-Adressen. Auch ein persönlich zugeordnetes Gehalt gehört dazu. Ein über mehrere Entwickler:innen berechneter allgemeiner Stundensatz wird im Beispiel als betriebliche Kalkulationsgröße behandelt.
Qualität, Tests und Projektabläufe
Bei der Softwarequalität kommen Eigenschaften wie Wartbarkeit, Anpassbarkeit, Übertragbarkeit und Benutzbarkeit vor. Auch Performance wird genannt. Du solltest solche Merkmale anhand deiner Anwendung erklären und die zugehörige ISO-Norm einordnen können.
Zu den angesprochenen Testverfahren gehören:
- Blackbox- und Whitebox-Tests
- Tests durch Benutzer:innen
- Automatisierte Tests
- Unit-Tests
- Integrationstests
- Systemtests
- Smoke-Tests
- Regressionstests
Bereite dich darauf vor, ihre Aufgaben und ihre Vor- und Nachteile zu erläutern.
Bei Scrum gehören die Rollen und die Meetings zum Prüfungswissen. Ebenso solltest du die Artefakte kennen und erklären können, wie Scrum als agiles Vorgehen funktioniert. Dazu kommen die Grundlagen des agilen Manifests.
Ein Kanban-Board bildet Arbeitsschritte in anpassbaren Spalten ab. Work-in-Progress-Limits begrenzen, wie viele Aufgaben gleichzeitig bearbeitet werden. Dadurch werden Arbeitsabläufe und Engpässe sichtbar. Wenn du Scrum oder Kanban für dein Einzelprojekt wählst, solltest du begründen können, wie das Vorgehen zu deinem Projekt passt.
Beim Lastenheft hält der/die Auftraggeber:in fest, was umgesetzt werden soll. Im Pflichtenheft beschreibt der/die Auftragnehmer:in detailliert, wie die technische Lösung aussehen soll. Das Pflichtenheft ist Vertragsbestandteil und dient als Grundlage für die Abnahme.
Ergänzende Materialien
Meine vertiefenden Artikel und Podcast-Episoden zu den genannten Themen findest du in den Shownotes der Episode 177. Wenn dir Begriffe aus deinem eigenen Code unklar sind, kannst du sie nachschlagen und dein:e Ausbilder:in dazu fragen.
Mein kostenfreier Newsletter begleitet dich über die Ausbildungsjahre mit regelmäßigen E-Mails, die zu deinem Ausbildungsstand passen. Falls du andere Fragen im Fachgespräch erlebt hast, kannst du mir deine Erfahrungen als Kommentar zur Episode mitteilen.
Transkription der gesamten Episode
Automatisch erzeugte Transkription der Episode
Hi, hier ist Stefan. In dieser Podcast-Episode geht es ums Fachgespräch.
Wenn du noch mehr Informationen zum Fachgespräch von mir haben willst,
dann schau doch mal auf meiner Website vorbei, dasperfektefachgespräch.de.
Und jetzt wünsche ich dir viel Spaß mit der Podcast-Episode.
Herzlich willkommen zum IT-Berufe-Podcast, dem Podcast rund um die Ausbildung in den IT-Berufen.
In dieser Episode gibt es einen Rückblick auf die Fachgespräche
zum Fachinformatiker Anwendungsentwicklung im Jahr 2022. Viel Spaß!
Hallo und herzlich willkommen zur 177. Episode des IT-Berufe-Podcasts.
Mein Name ist Stefan Macke und heute beende ich meine dreiteilige Episodenreihe
zum Rückblick auf die Sommerprüfung 2022 für FachinformatikerInnen für Anwendungsentwicklung.
Und zwar mit den Fachgesprächen.
Wir hatten die Dokus, wir hatten die Präsis, heute kommt der letzte Part, die Fachgespräche.
Und das ist einer der Prüfungsteile, der von den Prüflingen am heißesten, am sehnsüchtigsten erwartet wird.
Ja, wohl eher nicht. Die meisten haben eher ein bisschen Angst davor.
Denn anders als bei der Doku und bei der Präsi, wie ich es schon oft gesagt habe,
weiß man halt beim Fachgespräch nicht, was drankommt.
Die anderen Artefakte hast du in deiner eigenen Hand, habe ich schon mehrfach erzählt.
Fachgespräche, ist ja Glückssache, was die Prüfer und Prüferinnen dich denn wohl fragen werden.
Und ich habe das Ganze mal in dieser Sommerprüfung bei uns in den Prüfungen mitgeschrieben, was wir gefragt haben.
Mensch, guck mal. Und heute gebe ich dir eine Top Ten ist es nicht.
Eine Top X-Liste sind ganz schön viele Fragen, glaube ich.
Der am häufigsten gestellten Fragen in unseren Fachgesprächen.
Das wird heute etwas anwendungsentwicklungslastiger als die anderen beiden Episoden.
Weil logisch, wir wollen natürlich prüfen, ob die Leute coden können.
Aber Überraschung, du wirst auch feststellen, dass ganz, ganz viele Fragen mal wieder nichts mit Programmieren zu tun haben.
Und diese Fragen sind leider die meist nicht so gut beantwortet werden.
Von daher guck dir die am besten an, egal welchen IT-Beruf du lernst.
Einige davon können mit großer Wahrscheinlichkeit auch in deinem Fachgespräch drankommen.
Und die werde ich dann heute einfach mal durchgehen.
Aber wenn du Anwendungsentwickler oder Anwendungsentwicklerin wirst, dann ist das heute genau das Richtige für dich.
Da habe ich nämlich, wie gesagt, meine Top X der Fragen, die wir gestellt haben.
Vorweg, wie auch bei den letzten Malen, das, was ich heute erzähle, ist wieder meine Erfahrung.
Aus den Prüfungen, bei denen ich dabei war.
Ich spreche nicht für alle Prüfungsausschüsse in Deutschland.
Und vor allem nicht für alle Prüfer und Prüferinnen, die sich da vielleicht Fragen ausdenken.
Also von daher, wenn in deiner Prüfung ganz andere Fragen drankommen, dann schreib mich bitte nicht an und sag,
Warum wurde ich nicht XY gefragt?
Ja, ich weiß es nicht.
Ich kann nicht in die Glaskugel schauen.
Das sind einfach nur Erfahrungswerte aus der Vergangenheit.
Und wie man so schön sagt, aus der Vergangenheit lässt sich nicht eins zu eins ableiten, dass es in der Zukunft auch so ist.
Von daher, wenn im nächsten Jahr oder übernächsten Jahr was ganz anderes gefragt wird, dann ist das halt so.
Und vor allem auch in deiner konkreten Prüfung.
Denn ganz viele Prüfungsausschüsse fragen auch erst mal zu deinem Projekt.
Und das kenne ich natürlich nicht.
Also kann ich dir dazu auch keine Fragen vorgeben, logischerweise.
Aber zumindest bei uns so.
Wir fangen auch oft mit dem Projekt an.
Wechseln dann aber auch zu allgemeineren Fragen, die eigentlich jeder Prüfling beantworten können muss.
Und davon habe ich heute auf jeden Fall ein paar mitgebracht.
Ich habe mir auch immer daneben notiert, das muss ich ja sowieso machen, als kleine Dokumentation für die Prüflinge,
wenn wir sie am Ende bewerten, ob die Fragen richtig oder falsch beantwortet wurden.
Und einen groben Überblick, was fast immer falsch beantwortet wurde, ist, Frage nach dem Stundensatz, laufende Kosten im Projekt,
Löschanomalien in Datenbanken, hatten wir ganz, ganz oft, dass das nicht erklärt wurde,
Lambda-Ausdrücke, obwohl fast jeder Prüfling die heute benutzt in seinem Code,
und Klassiker, generische Klassen.
Das wird auch ganz oft benutzt in statisch typisierten Sprachen.
List of irgendwas zum Beispiel.
Und da können die Leute einfach nicht erklären, was es ist.
Also die meisten Fragen, die ich hier mitgebracht habe,
also ich habe sie erst mal nur danach gewichtet, quasi wie oft wir sie gefragt haben.
Nicht wie oft die dann falsch beantwortet wurden.
Das waren jetzt so die Top der falsch beantworteten Fragen gerade.
Grundsätzlich solltest du dir alles angucken.
Aber die Fragen, die jetzt gleich kommen, sind halt am häufigsten gestellt.
Und dann würde ich dir empfehlen, schau sie dir so gut an, die Antworten,
dass du sie auch in der Prüfung gut abspulen kannst.
Und darum geht es natürlich danach, wirst du bewertet.
Wie schon angedeutet, sind da eben auch viele Wirtschaftsfragen dabei.
Vermutlich, weil einfach viele Prüflinge zum Anbindungsentwickler oder Anbindungsentwicklerin eben Bock auf Coden haben,
was auch gut ist, und dann aber den Wirtschaftsteil leider links und rechts liegen lassen.
Und das ist nicht so gut, weil der IT-Beruf ist halt ein Kaufmanager-Beruf.
Und das war schon immer so und wird auch so bleiben.
Zumindest nach der Neuordnung 2020 sieht das ganz stark so aus.
Also von daher guckt ihr unbedingt auch diesen Bereich an.
Weil das ist einfach wichtig und es kommen einfach viele Fragen dazu auch im Fachgespräch hoch.
Ansonsten kann ich immer wieder nur noch mal zum x-ten Mal sagen,
alles was du benutzt in deinem Projekt, das musst du auch erklären können.
Es kann nicht angehen, dass du sagst, ja, ich habe Java und JavaScript benutzt,
aber du kannst die Problemsprachen nicht abgrenzen.
Du weißt nicht die Eigenschaften der einen oder der anderen.
Du kannst nicht sagen, wie sie typisiert sind oder was die Unterschiede sind,
was die Paradigmen sind und so weiter. Das geht einfach nicht.
Du musst dich mit den Sachen auseinandersetzen und sie in Anführungszeichen auf Prüfungsniveau erklären können.
Und nicht einfach irgendwas runter, ja, ich sage immer so abfällig, runterrotzen,
ohne eigentlich zu verstehen, was du tust. Das geht nicht.
Jedenfalls nicht in der Abschlussprüfung.
Das kannst du in deinem Tagesjob vielleicht machen.
Vielleicht kommst du damit durch bei deinem Chef.
Aber bei den Prüfer und Prüferinnen, nee, bitte nicht.
Da musst du es erklären können.
Und daher ergibt sich ein anderer großer Teil der Fragen von meiner Liste
einfach aus den häufigen Projektthemen.
Wir haben halt ganz klassisch viel Web-Anwendungen, die entwickelt werden.
Da werden RESS-Schnittstellen gebaut, da wird irgendwas abgesichert mit OAuth zum Beispiel.
Verschiedene Programmiersprachen, Stichwort Backend und Frontend.
Java zum Beispiel und JavaScript sind halt ganz unterschiedlich typisiert.
Insbesondere im Frontend wird halt fast immer auf JavaScript gesetzt
oder zum Beispiel auch auf TypeScript.
Aber dann sollte man auch ein paar Spezifika der Sprache kennen.
Das sind so die Basics.
Zum Beispiel Frage, wie man Variablen deklarieren kann in JavaScript.
Da gibt es ja verschiedene Möglichkeiten.
Das kommt auch immer mal wieder hoch, weil das so die Basics der Sprache sind,
die man eigentlich können und kennen sollte,
wenn man damit eine umfangreiche Anwendung gebaut hat.
Na, nach irgendwas müssen wir ja fragen.
Und auf der anderen Seite haben wir halt oft Single-Page-Applications heutzutage,
die halt so einen großen Stack mitbringen.
Und da muss man sich halt auch mal Fragen zur Architektur gefallen lassen,
was die Vor- und Nachteile sind, ob es noch Alternativen gibt und so weiter.
Also natürlich hinterfragen wir dann auch deine Anwendungen,
gucken, was du da gemacht hast und warum du was gemacht hast.
Und darauf muss natürlich auch Frage und Antwort stehen.
Das heißt, die Fragen, die gleich kommen, sind halt eher allgemeiner Natur.
Aber du solltest dich natürlich insbesondere auf alles rund um dein Projekt vorbereiten.
Das werden wir natürlich links und rechts auseinandernehmen,
weil das ist ja dein Prüfungs, dein Artefakt, was du abgibst am Ende.
Und ja, wenn dann noch Zeit ist, wenn du alles gut erklärt hast,
dann kommen wir zu diesen, in Anführungszeichen, Standardfragen,
die wir jetzt gleich mal einmal durchgehen.
Gut, ich habe nicht durchgezählt, wie viele es sind,
aber sie passen nicht mehr auf einem Bildschirm, knapp auf zwei bei mir.
Es sind relativ viele.
Ich weiß noch nicht, ob ich heute alle durchgehe und sauber erklären kann.
Bei einigen dauert es nämlich vielleicht ein bisschen lange.
Das wäre dann jeweils eine einzelne Podcast-Episode.
Aber ich gucke mal, was mir zu den einzelnen Fragen einfällt.
Und ja, dann schauen wir mal, was dir das am Ende bringt.
Ich habe ja noch ein paar komplette Podcast-Episoden,
zum Beispiel direkt zu meiner ersten Frage zum Stundensatz, aufgenommen.
Den kannst du dir dann gerne nochmal anhören,
wenn du das im Detail dir nochmal draufschaffen willst.
Gut, dann starten wir mit meiner Liste.
Nummer eins, unangefochten, auf Platz eins.
Und ich glaube schon fast seit Jahren ist die Frage nach dem Stundensatz.
Und wie könnte so eine Frage aussehen?
Es gibt natürlich verschiedene Möglichkeiten, danach zu fragen.
Klassiker wäre, erläutern Sie uns doch mal, was in einem Stundensatz enthalten ist.
Und dann würden wir erwarten, dass da nicht nur kommt, mein Gehalt.
Und das wäre gleich auf mehrfachen Ebenen eine schlechte Antwort.
Weil Nummer eins, Azubis kriegen kein Gehalt, sondern eine Ausbildungsvergütung.
Nummer zwei, es besteht nicht nur aus der Ausbildungsvergütung,
sondern auch aus ganz, ganz vielen anderen Teilen.
Insbesondere der Sozialversicherung, die die nächsten großen Brocken ausmacht.
Vielleicht, wenn es ein externes Projekt ist, noch ein Gewinnaufschlag, der reinkommt.
Dann natürlich noch die ganzen Gemeinkosten, die umgelegt werden müssen und so weiter.
Und das sollte man bitte sauber erklären können.
Viele Anschlussfragen gehen dann zum Beispiel in den Bereich der einzelnen Bestandteile.
Also, wenn wir sowas haben wie die Gemeinkosten,
dann kann man schön fragen, was der Unterschied ist zwischen Gemeinkosten und Einzelkosten.
Oder fixe und variable Kosten.
Also alles, was irgendwie auf Kosten endet.
Da kann man natürlich schön einsteigen.
Oder Sozialversicherung.
Die Frage kommt jetzt auch tatsächlich auf Platz drei schon meiner Liste.
Gleichrangig mit der Normalisierung.
Weil die Sozialversicherung sollte man halt auch kennen.
Und zwar übrigens ganz egal, welchen Beruf man lernt.
Weil die zahlen wir alle.
Also Sozialversicherung aufzählen können.
Und auch, wer sie bezahlt.
Denn dadurch wird klar, dass das in den Schnurnsatz eingerechnet werden muss.
Wir haben in Deutschland, zumindest Stand jetzt, 2022, fünf Sozialversicherungen,
die auch übrigens auf jeder deiner Gehaltsabrechnung stehen müssten.
Hört ihr auch gerne dazu nochmal meine Podcast-Episode an.
Da gehe ich alle durch.
Wir haben die Rentenversicherung, die Krankenversicherung, die Pflegeversicherung, die Unfallversicherung.
Und eine bleibt noch übrig.
Und das ist die Arbeitslosenversicherung.
Das sind die fünf Sozialversicherungen.
Und die zahlen wir.
Und die zahlen wir hauptsächlich zur Hälfte.
Und zur anderen Hälfte zahlt die der Arbeitgeber.
Und da der Arbeitgeber die zahlt, zusätzlich zu deiner Ausbildungsvergütung,
muss er die natürlich auch mit einkalkulieren.
Wenn er dich irgendwem in Rechnung stellt.
Weil die Euros dafür, die fahren ja nicht vom Himmel.
Die muss er irgendwie erwirtschaften.
Ganz kurzer Überblick.
Weil ich habe das schon wirklich im Detail in meiner Episode zur Gehaltsabrechnung gemacht.
Vier von fünf teilen wir uns hälftig.
So ungefähr mit kleinen Ausnahmen.
Und die Unfallversicherung trägt der Arbeitgeber komplett sogar.
Dafür musst du gar nichts bezahlen.
Und das ist sicherlich etwas, was viele Prüflinge so nicht auf die Kette kriegen.
Ich würde mir auf Prüfungsniveau dann zum Beispiel noch wünschen,
dass du weißt, wie die aktuellen Prozentsätze sind der jeweiligen Sozialversicherung.
Aber dann bist du schon auf dem Weg zum Eins-Plus-Kandidat.
Wenn du das werden willst, dann schau sie dir auf jeden Fall einmal an.
Also, Stundensatz unbedingt angucken.
Mache ich nicht im Detail.
Eigene Podcast-Episode ist verlinkt in den Shownotes.
Die findest du übrigens wie immer unter itberufepodcast.de slash 177.
Hör sie dir unbedingt an und auch den Podcast zur Sozialversicherung
beziehungsweise zur Gehaltsabrechnung, wo wir das mit durchgehen.
Also, diese beiden Sachen kann ich dir uneingeschränkt empfehlen.
Unbedingt bitte reinhören, weil die stellen wir in fast jedem Fachgespräch.
Und sie werden auch fast immer falsch oder unvollständig beantwortet.
Und das ist ganz, ganz schade.
Deswegen unbedingt einmal reinhören.
So, auf Platz 2 haben wir dann das erste Mal etwas Technisches und zwar Normalisierung.
Wir sind ja jetzt im Bereich der Anwendungsentwicklung.
Da gehört Programmieren natürlich zum Alltag, aber auch Datenbanken.
Irgendwie.
Ob man sie jetzt selber erstellt oder abfragt, beides ist wichtig.
Und auf Platz 2 meiner Liste ist die Normalisierung,
weil wenn man in seinem Projekt eine eigene Datenbank erstellt,
wir natürlich auch erwarten, dass sie normalisiert erstellt wird
in der üblichen dritten Normalform.
Zur Normalisierung habe ich auch schon mehrere Artikel und Podcast-Episoden aufgenommen.
Deswegen gehe ich es nicht im Detail durch.
Ich höre dir auch die gerne nochmal an.
Einmal habe ich sogar häufige Fragen im Fachgespräch, glaube ich, gemacht zur Normalisierung.
Und dann auch ein konkretes Beispiel,
wie komme ich von einer nicht-normalisierten zu einer normalisierten Datenbank
mit den einzelnen Schritten dazwischen.
Denn das liefert auch viele weitere Anschlussfragen im Fachgespräch.
Zum Beispiel, Klassiker, auf welcher Normalisierungsstufe,
also auf welcher Normalisierungsform, Normalform,
so, mein Gott, werden die M zu N und auf welcher die 1 zu N Beziehungen aufgelöst.
Und, Spoiler, M zu N wird auf der zweiten
und 1 zu N wird erst auf der dritten Normalisierungsformherrschaft sein, aufgelöst.
Also Normalisierung auch ein Quell vieler, vieler Anschlussfragen
mit den verschiedenen Stufen und was dort passiert
und Beispielen vor allem auch, damit man sauber erklären kann und so weiter.
Also bitte unbedingt drauf schaffen.
Wichtiges Thema für alle Anwendungsentwickler und Entwicklerinnen.
Und dann kommen auf Platz 4 und 5 erst ein bisschen was zur Programmierung,
nämlich einmal die Kapselung und dann die klassische Frage, Klasse versus Objekt.
Was ist der Unterschied?
Kapselung ist ja eine der zentralen Säulen der Objektorientierung,
insbesondere sowas wie, was ist ein Getter und Setter?
Was sind Sichtbarkeitsmodifizierer? Wozu benutze ich die?
Wie ist die Sichtbarkeit bei den einzelnen Modifizierern und so weiter?
Und das zeigt auch ganz viel, ob man Objektorientierung gut verstanden hat oder nicht.
Es gibt zwar noch Polymorphie und Vererbung.
Und ja, die kommen auch gleich auf der Liste.
Aber die Kapselung ist eine schöne Einstiegsfrage, weil das sich so einfach anhört,
aber man daran gut festmachen kann, ob die Leute es wirklich verstanden haben.
Polymorphie und Vererbung kann ich so lehrbuchmäßig auswendig lernen.
Aber Kapselung, was ist denn der Sinn von Gettern und Settern?
Warum mache ich das?
Und was bringt mir das im Vergleich zu anderen Programmiersprachen?
Da kann man auch wieder ganz, ganz viele Anschlussfragen stellen.
Sei es so kleine Sachen wie, erklären Sie doch mal Getter und Setter,
wie implementiert man das? Warum macht man das?
Warum macht man die Sachen nicht public und so weiter?
Aber eben auch hin zu größeren Sachen.
Theoretisch kommt noch bis zu Designpattern gehen und so weiter an der Stelle.
Also das ist immer ein schöner Einstieg.
Und deswegen fragen wir das relativ häufig.
Genauso oft haben wir allerdings eine weitere klassische Frage gestellt,
und zwar grenzen Sie mal Objekt und Klasse ab.
Das können recht viele Prüflinge, weil man inzwischen so erwarten kann,
dass das eine Standardfrage ist.
Es gibt aber immer noch überraschend viele, die es nicht sauber abgrenzen können.
Da wird dann irgendwie sowas gesagt wie, eine Klasse enthält ein Objekt.
Oder manchmal gibt es da ganz komische Formulierungen.
Und ganz kurze Wiederholung, Klasse versus Objekt.
Ein Objekt ist ein Ding der realen Welt mit Eigenschaften und Funktionen.
Eigenschaften heißen in der Objektorientierung Attribute.
Die Funktionen werden Methoden genannt.
Und diese Eigenschaften können Werte haben.
Und die Funktionen führen halt etwas aus, was man mit diesem Ding tun kann.
Es gibt dann eine Klasse.
Eine Klasse ist eine Art Bauplan für Objekte.
Aus einer Klasse kann ich mehrere Objekte erzeugen,
deren Werte, deren Attributwerte sich unterscheiden können,
die aber immer alle die gleiche Anzahl an Attributen und Methoden haben.
Und so kann ich quasi aus der Klasse beliebig viele Objekte erzeugen.
Die nenne ich dann auch Instanz.
Instanz und Objekt ist quasi ein Synonym füreinander.
Und ich erkläre das immer gerne wie so einen Ikea-Schrank.
Wenn ich diese Ikea-Papieranleitung mir wie eine Klasse vorstelle,
kann ich mit dieser einen Klasse ganz viele verschiedene Ikea-Schränke zusammenbauen,
die zwar alle exakt gleich aussehen,
die aber alle individuell eine Ausprägung dieses Schrankes zum Beispiel sind.
Das ist ganz grob zusammengefasst das, was man sagen könnte
im Fachgespräch zu Klasse versus Objekt.
So, nächste Frage auf der Liste ist auch wieder etwas technischer.
Ein Lambda-Ausdruck. Was ist das eigentlich?
Und vor allem fragen wir das selbstverständlich,
wenn wir in Code-Beispielen Lambda-Ausdrücke sehen.
Auch alle anderen dürfen das inzwischen erklären können,
aber insbesondere wenn man es selber benutzt,
dann kann man schon die Uhr danach stellen, wenn man danach gefragt wird.
Und ein Lambda-Ausdruck ist so einfach erklärt.
Das ist einfach eine anonyme Funktion.
Also eine Funktion, die keinen Namen hat.
Das war es auch schon.
Und jetzt kann man natürlich noch mehr erklären,
dass man dann zum Beispiel higher-order-functions daraus zusammenbauen kann,
die dann solche Lambda-Ausdrücke als Parameter bekommen.
Oder man kann sagen, man kann damit ein bisschen Code abkürzen.
Man spart sich ein bisschen Boilerplate-Code,
weil man Methoden, Signaturen nicht mehr hinschreiben muss und solche Sachen.
Da kann man dann verschiedene Ausführungen noch machen.
Aber runtergebrochen auf die Basics ist ein Lambda-Ausdruck einfach nur eine Funktion ohne Namen.
Das ist es. Mehr ist es nicht.
Schön wäre natürlich, wenn man dann noch zu der Programmiersprache,
die man selber benutzt hat, erklären kann, wie die mit Lambda-Ausdrucken umgeht.
Ich würde zum Beispiel, wenn ich einen Java-Entwickler oder Entwicklerinnen sitzen habe,
fragen, wie das denn genau umgesetzt ist.
Weil Lambda-Ausdrücke, also Funktionen,
sind nicht einfach in die Sprache eingebaut worden als neuer Datentyp,
sondern es ist quasi nur syntaktischer Zucker.
Und im Hintergrund wird aus diesen Lambda-Ausdrücken trotzdem weiterhin eine Klasse generiert.
Das kann man alles wunderbar erklären, wenn man Java-Entwickler wird.
Ansonsten muss man das nicht erklären.
Nächster Punkt habe ich eben schon angeteasert.
Vererbung und auch die Polymorphie kommen gleich noch drei Fragen drunter.
Die darf man natürlich auch rauf und runter erklären können,
weil es halt eben Sachen sind, die in Objektorientierung oder anders,
die für die Objektorientierung so wichtig sind, die das ja quasi auch so ein bisschen mit definieren.
Und da wir das quasi täglich benutzen, wenn wir objektorientiert arbeiten,
sollte man diese beiden wichtigen Features erläutern können.
Vererbung, ja, kriegen die meisten Azubis eigentlich ganz gut hin.
Sagen dann so, ja, aus Basisklassen werden die Attribute und Methoden an die Subklassen vererbt.
Da kann man natürlich viele Anschlussfragen stellen.
Werden alle Methoden und Attribute vererbt?
Nein, nur die sichtbaren natürlich.
Dann kann ich auch die Vererbung einschränken.
Ja, ich könnte zum Beispiel in Java mit Final verhindern, dass Methoden überschrieben werden können und solche Sachen.
Also sowas kann ich tun und fragen als Prüfer.
Und bei der Polymorphie allerdings, da tun sich viele Prüflinge immer ein bisschen schwerer, das zu erklären.
Bringen das dann auch so ein bisschen mit Vererbung durcheinander oder erklären das immer anhand der Vererbung und so weiter.
Also das muss man ein bisschen sauberer abgrenzen.
Zu beiden Themen, Vererbung und Polymorphie, habe ich jeweils eine Podcast-Episode schon aufgenommen,
eine sehr ausführliche. Hört die gerne nochmal an.
Ansonsten kurzer Spoiler zur Polymorphie.
Ist halt quasi eine Funktionalität der Poemiersprache, die, ich sag mal, in zwei Ausprägungen kommt.
Nummer eins, ich kann überall, wo ein gewisser Datentyp erwartet wird,
zum Beispiel, wenn ich eine Variable deklariere oder wenn ich einen Parameter bekomme oder wenn ich einen Rückgabewert irgendwo habe,
kann ich dort auch eine Subklasse oder einen Subtypen ganz allgemein erwarten.
Also bei einer Klasse zum Beispiel eine Subklasse oder bei einem Interface eine implementierende Klasse.
Und das heißt, der Aufrufer sieht nicht, welcher konkrete Typ sich hinter diesem abstrakten Typen, sag ich mal, verbirgt.
Abstrakt nicht im Sinne abstrakter Klassen, sondern eben einem Obertyp von etwas.
Entweder Interface oder Basisklasse.
So, und übrigens, ich habe gleich schon falsch angefangen.
Ich würde erst mal erläutern, was Polymorphie eigentlich heißt.
Das steht für Vielgestaltigkeit.
Und das sieht dann quasi so aus, als würden sich hinter dieser Variable verschiedene Datentypen verbergen.
Und die Gestalt dieses Datentyps kann sich verändern quasi.
Und das zweite wichtige Feature der Polymorphie ist das sogenannte späte oder dynamische Binden.
Das heißt, wenn ich in meiner Vererbungshierarchie zum Beispiel Methoden überschreibe,
dann wird zur Laufzeit immer von ganz unten in der Vererbungshierarchie schrittweise nach oben geschaut,
wo die erste Implementierung dieser Methode vorliegt, und die wird dann aufgerufen.
Und so kann ich quasi mit der Polymorphie einmal definiertes Verhalten in Subtypen überschreiben und verändern.
Das macht es so interessant, weil nach außen hin sieht es so aus, als würde ich mit einem Ding arbeiten.
In Wirklichkeit arbeite ich aber mit einem abgeleiteten Ding.
Und das verhält sich vielleicht ganz anders als das eigentliche Ding.
Und das ist ganz interessant.
Damit ermögliche ich zum Beispiel eine Erweiterbarkeit in meinem Code,
weil ich einfach gegen die Basistypen entwickle,
später dann aber Subtypen ergänzend einfach meinem Programm hinzufügen kann.
Und das Basisverhalten muss ich dafür gar nicht mehr anpassen.
Das wäre so dieses Open-Closed-Principle aus den Solid-Principles,
was man zum Beispiel mit Polymorphie und einer konkreten Ausprägung der Vererbung umsetzen könnte.
So, dann haben wir als nächstes eine Frage aus dem Datenbankbereich wieder, und zwar Anomalien.
Was ist das eigentlich?
Wir fragen natürlich auch ganz oft nach Normalisierung.
Dann kommen wir immer zu der Frage, warum machen wir den ganzen Quatsch eigentlich?
Warum normalisieren wir Datenbanken?
Und dann ist die Antwort ja, um Redundanzen zu vermeiden.
Und dann ist die Gegenfrage, warum wollen wir denn Redundanzen vermeiden?
Und dann ist die Antwort ja, weil Redundanzen zu Anomalien führen können.
Und dann ist wieder die Gegenfrage, was sind denn die Anomalien?
Und dann kommt die Antwort, zum Beispiel, wenn ich Datensätze mehrfach habe und ich ändere dann den Namen,
dann kann ich einen vergessen.
Und das ist dann eine so Halb- beziehungsweise Drittelantwort, die wir haben wollen.
Denn es gibt drei verschiedene Anomalien und die meisten Prüflinge können leider nur die Änderungsanomalie,
die ich gerade beschrieben habe, erklären und vergessen, dass es noch zwei andere gibt
und werfen das dann alles irgendwie munter durcheinander.
Also zum Beispiel bei der Löschanomalie.
Das ist eine der am häufigsten falsch beantworteten Anomalien.
Sowas wie, ja, ich habe mehrere Datensätze in der Datenbank und dann lösche ich die, aber ich vergesse einen.
So, und das ist leider überhaupt nicht, was die Löschanomalie ist.
Ich erkläre es nochmal ganz kurz.
Die Änderungsanomalie, das ist die, die die meisten kennen.
Ich habe zum Beispiel mehrere Datensätze eines Kunden in meiner Datenbank
und jetzt ändert der seinen Namen, weil er zum Beispiel heiratet.
Dann muss ich ja alle Datensätze ändern, wo der Name drin steht.
Und wenn ich dabei einen vergesse oder sogar mehrere, dann habe ich Inkonsistenz in der Datenbank
und das Ergebnis ist, dass ich nicht mehr weiß, wer denn jetzt wirklich heißt.
Und dass der Kunde vielleicht den falschen Namen auf seiner Rechnung hat. Und das wäre halt unschön. Wollen wir nicht.
Deswegen wollen wir den nur noch ein einziges Mal in der Datenbank haben. Und wenn ich den dann ändere, dann ist er überall geändert.
So, und jetzt kommen wir zur Einfüge- und Löschanomalie. Und um die erklären zu können, muss ich nicht an eine normalisierte Datenbank denken, sondern eine
nicht-normalisierte Datenbank. Und ich glaube, da tun sich ganz viele Prüflinge einfach schwer damit. Denn die denken automatisch in dritter Normalform. Aber für diese Anomalien
muss eine Datenbank nicht normalisiert sein. Sonst würden sie gar nicht mehr auftreten. Wie gesagt, deswegen setzen wir die Datenbank ja in Normalformen um, um diese
Anomalien zu vermeiden. Ich will jetzt nicht sagen, dass es die nicht mehr geben kann, in normalisierten Datenbanken. Aber um das Beispiel zu erklären, braucht man eine
nicht-normalisierte. Und wir stellen uns einfach mal vor,
eine Tabelle, in der Kunden mit ihren Bestellungen
zusammen drinstehen. Das heißt, sowas wie Kundennummer, Kundenname, Bestellnummer und, weiß nicht, Bestelldatum. Ja, alles schön in einer Tabelle.
Und jetzt ist es so, wenn ich zum Beispiel in dieser Tabelle einen Kunden anlegen will,
mache ich irgendwie Insert in diese Tabelle und fülle Kundennummer und Kundennamen.
Aber was mache ich denn mit den Spalten Bestellnummer und Bestelldatum?
Wenn der noch nie was bestellt hat, dann müsste ich jetzt hier entweder eine Fake-Bestellung eintragen oder ich lasse es einfach leer.
Ich setze das Ding einfach auf Null.
Und das wäre beides komisch.
Und manche Tabellen sind dann so konfiguriert, dass man das einfach nicht kann, weil der Datensatz muss halt vollständig sein. Und dann habe ich
ein Problem, weil ich kann den Kunden nicht anlegen, wenn er keine Bestellung aufgegeben hat. Und das wäre vielleicht ein Problem.
Und das wäre dann eine Einfüge-Anomalie. Ich kann den Datensatz nicht einfügen, obwohl
ich ihn eigentlich anlegen will, weil mir Daten fehlen, die mit dem eigentlichen Datensatz aber gar nichts zu tun haben. Ich will einen Kunden anlegen,
brauche aber Bestellungsdaten, weil ich sonst den Kunden nicht anlegen kann. Das wäre doof.
So, und in diesem gleichen Beispiel können wir auch die Löschanomalie erklären, die halt so viele Prüflinge immer falsch machen.
Stellen wir uns vor, wir haben den Kunden da drin mit seinen Bestellungen und er steht da auch meinetwegen ganz, ganz oft drin. Ist aber auch
egal für die Löschanomalie. Wenn ich nämlich jetzt aus dieser Tabelle eine Bestellung zum Beispiel
löschen will, dann steht diese Bestellung ja in der gleichen Zeile wie der Kunde.
Das heißt, um die Bestellung zu löschen, müsste ich den Kunden mit löschen, weil es ist halt ein einziger, quasi gemeinsamer
Datensatz. Und da hätte ich jetzt mehr gelöscht, als ich eigentlich löschen will. Wenn ich nur eine Bestellung lösche, fliegt auch der Kunde mit raus.
Das wäre schlecht. Und das wäre eine einigermaßen sinnvolle Erklärung für eine Löschanomalie. Das wollen wir nicht. Und was wäre dann das Ergebnis?
Das kann man natürlich dann gleich gut erklären, als guter Prüfling. Wenn wir das normalisieren würden und wir würden Kunden und Bestellungen in ihre eigenen
Tabellen verfrachten und die dann mit Schlüsseln aufeinander zeigen lassen, dann können wir zum Beispiel den Kunden löschen, wir können auch die Bestellung löschen,
wir können was einfügen, ändern, was auch immer. Haben alles nur noch an einer Stelle und haben keine Abhängigkeiten zwischen diesen
Datensätzen, sodass wir munter auch Kunden anlegen können, ohne eine Bestellung anlegen zu können. Das wäre dann das Ergebnis.
So, wir bleiben bei Datenbanken. Die nächste Frage auf der Liste ist die nach Kardinalitäten.
Welche
Beispiele gibt es denn für Kardinalitäten und welche Kardinalitäten gibt es überhaupt in einer Datenbank? Und da ist der Klassiker 1 zu 1, 1 zu n,
m zu n. Das können auch die meisten Prüflinge erst mal erklären. Bei den Beispielen wird es dann ganz oft tricky.
Und dieses Jahr hatten wir auch schon wieder jemanden, der zum Beispiel gesagt hat, Beispiel für 1 zu 1 Beziehungen ist Postleitzahlort.
Also, das zeigt halt einfach, dass sie sich damit in der Praxis noch nie beschäftigt haben. Man kommt ganz schnell darauf, dass das eine
m zu n Beziehung ist. Überraschung, falls du das noch nicht wusstest, denn es gibt in Deutschland zumindest, für andere Länder kann ich nicht sprechen,
gibt es Orte, die mehrere Postleitzahlen haben.
Simples Beispiel, Berlin hat irgendwie, ich weiß nicht, sag ich mal, zehn Postleitzahlen. Der Ort heißt immer Berlin. Auf der anderen Seite gibt es aber auch
einen Ort mit mehreren Postleitzahlen. Es gibt aber auch eine Postleitzahl mit mehreren Orten. Also genau das Gegenteil. Und das ist in meinem Heimatort
sogar so. Wir haben 49377
Vechter. Es gibt aber auch 49377
Langförden. Das ist nämlich so ein kleiner Mini-Vorort von Vechter und hat einfach die gleiche Postleitzahl.
Also, Postleitzahlort ist eine m zu n Beziehung. Und du legst dir bitte für deine mündliche Prüfung saubere Beispiele für alle drei
Kainalitätstypen zurecht. M zu n, 1 zu n gibt es relativ viele.
1 zu 1 ist immer so ein bisschen tricky, weil die gibt es in der Realität gar nicht so oft,
dass zu einem Datensatz wirklich nur ein einziger auf der Gegenseite existiert und umgekehrt auch. Ein Beispiel, was man nehmen könnte,
eventuell, wäre sowas wie
Benutzer und Login.
Benutzer in einem Online-System, zum Beispiel Online-Shop oder so, da steht Benutzername und E-Mail und ich weiß nicht, was alle drin.
Und in der Login-Tabelle steht Benutzername und Passwort drin. Passwort natürlich gehasht und gesaltet und ich weiß nicht, was. Das ist nur kurz
zusammengefasst hier. Und dann kann man noch mal überlegen, warum man die auseinanderzieht. Stichwort Datenschutz und IT-Security und x und y.
Und was aber hier dann das Ergebnis ist, zu einem Benutzer gibt es genau ein Login und ein Login gehört zu einem Benutzer.
Das ist dann eine echte 1 zu n,
1 zu 1 Beziehung, natürlich nicht 1 zu n.
Also such dir gute Beispiele, im besten Fall sogar aus deinem eigenen Projekt, dann wird es nicht so langweilig, weil sonst erklären immer alle zum x-en Mal
Artikel und Artikelgruppe ist eine 1 zu n Beziehung.
Gut, nächste Frage, die häufig kommt, gerade weil wir so viele Projekte mit mehreren Programmiersprachen haben, ist die Typisierung.
Bitte schau dir an, wie deine Programmiersprachen, wenn du welche eingesetzt hast, typisiert sind. Und es gibt zwei Ebenen Typisierung. Einmal
statisch und dynamisch, das können die meisten Prüflinge noch erklären.
Dynamisch, da muss ich halt keine Datentypen angeben zur Compile-Zeit bei der statischen Typisierung schon. Stichwort Java, String x, muss ich den Datentypen angeben.
In zum Beispiel PHP muss ich das nicht, dann mache ich einfach Dollar x, dann habe ich halt eine Variable oder kann ich halt irgendwas rein speichern.
Das ist statisch dynamisch. Es gibt auch noch eine zweite Ebene und zwar
schwach und stark typisiert und das bringen dann viele durcheinander. Erstmal mit statisch und schwach und irgendwas und dann kommt da so, ja es gibt
statische und schwache Typisierung und dann geht alles wild durcheinander.
Erstmal statisch dynamisch, muss zur Compile-Zeit der Datentyp feststehen, ja oder nein. Und dann haben wir starke und schwache Typisierung und dabei geht es
darum, ob zur Laufzeit
Typen eventuell ineinander umgewandelt werden und zwar implizit, ohne dass du das sehen kannst. Und da habe ich zum Beispiel
etwas aus PHP mitgebracht, da könntest du so was schreiben wie if
Klammer auf, 1, Klammer zu. Und dann fragt man sich so, hä, was ist das denn? In einem if-Statement bei der Bedingung in den Klammern, da muss
ja ein boolscher Ausdruck stehen. Also if, true oder false quasi. Und jetzt schreibe ich da einfach eine 1 rein. Wie kann das denn sein?
Und das ist genau ein Beispiel für eine schwache Typisierung. In diesem Fall würde nämlich die Programmiersprache die 1
umwandeln und zwar implizit, also ohne dass es wirklich hingeschrieben wird, in einen Wahrheitswert, in true oder false.
Und jetzt, nagel mich nicht darauf fest, ist es glaube ich so, was alles, alle Zahlwerte, die nicht null sind, werden automatisch in true
und null wird in false umgewandelt. Und das wäre es dann. Das heißt aus if 1 würde dann quasi implizit if
false und dann würde das halt nie ausgeführt.
So, das gibt es dann für verschiedene Datentypen. Man kann zum Beispiel auch Strings dann so umwandeln. Das wäre dann ungefähr so, alles was ein
gefüllter String ist, ist true und der leere String ist false. Also dann gibt es verschiedene Regeln dafür.
Und wenn die Programmiersprache das macht, dann ist sie schwach typisiert. Wenn sie stark typisiert ist, erlaubt sie solche Scherze nicht. Java zum Beispiel, da
könntest du nicht mal hinschreiben if 1, weil da wird der Compiler schon sagen, was machst du denn da? Du brauchst hier einen butschen Ausdruck, das geht so nicht.
Ja, und das ist der Unterschied zwischen
schwach und stark. So, und jetzt guckst du dir für deine Programmiersprachen an, wie die typisiert sind und Hansfeld, kannst vielleicht auch ein Beispiel nennen
aus deiner Praxis, aus dem Code, warum, was, wie ist und was noch die Vor- und Nachteile sind. Das wäre natürlich auch nochmal interessant, wenn du auf
einem so Niveau antworten willst.
So, nächste Frage. Generische Klassen werden auch in fast jedem Code benutzt.
Stichwort aus Java, List of String, List of Integer oder so etwas und die wenigsten Prüflinge können das sauber erklären.
Habe ich auch schon mal in einigen Podcast-Episoden was zu gesagt. Hier nochmal ganz kurz zusammengefasst. Generische Klassen stellen
generische, also allgemeingültige
Algorithmen bereit und zwar unabhängig vom konkreten Datentyp. Das ist etwas, was ich eigentlich nur in statisch typisierten Programmiersprachen brauche.
Bei dynamischen Programmiersprachen ist das eigentlich unnötig, denn da gibt es ein Feature, das heißt Duck Typing.
Okay, ich
hole schon wieder viel zu weit aus, informiere ich darüber, du hörst dir meine andere Podcast-Episode dazu an. Ich würde eigentlich nur sagen, generische Klassen stellen generische
Algorithmen bereit für beliebige Datentypen und ich kann die dann
parametrieren, zum Beispiel in Java eben List of String und dann funktionieren die eben zur Laufzeit nur noch mit diesem String, den ich da angebe und
ich kann dann nicht auf einmal ein Integer da reinpacken, wenn sie so typisiert sind.
Okay, warum mache ich das?
Code wiederverwenden. Ich möchte nämlich nicht eine String List und eine Integer List programmieren, die
99% des Codes identisch hat, nur dass einmal String und einmal Integer da drin steht, sondern ich möchte diese Liste zum Beispiel ein einziges Mal
programmieren und dann mit beliebigen Datentypen arbeiten lassen. Dafür brauche ich generische Klassen.
So, nächstes Thema
leitet sich so ein bisschen aus den modernen
Prüfungs- oder Projektthemen ab und zwar REST-APIs, die ganz oft benutzt werden, weil ich eine Single-Page-App zum Beispiel habe und ich muss mit dem
Backend über REST
kommunizieren. Da haben wir ganz oft heute die, heute im Jahr
2022, die Frage nach der Absicherung dieser APIs gestellt, weil stellen wir uns mal vor, du hast so eine API,
da kann ich irgendwie ein Get drauf machen und dann liefert die mir alle Mitarbeiter mit ihren Gehältern so.
Sollte ich das ungesichert im Netzwerk einfach zur Verfügung stellen? Ich glaube nicht. Und da gäbe es dann zumindest mal die Frage danach, was
es für Möglichkeiten gibt, die abzusichern und der Klassiker wäre wenigstens ein Basic Auth. Benutzer Passwort, ich muss mich da anmelden, das wäre wohl das
absolute Minimum. Wäre aber heutzutage nicht mehr ganz so sinnig, wenn ich mehrere dieser APIs habe, die vielleicht auch unterschiedlich
Berechtigungen haben müssen, dann sollte ich das vielleicht nicht mehr mit Basic Auth machen, sondern mit dem
Standard, den es inzwischen dafür gibt, und zwar mit OAuth. Und OAuth ist ein, ich sage jetzt mal,
kompliziertes Verfahren. So kompliziert jetzt auch nicht, weil das kam schon in der IHK-Prüfung dran, wie der Ablauf da ist. Aber wenn du selber
implementierst, ist es relativ kompliziert. Deswegen nutzen wir dafür am besten Frameworks, die uns das abnehmen, damit wir es einfacher haben.
Wichtig ist aber, wie OAuth grundsätzlich funktioniert und zwar ist es eine delegierte
Authentifizierung. Das heißt, du selber kümmerst dich gar nicht um die Authentifizierung, sondern delegierst das an einen, der das kann.
Zum Beispiel, wenn du es im Internet irgendwo findest, an Facebook, an Google, an Twitter oder was auch immer. Immer, wenn du so einen Button siehst,
hier, log in mit Google oder sowas, dann delegiert diese Website die Authentifizierung an Google und verlässt sich darauf, dass Google dich
authentifiziert und der Website dann übermittelt, jo, Person X hat sich angemeldet, lasse man rein.
Und das kann man sich natürlich auch in seinem eigenen Netzwerk nachbauen.
Zumindest heutzutage verbreitete Implementierung für so einen OAuth-Server ist Keycloak.
Vielleicht hast du das schon mal gehört. Das ist eine Java oder auf Basis von Java entwickelte Software, die quasi delegierte
Authentifizierung für deine Projekte anbietet. Dann setzt du dir so einen Server auf, hat halt eine Benutzerverwaltung mit
E-Mail-Adressen, Benutzernamen und alles mögliche kann man da eintragen und über diesen Server kannst du dann deine Benutzer an deiner Anwendung
sich authentifizieren lassen und das Ganze kannst du natürlich auch für deine REST-APIs machen und schon kann nicht jeder Hans und Franz das Zeug
aufrufen. Wäre vielleicht eine gute Idee.
Nächster Punkt auf meiner Liste Software-Qualität.
Auch schon seit Jahren eigentlich prüfungsrelevant. Jetzt noch mal besonders hervorgehoben durch die Neuordnung der IT-Berufe und inzwischen gibt es ja auch eine
neuere ISO-Norm mit mehreren Punkten, die man hier gleich nennen könnte. Ich schmeiß nur mal so ein paar Stichwörter hin, dass du weißt, worum es geht.
Da geht es um so was wie
Anpassbarkeit, Wartbarkeit, Übertragbarkeit,
Benutzbarkeit, Performance.
Das sind so verschiedene Oberpunkte aus dem Bereich der Software-Qualität, die du dann auch gerne erklären können darfst oder zumindest erst mal nennen können
darfst, sagen könnten, sagen können darfst, wo die stehen. Da gibt es eine ISO-Norm dafür und vielleicht ein, zwei Sachen noch am
Beispiel erklären könntest. Das wäre eine gute Sache, denn wir müssen halt bei unserer Software-Entwicklung auch ein bisschen darauf achten, dass sie
qualitativ hochwertig ist und da gibt es so viele Ausprägungen dieser Software-Qualität, also mindestens 20 dieser
Stichwörter, die du da an der Stelle nennen kannst. Die schau dir bitte unbedingt an.
Das ist für unseren Beruf wirklich wichtig.
Nächster Punkt ist noch mal wieder völlig unabhängig von der Einbürgerungsentwicklung. Fixe und Variable Kosten.
Was ist das? Nummer 1 werden die ganz oft mit Einzel- und Gemeinkosten verwechselt. Danach fragen wir noch häufiger aufgrund des
Stundensatzes, wie vorhin schon erwähnt. Gehen wir die ganz kurz mal einmal durch. Fixe und Variable Kosten. Fixe Kosten sind Kosten, die
immer anfallen, egal ob ich produziere oder nicht.
Variable Kosten fallen nur an, wenn ich produziere.
Ein simples Beispiel. Ich baue Tische, dann fallen die Kosten für die Tischbeine nur an, wenn ich auch einen Tisch
produziere. Die Miete für meine Tischlerei fällt aber an, egal ob ich da drin einen Tisch produziere oder nicht. Und das wäre der Unterschied
zwischen Fix und Variable.
Das interessante ist also hier die Produktion. Wenn ich produziere,
nur dann fallen diese Kosten an. Das heißt, das sind Variable Kosten. Und Fixe fallen unabhängig von der Produktion an.
Einzel- und Gemeinkosten darf man nicht damit durcheinander bringen,
auch wenn man alle Kosten in beide Bereiche unterschiedlich einsortieren kann. Es gibt dann quasi für
Fix und Variable und Gemein und Einzel jeweils Beispiele, die quasi in die Schnittmenge fallen. Aber das ist jetzt hier irrelevant.
Sondern der Unterschied hier ist, dass ich Einzelkosten genau einem
Kostenträger zuordnen kann. Und Gemeinkosten kann ich nicht einem Kostenträger zuordnen, sondern muss ich über ein Umlageverfahren quasi auf alle
Kostenträger
zusammenlegen.
Beispiel Tischbein von eben. Wenn ein Tisch genau vier Beine hat, kann ich sagen,
diese vier Tischbeine sind exakt diesem einen Tisch zuzuordnen. Die kann ich also diesem Kostenträger-Tisch
zurechnen und erhöhe quasi seine Kosten um vier mal Kosten eines Tischbeins. Das ist eindeutig einem Tisch zuordnenbar.
Bleiben wir bei dem Beispiel von eben die Miete. Die Miete für meine Produktionshalle kann ich nicht einem Tisch zuordnen, weil im Laufe des Monats
werden da vielleicht 127 Tische gebaut. Also ist nicht einer davon zuständig dafür, meine Miete zu zahlen, sondern alle in ihrer Gesamtheit.
Und deswegen muss ich die dann umlegen auf die einzelnen Tische.
Ganz simples Mini-Verfahren, um das nur mal kurz zu erklären. Ich nehme die Miete,
teile die durch die Anzahl meiner produzierten Tische und dann weiß ich, wie viel jeder Tisch zur Miete beiträgt.
Ja, ganz vereinfacht dargestellt. Es gibt natürlich noch ein anderes Verfahren, mit dem man das dann richtig macht.
Ich glaube, das steht auch noch auf meiner Liste. Ich kann es gerade nicht sehen. Das ist der Betriebsabrechnungsbogen.
Damit komme ich nämlich zu diesen Zuschlags-Sätzen, die am Ende dafür benutzt werden, um die Gemeinkosten auf die einzelnen Kostenträger umzurechnen.
Wenn ich dann sage, mein Tisch ist jetzt fertig, ich habe viermal das Tischbrei draufgerechnet und weiß jetzt, der Tisch kostet irgendwie 100 Euro,
dann kommt da oben noch ein Zuschlags-Satz, zum Beispiel für meine Fertigungsgemeinkosten drauf von, ist jetzt alles ausgedacht, 20 Prozent.
Und dann weiß ich, aha, der Tisch kostet schon mal 120 Euro, weil die Gemeinkosten jetzt auch noch draufgeschlagen wurden.
Und um zu diesen Gemeinkosten-Zuschlags-Sätzen zu kommen, gibt es das Verfahren des Betriebsabrechnungsbogens.
Den darf man auch gerne erläutern können. Zumindest sollte man ihn mal gehört haben und ihn in der Prüfung nennen können.
Das wäre schon mal viel wert. Das können auch viele Prüflinge leider nicht oder konnten es dieses Jahr nicht.
Gut, kommen wir zurück zu etwas Technischerem. Und zwar, was ist ein Hash-Verfahren?
Aus verschiedenen Gründen wird das abgefragt. Wenn wir zum Beispiel Passwörter in der Datenbank abspeichern, werden die gehashed.
Oder wenn ich irgendwo eine Authentifizierung mache und dafür ein Passwort übergeben muss, dann wieder gleiches Beispiel, Passwörter werden gehashed.
Oder ich lade Dateien runter und hashe die nochmal, um zu gucken, dass sie dann auch richtig sind.
Oder irgendjemand hat Security aufgeschrieben, hat was von Signaturen erzählt und dann sollte man auch wissen, was ein Hash ist, weil das ist Teil einer Signatur und so weiter.
Also es gibt verschiedene Gründe, warum wir das fragen.
Und ein Hash-Verfahren ist ein, ich hatte schon mal eine ganze Episode zu Kryptografie, deswegen hier nur ganz, ganz kurz,
ein mathematisches Einwegverfahren, was nicht zurückrechenbar ist.
Deswegen nutzt man das auch, um Passwörter zu speichern.
Ich kann aus dem Hash das Passwort nicht wieder zurückrechnen.
Das ist eine Einwegfunktion und da sollte es so sein, dass es möglichst wenig Kollisionen gibt,
denn bei dieser Hash-Funktion wird aus einer unendlich großen Möglichkeitenmenge an Eingangsdaten eine Ausgangsmenge fixer Länge erzeugt.
Zum Beispiel kann ein Hash 128 Bit lang sein, dann habe ich zwar sehr, sehr, sehr viele Möglichkeiten, aber eben nicht unendlich viele, wie es da draußen an Daten gibt.
Das heißt, es muss zwangsläufig irgendwann zu einer Kollision kommen, was bedeutet, dass zwei unterschiedliche Eingangswerte den gleichen Hash, den gleichen Ausgangswert erzeugen.
Und wenn das so wäre, dann wäre das schlecht, denn wofür brauche ich Hash-Verfahren?
Beispiel Passwort. Wenn ich das Passwort eingebe, um mich zu identifizieren, lasse ich über dieses Passwort das gleiche Hash-Verfahren laufen wie beim Speichern des Passworts und ich gucke, ob beide Hashes identisch sind.
Und wenn ich mich jetzt mit einem ausgedachten Passwort anmelden kann, was zufällig den gleichen Hash produziert, dann kann ich mich halt im System einloggen, obwohl ich das nicht sollte.
Und das wäre nicht so gut.
Deswegen gibt es noch verschiedene andere Verfahren, die man mit reinfließen lässt, damit das Ganze ein bisschen sicherer in Anführungszeichen wird.
Aber das soll jetzt nicht Thema sein. Hört da gerne meine Episode zu Kryptografie oder zu meinen Episoden.
Da gibt es schon mehrere, wo ich dann auch Hash-Verfahren erkläre.
So, nächster Punkt. Laufende Kosten des Projekts. Das vergessen auch viele Prüflinge oder machen es falsch.
Ich glaube, ich hatte in der Episode zu den Projektdokumentationen dazu schon mal was gesagt.
Also es kann eigentlich nicht sein, dass ein Projekt keine laufenden Kosten produziert.
Du kennst vielleicht den Begriff der EDA-Kosten.
Ja, der Server, der stand ja eh im Keller. Da habe ich mein Projekt drauf installiert und fertig. Dafür muss ich nichts bezahlen.
Das ist natürlich Quatsch.
Also laufende Kosten gibt es immer. Es ist nichts umsonst.
Selbst wenn der Server da wirklich schon stand, wird er durch dein Projekt sicherlich irgendwie ein bisschen mehr belastet als vorher,
zieht vielleicht ein winziges Mängchen mehr Strom, ist schneller kaputt und muss schneller abgeschrieben werden oder was auch immer.
Also Projekte ohne laufende Kosten halte ich persönlich für unmöglich.
Schau nochmal genau hin, wenn du so ein Projekt hast. Das kann eigentlich nicht sein.
Nächste Frage, wieder ein bisschen kaufmännisch. Lohn und Gehalt.
Und ich ergänze nochmal die Ausbildungsvergütung, weil die kommt nämlich auch noch dazu, denn die Azubis kriegen weder Lohn noch Gehalt.
Und um das kurz abzugrenzen, Lohn und Gehalt. Gehalt kriege ich quasi für Anwesenheit und Lohn kriege ich für erledigte Arbeit, also für meine Leistung.
Das heißt, ganz klassisch, Lohn wird zum Beispiel für produzierte Stück oder zum Beispiel für anwesende Stunden bezahlt.
Ich kriege einen Stundenlohn, wenn ich acht Stunden da war, kriege ich achtmal meinen Stundenlohn.
Wenn ich nicht komme, kriege ich nichts quasi.
Und Gehalt ist etwas, was ich einfach regelmäßig in der gleichen Höhe immer kriege, egal ob ich arbeite oder nicht.
Theoretisch kann ich auch einen Monat zu Hause bleiben, ich kriege trotzdem mein Gehalt.
Also ich werde nicht auf Basis meiner Arbeitsleistung bezahlt, sondern im Prinzip einfach nur für die Anwesenheit, ganz blöd gesagt, egal ob ich da arbeite oder nicht.
So, das ist das eine. Und dann gibt es noch die Ausbildungsvergütung.
Das ist etwas Besonderes, weil wir Auszubildenden eigentlich nicht dafür bezahlen, dass sie uns toll Leistung bringen, weil wir sollen sie ja ausbilden.
Also sie lernen ja noch.
Das heißt, die Ausbildungsvergütung ist eigentlich nur dazu da, damit der Azubi seinen Lebensunterhalt so bestreiten kann und die Ausbildung vernünftig absolvieren kann.
Der soll ja jetzt nicht riesengroße Gewinne mitmachen oder sowas, sondern er soll einfach nur seine Ausbildung absolvieren können.
Und dabei unterstützen die Unternehmen mit der Ausbildungsvergütung.
Von der Idee her ist die Ausbildungsvergütung aber eher dem Gehalt zuzuordnen und nicht dem Lohn.
Weil auch wenn du mal einen Tag nicht so toll arbeitest, kriegst du ja trotzdem die gleiche Ausbildungsvergütung jeden Monat.
Also eher Gehalt als Lohn ist das Ganze natürlich.
So, wenn wir dann wieder zurück zur nächsten Frage kommen, da geht es dann um die Architektur der Anwendungen.
Da wird dann oft MVC, MV4M, MVP, MV was auch immer genommen.
Und die darf man natürlich dann auch erklären können und auch die Vor- und Nachteile erklären.
Also viele Prüflinge sagen, ich habe eine Web-Anwendung mit MVC gemacht und können dann aber gar nicht erklären, warum.
Ja, weil das halt jeder macht. Das ist halt blöd.
Also wenn du schon so bestimmte benannte Architektur-Modelle benutzt, dann musst du auch erklären können, warum du das gewählt hast und was die einzelnen Buchstaben heißen.
Das wäre auch nicht schlecht. MVC, Model-View-Controller. Ganz viele sagen irgendwie Model-View-Control.
Weiß ich nicht, wo ein Buch steht, weiß ich nicht. Controller, so kenne ich es nur.
Und da solltest du wenigstens erklären können, was der Unterschied ist.
Welche Aufgabe haben die Komponenten in ihrem Zusammenspiel?
Und wenn du ein in Anführungszeichen exklusiveres Konstrukt benutzt hast,
wie zum Beispiel MVVM oder MVP, das ist jetzt nichts, was nie drankommt.
Aber der Klassiker aus dem Buch ist halt eher MVC.
Und das dann damit einmal abzugrenzen, wäre eine schöne Sache.
Das würde ich mir einmal angucken an deiner Stelle,
weil da ist die Chance groß, dass man danach vielleicht fragt.
Kommen wir mal zurück zu Datenbanken.
Das ist das nächste auf der Liste. Redundanzen.
Die hatten wir vorhin schon besprochen beim Thema Datenbanken.
Und da können eigentlich fast alle Prüflinge auch immer erklären,
dass es einfach mehrfach vorhandene Daten der Datenbank sind
und dass das schlecht ist wegen den Anomalien.
Bla, bla, bla. Da sind wir gerade schon drauf eingegangen.
Trotzdem fragen wir es immer mal wieder.
Also von daher auch sauber erklären können, bitte.
Nächster Punkt REST.
Viele Applikationen nutzen REST.
Wir hatten das gerade bei OAuth schon.
Und sehr wenige Prüflinge können REST vernünftig erklären.
Viele sagen einfach, ja, das ist halt so.
Ich habe so HTTP gemacht und das ist REST.
Sondern das ist es halt nicht.
REST ist ein Architekturprinzip mit, sag ich mal, wohl definierten
Eigenschaften oder Features, nenne ich es mal, die man da erklären kann.
Zum Beispiel die einheitliche Schnittstelle.
Ist etwas ganz Wichtiges dabei.
Wenn ich zum Beispiel HTTP benutze,
dann kann ich mir da nicht eigene HTTP Methoden ausdenken,
sondern ich habe get, put, post, delete, um mal vier zu nennen.
Ja, ich weiß, es gibt noch mehr.
Und jede Ressource kann halt nur über diese sehr reduzierte Anzahl
an Methoden abgerufen werden oder mit der interagiert werden.
Ich kann mir keine neuen ausdenken.
Das heißt, ich muss eigentlich gar nicht lange überlegen,
wenn ich es mal mit Java vergleiche, wie die Methoden heißen,
die ich aufrufen muss, weil es gibt ja nur eine Handvoll.
Und ich darf auch keine anderen benutzen.
So das wäre zum Beispiel ein Feature in Anführungszeichen von REST.
Und davon gibt es noch ein paar mehr.
Und da kann man sich gerne auch mal mit diesen Grundlagen auseinandersetzen.
Wenn man dieses so dominierende Architekturprinzip,
was in vielen Anbindungen heute eingesetzt wird, benutzt.
Darf man auf Prüfungsniveau das durchaus erklären können.
Nächster Punkt. Scrum habe ich auch einen ganzen Podcast zugemacht.
Da spare ich mir das jetzt hier.
Aber du solltest auf jeden Fall die drei Rollen, die drei Meetings,
die drei alte Fakten nennen können, wie Scrum grundsätzlich funktioniert,
dass es ein agiles Verfahren ist,
was die Grundlagen des ergebenden Projektmanagements sind.
Also Stichwort agiles Manifest.
Auch dazu habe ich schon mal einen Podcast aufgenommen.
Das ist so dominant, dieses Vorgehen.
Selbst wenn du dein Projekt nach Wasserfall umsetzt.
In vielen Unternehmen wird Scrum heute als Standard eingesetzt.
Und das solltest du unbedingt erklären können.
So, dann kommt jetzt tatsächlich auf dem nächsten Platz
der Betriebsabrechnungsbogen, den ich eben schon angeschnitten habe.
Und da geht es halt darum, wie du Gemeinkosten
zu Zuschlagssätzen umwandelst,
die du dann auf die Einzelkosten draufrechnen kannst.
So, Grundlagen des Rechnungswesens
solltest du auf jeden Fall in der Berufsschule gehabt haben.
Und wenn ich dann unbedingt noch mal angucken,
weil es halt wichtiges Prüfungswissen ist, wie gerade gesagt.
Ganz kurz zusammengefasst, worum geht es da?
Ich brauche eine Möglichkeit, um aus meinen Gemeinkosten
diese Zuschlagssätze zu bekommen.
Also ich muss die irgendwie verteilen.
Mein Beispiel von eben wieder Miete.
Ich habe zehn Tische produziert.
Das heißt, im Prinzip muss jeder Tisch ein Zehntel der Miete einspielen.
Sonst sitze ich irgendwann vor der Halle und nicht mehr drin.
Das heißt, das wäre so das Einfachste.
Und es gibt aber verschiedene Grundlagen,
auf deren Basis ich diese Verteilung machen kann.
Jetzt gerade war sehr einfach.
Anzahl produzierter Stück, geteilt, durch, fertig.
Aber wie kann man das noch machen?
Ich kann zum Beispiel meine Miete
auch aufgrund der Quadratmeterzahl der jeweiligen Bereiche verteilen.
Also zum Beispiel mein Vertrieb hat ein kleines Büro,
kriegt also weniger Anteil als die große Produktionshalle,
die irgendwie 80 Prozent meines Platzes ausmacht.
So kann ich mir ja auch vorstellen.
Oder weiß ich nicht, meinen Kaffeeverbrauch.
Wenn ich den umlegen will, mache ich das vielleicht anhand der Personenzahl.
Also IT hat 40 Leute, trinkt also für 40 Leute Kaffee.
Produktion hat 20 Leute, trinkt also nur die Hälfte an Kaffee zum Beispiel.
Und so verteile ich das dann auf die jeweiligen Stellen.
Ja, da gibt es verschiedene Möglichkeiten.
Und wie man das dann genau macht und zu den Prozentzahlen kommt,
das macht der Betriebsabrechnungsbogen.
Nächster Punkt, Anforderungsermittlung.
Lasten- und Pflichtenheft haben wir ganz oft,
weil es auch sehr oft natürlich Artefakte in den Projektpräsien oder in Doku waren.
Und da fragen wir nochmal nach.
Und im Prinzip, ich fasse nochmal kurz zusammen,
Lastenheft kommt vom Auftraggeber und beschreibt, dass was gemacht werden soll.
Und das Pflichtenheft, das kommt vom Auftragnehmer
und beschreibt, wie das gemacht werden soll.
Also technisch sehr detailliert.
Und wichtige Ergänzung, das Pflichtenheft ist Vertragsbestandteil.
Dagegen wird am Ende auch die Abnahme gemacht.
Und wenn das, was da drin steht, nicht erfüllt ist,
ja, dann muss der Kunde auch nicht zahlen.
So als kleiner netter Nebeneffekt dieses Pflichtenhefts.
Das sollte man erklären können.
Dann springen wir nochmal zurück zu Datenbanken.
Referenzielle Integrität ist auch ein Feature,
insbesondere von oder eigentlich nur von relationalen Datenbanken.
Und das darf man auch erklären.
Da kommen einige, weil das auch mit Re anfängt
und bringen das mit Redundanz durcheinander.
Ist es aber nicht. Redundanz, mehrfach vorhandene Daten, referenzielle Integrität.
Integrität bedeutet ja, dass etwas in sich stimmig ist
und referenziell ist also bezogen auf die Referenzen in der Datenbank.
Und was sind Referenzen?
Schlüssel, das heißt, meine Schlüsselbeziehungen müssen in sich konsistent sein.
Bedeutet ein Schlüssel darf nicht auf einen Datensatz zeigen, den es nicht gibt.
Ganz blöd gesagt.
Ja, und da gibt es dann verschiedene Möglichkeiten,
wie eine Datenbank diese referenzielle Integrität wahren kann.
Wenn ich zum Beispiel einen Datensatz lösche, auf den noch ein Fremdschlüssel zeigt,
dann kann die Datenbank mir das verbieten und sagen, das geht nicht.
Wenn du den löscht, dann zeigt dieser Fremdschlüssel ins Leere.
Und das darfst du nicht.
Und das wäre eine Möglichkeit.
Nächster Punkt Signatur, Signatur nicht im Sinne der elektronischen Signatur.
Hatten wir dieses Jahr auch ein, zweimal gleich mit dem Hashwert zum Beispiel abgefragt,
sondern die Signatur einer Methode.
Und da zählen viele Prüflinge alles Mögliche zur Signatur, was man da so sieht.
Also in Java zum Beispiel, irgendwie Private, Static, Final, irgendwas wird alles mit dazu genommen.
Und das ist im engeren Sinne aber nicht richtig, sondern zur Signatur einer Methode.
Auch dazu habe ich schon mal eine Podcast Episode aufgenommen.
Zählt der Name und die Anzahl, Reihenfolge und der Datentyp der Parameter.
Also eigentlich nur zwei Sachen, Name und Parameter.
Wobei bei den Parametern drei Sachen genannt werden sollten.
Anzahl, Reihenfolge und Datentyp.
Simples Beispiel.
Ich habe eine Addiere Funktion, einmal mit Int und Int und einmal mit Double und Double.
Da unterscheidet sich der Datentyp.
Aber die Anzahl und die Reihenfolge der Parameter bleibt gleich.
Wie gesagt, ich kann es hier nicht ausformulieren.
Hör da gerne die andere Podcast Episode rein.
Der Rückgabewert insbesondere oder Rückgabetyp ist nicht Teil der Signatur.
Auch das erkläre ich in einer anderen Podcast Episode.
Und alles andere, Sichtbarkeitsmodifizierer, Static, Final, was es sonst noch so geben kann,
Abstract oder was einem noch einfällt, ist alles nicht Teil der Signatur.
Warum? Die Signatur wird benötigt, damit der Compiler eindeutig entscheiden kann,
welche Methode er aufrufen muss.
Und vor diesem Hintergrund kannst du dir selber auch mal überlegen,
warum der Rückgabewert dann nicht dazugehören kann zur Signatur.
Denn das ist dem Compiler jetzt egal, was da zurückkommt,
um zu entscheiden, welche Methode er aufrufen muss, also wo er reinspringen muss.
Da interessiert es ihn nicht, was da zurückkommt, um das zu entscheiden.
So, ein paar Pünktchen haben wir noch und wir sind kurz vor der Stunde.
Ich gebe mal Gas.
Nächster Punkt, der auch oft gefragt wurde, Testverfahren.
Und da geht es jetzt nicht nur um Black- und Whitebox-Tests.
Das ist so das, was gefühlt 99 Prozent der Prüflinge gleich rausballern.
Black- und Whitebox, Ende.
Wenn man mal nachfragt, was der Unterschied ist,
dann wird es schon schwieriger bei einigen Leuten.
Aber es gibt noch so viel mehr Testverfahren.
Ich habe sogar eine ganz eigene Podcast Episode dazu aufgenommen,
was es da noch so gibt.
Benutzer-Test, automatisierte Test, Unit-Integration-System-Test fallen mir so ein.
Es gibt Smoke-Test, Regression-Test.
Es gibt so viele unterschiedliche Arten von Tests.
Wie gesagt, dafür habe ich eine eigene Episode aufgenommen
und die darf man ruhig erklären können.
Vielleicht nicht alle, aber zumindest mehr als Black- und Whitebox-Test.
Das sollte man einem Prüfling nach drei Jahren wohl zutrauen.
Also von daher, hör da gerne einmal rein,
was es da noch so für zusätzliche Testverfahren gibt und was die Vor- und Nachteile sind.
Ja, und dann bei Datenbanken gibt es ja auch so ein paar vertiefende Themen,
sag ich mal, wie bei der Objektorientierung, Polymorphie.
Bei Datenbanken kann man durchaus mal nach Transaktionen zum Beispiel fragen.
Auch das hatten wir dieses Jahr ein paar Mal.
Eine Transaktion, weil das bringen die Leute meistens durcheinander mit so einer Banktransaktion.
Das Beispiel für Transaktion ist ja auch immer Überweisung von Konto A nach B.
Und da sagt so der normale Mensch, ja, es ist eine Banktransaktion, da wurde Geld überwiesen.
Aber das ist hier nicht gemeint.
Das hatten wir jetzt dieses Mal mehrfach, dass es durcheinandergebracht wird.
Sondern eine Datenbanktransaktion ist einfach eine Menge zusammengehöriger Datenbankabfragen,
die entweder ganz oder gar nicht als Einheit ausgeführt werden.
Das definiert eine Transaktion.
Und wenn ein Teil dieser Transaktion fehlerhaft ist,
dann wird die gesamte Transaktion zurückgerollt.
Also alle Befehle, alle Teilbefehle der Transaktion werden wieder rückgängig gemacht.
Und das ist ein ganz wichtiges Konzept.
Und das Beispiel, was man da oft bringt, ist tatsächlich die Banktransaktion.
Weil wenn ich Geld von Konto A auf Konto B übertrage,
muss halt, wenn du dir das mal überlegst, wie du das in der Datenbank lösen würdest,
Update Konto A minus 100 und Update Konto B plus 100.
Und wenn mittendrin das Ding abbricht und nur das erste Update ausgeführt wird,
dann sind 100 Euro im Nichts verschwunden.
Weil das eine Konto hat jetzt 100 Euro weniger, aber auf dem anderen sind die nie angekommen.
Und schon ist Geld verbrannt, in Anführungszeichen. Das kann ja nicht sein.
Also von daher, das darf nur ganz oder gar nicht durchgeführt werden.
Und dafür brauchen wir eine Transaktion.
Und ja, dazu darfst du dir auch die ACID-Kriterien anschauen und erwähnen können.
ACID, kurz vorab, ich glaube, ich hatte es schon mal in einer Podcast-Episode, heißt
Atomicity, Consistency, Isolation und Durability.
Darfst du auch gerne die deutschen Wörter für benutzen.
Also Atomarität, Konsistenz, Isolation und Dauerhaftigkeit.
Guck dir die unbedingt im Detail an und erklär die.
Und dann kriegst du da auch eine sehr gute Note dafür.
Nächster Punkt auf der Liste, wieder ein bisschen Code.
Async und Await haben wir ganz oft gesehen.
Zum Beispiel in C-Sharp-Code.
Und ich glaube, inzwischen geht das auch in JavaScript, wenn ich mich recht erinnere.
Das ist quasi eine einfache Möglichkeit, asynchron zu programmieren.
Das ist sonst nämlich ganz schön schwierig.
Und einige Programmiersprachen haben halt was Cooles eingebaut.
Zum Beispiel C-Sharp mit Async und Await.
Und plötzlich finden wir das irgendwie vor allen möglichen Methoden.
Überall steht dann Async, Async, Async.
Und beim Aufruf immer Await, Await, Await.
Und wenn man dann fragt, warum hast du das da hingeschrieben?
Joa, musste ich irgendwie, sonst ging das nicht.
Und das ist natürlich dann die schlechte Antwort.
Also bitte erklären können, wenn man sowas benutzt, was da…
Erstens, warum man das überhaupt macht.
Warum das technisch nötig ist.
Und zweitens auch, warum das sinnvoll ist.
Und kurz zusammengefasst.
Asynchroner Code, den benutze ich natürlich hauptsächlich, wenn ich irgendwie ein UI habe.
Was einfrieren würde, wenn ich langlaufende Operationen habe.
Beispiel, ich klicke irgendwo im UI auf Download.
Und der Download dauert 30 Sekunden.
Dann würde ich natürlich in der Zwischenzeit mit meiner Applikation weiterarbeiten können.
Und nicht 30 Sekunden warten.
Das wäre bescheuert.
Deswegen brauche ich sowas Asynchrones.
Das heißt, der Download läuft im Hintergrund.
Und irgendwann ist er dann fertig.
Und das wird mir im UI wieder angezeigt, zum Beispiel.
Und das programmiert man nicht mal eben so.
Indem ich dann zum Beispiel so While True mache.
Solange bis der Download fertig ist.
Dann friert nämlich das UI ein.
Und dafür brauche ich asynchrone Operationen.
Das kann ich.
Wenn ich das händisch machen würde, müsste ich mir da ganz schön viel zusammen programmieren.
Und diese neuen Schlüsselwörter in einem Programmiersprach machen mir das Leben da deutlich einfacher.
Das Problem dabei ist wieder, weil das so einfach ist.
Schreiben die Leute das einfach hin.
Haben aber gar nicht verstanden, warum man das braucht und was da eigentlich passiert.
Und das kannst du halt nicht machen.
Also bitte erklären können.
So, was wir dann auch recht häufig hatten dieses Mal, waren Fehlerarten bei der Programmierung.
Da haben dann viele gesagt so, hä, was soll das jetzt sein?
Und eigentlich gar nicht überlegt.
Und das ist für mich so ein Beispiel für eine Frage.
Da muss man mal ein Momentchen drüber nachdenken.
Was könnte der Prüfer oder die Prüferin denn wohl damit meinen?
Und dann überlege ich mal aus meinem Alltag, was für Fehler gibt es denn da?
Ja, Compile-Fehler.
Die werden mir rot in der IDI angezeigt.
Das wären so die ersten, die mir einfallen.
Dann gibt es natürlich auch Laufzeit-Fehler.
Oder auch semantische Fehler.
Syntax-Fehler zeigt mir der Compiler an.
Inhaltliche Fehler, wenn ich es einfach falsch programmiert habe, quasi von der Logik her.
Dann wird mir der Compiler das natürlich nicht anzeigen.
Das weiß er gar nicht.
So, und diese Fehlerarten, die muss ich auch unterschiedlich behandeln.
Syntax-Fehler prüft der Compiler.
Da muss ich im besten Fall gar nichts machen.
Semantische und Laufzeit-Fehler muss ich halt irgendwie durch Unit-Tests zum Beispiel absichern.
Dass ich die nicht mache.
Oder durch irgendwelche anderen Testverfahren.
Und das ist eigentlich der Hintergrund der Frage.
Also reicht es, syntaktische Fehler zu verhindern, weil der Compiler die prüft?
Nö.
Weil ich brauche auf jeden Fall noch Tests, um die ganzen anderen Fehler zu verwenden.
Weil das sind nämlich die, die am Ende das Geld kosten.
Denn wenn ich einen Syntax-Fehler mache, dann wird das Programm gar nicht übersetzt.
Kann ich das eigentlich ausführen?
Okay.
Also ein Programm syntax-fehlerfrei zu machen, ist relativ einfach.
Aber die semantischen Fehler rauszukriegen, das ist das, was interessant ist.
Und wo viel Arbeit drin steckt.
Eben eigene Testverfahren, eigene Testabteilungen mit Menschen, die sich das angucken und was auch immer.
Und deswegen sollte man das durchaus abgrenzen können und die Unterschiede erklären können.
So, ich habe auf meiner Liste noch sechs Punkte.
Die gehen wir noch ganz fix durch.
Wir haben heute schon vier von REST gehört.
Da wird natürlich dann auch ganz oft mit HTTP gearbeitet.
Auch wenn das nicht zwangsläufig so ist.
Ich kann REST auch ohne HTTP machen.
Wüsstest du, wenn du dich mit REST auseinandersetzt, dann könntest du das auch gut erklären in der Prüfung.
Aber angenommen, du hättest HTTP benutzt, wie 100% der mir bisher bekannten Prüflinge das getan haben.
Dann solltest du wenigstens ein bisschen auch was zu HTTP erklären können.
Stichwort Status-Codes.
Welche gibt es da so?
Zum Beispiel den berühmten 404 für not found.
Oder eher so auf Klassenebene.
Alle 200er-Codes sind erfolgreich.
Alle 400er sind Client-Fehler.
Also 500er sind Server-Fehler und so weiter.
Vielleicht kennst du sogar ein paar spezifische, wie den 404 gerade.
Aber was auch ganz interessant ist, sind die HTTP-Methoden.
Welche gibt es da?
Die klassischen vier CRUD-Operationen.
GET, PUT, POST, DELETE solltest du kennen.
Gibt aber noch ein paar mehr, die man jetzt nicht so im Standard jeden Tag gebraucht.
Also HTTP kennt nicht nur vier Methoden.
Es gibt noch mehr.
Die darfst du auch gerne kennen.
Und eine, die wir dann oft hervorholen in der Prüfung, ist dann zum Beispiel die PATCH-Methode.
Und da wird dann ganz oft diese Methode mit PUT oder POST verwechselt.
Wir fangen alle mit P an.
POST, PUT, PATCH.
Machen aber alle ein bisschen was unterschiedliches.
Und das ist ganz wichtig.
Das POST wäre klassischerweise das CREATE bei CRUD.
Das legt etwas Neues an.
Das PUT wäre das UPDATE.
Das verändert ein bestehendes Ding.
Und das PATCH ist jetzt quasi das gleiche wie das PUT.
Das verändert ein bestehendes.
Aber mit dem Unterschied, dass man beim PATCH nicht das gesamte Ding, was man ändern will, nochmal mitgeben muss, sondern nur die geänderten Werte.
Beispiel, ich habe einen Kunden auf meinem Server und dessen Namen möchte ich ändern.
Dann könnte ich beim PATCH einfach sagen, komm, PATCH, den Kunden, Name oder neuer Name ist x.
Beim PUT müsste ich sagen, neuer Name ist x.
Und übrigens, der Vorname ist das und Geburtsdatum ist das und Kundennummer ist das.
Also ich muss den gesamten Datensatz nochmal mitgeben.
Und ich erkenne auch gar nicht, welche Felder sich jetzt geändert haben.
Ich gebe einfach alles mit.
Und beim PATCH kann ich wirklich quasi nur das DELTA mitgeben.
Das macht den Traffic natürlich deutlich geringer.
Und ich kann anhand des Pakets auch einfacher sehen, was denn überhaupt gerade verändert wird.
Weil ich nicht einfach 27 ungeänderte Felder noch mit übertragen muss.
Nächster Punkt CANBAN.
Wird in vielen Abschlussprojekten als Prozess benutzt.
Da habe ich erstmal auch kein Problem mit.
Aber dann sollte man wenigstens die Basics von CANBAN erklären können.
Genau wie du SCRUM kennen darfst.
Wenn du selber CANBAN Einsatz setzt, würde ich erwarten, dass du es erklären kannst.
Und das geht halt darüber hinaus.
Ja, ich habe ein paar Post-its an der Wand geklebt.
So, das ist nicht CANBAN.
Also mindestens zwei Sachen würde ich mir wünschen.
Nummer 1, dass es da diese Spalten gibt.
Und dass man die auch je nach gewünschtem Prozess anpassen kann.
Dass es nicht immer nur TO DO, DOING, DONE ist.
Und dann bin ich fertig.
Sondern man kann das tailern quasi auf den eigenen Bedarf.
Und in jeder Spalte gibt es dann so ein WORK IN PROGRESS LIMIT.
Das finde ich auch ganz wichtig bei diesem Prozess.
Ich kann ja was sagen.
Joa, ich habe mir jetzt mal 27 Post-its in meine Spalte geklebt und bearbeite die alle parallel.
Weil dann habe ich nämlich genau gar keinen Prozess.
Dann bringt mir dieses Ding nichts.
Wenn ich genauso arbeite wie vorher und ich klebe einfach nur jedes Mal ein Post-it in meine Spalte,
dann habe ich nichts gewonnen.
Weil der Sinn von CANBAN ist ja, die Arbeit zu visualisieren und auch Flaschenhälse deutlich zu machen.
Jetzt mal davon abgesehen, dass ich dann CANBAN für so ein Abschlussprojekt nicht ganz so sinnig finde,
weil was bringt mir das jetzt, wenn ich sehe,
ich habe einen einzigen Entwickler, der an diesem Projekt arbeitet und der hat einen Flaschenhals.
Ja, was mache ich denn dann?
Ich kann ja nicht mehr dazunehmen, weil es ist ja ein IHK-Abschlussprojekt.
Also ich darf nur einen Entwickler daran arbeiten lassen.
Also was bringt mir dann der CANBAN-Prozess?
Eigentlich eher nichts.
Also so ein kleiner Hint.
Also SCRUM und CANBAN für ein Abschlussprojekt, selten geeignet,
weil man dafür eigentlich mehrere Leute braucht.
Und gut, aber das soll jeder selbst entscheiden.
Wenn ihr mir das gut erklärt oder sie, ist das ja in Ordnung.
Die meisten Prüflinien können es nicht richtig erklären.
Und der ganze Prozess ist an dieser Stelle irgendwie sinnfrei,
wenn ich mir dieses VIP-Limit nicht einrichte.
Und wenn die Leute dann zum ersten Mal was von VIP-Limit hören,
wenn sie im Fachgespräch danach gefragt werden, ja, dann ist das schlecht.
Also bitte mit den Basics des von dir gewählten Prozesses auseinandersetzen
und denen ein bisschen erklären können.
Das wäre schon eine sinnvolle Sache.
So, dann haben wir noch ein bisschen was sehr technisches oder sehr konkretes,
nämlich TRY-CATCH, Exception Handling in der Programmierung.
Da habe ich auch schon mal eine eigene Podcast-Episode dazu aufgenommen.
Fehlerbehandlung heißt die.
Das können aber auch die meisten Prüflinien sauber erklären,
wenn man es auch täglich benutzt.
Was dann gerne noch dazu gefragt wird, wofür brauche ich denn ein Finally z.B.?
Ein Finally-Block können dann die meisten nicht mehr so richtig erklären.
Und hier nochmal der Spoiler.
Auch im Catch-Block könnte ja noch eine Exception auftreten.
Beispiel, im Catch möchtest du die Exception loggen.
Und dein Logging-Framework schmeißt eine Exception, weil die Festplatte voll ist.
Ist jetzt relativ unwahrscheinlich, aber könnte trotzdem passieren.
Dann wird der Finally-Block auf jeden Fall ausgeführt,
auch wenn im Catch irgendein Fehler auftritt.
Also, kurz gesagt, Finally wird immer ausgeführt.
Egal, ob TRY oder CATCH durchlaufen wird.
Und egal, ob auch im Catch-Block noch eine Exception läuft.
Finally wird immer, immer, immer ausgeführt.
Dafür sorgt die Purni-Sprache.
So, wir sind bei den letzten drei.
Und da habe ich noch ein bisschen was Wirtschaftliches, und zwar Abschreibungen.
Das ist häufig eine Folgefrage zu den Einzel- und Gemeinkosten.
Denn, wenn man sowas hat wie, du hast ja noch so ein PC auf dem Schreibtisch stehen.
Wer hat den denn eigentlich bezahlt?
Das ist so die Einstiegsfrage.
Dann sollte man darauf kommen, dass der Kunde das war,
weil der ja über die Gemeinkostenzuschläge, die wir in unsere Preise einkalkuliert haben,
das uns bezahlt hat, quasi.
Und wie kommt man da drauf, dass auch dieser PC in diesen Gemeinkosten drin ist?
Ja, über Abschreibungen.
Denn diese Büromöbel oder PCs oder Handys oder was auch immer man dann da abschreibt,
werden eben auf diesem buchhalterischen Weg in die Gemeinkosten einberechnet.
Simpelstes Beispiel wäre, ich kaufe irgendwie einen Rechner für 400 Euro.
Dann kann ich den genau in dem Jahr ja direkt mit der kompletten Summe abschreiben.
Ich glaube, aktuell ist die Grenze irgendwie bei 800 irgendwas Euro.
Wenn ich teurere Sachen kaufe, muss ich die ja über mehrere Jahre abschreiben.
Also über ihre Nutzungsdauer hinweg.
Wenn ich einen PC für 3000 Euro kaufe, und der wird üblicherweise drei Jahre genutzt,
ganz simples Beispiel, würde ich halt die nächsten drei Jahre jeweils 1000 Euro dieses PCs abschreiben.
Und das würde dann halt über meine Gemeinkostenumlage in den Preisen meiner Produkte landen.
So würde das ja funktionieren.
Und dadurch, dass der Endkunde diesen Preis bezahlt für das Produkt,
hat letztlich er mir meinen Arbeits-PC bezahlt.
So ist die Logik dahinter.
So, letzter, sorry, vorletzter Punkt, das hat mich jetzt etwas überrascht.
Da hätte ich jetzt durchaus gedacht, dass wir das häufiger gefragt haben,
war aber dieses Jahr ausnahmsweise mal nicht so.
Sonst würde das, glaube ich, mit ganz oben stehen.
Datenschutz. Ja, ganz interessant, wie wenig Prüflinge, die wir gefragt haben,
das auch wirklich sauber erklären konnten.
Ich wiederhole es noch mal.
Datenschutz ist der Schutz personenbezogener Daten
natürlicher Personen vor dem Missbrauch durch Dritte.
Und dazu gehören alle Daten,
die irgendwie zu einer identifizierbaren Person gehören.
Zum Beispiel auch eine IP-Adresse oder eine E-Mail-Adresse.
Und aber leider nicht, oder das heißt leider, aber nicht der Stundensatz.
Das Gehalt wäre was anderes.
Das Gehalt, das ich dieser Person zuordne, ist ein personenbezogenes Datum.
Der Stundensatz eines Anwendungsentwicklers aber nicht,
weil der wird zum Beispiel mit diesen Gemeinkosten und dies und das
und über die Menge der Entwickler hinweg berechnet und nicht für eine einzelne Person.
Also von daher, da muss man das ein bisschen abgrenzen.
Ansonsten eigene Episode zu Datenschutz, Datensicherheit und Datensicherung
habe ich schon aufgenommen.
Unbedingt reinhören.
Klassische Prüfungsthemen, nicht nur im Fachgespräch,
auch in der schriftlichen Prüfung vor allem.
So ein letzter Punkt heute da.
Gefühlt haben wir da auch öfter schon Leute nachgefragt,
aber in diesem Jahr oder in diesem Durchgang wohl nicht so viele.
Variablen-Deklaration in JavaScript.
Da gibt es drei Möglichkeiten.
Let, war, Konst.
Was ist der Unterschied?
Denn man sieht dann munter im Code verstreut,
mal steht da Let, mal war, mal Konst, also eigentlich eher Let oder war.
Und die wenigsten können es aber richtig erklären.
Ganz kurz erklärt zwischen Let und war, insbesondere der Unterschied,
das ist nämlich das, was am meisten durcheinander gebracht wird, war,
da wird die Variable im Scope der ganzen Funktion definiert.
Und bei Let ist sie beschränkt auf ihren umgebenden Block,
also quasi um die letzten geschweiften Klammern,
die um diese Variable drumherum gezogen werden.
Das ist also eine Scoping-Frage.
Ganz einfach gesagt, Let-Variablen haben einen kleineren Scope als war-Variablen.
Und Konst, um das abzugrenzen, das sagt ja schon das Schlüsselwort Konst,
eine Konstante ist also nicht veränderbar, der Wert.
Auch da kannst du den Scope noch mal im Detail angucken.
Ich bin kein JavaScript-Entwickler.
An der Stelle würde mir das hier schon reichen,
wenn das jemand erklären kann.
Wenn du JavaScript entwickelst,
solltest du die Details auf jeden Fall noch mal angucken
und noch besser erklären können, als ich das gerade gemacht habe.
Am besten noch mit Beispielen.
Das wäre für so eine Prüfung eigentlich ideal.
So, jetzt sind wir meine Liste durchgegangen.
Das waren so die häufigsten Fragen.
Wir haben natürlich noch mehr gefragt.
Ich habe es schon gesagt, aber ich habe jetzt die genommen,
die wir mindestens zweimal gefragt haben.
Und ja, dann hoch bis zum Stundensatz,
den wir fast in jedem Fachgespräch gefragt haben.
Ich fand das heute mal eine ganz interessante Episode,
damit du mal siehst, was bei uns so gefragt wird
und aus welchen verschiedenen Bereichen.
Klar, die großen Bereiche bleiben immer gleich.
Programmierung, Datenbanken, Wirtschaft.
Ja, aber zwischendrin war ja auch schon mal was anderes dabei,
wo man vielleicht nicht unbedingt so daran denkt,
dass das mal gefragt wird.
Also ich hoffe, es hat dir heute ein bisschen geholfen.
Ich hoffe, du bereitest dich insbesondere auf diese Fragen noch mal vor.
Ich habe dir meine ganzen genannten Podcast-Episoden
alle verlinkt in den Shownotes unter itberufe-podcast.de
slash 177.
Schau da gerne rein.
Und ansonsten google einfach mal die Features,
die du bei deiner Programmierung benutzt.
Das wäre grundsätzlich, glaube ich, eine gute Idee,
wenn du das alles verstehst und auch erklären kannst.
Und im Zweifel fragst du Ausbilder und Ausbilderinnen.
Dafür sind die da, dass die dir das erklären,
was du eigentlich so den ganzen Tag machst.
So, damit ist meine Episodenreihe zur Sommerprüfung 22 beendet.
Mal gucken, ob ich das im nächsten Jahr auch wieder mache,
wenn es denn Neuigkeiten gibt.
Denn ja, so spannend ist der Prüferjob dann auch nicht.
Es sind über die letzten Jahre hinweg auch immer wieder die gleichen Fragen,
natürlich, die hochkommen.
Also von daher, ich glaube, diese Episode ist schon recht zeitlos.
Aber wenn sich das jetzt krass ändern sollte,
dann nehme ich bestimmt noch mal eine neue auf.
Ich wünsche dir auf jeden Fall ganz viel Erfolg bei deiner Prüfung,
falls sie noch vor dir liegt,
bei Doku, Präsi und Fachgespräch natürlich.
Und ich würde mich freuen, wenn du vielleicht mein Newsletter abonnierst.
Da habe ich nämlich für dich zusammengestellt,
über die ganzen drei Ausbildungsjahre hinweg,
eine Ausbildungsbegleitung.
Jede Woche mindestens kriegst du eine Mail von mir,
passend zu deinem aktuellen Ausbildungsstand.
Also, was du dir vielleicht aktuell mal angucken solltest,
wann du dir mit der Prüfungsvorbereitung loslegen solltest und so weiter.
Und das Ganze habe ich für Azubis
und auch für Ausbilder und Ausbilderinnen zusammengestellt.
Also, kannst dich gerne anmelden.
Dann kommt als erstes eine Mail,
was bist du denn eigentlich, Azubi oder Ausbilder?
Und dann kriegst du passend für dich die Mails.
Und das Ganze halt übers Jahr verteilt, alles komplett kostenfrei.
In jeder Mail findest du einen Abmelden-Link.
Wenn du keinen Bock mehr drauf hast,
findest du unter it-berufepodcast.de slash Newsletter.
Trag dich doch gerne ein.
Und ich würde mich natürlich auch über dein Feedback freuen.
Das war jetzt die dritte Episode zur Sommerprüfung.
Falls du selber Prüfer, Prüferin bist und andere Erfahrungen gemacht hast,
melde dich gerne bei mir.
Falls du selber Prüfling warst,
melde dich gerne bei mir, wenn du andere Erfahrungen gemacht hast.
Würde mich freuen, insbesondere Fragen im Fachgespräch.
Wenn du was ganz anderes gefragt wurdest,
dass du es vielleicht als Kommentar unter die Episode packst.
Also ich freue mich auf deine Rückmeldung,
wenn du irgendwas beizutragen hast.
In diesem Sinne für heute sage ich erst mal vielen Dank für die Aufmerksamkeit
und bis zum nächsten Mal. Tschüss.









Die Azubis bei Ihnen können sich wirklich glücklich schätzen so eine super Ausbildung zu erhalten. Die Folge war wieder sehr informativ. Ich höre Ihren Podcast sehr gerne auch wenn ich danach meist deprimiert bin. Wie bei der Aussage bezüglich „Try/Catch“ damit arbeitet man ja täglich, muss ich immer kurz lachen und innerlich weinen . Bin seit August im dritten Ausbildungsjahr zum AE und habe damit nur privat in Tutorials zu tun gehabt. In der Firma hab ich mich mit so was noch nie befassen dürfen, wie auch bei min. 70% der von Ihnen angesprochenen Themen die ich noch nie gehört habe (im Betrieb und Schule). Ich kann leider nur hoffen das ich mit 120% Energie und Zeit eine zwei oder drei in den schriftlichen Prüfungen schreibe und dann eine für die Prüfer erträgliche Präsentation hinbekomme (wobei das schon bei bei dem Projektantrag spannend wird Zwecks Ablehnung) und im Fachgespräch wohlwollende mit einer 5 benotet werde.
Hallo Lucas, oh, das ist schade. Sprich doch mal mit deinen Ansprechpartner:innen in deinem Unternehmen. Die Betriebe haben nicht nur Rechte, sondern auch Pflichten in der Ausbildung! Ich drücke dir die Daumen für deine Prüfung.
was ich mich noch frage ist, wie genau die bewertung der doku, der präsentation und des fachgesprächs genau funktioniert. sind das alles einzelleistungen von denen jede einzelne bestanden werden muss (also mind. 50 %) oder müssen diese 3 dinge insgesamt mit 50%+ bewertet werden.
also wenn die Doku richtig gut ist und die Präsentation auch, das fachgespräch läuft aber richtig schlecht… kann man dann durchfallen?
Hab da verschiedene lehrer befragt, und immer wieder missverständliche/widersprüchliche antworten bekommen. und auch die infos auf der IHK seite sind da irgendwie schwammig ausgedrückt.
Präsentation und Fachgespräch werden gemeinsam bewertet und ergeben nur eine gemeinsame Note. Du kannst nicht in einem von beiden durchfallen, sondern nur in beiden zusammen. Wir hatten es schonmal, dass z.B. Präsi eine 3 war, aber Fachgespräch eine 5. Das ergab dann halt eine 4 für diesen Prüfungsteil, also bestanden. Hier kannst du selbst nachrechnen: Notenrechner für die IT-Abschlussprüfung (AO2020)
danke für die Antwort.
den Notenrechner hatte ich schon genutzt. allerdings würde ich da auch mit ner 5 in der mündlichen Prüfung bestehen (also z.b. 34 % Doku und 30% Präsentation)…was ich nicht so recht glauben kann.
ich hatte in AP1 93% und in den schriftlichen prüfungen der AP2 70%, 86% und 82%.
Oder kann man wirklich mit ner 5 bestehen, wenn die Vornoten entsprechend gut waren?
Hallo Stefan,
ich habe mir die Podcast-Folgen #175, #176 und #177 zum Rückblick auf die Sommerprüfung 2022 für Fachinformatiker:innen Anwendungsentwicklung angehört und fand sie sehr hilfreich.
Da die Abschlussprüfung Winter 2024/2025 nun auch vorbei ist, wollte ich fragen: Wird es eine Podcast-Folge geben, die einen Rückblick auf diese Prüfungsrunde gibt?
Besonders interessieren mich die Erfahrungen zur schriftlichen Prüfung, Projektdokumentation, Präsentation und dem Fachgespräch.
Vielen Dank im Voraus!
Hallo Emily, nein, die wird es nicht geben. Die Winterprüfung ist zu „klein“, um sinnvolle Aussagen zu treffen. Aber die nächste Sommerprüfung steht ja vor der Tür! 🙂