Anwendungsentwickler-Podcast

Stefan Macke

Der Podcast für Auszubildende, Ausbilder und IHK-Prüfer im Beruf Fachinformatiker für Anwendungsentwicklung. Stefan Macke gibt Tipps für die Ausbildung, die IHK-Prüfungen und alles was sonst noch mit dem Beruf des Anwendungsentwicklers zu tun hat. Aber auch für bereits ausgebildete Softwareentwickler/Programmierer und alle, die Interesse an der Softwareentwicklung haben, ist bestimmt etwas Interessantes dabei!

  • 1 hour 17 minutes
    Datenbanktransaktionen, ACID, CAP-Theorem und BASE – IT-Berufe-Podcast #187

    Um Datenbanktransaktionen, die ACID-Prinzipien und Alternativen dazu geht es in der einhundertsiebenundachzigsten Episode des IT-Berufe-Podcasts.

    Probeabo bei Audible (Affiliate)

    Inhalt

    Datenbanktransaktionen sollten jedem/jeder ITler:in etwas sagen, da wir fast täglich mit datenbankgestützten Anwendungen arbeiten, egal, ob wir selbst diese Anwendungen programmieren oder „nur“ Abfragen gegen eine Datenbank durchführen.

    Was ist eine Datenbanktransaktion?

    Eine Transaktion ist eine Menge aus mehreren zusammenhängenden Datenbankoperationen, die gemeinsam als eine Einheit durchgeführt werden müssen.

    Beispiele für Datenbanktransaktionen:

    • Banküberweisung von 100 EUR von Konto DE123 auf Konto DE432
      • UPDATE konto SET kontostand = kontostand - 100 WHERE iban = 'DE123';
      • UPDATE konto SET kontostand = kontostand + 100 WHERE iban = 'DE432';
    • Neuen Tag katze zu einem Blog-Post mit ID 123 hinzufügen
      • INSERT INTO tag (id, name) VALUES (1, 'katze');
      • INSERT INTO tag_post (post_id, tag_id) VALUES (123, 1);
    • Neue Bestellung für einen Kunden mit ID 324 erfassen für Artikel 253
      • INSERT INTO bestellung (id, datum, kunde_id) VALUES (123, '2024-04-10', 324);
      • INSERT INTO bestellposition (bestellung_id, artikel_id, menge, preis) VALUES (123, 253, 1, 123.92);
    • Neuen Tarifsatz einer Versicherung anlegen und bisherigen beenden
      • UPDATE tarif SET gueltig_bis='2024-04-10' WHERE id=122;
      • INSERT INTO tarif (id, gueltig_ab, beitrag) VALUES (123, '2024-04-10', 143.23);

    Begriffsabgrenzung

    Eine Datenbanktransaktion ist nicht zu verwechseln mit einer Transaktion im Geschäftsbetrieb, z.B. einer Überweisung bei einer Bank, dem Kauf eines Autos oder der Buchung eines Fluges.

    Die ACID-Prinzipien

    Datenbanktransaktion müssen/sollen bestimmten Kriterien genügen, die als ACID-Prinzipien bekannt sind.

    • Atomarität/Atomicity: Alle Datenbankoperationen werden entweder vollständig gemeinsam durchgeführt oder gar nicht. Es kann nicht sein, dass nur einige Operationen durchgeführt werden und andere nicht. Dazu werden die Datenbankoperationen in eine Transaktion „eingeklammert“.
      • Beispiel: Bei der Banküberweisung darf nicht nur Geld abgebucht oder gutgeschrieben werden, sondern beide Buchungen müssen gemeinsam durchgeführt werden.
    • Konsistenz/Consistency: Wenn die Datenbank vor der Transaktion in einem konsistenten Zustand war, dann muss sie es auch nach der Transaktion sein.
      • Beispiel: Bei der Banküberweisung bleibt der Gesamtbetrag an Geld gleich. Es entsteht kein Geld aus dem Nichts und es geht auch kein Geld verloren.
    • Isolation/Isolation: Mehrere Transaktionen dürfen sich nicht gegenseitig beeinflussen. Hierzu folgen weiter unten verschiedene Maßnahmen zur Umsetzung.
      • Beispiel: Bei zwei parallelen Banküberweisungen vom gleichen Konto müssen beide Beträge nacheinander abgebucht werden und nicht nur der der zuletzt durchgeführten Transaktion.
    • Dauerhaftigkeit/Durability: Die Daten müssen nach Abschluss der Transaktion persistent gespeichert sein und z.B. auch einen Systemausfall überstehen. Das wird durch sogenannte Transaktionslogs sichergestellt.
      • Beispiel: Wenn nach dem Abschluss einer Transaktion der Datenbankprozess abstürzt, müssen auch nach dem Neustart der Datenbank die aktualisierten Daten vorhanden sein.

    Maßnahmen zur Wahrung der Isolation von Transaktionen

    Wenn Transaktionen nicht isoliert voneinander ablaufen, können verschiedene Probleme in der Datenbank auftreten.

    • Dirty Read: Veränderte Daten einer noch offenen Transaktion werden von einer anderen Transaktion gelesen und weisen somit einen „dreckigen“ Zustand auf, weil er noch nicht final ist.
      • Beispiel: Bei einem Ticketkauf geht die zweite Buchung schon vom veränderten Bestand der ersten Transaktion aus.
    • Lost Updates: Wenn zwei Transaktionen gleichzeitig denselben Datensatz verändern, „gewinnt“ die Änderung der zuletzt durchgeführten Transaktion und die der ersten ist verloren.
      • Beispiel: Bei zwei Banküberweisungen wird der Kontostand auf den Ursprungsstand abzgl. der zweiten Überweisung gesetzt, aber ohne die erste Überweisung abzuziehen.
    • Non-Repeatable Read: Wiederholte Lesevorgänge innerhalb einer Transaktion liefern unterschiedliche Ergebnisse.
      • Beispiel: Bei einer Flugbuchung wird geprüft, ob noch ausreichend Plätze frei sind, aber durch eine parallele Buchung wird bei der zweiten Abfrage ein unterschiedliches Ergebnis geliefert.
    • Phantom Read: Während eine Transaktion Datensätze nach einem bestimmten Kriterium liest, werden weitere Datensätze zum gleichen Kriterium hinzugefügt/gelöscht/verändert.
      • Beispiel: Während der Durchschnittsberechnung von Gehältern von Mitarbeiter:innen wird ein neuer Mitarbeiter hinzugefügt, der beim Summieren des Gehalts noch nicht berücksichtigt wird, aber beim Zählen der Datensätze dann schon.

    Die Datenbank kann verschiedene Transaktionsisolationsebenen implementieren, um den obigen Problemen entgegenzuwirken. Grundsätzlich werden dabei Sperren verwendet, um die gleichzeitige Verarbeitung der Daten einzuschränken. Es kann dabei eine Lesesperre und/oder eine Schreibsperre gesetzt werden, wodurch das gleichzeitige Lesen bzw. Schreiben eingeschränkt wird.

    • Read Uncommitted: Es werden keine Sperren verwenden. Quasi kein Schutz vor obigen Problemen. Vergleichbar mit NO ACTION bei referenzieller Integrität.
    • Read Committed: Für die gesamte Transaktion werden Schreibsperren auf alle beteiligten Objekte gesetzt, die verändert werden sollen. Lesesperren werden aber nur kurzzeitig gesetzt. Es können Non-Repeatable Read und Phantom Read auftreten.
    • Repeatable Read: Es werden für die gesamte Transaktion Lese- und Schreibsperren auf alle beteiligten Objekte gesetzt. Nur Phantom Reads können noch auftreten (weil dabei zwei lesende Operationen mit unterschiedlichen Kriterien durchgeführt werden).
    • Serializable: Die Datenbank verhält sich so, als würden die Transaktionen komplett separiert nacheinander („seriell“) durchgeführt. Dabei kann keines der obigen Probleme mehr auftreten, aber Transaktionen müssen ggfs. abgebrochen werden. Starten z.B. zwei Flugbuchungen für zwei Sitzplätze parallel auf dem Sitzplatzbestand von 2, wird die erste Transaktion den Bestand auf 0 reduzieren und die zweite Transaktion (die „gewartet“ hat) muss abbrechen, weil die Sitzplätze nun nicht mehr ausreichen.

    Umsetzung in SQL

    Mit der Transaction Control Language (TCL) gibt es eine eigene Familie an SQL-Befehlen, die sich nur um die Transaktionssteuerung kümmert. Hiermit können Datenbankoperationen zu einer Transaktion zusammengefasst werden.

    • BEGIN TRANSACTION: Startet eine Datenbanktransaktion.
    • COMMIT: Beendet eine Datenbanktransaktion und schreibt die Änderungen fest.
    • ROLLBACK: Rollt eine Datenbanktransaktion zurück und verwirft alle Änderungen.

    In vielen Datenbanken muss man nicht explizit Transaktionen starten und beenden. Sie verwenden ein sogenanntes Auto-Commit. Dabei wird jedes Statement in einer eigenen Transaktion durchgeführt.

    Umsetzung in ORMs

    Brauche ich als Softwareentwickler:in überhaupt Wissen über Datenbanktransaktionen? In modernen Entwicklungsprojekten werden doch sowieso objektrelationale Mapper (ORM) verwendet. Doch auch diese ORMs können natürlich nicht zaubern, sondern verwenden unter der Haube die normalen Datenbankoperationen. Daher ist auch bei Verwendung eines ORMs wichtig zu wissen, welche Operationen in einer gemeinsamen Transaktion durchgeführt werden müssen.

    Dafür bieten viele ORMs entsprechende Befehle an. Jakarta EE hat sogar einen eigenen Standard dafür: Jakarta Transactions (JTA). Dort wird z.B. Annotation @Transactional verwendet. Diese wird an eine Java-Methode geschrieben, die dann automatisch innerhalb einer Datenbanktransaktion ausgeführt wird. Im Fall einer aufgetretenen Exception wird dabei dann automatisch ein Rollback durchgeführt.

    CAP und BASE

    Transaktionen nach den ACID-Prinzipien sind ein wichtiger Bestandteil vieler Datenbanksysteme. Sobald die Datenbank jedoch auf mehrere Knoten verteilt wird, können Transaktionen zu einem Problem werden. Das sogenannte CAP-Theorem besagt, dass es in einem verteilten System nicht möglich ist, alle drei Eigenschaften Konsistenz, Verfügbarkeit und Ausfalltoleranz gleichzeitig zu garantieren.

    • Konsistenz (Consistency): Die Konsistenz meint in diesem Kontext den einheitlichen Datenstand über alle Datenbankknoten hinweg (und nicht die Konsistenz vor/nach einer Transaktion). Egal, welcher Knoten abgefragt wird, es werden immer die gleichen Daten zurückgegeben.
    • Verfügbarkeit (Availability): Die Datenbank antwortet in akzeptabler Zeit auf alle Anfragen. Dabei kann es jedoch sein, dass nicht immer die aktuellsten Daten geliefert werden.
    • Partitionstoleranz (Partition tolerance): Die Datenbank arbeitet auch weiter, wenn einzelne Knoten ausfallen.

    Angenommen, die verteilte Datenbank soll zu jedem Zeitpunkt in einem konsistenten Zustand sein (also alle Informationen auf allen Knoten sollen identisch sein), dann führt ein Ausfall eines Knoten automatisch dazu, dass eine Transaktion fehlschlagen muss, da der ausgefallene Knoten nicht sofort aktualisiert werden kann. Die Konsistenz wäre dann zwar gewährleistet, aber die Partitionstoleranz nicht.

    Da heutzutage viele Anwendungen tatsächlich mit verteilten Datenbanken arbeiten, wurde mit BASE ein Gegenentwurf zu ACID geschaffen. Das Wort ist etwas konstruiert, um das Gegenstück zu ACID zu bilden. Aus der Chemie kennen wir den Unterschied zwischen Säure („acid“) und Lauge („base“). Im Kern stellt ACID die Konsistenz eines Systems sicher, während BASE die Verfügbarkeit in den Vordergrund stellt.

    • Basically Available: Die Datenbank ist grundsätzlich für alle Benutzer jederzeit erreichbar (hohe Verfügbarkeit).
    • Soft state: Daten können sich im Laufe der Zeit verändern und temporäre („weiche“) Zustände annehmen, wenn mehrere Änderungen parallel durchgeführt werden.
    • Eventual consistency: Irgendwann einmal werden die Daten in der Datenbank einen konsistenten Zustand erreichen. Bis dahin können Anfragen unterschiedliche Ergebnisse produzieren.
      • Vorsicht „false friend“: „eventually“ heißt auf Deutsch „schlussendlich“ und nicht „eventuell“. Es wird also immer Konsistenz erreicht, nur eben nicht unmittelbar sofort.

    Literaturempfehlungen

    Sascha Kersken - IT-Handbuch für Fachinformatiker: Für Fachinformatiker der Bereiche Anwendungsentwicklung und Systemintegration. Inkl. Prüfungsfragen und Praxisübungen (Affiliate)*

    In Kapitel 13 gibt es eine gute und kurze Einführung in das Thema Datenbanken inkl. Transaktionen. Ich habe das Kapitel auch schon im Buchclub besprochen: Buchclub: Handbuch für Fachinformatiker (Teil 11: Datenbanken)

    Links

    Der Beitrag Datenbanktransaktionen, ACID, CAP-Theorem und BASE – IT-Berufe-Podcast #187 erschien zuerst auf IT-Berufe-Podcast.

    15 April 2024, 3:00 am
  • 37 minutes
    Angemessene fachliche/technische Tiefe des Abschlussprojekts für Anwendungsentwickler:innen – IT-Berufe-Podcast #186

    Um die angemessene fachliche bzw. technische Tiefe des Themas für das IHK-Abschlussprojekt für Anwendungsentwickler:innen geht es in der einhundertsechsundachzigsten Episode des IT-Berufe-Podcasts.

    Probeabo bei Audible (Affiliate)

    Inhalt

    Viele Projektanträge zum Abschlussprojekt werden abgelehnt, weil das umzusetzende Projekt nicht die nötige fachliche bzw. technische Tiefe aufweist. In unserem Prüfungssystem gibt es dafür sogar einen expliziten Ablehnungsgrund. Doch was heißt es genau, dass die fachliche Tiefe nicht erreicht wurde? Welche fachliche Tiefe ist überhaupt angemessen und wie erkenne ich als Prüfling, ob ich sie erreiche?

    Mein Standardbeispiel: Projektverwaltung

    Ich führe als Beispiel für eine übliche Projektarbeit für Anwendungsentwickler:innen immer eine klassische Web-Anwendung an. Nehmen wir das oft strapazierte Beispiel einer Zeiterfassungssoftware oder einer Projektverwaltung. Dabei handelt es sich um eine kleine Web-Anwendung mit ein paar Datenbanktabellen, etwas fachlicher Logik und ein paar netten Oberflächen.

    In solch einer Anwendung kann ich als Anwendungsentwickler:in alles zeigen, was ich in meiner dreijährigen Ausbildung gelernt haben sollte. Soll ich ein Projekt enpfehlen, führe ich deswegen gerne dieses Beispiel für ein fachlich ausreichendes Projekt für die Abschlussprüfung an.

    • Ich kann eine Datenbank modellieren, z.B. mit einem ERM oder Tabellenmodell.
    • Ich kann ein Klassendesign entwerfen, z.B. mit einem Klassendiagramm oder gar mit Test Driven Development.
    • Ich kann die Oberflächen gestalten, natürlich nach ergonomischen Gesichtspunkten und mit Mockups für den ersten Entwurf.
    • Außerdem muss ich mich um das Zusammenspiel der Komponenten kümmern und brauche dafür eine tragfähige Architektur, z.B. MVC.

    Kurz gesagt ist in solch einem Projekt alles Technische enthalten, was man heutzutage in der Programmierung können muss. Und ich kann mich vieler Methoden der Softwareentwicklung bedienen, die mein planvolles Vorgehen dokumentieren.

    Hast du auch ein paar konkrete Zahlen?

    Als ganz grobe Daumenregel für Anwendungsentwickler:innen führe ich immer ein „klassisches“ Webprojekt an: kleine Datenbank, ein bisschen Logik, Frontend drüber. Da kann man das volle Spektrum der Entwicklungstätigkeiten zeigen.

    • ca. fünf Datenbanktabellen („eine Hand voll“)
    • ca. fünf Oberflächen dazu
    • ca. zehn Klassen (tendenziell eher mehr)

    Sollte die Anwendung eine komplizierte Logik umsetzen, kann natürlich bei den anderen Komponenten entsprechend gekürzt werden. Diese grobe Richtlinie ist sicherlich nicht allgemeinverbindlich. Es kommt immer auf den Einzelfall an. Ich möchte nur deutlich machen, dass eine triviale Konsolenapplikation, die eine Textdatei einliest und wieder speichert, nicht ausreicht. Es sei denn, die Applikation verwendet dafür einen selbst programmierten Verschlüsselungsalgorithmus. 😉

    Die Diagramme aus dem Titelbild dieser Episode sollten offensichtlich zeigen, dass dieser Umfang für ein Abschlussprojekt nicht ausreicht! 😂 Aber ich habe schon Artefakte in echten Dokus gesehen, die nicht viel umfangreicher waren (z.B. nur zwei Use-Cases oder drei Aktivitäten).

    Brauche ich alle Komponenten – Datenbank, Logik, UI?

    Das heißt nicht, dass jedes Abschlussprojekt alle genannten Komponenten umfassen muss. Nicht alle Unternehmen haben die Anforderung, Weboberflächen über Datenbanken zu gestalten. In vielen Betrieben wird eine bestehende Software erweitert, eine Oberfläche angepasst, oder eine Datenbank um zusätzliche Tabellen erweitert. Oft werden auch Programme benötigt, die gar keine grafische Oberfläche haben. Wenn es z.B. um den Datenabgleich zwischen ERP-System und Webshop geht, der nachts als Batchjob laufen soll, ist es völlig unnötig, eine schön gestaltete grafische Oberfläche dazu zu entwickeln. Auch werden inzwischen oft REST-APIs als Abschlussprojekt erstellt, die natürlich auch nicht von Menschen bedient werden. Daher ist es völlig legitim, auf die ein oder andere Komponente im Abschlussprojekt zu verzichten.

    Auch heißt es umgekehrt nicht automatisch, dass man ein fachlich ausreichendes Projekt hat, nur weil alle Schichten Berücksichtigung finden. Eine Weboberfläche mit einem Formular, die simple CRUD-Operationen gegen eine Datenbanktabelle durchführt, ist selbstverständlich nicht umfangreich genug.

    Mein Anti-Beispiel: SAP-Projekte

    Dieses Problem haben meiner Erfahrung nach oftmals die Anwendungsentwickler:innen im SAP-Umfeld. Hier wird häufig nur sehr wenig tatsächlicher Code produziert, sondern viel mehr Zeit für die hochkomplexe Infrastruktur verbraten. Da gehen allein schon 7 Stunden drauf, bis man den richtigen Einstiegspunkt in die „Transaktion“ (oder wie auch immer das dort heißt) gefunden hat. 😉 Und die meisten Inhalte lassen sich dann mit SAP-Mitteln generieren, sodass der Entwickler eigentlich fast gar nichts mehr tun muss.

    In eine ähnliche Richtung gehen heutzutage immer mehr die Low-Code- oder No-Code-Plattformen. Da wird kaum selbst programmiert, sondern einfach was zusammengeklickt. Und da muss ich mich dann schon fragen lassen, wie ich „Anwendungsentwickler:in“ werden will, wenn ich gar keine Anwendung entwickle.

    Aber es gibt auch Negativbeispiele aus anderen Bereichen. Mein persönliches Highlight aus einer Abschlussprüfung war eine einzelne HTML-Seite, die mit 20 Zeilen JavaScript angereichert wurde. Das Problem war, dass der Prüfling selbst überhaupt nicht verstand, warum dieses Projekt nicht ausreichend war. Sein:e Ausbilder:in hatte ihn offensichtlich überhaupt nicht darauf vorbereitet. Und er war sehr enthusiastisch und freute sich richtig über sein Projekt. Das tat mir dann wirklich leid, da die Schuld für dieses unzureichende Projekt sicherlich nicht beim sehr motivierten Prüfling zu suchen war.

    Methodik ist das A und O

    Kurz gesagt sollte ein Abschlussprojekt zeigen, dass du methodisch Software entwickeln kannst, die eine gewisse Komplexität aufweist. Dazu habe ich in dieser Podcast-Episode noch viel mehr zu erzählen: Sinnvoller Aufbau/Ablauf eines IHK-Projekts in der Anwendungsentwicklung.

    Es geht darum, dass du deine Fähigkeiten angemessen unter Beweis stellst. Du sollst methodisch Software entwickeln und die Projektarbeit wirtschaftlich umsetzen. Dazu gehört u.a. eine Betrachtung der Kosten und der Amortisation, der Einsatz von Modellierungs- oder Dokumentationsmethoden (z.B. ERM, UML, EPK, Mockups), das Erstellen sinnvoller Dokumentationen (z.B. für Kunden, Betrieb, Entwickler), das planvolle Vorgehen bei der Projektumsetzung (z.B. Projektplan, Iterationsplanung, Gantt-Chart), eine gute Qualitätssicherung (z.B. Unit-Tests, Abnahmeprotokoll) usw.

    Individuelle Einschätzung

    Wenn du dir nicht sicher bist, ob dein geplantes Programm als Abschlussprojekt ausreicht, dann frag deine:n Ausbilder:in oder deine:n Berufsschullehrer:in. Die sollten die nötige Erfahrung mitbringen und die Anforderungen der IHKen einschätzen können. Alternativ stell dein Projekt doch im Forum vor oder schreib mir eine Mail. Ich helfe dir gerne mit einer kurzen Einschätzung weiter – aber erst nachdem du diese Podcast-Episode gehört hast. 😊

    Links

    Der Beitrag Angemessene fachliche/technische Tiefe des Abschlussprojekts für Anwendungsentwickler:innen – IT-Berufe-Podcast #186 erschien zuerst auf IT-Berufe-Podcast.

    18 March 2024, 3:00 am
  • 1 hour 45 minutes
    Sinnvoller Aufbau/Ablauf eines IHK-Projekts in der Anwendungsentwicklung – IT-Berufe-Podcast #185

    Um den sinnvollen Aufbau eines IHK-Abschlussprojekts für Fachinformatiker:innen Anwendungsentwicklung geht es in der einhundertfünfundachzigsten Episode des IT-Berufe-Podcasts.

    Probeabo bei Audible (Affiliate)

    Sinnvoller Aufbau/Ablauf eines IHK-Projekts in der Anwendungsentwicklung

    Oft lese ich Projektdokumentationen für den Beruf Fachinformatiker:in Anwendungsentwicklung, die in sich einfach nicht stimmig sind. Der Projektablauf folgt keinem roten Faden und Artefakte werden wild durcheinandergewürfelt. Oft werden auch einfach nur Kapitel aus Dokumentationsvorlagen „ausgefüllt“, scheinbar ohne über ihre Sinnhaftigkeit nachzudenken.

    In dieser Podcast-Episode gebe ich einen Überblick über einen – aus meiner Sicht – sinnvollen Ablauf eines IHK-Projekts im Bereich Anwendungsentwicklung inkl. möglicher Artefakte und ihrem Zweck. Dabei gehe ich nicht auf die Beschreibung des Projekts, die Wirtschaftlichkeitsbetrachtung, das Projektmanagement, die Ressourcenplanung usw. ein, sondern nur auf die Planung und Durchführung der eigentlichen Aufgabe: der Entwicklung einer Softwarelösung. Selbstverständlich gehören aber alle genannten Punkte auch in eine IHK-Projektdokumentation.

    Wahl des Vorgehensmodells

    Fast immer ist das Wasserfallmodell das einzig sinnvolle Vorgehensmodell, da das IHK-Projekt vom Prüfling alleine in einer fest vorgegebenen Zeit mit vorgegebenem (weil im Antrag genehmigten) Umfang umgesetzt werden muss.

    Praxisbeispiele für unpassende Prozesse:

    • Scrum gewählt, aber
      • klassische Wasserfallphasen durchgeführt/beschrieben
      • Lasten-/Pflichtenheft erstellt statt User Stories
      • Projekt alleine umgesetzt ohne Team/Scrum Master/Product Owner
      • gesamtes Projekt ist ein einziger Sprint
    • XP gewählt, aber
      • keine Praktiken (z.B. Pair Programming, Test Driven Development) angewendet
    • Kanban gewählt, aber
      • Lanes nur ToDo/Doing/Done

    Artefakte methodisch sinnvoll einsetzen

    • Software soll nicht einfach „runterprogrammiert“ werden, sondern methodisch entwickelt werden. Dabei helfen verschiedene Artefakte wie Entity-Relationship-Modelle, UML-Diagramme usw.
    • Diagramme können oft auf zwei Arten eingesetzt werden: zur Modellierung (vor der Implementierung) und zur Dokumentation (nach der Implementierung). Sie haben keinen Selbstzweck, sondern sollen immer den jeweiligen Prozessschritt unterstützen.
    • Ihr Einsatz muss zum gewählten Prozess passen. Ein Klassendiagramm zur Modellierung passt z.B. nicht so gut zu Test-Driven-Development, bei dem die Klassen sich erst bei der Implementierung ergeben.
    • Die Artefakte müssen auch zeitlich sinnvoll im Projekt untergebracht werden. Die Anforderungen erst nach der Implementierung zu dokumentieren ist sinnfrei.
    • Artefakte sollen im Prozess auch einen erkennbaren Mehrwert für die späteren Prozessschritte bieten. Mockups sind z.B. sehr hilfreich, um auf ihrer Basis ein Datenmodell zu erzeugen. Und auf Basis des Datenmodells können dann wiederum Klassen modelliert werden usw.
    • Durch den passenden Einsatz der Artefakte in den jeweiligen Prozessschritten füllt sich die Projektdokumentation automatisch mit spannenden Inhalten für die Prüfer:innen! 😀

    Anforderungen aufnehmen

    • Ist-Analyse durchführen
      • Bisherige Lösung untersuchen, Schwachstellen aufdecken.
      • mögliche Ergebnisse: Aktivitätsdiagramm/EPK/BPMN, Screenshots/Fotos der bisherigen Lösung
    • Anforderungen an neue Lösung strukturiert erfassen
      • Interviews mit Stakeholdern führen
      • Priorisierung der Anforderungen
      • Ergebnis: z.B. User Stories, MoSCoW
    • Anwendungsfälle modellieren
      • Was wollen die Stakeholder mit der Anwendung fachlich machen/erreichen?
      • Ergebnis: Use-Case-Diagramm
    • Anforderungen strukturiert dokumentieren
      • Ergebnis: Lastenheft

    Lösung entwerfen

    • Neuen Ablauf bzw. neue Lösung skizzieren
      • Was macht die (neue) Lösung besser? Welche Personen/Systeme sind wann/wie beteiligt?
      • mögliche Ergebnisse: Aktivitätsdiagramm/EPK/BPMN
    • Plattform bzw. Art der Anwendung festlegen: GUI, Web, App etc.
      • Welche Anwendungsform löst das gestellte Problem am besten? Warum? Wie werden die Use-Cases umgesetzt?
    • UI gestalten
      • Daraus ergeben sich u.a. die benötigten Daten der Anwendung.
      • Direkte Interaktion mit dem Kunden zur Abstimmung der Inhalte und Abläufe.
      • Mögliche Ergebnisse: Mockups, Wireframes, Screendesigns, Workflows, Corporate Design, Aktivitätsdiagramm
    • Datenmodell entwerfen
      • Welche Entitätstypen mit welchen Attributen gibt es und wie hängen sie zusammen?
      • Welche Anwendungsfälle benötigten welche Daten?
      • Abstrakt und unabhängig von der konkreten späteren Speicherlösung modellieren.
      • Ergebnis: Entity-Relationship-Modell
    • Architektur der Anwendung modellieren
      • Welche Architektur eignet sich am besten für die Umsetzung der Anforderungen?
      • Beispiele: Domain Driven Design, MVC, Client/Server, Monolith, REST etc.
      • Mögliche Ergebnisse: Komponentendiagramm, Klassendiagramm, Aktivitätsdiagramm, Sequenzdiagramm, Glossar
    • Datenhaltung definieren
      • Welche Daten müssen wie/wo gespeichert und übertragen werden?
      • Beispiele: Datenbank, Dateien, Cloud, REST-API, JSON/XML etc.
      • mögliche Ergebnisse: Nutzwertanalyse
    • Programmiersprache und Frameworks auswählen
      • Wenn eine Wahl möglich ist: Welche Sprachen/Frameworks eignen sich am besten für die Umsetzung? Warum?
      • Hat die getroffene Wahl eine Auswirkung auf die Architektur? Muss sich die Anwendung dem Framework anpassen?
      • Nach welchem Paradigma wird entwickelt? Wie wird getestet?
      • mögliche Ergebnisse: Liste der eingesetzten Technologien, Nutzwertanalyse
    • Geschäftslogik und Domäne grob planen
      • Wie sollen die Anforderungen grob umgesetzt werden? Gibt es besonders „schwierige“ Probleme?
      • Welche Entitätstypen sind von zentraler Bedeutung? Wie hängen sie mit anderen zusammen?
      • Gibt es einen Workflow durch das System? Wie werden die Daten ausgetauscht?
      • Mögliche Ergebnisse: Aktivitätsdiagramm/EPK/BPMN, Sequenzdiagramm, Programmablaufplan, Struktogramm, Pseudocode, Klassendiagramm
    • Build und Deployment modellieren
      • Welche Komponente (UI, Logik, DB etc.) läuft wo?
      • Wie/wo wird entwickelt?
      • Welches Build-Tool soll eingesetzt werden? Wo läuft der Build? Welche Build-Schritte sind nötig?
      • Welche Stages gibt es? Werden Container verwendet?
      • Mögliche Ergebnisse: Deploymentdiagramm, Aktivitätsdiagramm, Sequenzdiagramm, Build-Pipeline, Dockerfile, Buildfile
    • Qualitätssicherung planen
      • Wie wird die Qualität bei der Softwareentwicklung sichergestellt? Welche Qualitätskriterien sind besonders wichtig?
      • Wie wird die fachliche Qualität sichergestellt? Wer testet wann die Anwendung? Was kann automatisiert werden?
      • Mögliche Ergebnisse: Testkonzept, Testplan, Branching-Strategie, Build-Pipeline, Schulungskonzept, zu erstellende Dokumentationen, statische Codeanalyse, Entwicklungsprozess (z.B. Pull Requests)
    • Technische Lösung strukturiert dokumentieren
      • Ergebnis: Pflichtenheft

    Lösung implementieren

    • Vorgehen bei der Implementierung muss zum gewählten Prozess/Vorgehen passen
      • Code First vs. Database First, TDD
      • mögliche Ergebnisse: interessante Code-Beispiele: Frontend/Backend/SQL/HTML etc., Klassendiagramm, Sequenzdiagramm, Screenshots der Anwendung, Tabellenmodell, Screenshots der Projektstruktur
    • Deployment auf Zielumgebung durchführen
      • mögliche Ergebnisse: Dockerfile, Screenshots Build-/Deployment-Pipeline, Ticketverlauf, Screenshots der finalen Umgebung

    Qualitätssicherung

    • Eigene Maßnahmen umsetzen (am besten schon während der Implementierung)
      • mögliche Ergebnisse: interessanter Code aus Unit-Tests/Integrationstests/Systemtests/Oberflächentests, Screenshots der Code Coverage oder statischen Codeanalyse
    • Externe Unterstützung
      • mögliche Ergebnisse: Code-Reviews (was ist herausgekommen?), Pull-Requests, Code-Walkthroughs, Testprotokoll, Abnahmeprotokoll, Testsuite in Testtool

    Dokumentation

    • Langfristigen Betrieb der Lösung zielgruppengerecht dokumentieren
      • mögliche Ergebnisse: Kunden-/Benutzerdokumentation, Entwicklungsdokumentation, Administrationsdokumentation, Installationsanleitung, README, Verteilungsdiagramm, Wiki-Artikel, Build-Pipeline, Klassendiagramm, Tabellenmodell

    Beispielablauf

    Fiktives Beispiel: Es soll eine bestehende Excel-Lösung abgelöst werden durch eine Webanwendung.

    • Ist-Analyse/Anforderungen: Gespräch mit bisherigen Anwender:innen, Ablauf als EPK dokumentieren, daran Schwachstellen (z.B. Medienbrüche) aufzeigen, Anforderungen währenddessen unstrukturiert als Notizen sammeln
      • Artefakte: EPK (alt), Screenshots der bisherigen Excel-Datei
    • Anforderungen strukturieren: Notizen aufbereiten und um weitere Stakeholder (z.B. Entwickler:innen) ergänzen, einheitliche Formulierung als User Storys, Anwendungsfälle modellieren
      • Artefakte: Use-Case-Diagramm, Lastenheft (Liste der User Storys)
    • Neue Lösung skizzieren: Prozess für Lösung des Problems als EPK modellieren (zum besseren Vergleich zur bisherigen Lösung)
      • Artefakt: EPK (neu)
    • Plattform festlegen: Webanwendung, da am einfachsten zu deployen
    • UI gestalten und mit Stakeholdern abstimmen, gerne low-level auf Papier oder dem iPad
      • Artefakt: Mockups
    • Datenmodell aus den Mockups (und weiteren Anforderungen) ableiten
      • Artefakt: Entity-Relationship-Modell
    • Architektur der Anwendung mit Domain Driven Design planen, Domäne ohne Abhängigkeiten und losgelöst von Infrastruktur
      • Artefakte: Komponentendiagramm, Glossar der zentralen Domänenbegriffe
    • Datenhaltung definieren: MariaDB, weil schon etabliert im Unternehmen
    • Programmiersprache und Frameworks auswählen: Java mit Quarkus, weil schon im Unternehmen etabliert und gut für Container geeignet
      • Artefakte: Liste der eingesetzten Technologien mit konkreten Versionsnummern
    • Geschäftslogik und Domäne aus Datenmodell ableiten
      • Artefakte: grobes Klassendiagramm ohne Methoden zur Orientierung, Sequenzdiagramm für zentralen Algorithmus
    • Build und Deployment modellieren: Build mit Gradle/Jenkins und Betrieb in Docker/Kubernetes
      • Artefakte: Deploymentdiagramm, Build-Pipeline (Code), Dockerfile (Code), Buildfile (Code)
    • Qualitätssicherung planen: Implementierung mit TDD, technische Abnahme über Pull-Requests, statische Codeanalyse mit Sonarqube
    • Obige Ergebnisse im im Pflichtenheft zusammenfassen
      • Artefakt: Pflichtenheft
    • Implementierung Code-First durchführen mittels TDD orientiert am Datenmodell/Klassendiagramm/Komponentendiagramm mit Feature-Branches in Git
      • Artefakte: Code-Beispiele (Produktiv- und Testcode), Screenshots der Anwendung, Screenshot grünes Quality-Gate in Sonarqube, Screenshot Pull-Request, Kommentare aus dem Code-Review
    • Deployment auf Zielumgebung durchführen mittels Pipeline in Jenkins
      • Artefakte: Screenshots der grünen Deployment-Pipeline
    • Dokumentation für Anwender:innen und Entwickler:innen erstellen
      • Artefakte: Benutzerdokumentation, API-Dokumentation mit JavaDoc, README im Git-Repository, komplettes Klassendiagramm (generiert), Tabellenmodell (generiert)

    Links

    Weitere Infos zur Projektdokumentation

    Du suchst noch mehr Tipps rund um die Projektdokumentation? Dann schau doch mal in diese Artikel- und Podcast-Kategorie: Alle Artikel rund um die Projektdokumentation.

    Kennst du schon meine Microsoft Word-/LibreOffice-Vorlage für die Projektdokumentation? Unter dieperfekteprojektdokumentation.de kannst du sie herunterladen.

    Und wenn du dich für meinen Newsletter einträgst, kannst du dir jetzt sofort meine Checkliste für die Projektdokumentation herunterladen.

    Checkliste für die Projektdokumentation

    Jetzt anmelden!

    Der Beitrag Sinnvoller Aufbau/Ablauf eines IHK-Projekts in der Anwendungsentwicklung – IT-Berufe-Podcast #185 erschien zuerst auf IT-Berufe-Podcast.

    11 March 2024, 3:00 am
  • 1 hour 18 minutes
    Verträge, AGBs, SLAs – IT-Berufe-Podcast #184

    Um alles rund um Verträge als Vorbereitung auf die AP1 geht es in der einhundertvierundachzigsten Episode des IT-Berufe-Podcasts.

    Probeabo bei Audible (Affiliate)

    Inhalt

    Für die AP1 ist es sinnvoll, einige grundsätzliche Vertragsarten zu kennen und unterscheiden zu können. Sowohl auf Anbieter- als auch auf Nachfragerseite ist es wichtig zu verstehen, welche Art von Vertrag vorliegt, da daraus unterschiedliche Rechte und Pflichten entstehen können.

    Disclaimer: Das hier ist keine Rechtsberatung! 🙂

    Vertrag

    Ein Vertrag ist die von zwei (oder mehr) Vertragsparteien erklärte Einigung über die Begründung eines Schuldverhältnisses (siehe § 311 BGB). Hierfür sind zwei übereinstimmende Willenserklärungen erforderlich. Beispiel: Angebot und Annahme, Bestellung und Lieferung.

    Verträge können schriftlich, mündlich oder durch „konkludentes Handeln“ entstehen.

    Vertragsarten

    • Kaufvertrag: Verkäufer:in verkauft etwas an Käufer:in.
      • Beispiele in der IT: Hardware-/Softwarekauf
    • Lizenzvertrag: Lizenzgeber:in räumt Lizenznehmer:in Rechte an einem geschützten Werk (z.B. Patent, Marke, Urheberrecht) ein.
      • Beispiele in der IT: Lizenzierung von Software, Bildrechte einkaufen
    • Servicevertrag: Regelt die Erbringung produktbezogener Leistungen zwischen Anbieter:in und Kund:in.
      • Beispiele in der IT: Wartungsverträge für Software (z.B. für Patches und Updates) oder Hardware durch Dienstleister
    • Mietvertrag: Vermieter:in überlässt Mieter:in eine bewegliche oder unbewegliche Sache zur zeitweisen Nutzung.
      • Beispiele in der IT: Miete eines Autos für eine Dienstreise, Miete von Software
    • Leasingvertrag: Leasinggeber:in (Vermieter:in) überlässt Leasingnehmer:in (Mieter:in) eine Sache zur Nutzung wie bei der Miete, aber mit Fokus auf eine langfristige Nutzung mit der Möglichkeit des Erwerbs am Ende der Vertragslaufzeit. Außerdem sind bestimmte Sachverhalte anders geregelt, z.B. die Inspektion beim geleasten Auto oder die Wahl des konkreten Modells und der Ausstattung durch den/die Leasingnehmer:in.
      • Beispiele in der IT: Leasing teurer Hardware statt einmaligen Kaufs
    • Werkvertrag: Unternehmer:in (Auftragnehmer:in) verpflichtet sich zur Herstellung eines bestimmten Werks für den/die Auftraggeber:in (Besteller:in). Hier muss das Endergebnis klar definiert sein („Werk“).
      • Beispiele in der IT: Programmierung einer kompletten Individualsoftware für eine Kundin
    • Dienstvertrag: Schuldner:in verpflichtet sich zur Leistung eines Dienstes an den/die Gläubiger:in. Hierbei steht die Dienstleistung an sich im Vordergrund und nicht das Endergebnis.
      • Beispiele in der IT: Programmierung für einen Kunden auf Basis von Tagessätzen
    • Fernabsatzvertrag: Bei Verträgen, die über Fernkommunikationsmittel (Internet, Telefon usw.) geschlossen werden, haben Verbraucher:innen besondere Rechte, insb. ein Widerrufsrecht.
    • Arbeitsvertrag: Definiert die Rechte und Pflichten von Arbeitgeber:in und Arbeitnehmer:in.

    Vertragsbestandteile

    z.B. Leistungsbeschreibung, Termine/Fristen, fällige Entgelte, Lasten- und Pflichtenheft (insb. bei Softwareerstellung), Konventionalstrafen, Haftung

    Allgemeine Geschäftsbedingungen (AGB)

    Mit AGBs regeln Unternehmen ihre grundsätzliche Vertragsgestaltung, also Inhalte, die für alle Verträge gelten.

    Beispielinhalte:

    • Informationen zum Vertragsschluss (z.B. Telefon, E-Mail), Bestätigungen usw.
    • Zahlungsbedingungen (z.B. Fristen, Zahlungsmöglichkeiten)
    • Eigentumsvorbehalt
    • Lieferungskonditionen und -möglichkeiten
    • übliche Geschäftszeiten
    • Gewährleistung/Garantie
    • Haftung

    Service-Level-Agreement (SLA)

    Ein SLA legt fest, wie Auftraggeber:in und Dienstleister:in bei wiederkehrenden Dienstleistungen zusammenarbeiten und welche individuellen Verantwortlichkeiten sie tragen.

    Beispielinhalte:

    • Leistungsbeschreibung: z.B. Hosting einer Website
    • Verfügbarkeit des Services: z.B. Verfügbarkeit 99%, vereinbarte Wartungsfenster
    • Erreichbarkeit des Dienstleisters: z.B. Geschäftszeiten, Reaktionszeit bei unterschiedlich schweren Problemen
    • Preisgestaltung: z.B. Abrechnung pro Aufruf oder Kontingente
    • Rechtsfolgen bei Nichteinhaltung: z.B. Vertragsstrafen
    • Vertragslaufzeit: z.B. monatlich, jährlich

    Sonstiges

    • Gewährleistung vs. Garantie: Gewährleistungsrechte bestehen aufgrund gesetzlicher Vorschriften gegenüber dem/der Verkäufer:in. Eine Garantie ist eine freiwillige Leistung eines/einer Hersteller:in und richtet sich nach dessen/deren Bedingungen.
    • Archivierung: Jede:r Gewerbetreibende ist verpflichtet, geschäftliche Unterlagen (also auch Verträge) über einen bestimmten Zeitraum aufzubewahren. Die übliche Aufbewahrungsfrist beträgt 10 Jahre.
    • Urheberrecht: Verleiht dem/der Inhaber:in das exklusive Nutzungsrecht am Werk, auch 70 Jahre über den Tod hinaus (Schutz geistigen Eigentums). Gilt automatisch für Bilder, Videos, Musik, Texte usw. mit einer gewissen Schöpfungshöhe. Das Urheberrecht ist nicht vertraglich abtretbar, aber Lizenzen können erteilt werden.
    • Creative Commons: Gemeinnützige Organisation, die verschiedene Standard-Lizenzverträge veröffentlicht hat, mit denen Autor:innen der Öffentlichkeit auf einfache Weise Nutzungsrechte an ihren Werken einräumen können. Achtung: Lizenzen geben einzuhaltende Pflichten vor, z.B. die Namensnennung.
    • Patent: Hoheitlich erteiltes gewerbliches Schutzrecht für eine (technisch geprägte) Erfindung. Dies verhindert eine schnelle Nachahmung durch Konkurrenten und motiviert die Forschung und Entwicklung neuer Erfindungen.
    • Marke: Rechtlich geschütztes Zeichen, das dazu dient, Waren, Produkte oder Dienstleistungen eines Unternehmens von der Konkurrenz zu unterscheiden.

    Literaturempfehlungen

    IT-Berufe: Grundstufe Lernfelder 1-5: Schülerband (Affiliate)*

    Und dazu passend das Arbeitsbuch:

    IT-Berufe: Lernsituationen Grundstufe Lernfelder 1-5: Arbeitsbuch (Affiliate)*

    Links

    Der Beitrag Verträge, AGBs, SLAs – IT-Berufe-Podcast #184 erschien zuerst auf IT-Berufe-Podcast.

    8 January 2024, 3:00 am
  • 57 minutes 44 seconds
    Softwarequalität nach ISO 9126 – IT-Berufe-Podcast #183

    Um Softwarequalität nach ISO 9126 geht es in der einhundertdreiundachzigsten Episode des IT-Berufe-Podcasts.

    Probeabo bei Audible (Affiliate)

    Inhalt

    Definition von Qualität

    Qualität ist der Grad der Übereinstimmung mit den Anforderungen.

    Da verschiedene Stakeholder unterschiedliche Anforderungen an unser Projekt haben, ist die Qualität recht subjektiv. Alle Stakeholder zu 100% zufrieden zu stellen, wird in einem echten Projekt wohl nicht möglich sein.

    Maßnahmen zur Qualitätssicherung

    Die Softwarequalität kann mit verschiedenen konkreten Maßnahmen während der Entwicklung sichergestellt werden. Diese nicht vollständige Liste enthält einige Maßnahmen, die Prüflinge auch in ihrem eigenen Abschlussprojekt anwenden können.

    • Audits
    • Code Reviews
    • Testmethoden
    • Entwicklungsprozess
    • Dokumentation
    • Statische Codeanalyse
    • Pair Programming
    • Bugtracking
    • Continuous Integration/Delivery/Deployment

    Softwarequalität nach ISO 9126

    • Funktionalität
      • Angemessenheit
      • Interoperabilität
      • Ordnungsmäßigkeit
      • Richtigkeit
      • Sicherheit
    • Änderbarkeit
      • Analysierbarkeit
      • Modifizierbarkeit
      • Testbarkeit
      • Stabilität
    • Übertragbarkeit
      • Anpassbarkeit
      • Austauschbarkeit
      • Installierbarkeit
      • Koexistenz
    • Effizienz
      • Verbrauchsverhalten
      • Zeitverhalten
    • Zuverlässigkeit
      • Fehlertoleranz
      • Reife
      • Wiederherstellbarkeit
    • Benutzbarkeit
      • Attraktivität
      • Bedienbarkeit
      • Erlernbarkeit
      • Verständlichkeit

    Literaturempfehlungen

    Hier gibt es diese Podcast-Episode noch einmal als Video bei YouTube:

    Softwarequalität nach ISO 9126 bei YouTube

    Links

    Der Beitrag Softwarequalität nach ISO 9126 – IT-Berufe-Podcast #183 erschien zuerst auf IT-Berufe-Podcast.

    14 August 2023, 3:00 am
  • 1 hour 42 minutes
    Eigenschaften und Unterscheidung von Programmiersprachen – IT-Berufe-Podcast #182

    Um Eigenschaften und Unterscheidungsmerkmale von Programmiersprachen geht es in der einhundertzweiundachzigsten Episode des IT-Berufe-Podcasts.

    Probeabo bei Audible (Affiliate)

    Inhalt

    Was ist eine Programmiersprache?

    • Programmiersprache: „Eine Programmiersprache ist eine formale Sprache zur Formulierung von Datenstrukturen und Algorithmen, d.h. von Rechenvorschriften, die von einem Computer ausgeführt werden können.“ [Herv. d. Verf.]
    • Bausteine von Algorithmen: Sequenz, Verzweigung (z.B. if, switch, aber auch Pattern Matching), Wiederholung (GOTO, Schleifen, Rekursion)
    • Turing-complete: „[…] die Eigenschaft einer Programmiersprache oder eines anderen logischen Systems, sämtliche Funktionen berechnen zu können, die eine universelle Turingmaschine berechnen kann.“

    Demnach sind keine Programmiersprachen: HTML/XML (Auszeichnungssprache), CSS (Stylesheet-Sprache), SQL (Datenbankabfragesprache).

    Sprache vs. Plattform vs. Ökosystem

    Programmiersprachen bringen meistens „eingebaute“ („native“) Funktionen mit, die direkt in der Syntax der Sprache formuliert werden können:

    • Ein-/Ausgabe-Befehle, um Daten verarbeiten zu können
    • Deklaration von Variablen zum Speichern von Informationen
    • mathematische Funktionen wie Addition, Multiplikation usw.
    • Steueranweisungen für Verzweigung und Wiederholung
    • Möglichkeiten zur Programmunterteilung (z.B. Funktionen, Subprogramme)
    • Einbinden von (externen) Bibliotheken zur Wiederverwendung

    Viele Programmiersprachen bringen außerdem noch eine umfangreiche Bibliothek an vorgefertigten Implementierungen (z.B. in Form von Klassen in objektorientierten Sprachen) mit. Diese Bibliothek ist bei der Einarbeitung in eine neue Sprache meist schwieriger/langwieriger zu lernen als die Syntax. Oftmals teilen sich mehrere Programmiersprachen die Bibliotheken einer gemeinsamen Plattform, z.B. der JVM bei Java und Kotlin bzw. .NET bei C# und Visual Basic.

    Darüber hinaus existiert meist auch noch ein ganzes Ökosystem rund um die Sprache/Plattform:

    Klassifizierung/Einsatzzweck(e)

    Im Alltag sind die Identifikation und Auswahl einer für das jeweilige „Realweltproblem“ passenden Sprache wichtig. Viele Programmiersprachen haben Schwerpunkte bei ihrem Einsatz, weil sie für bestimmte Einsatzzwecke optimiert wurden oder dafür viele vorgefertigte Lösungen mitbringen.

    • Einsatzzweck: Webanwendung (z.B. PHP), App (z.B. Swift), Desktop-Anwendung (z.B. C#), Server-Anwendung (z.B. Java)
    • Frontend (browserseitig) vs. Backend
    • Scriptsprachen: geringer Programmieraufwand für schnell sichtbare Ergebnisse, oft Interpretersprachen mit dynamischer Typisierung und laxer Syntaxprüfung (z.B. Semikolons optional), Beispiele: PowerShell, PHP
    • Web-Programmiersprachen: bringen meist umfangreiche Bibliotheken und Frameworks für Webanwendungen mit, oftmals auch Scriptsprachen, Beispiele: PHP, Ruby, Python

    Programmierparadigma

    Ein Programmierparadigma gibt die grundsätzliche Art und Weise vor, wie mit einer Programmiersprache entwickelt wird. Es definiert grundlegende Herangehensweisen und Prinzipien bei der Softwareentwicklung, aber auch ganz konkrete syntaktische Vorgaben. So legt es z.B. fest, mit welchen Konstrukten das Programm hauptsächlich arbeitet (z.B. Objekte in der Objektorientierung bzw. Funktionen in der funktionalen Programmierung als sogenannte „First Class Citizens“), wie Programme modularisiert werden sollten und auf welche Art und Weise Algorithmen vorzugsweise formuliert werden sollten („idiomatische Programmierung“).

    Viele Programmiersprachen sind heutzutage sogenannte Multiparadigmensprachen, bieten also Konzepte aus mehreren Paradigmen an, z.B. Objektorientierung und funktionale Programmierung. Meist haben sie aber ein definierendes Paradigma, z.B. Objektorientierung bei Java.

    Imperativ vs. Deklarativ

    Grundsätzlich kann man die imperative und deklarative Programmierung unterscheiden. Während bei der imperativen Programmierung (von lat. „imperare“ – befehlen) exakt vorgegeben wird, in welcher Reihenfolge der Computer welche Befehle wie ausführen muss, gibt man bei der deklarativen Programmierung (von lat. „declarare“ – erklären) lediglich vor, welches Ergebnis am Ende erreicht sein soll, und lässt den Computer den Weg dorthin selbst finden.

    Beispiel:

    // imperativ for (int i = 0; i < list.getSize(); i++) { System.out.println(list.get(i)); } // deklarativ list.forEach(System.out::println);

    Konkrete Programmierparadigmen

    • unstrukturiert: Einsatz von GOTO führte dazu, dass konkrete Programmabläufe nicht mehr nachvollzogen werden konnten
    • strukturiert: Verzicht auf GOTO und Einsatz von Kontrollstrukturen wie if und while
    • prozedural: Programme werden in kleine, wiederverwendbare Einheiten („Prozeduren“) aufgespalten
    • funktional: (mathematische) Funktionen bilden den Kern dieser Vorgehensweise, Higher Order Functions, Immutability und Rekursion als wichtige Merkmale
    • objektorientiert: Objekte kapseln Eigenschaften und Funktionen zu einer Einheit, Vererbung und Polymorphie als wichtige Merkmale
    • logisch: Programmierung auf Basis der mathematischen Aussagenlogik

    Compiler vs. Interpreter

    • Compiler: Übersetzt Quellcode in Maschinen- oder Bytecode, bevor das Programm ausgeführt wird.
      • JIT-Compiler: Just-In-Time-Compiler übersetzen z.B. Teile des Bytecodes zur Laufzeit in Maschinencode, um die Performance zu erhöhen.
    • Interpreter: Interpretiert den Quellcode Zeile für Zeile und übersetzt ihn während der Ausführung in Maschinencode.

    Typisierung

    • statisch vs. dynamisch
      • statisch: Datentypen stehen schon zur Compile-Zeit fest.
      • dynamisch: Datentypen werden erst zur Laufzeit geprüft.
    • stark vs. schwach: eher ein Spektrum („stärker/schwächer typisiert“) als eine harte Einteilung
      • stark: keine Typumwandlung möglich oder nur explizit („Cast“, (int)3.5)
      • schwach: implizite Typumwandlungen durch die Sprache, z.B. if (1) { ... }

    Beispiele für alle Kombinationen

    • statisch/stark: Java
    > cat .\Main.java class Main { public static void main(String[] args) { double d = 1.5; int i = d; } } > javac .\Main.java .\Main.java:6: error: incompatible types: possible lossy conversion from double to int int i = d; ^ 1 error
    • statisch/schwach: C
    > cat test.c #include <stdio.h> int main() { int i = 1; if (i) { printf("Hallo\n"); } return 0; } > gcc test.c -o test > ./test Hallo
    • dynamisch/stark: Ruby
    > cat .\test.rb i = 1 s = "a" puts i + s > ruby .\test.rb ./test.rb:3:in `+': String can't be coerced into Integer (TypeError) from ./test.rb:3:in `<main>'</main>
    • dynamisch/schwach: PHP
    > cat test.php $i = "asdf"; if ($i) { echo "Hallo\n"; } > php test.php Hallo

    Syntax

    Syntaktisch gibt es eigentlich nur die Unterscheidung zwischen Sprachen, die ähnlich zu C sind (insb. Klammern, Schlüsselwörter, Datentypen) oder eben nicht.

    Beispiel Java (C-ähnlich):

    void pruefePerson(int alter) { if (alter >= 18) { System.out.println("volljährig"); } }

    Beispiel Ruby:

    def pruefePerson(alter) puts "volljährig" if alter >= 18 end

    Grafisch vs. textuell

    Die weitaus meisten Programmiersprachen sind textuelle Sprachen, aber es gibt auch grafische Programmiersprachen, bei denen die Algorithmen „zusammengeklickt“ werden können. Ein Beispiel ist Scratch.

    Abstraktionsniveau/Sprachhöhe

    • 1GL: Maschinensprache, Nullen und Einsen
    • 2GL: Assembler, etwas abstrakter, aber immer noch kryptisch, an bestimmte Prozessoren gebunden
    • 3GL: moderne Hochsprachen wie C, Java usw.
    • 4GL: Sprachen mit Fokus auf einen bestimmten Anwendungsbereich, Ziel: wenig Code für häufig benötigte Funktionen, Beispiele: Natural, ABAP

    General Purpose vs. Domain Specific

    • General Purpose Language (GPL): Kann eingesetzt werden, um beliebige Probleme zu lösen, verwendet aber eine allgemeine Syntax. Beispiele: Java, C#, PHP etc.
    • Domain Specific Language (DSL): Kann nur Probleme eines genau abgegrenzten Bereichs lösen, verwendet dafür aber eine perfekt passende Syntax. Es gibt interne (fachliche APIs der eigenen Komponenten) und externe (komplett separate Programmiersprachen mit Compiler usw.).

    Weitere Unterscheidungsmöglichkeiten

    • Portabilität/Laufzeitumgebung: hardwarenah (C, C++) vs. virtuelle Maschine (Java, C#)
    • Managed vs. unmanaged: Manuelle Speicherverwaltung (C) vs. Garbage Collector (Java, C#)
    • Performance/Speicherverbrauch: Durch die Kombination mehrerer der obigen Eigenschaften können sich deutliche Unterschiede bei der Performance einzelner Sprachen ergeben. So ist ein Programm in C, das speziell für die konkrete Laufzeitumgebung kompiliert wurde, sicherlich schneller als ein Java-Programm, das auf einer virtuellen Maschine interpretiert und ausgeführt wird. Aber das ist immer noch schneller als ein JavaScript-Programm, das zunächst noch interpretiert werden muss.

    Beispiele für Programmiersprachen

    Diese Liste ist nicht vollständig!

    • Web
      • PHP: sehr verbreitete Web-Programmiersprache mit viel Unterstützung für übliche Anforderungen (z.B. Zugriff auf Query-String usw.)
      • Ruby: Basis von Ruby on Rails und geschaffen, um Entwickler:innen glücklich zu machen
      • Python: gerade im KI-Umfeld stark verbreitet
      • JavaScript: bislang die einzige (!) Programmiersprache für das Frontend im Browser
      • Typescript: statisch typisierte Alternative zu JavaScript
    • Enterprise
      • Java: großes Ökosystem, Langlebigkeit, Abwärtskompatibilität, sehr performant
      • C#: stark verbreitet für Windows-Anwendungen
      • COBOL: alte, aber immer noch in vielen großen Unternehmen eingesetzte 4GL-Sprache für klassische Business-Anwendungen
      • ABAP: Programmiersprache von SAP
      • VBA: Makrosprache für Microsoft Office
    • App
      • Kotlin: Standardsprache für Android-Anwendungen, läuft wie Java auf der JVM
      • Swift: Standardsprache für iOS-Anwendungen, „Nachfolger“ von Objective-C
    • Hardware
      • Assembler: immer noch bei hochperformanten Anwendungen im Einsatz (z.B. Spiele)
      • C: Basis vieler eingebetteter Systeme und Betriebssysteme
      • C++: objektorientierter Aufsatz auf C
    • Funktional
      • Haskell: die funktionale Programmiersprache, in der realen Welt nicht allzu verbreitet
      • F#: funktionale Sprache für .NET
      • Lisp: Urvater der modernen funktionalen Programmiersprachen
      • Elixir: basiert auf Erlang und ist stark bei nebenläufiger Programmierung
    • Logisch
      • Prolog: Programmierung mit Prädikatenlogik, Backtracking usw.

    Literatur

    Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages (Pragmatic Programmers) (Affiliate)*

    Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages (Pragmatic Programmers) (Affiliate)*

    Links

    Der Beitrag Eigenschaften und Unterscheidung von Programmiersprachen – IT-Berufe-Podcast #182 erschien zuerst auf IT-Berufe-Podcast.

    10 July 2023, 3:00 am
  • 18 minutes 41 seconds
    Stellenangebot: Softwareentwickler (m/w/d) in Vechta – IT-Berufe-Podcast

    In dieser Sonder-Episode des IT-Berufe-Podcasts geht es um eine Stellenausschreibung als Softwareentwickler:in (m/w/d) bei meinem Arbeitgeber, der ALTE OLDENBURGER Krankenversicherung AG in Vechta.

    Probeabo bei Audible (Affiliate)

    Inhalt

    Bei meinem Arbeitgeber, der ALTE OLDENBURGER Krankenversicherung AG aus Vechta, suchen wir zum nächstmöglichen Zeitpunkt Unterstützung im IT-Bereich. Wir schreiben aktuell eine Stelle als Softwareentwickler:in aus. Selbstverständlich sind Bewerbungen von Personen aller Geschlechter erwünscht.

    Kurzübersicht der Stelle

    • Bezeichnung: Softwareentwickler (m/w/d)
    • Art der Anstellung: unbefristete Festanstellung
    • Arbeitsort: ALTE OLDENBURGER Krankenversicherung AG, Alte-Oldenburger-Platz 1, 49377 Vechta
    • Homeoffice: bis zu 60% der wöchentlichen Arbeitszeit können im Homeoffice erbracht werden
    • Beginn: schnellstmöglich
    • Sonderleistungen: Urlaubs- und Weihnachtsgeld (14 Gehälter), Fahrtkostenzuschuss zur Arbeitsstelle, 40 EUR vermögenswirksame Leistungen pro Monat, Firmenfitness, Mitarbeiterrabatte für Versicherungen, betriebliche Altersvorsorge, Kinderbetreuungszuschuss
    • Wöchentliche Arbeitszeit: 38 Stunden im Gleitzeitmodell ohne Kernarbeitszeit (bei einer Vollzeitbeschäftigung)
    • Jährlicher Urlaubsanspruch: 30 Tage
    • zusätzlicher Urlaub: Möglichkeit zur Umwandlung eines Teils des Urlaubsgelds in 5 Tage zusätzlichen Urlaub
    • Weiterbildungsmöglichkeiten: (Duales) Studium (z.B. Wirtschaftsinformatik, technische Informatik), IHK-Weiterbildungen, externe Technologieschulungen, Konferenzbesuche
    • Sonstiges: frisches Obst, kostenlose Kaffeespezialitäten, modern und ergonomisch ausgestattete Arbeitsplätze (überall höhenverstellbare Tische), betriebliche Gesundheitsförderung, eine kostenfreie Rückenmassage pro Monat (außerhalb der Arbeitszeit), ein hervorragendes Betriebsrestaurant mit bezuschussten Speisen, ein Employee-Assistance-Program, viele gemeinsame Aktivitäten wie z.B. Weihnachtsfeier, Betriebsausflug oder Spargelessen

    Technische Highlights der Arbeit bei der AO

    • Moderne IT-Infrastruktur
      • Windows 10 und SUSE Linux
      • Virtualisierung mit Citrix und VMware
    • Moderne Softwareentwicklung
      • Continuous Integration und Deployment
      • Test Driven Development, Unit-Tests, Codeanalyse
      • Java, Jakarta EE, JBoss/Wildfly, Quarkus
    • Fokus auf optimale Kollaboration
      • Code Reviews, Pair Programming, Pull Requests
    • Fokus auf DevOps
      • Gute Zusammenarbeit zwischen Administration und Entwicklung
      • Auf- und Ausbau der Container-Infrastruktur mit Docker und Kubernetes
      • Tools: Gitea, Jenkins, Gradle, Artifactory, SonarQube

    Detailinformationen zur Stelle

    Unter dem folgenden Link kannst du dir alle Details zu der ausgeschriebenen Stelle anschauen und findest auch die notwendigen Daten für deine Bewerbung bei uns.

    Softwareentwickler (m/w/d) für das Outputmanagementsystem und Drittanbieterschnittstellen

    Softwareentwickler (m/w/d) für das Outputmanagementsystem und Drittanbieterschnittstellen

    Wir suchen zum nächstmöglichen Zeitpunkt einen Softwareentwickler (m/w/d) in Festanstellung, der uns bei der Umsetzung von Fachbereichsanforderungen unterstützt und Systeme weiterentwickelt und optimiert. Deine Schwerpunkte liegen auf der Java-Plattform, sowie der Entwicklung in der Programmiersprache Natural der Software AG.

    Deine Aufgaben

    • Weiterentwicklung/Betreuung des Outputmanagementsystems
    • Schnittstellen-Entwicklung zur Anbindung diverser Anwendungen an das Bestandsführungssystem
    • Sicherstellung von Performance, Wartbarkeit und Skalierbarkeit der betreuten Anwendungen
    • Selbstständige Mitarbeit in Projekten
    • Zusammenarbeit mit den angrenzenden IT-Abteilungen und Fachbereichen

    Deine neue Abteilung

    Die Abteilung IT-Anwendungsintegration freut sich auf dich! Neben den genannten Tätigkeiten ist die Abteilung auch für den Betrieb und die Weiterentwicklung weiterer Drittanbietersoftwareprodukte verantwortlich (bspw. das Enterprise-Content-Management-System, das Inputmanagemensystem, diverse Spezialanwendungen für die Arbeit in den Fachabteilungen). Teile der Entwicklung des Bestandsführungsssystems werden auch in unserer Abteilung durchgeführt.

    Zu Beginn deine Tätigkeit bei der AO bekommst du einen erfahrenen Mentor an die Seite gestellt, der dir alle Fragen beantworten kann und dich in die ersten Aufgaben und Projekte einführt. Sowohl die technischen Systeme, als auch das Unternehmen selbst und unsere Produkte werden dir in kurzen Schulungen nähergebracht. Fachlich wirst du von den jeweiligen Teammitgliedern betreut und in die Infrastruktur eingeführt.

    Die ALTE OLDENBURGER gehört übrigens zu den Siegern der Arbeitgeber-Wettbewerbe des internationalen Forschungs- und Beratungsinstituts Great Place to Work. Die ALTE OLDENBURGER zählt zu den zehn „Besten Arbeitgebern Niedersachsen/Bremen 2023“ und wurde darüber hinaus sogar auch als einer von 100 „Deutschlands besten Arbeitgebern 2023“ ausgezeichnet.

    Links

    Der Beitrag Stellenangebot: Softwareentwickler (m/w/d) in Vechta – IT-Berufe-Podcast erschien zuerst auf IT-Berufe-Podcast.

    2 May 2023, 3:00 am
  • 1 hour 55 seconds
    Zahlensysteme, Zweierpotenzen und Binärzahlen – IT-Berufe-Podcast #181

    Um Zahlensysteme, Zweierpotenzen und vor allem Binärzahlen geht es in der einhunderteinundachzigsten Episode des IT-Berufe-Podcasts. Der Inhalt ist auch als Video bei YouTube verfügbar.

    Probeabo bei Audible (Affiliate)

    Zahlensysteme, Zweierpotenzen und Binärzahlen

    Zweierpotenzen und Binärzahlen begegnen uns in der IT-Ausbildung an vielen Stellen. In dieser Episode erkläre ich die Funktionsweise von Zahlensystemen (Binär, Oktal, Dezimal, Hexadezimal) und gebe Beispiele für den Praxiseinsatz.

    Das Video zu dieser Episode findest du bei YouTube hier: Zahlensysteme, Zweierpotenzen und Binärzahlen.

    Zahlensysteme, Zweierpotenzen und Binärzahlen bei YouTube

    Zahlen vs. Ziffern

    Zahlen werden aus einzelnen Ziffern zusammengesetzt. Die Dezimalzahl 123 besteht z.B. aus den Ziffern 1, 2 und 3. Die bekannten Zahlensysteme haben unterschiedlich viele Ziffern:

    • Dualsystem: 0 und 1
    • Oktalsystem: 0 bis 7
    • Dezimalsystem: 0 bis 9 (unsere bekannten arabischen Ziffern)
    • Hexadezimalsystme: 0 bis 9 und A bis F

    Römische Zahlen

    Das römische Zahlsystem hat auch mehrere Ziffern:

    • I = 1
    • V = 5
    • X = 10
    • L = 50
    • C = 100
    • D = 500
    • M = 1.000

    Anders als in den anderen Zahlensystemen werden die einzelnen Ziffern hier einfach aufaddiert. So entspricht die Zahl III der Dezimalzahl 3, da I + I + I = 3.

    Außerdem können Ziffern abhängig von ihrer Platzierung in der Zahl eine unterschiedliche Bedeutung haben. MCM entspricht z.B. der Dezimalzahl 1900, da das C vor dem M von diesem abgezogen werden muss, also 1000 - 100 = 900 ergibt. MCM = M + (M - C) = 1000 + (1000 - 100) = 1900.

    Dezimalsystem und andere gebräuchliche Zahlensysteme

    In den anderen Zahlensystemen, die wir in der Informatik häufig verwenden (nämlich Dualsystem, Oktalsystem, Dezimalsystem und Hexadezimalsystem), stehen die Ziffern einer Zahl immer für einen Faktor, der mit der Wertigkeit seiner Stelle multipliziert wird. Die Dezimalzahl 123 steht für 1 * 100 + 2 * 10 + 3 * 1.

    Die Wertigkeit der Stelle ergibt sich aus ihrer Potenz mit der Basis des Zahlsystems. Die Basen der Zahlensysteme sind:

    • Dual/Binär: 2
    • Oktal: 8
    • Dezimal: 10
    • Hexadezimal: 16

    Nun werden die Stellen der Zahlen von rechts nach links beginnend mit 0 immer um 1 im Exponenten erhöht, um die Wertigkeit der Stelle zu berechnen. Beispiel im Dezimalsystem:

    • 10 ^ 0 = 1
    • 10 ^ 1 = 10
    • 10 ^ 2 = 100
    • 10 ^ 3 = 1.000
    • 10 ^ 4 = 10.000

    Dualsystem

    Im Dualsystem oder Binärsystem ist die Basis 2, die Wertigkeiten der Stellen der Zahlen lauten also:

    • 2 ^ 0 = 1
    • 2 ^ 1 = 2
    • 2 ^ 2 = 4
    • 2 ^ 3 = 8
    • 2 ^ 4 = 16
    • 2 ^ 5 = 32

    Sie steigen also deutlich langsamer an als im Dezimalsystem. Mit jeder Stelle verdoppelt sich die Wertigkeit (im Vergleich zur Verzahnfachung im Dezimalsystem). Um den gleichen Zahlwert darstellen zu können, sind also deutlich mehr Ziffern nötig. Das wird noch deutlicher beim Hexadezimalsystem: Mit einer Ziffer können 16 verschiedene Werte dargestellt werden, also acht Mal so viele wie im Dualsystem.

    Beispiel: Die Dezimalzahl 256 wird im Hexadezimalsystem als 100 (1 * 256 + 0 * 16 + 0 * 1) notiert, aber im Dualsystem als 100000000, hat dort also dreimal so viele Ziffern.

    Im Dualsystem gibt es die Ziffern 0 und 1, die somit die „binary digits“ (binäre Ziffern) darstellen. Abgekürzt wird daraus Bit (binary digit).

    Kombinationsmöglichkeiten

    Oft stellen wir uns die Frage, wie viele Kombinationsmöglichkeiten – also unterschiedliche Zahlen – es für eine gegebene Anzahl an Stellen geben kann. Im Dualsystem haben wir pro Stelle zwei Möglichkeiten: 0 und 1, also ein Bit. Für eine Zahl mit einer Stelle ergeben sich also zwei Möglichkeiten: 0 und 1. Für eine Zahl mit zwei Stellen verdoppelt sich die Anzahl der Möglichkeiten:

    • 00
    • 01
    • 10
    • 11

    Und mit jeder weiteren Stelle verdoppeln sich die Möglichkeiten wieder, da vor jede bisherige Kombination wieder 0 oder 1 geschrieben werden kann:

    • 000
    • 001
    • 010
    • 011
    • 100
    • 101
    • 110
    • 111

    Die Anzahl der Kombinationsmöglichkeiten oder unterschiedlichen Zahlen für eine gegebene Anzahl an Stellen lässt sich berechnen als Potenz aus Basis des Zahlsystems hoch der Stellenzahl. Für eine 5-stellige Dualzahl sind 2 ^ 5 = 32 Kombinationen möglich, für eine 3-stellige Oktalzahl 8 ^ 3 = 512.

    Beispiele für Zweierpotenzen

    Da in der IT das Dualsystem sehr wichtig ist – denn Computer können nur mit Nullen und Einsen rechnen – begegnen uns in der Praxis häufig immer wieder Zweierpotenzen, da die Basis des Zahlsystems nunmal 2 ist. Daher ist es wichtig, zumindest grob überschlagen zu können, wie viele Kombinationsmöglichkeiten es für eine gegebene Anzahl an Bits gibt. Ein paar wichtige Zweierpotenzen sollte man auch auswendig lernen, damit man nicht jedes Mal wieder nachrechnen muss:

    • 8 Bit = 256 Möglichkeiten: ein Byte, Farbtiefe von GIF-Bildern, Größe eines RGB-Kanals, Länge der Codierung ISO-8859-1
    • 16 Bit = 65.536 Möglichkeiten: Samplingtiefe bei CD-Qualität, Größe eines Netzwerkports, Länge eines Shorts
    • 24 Bit = ca. 16,7 Mio. Möglichkeiten: Standardfarbtiefe von JPG- oder PNG-Dateien (ohne Alpha-Kanal)
    • 32 Bit = ca. 4,3 Mrd. Möglichkeiten: Länge eines Integers, Länge einer IPv4-Adresse, lange Zeit die übliche Verarbeitungsbreite von CPUs
    • 48 Bit (2 * 24 Bit = ca. 16,7 Mio. * 16,7 Mio. Möglichkeiten): Länge einer MAC-Adresse
    • 64 Bit: Länge eines Longs, übliche Verarbeitungsbreite moderner CPUs
    • 128 Bit: Länge einer IPv6-Adresse

    Zweierpotenzen im Vergleich

    Zum Abschluss habe ich hier noch eine Liste aller Zweierpotenzen bis 128 mit einigen Anwendungsfällen bzw. Namen. Die Beispiele passen natürlich nicht hundertprozentig (z.B. gibt es nicht exakt 2 ^ 33 Menschen auf der Erde und 2 ^ 20 ist nicht genau eine Million), aber vermitteln einen Eindruck ihrer Größe im Verhältnis zu den anderen Zahlen und helfen beim Überschlagen von Ergebnissen.

    • 2 ^ 1 = 2: 1 Bit
    • 2 ^ 2 = 4
    • 2 ^ 3 = 8
    • 2 ^ 4 = 16
    • 2 ^ 5 = 32
    • 2 ^ 6 = 64: BASE64
    • 2 ^ 7 = 128: ASCII
    • 2 ^ 8 = 256: Byte, ISO-8859-1, GIF-Farben
    • 2 ^ 9 = 512
    • 2 ^ 10 = 1.024
    • 2 ^ 11 = 2.048
    • 2 ^ 12 = 4.096
    • 2 ^ 13 = 8.192
    • 2 ^ 14 = 16.384
    • 2 ^ 15 = 32.768
    • 2 ^ 16 = 65.536: UTF-16, Samplingtiefe CD, Größe Netzwerkport
    • 2 ^ 17 = 131.072
    • 2 ^ 18 = 262.144
    • 2 ^ 19 = 524.288
    • 2 ^ 20 = 1.048.576: Million
    • 2 ^ 21 = 2.097.152
    • 2 ^ 22 = 4.194.304
    • 2 ^ 23 = 8.388.608
    • 2 ^ 24 = 16.777.216: Farbtiefe JPG
    • 2 ^ 25 = 33.554.432
    • 2 ^ 26 = 67.108.864
    • 2 ^ 27 = 134.217.728
    • 2 ^ 28 = 268.435.456
    • 2 ^ 29 = 536.870.912
    • 2 ^ 30 = 1.073.741.824: Milliarde
    • 2 ^ 31 = 2.147.483.648
    • 2 ^ 32 = 4.294.967.296: Farben + Alpha PNG, Integer, IPv4
    • 2 ^ 33 = 8.589.934.592: Anzahl Menschen
    • 2 ^ 34 = 17.179.869.184
    • 2 ^ 35 = 34.359.738.368
    • 2 ^ 36 = 68.719.476.736
    • 2 ^ 37 = 137.438.953.472: Elon Musks Vermögen, Sterne in unserer Galaxie
    • 2 ^ 38 = 274.877.906.944
    • 2 ^ 39 = 549.755.813.888
    • 2 ^ 40 = 1.099.511.627.776: Billion
    • 2 ^ 41 = 2.199.023.255.552
    • 2 ^ 42 = 4.398.046.511.104
    • 2 ^ 43 = 8.796.093.022.208
    • 2 ^ 44 = 17.592.186.044.416
    • 2 ^ 45 = 35.184.372.088.832
    • 2 ^ 46 = 70.368.744.177.664
    • 2 ^ 47 = 140.737.488.355.328
    • 2 ^ 48 = 281.474.976.710.656: MAC
    • 2 ^ 49 = 562.949.953.421.312
    • 2 ^ 50 = 1.125.899.906.842.620: Billiarde
    • 2 ^ 51 = 2.251.799.813.685.250
    • 2 ^ 52 = 4.503.599.627.370.500
    • 2 ^ 53 = 9.007.199.254.740.990
    • 2 ^ 54 = 18.014.398.509.482.000
    • 2 ^ 55 = 36.028.797.018.964.000
    • 2 ^ 56 = 72.057.594.037.927.900
    • 2 ^ 57 = 144.115.188.075.856.000
    • 2 ^ 58 = 288.230.376.151.712.000
    • 2 ^ 59 = 576.460.752.303.423.000
    • 2 ^ 60 = 1.152.921.504.606.850.000: Trillion
    • 2 ^ 61 = 2.305.843.009.213.690.000
    • 2 ^ 62 = 4.611.686.018.427.390.000
    • 2 ^ 63 = 9.223.372.036.854.780.000
    • 2 ^ 64 = 18.446.744.073.709.600.000: Long
    • 2 ^ 65 = 36.893.488.147.419.100.000: Kombinationsmöglichkeiten Rubik’s Cube
    • 2 ^ 66 = 73.786.976.294.838.200.000
    • 2 ^ 67 = 147.573.952.589.676.000.000
    • 2 ^ 68 = 295.147.905.179.353.000.000
    • 2 ^ 69 = 590.295.810.358.706.000.000: Quadratmillimeter Erdoberfläche
    • 2 ^ 70 = 1.180.591.620.717.410.000.000: Trilliarde, Liter Wasser auf der Erde
    • 2 ^ 71 = 2.361.183.241.434.820.000.000
    • 2 ^ 72 = 4.722.366.482.869.650.000.000
    • 2 ^ 73 = 9.444.732.965.739.290.000.000
    • 2 ^ 74 = 18.889.465.931.478.600.000.000
    • 2 ^ 75 = 37.778.931.862.957.200.000.000
    • 2 ^ 76 = 75.557.863.725.914.300.000.000: Anzahl Sterne im sichtbaren Universum, Anzahl Sandkörner in der Sahara
    • 2 ^ 77 = 151.115.727.451.829.000.000.000
    • 2 ^ 78 = 302.231.454.903.657.000.000.000
    • 2 ^ 79 = 604.462.909.807.315.000.000.000
    • 2 ^ 80 = 1.208.925.819.614.630.000.000.000: Quadrillion
    • 2 ^ 81 = 2.417.851.639.229.260.000.000.000
    • 2 ^ 82 = 4.835.703.278.458.520.000.000.000
    • 2 ^ 83 = 9.671.406.556.917.030.000.000.000
    • 2 ^ 84 = 19.342.813.113.834.100.000.000.000
    • 2 ^ 85 = 38.685.626.227.668.100.000.000.000
    • 2 ^ 86 = 77.371.252.455.336.300.000.000.000
    • 2 ^ 87 = 154.742.504.910.673.000.000.000.000
    • 2 ^ 88 = 309.485.009.821.345.000.000.000.000
    • 2 ^ 89 = 618.970.019.642.690.000.000.000.000
    • 2 ^ 90 = 1.237.940.039.285.380.000.000.000.000: Quadrilliarde
    • 2 ^ 91 = 2.475.880.078.570.760.000.000.000.000
    • 2 ^ 92 = 4.951.760.157.141.520.000.000.000.000
    • 2 ^ 93 = 9.903.520.314.283.040.000.000.000.000
    • 2 ^ 94 = 19.807.040.628.566.100.000.000.000.000
    • 2 ^ 95 = 39.614.081.257.132.200.000.000.000.000
    • 2 ^ 96 = 79.228.162.514.264.300.000.000.000.000
    • 2 ^ 97 = 158.456.325.028.529.000.000.000.000.000
    • 2 ^ 98 = 316.912.650.057.057.000.000.000.000.000
    • 2 ^ 99 = 633.825.300.114.115.000.000.000.000.000
    • 2 ^ 100 = 1.267.650.600.228.230.000.000.000.000.000: Quintillion
    • 2 ^ 101 = 2.535.301.200.456.460.000.000.000.000.000
    • 2 ^ 102 = 5.070.602.400.912.920.000.000.000.000.000
    • 2 ^ 103 = 10.141.204.801.825.800.000.000.000.000.000
    • 2 ^ 104 = 20.282.409.603.651.700.000.000.000.000.000
    • 2 ^ 105 = 40.564.819.207.303.300.000.000.000.000.000
    • 2 ^ 106 = 81.129.638.414.606.700.000.000.000.000.000
    • 2 ^ 107 = 162.259.276.829.213.000.000.000.000.000.000
    • 2 ^ 108 = 324.518.553.658.427.000.000.000.000.000.000
    • 2 ^ 109 = 649.037.107.316.853.000.000.000.000.000.000
    • 2 ^ 110 = 1.298.074.214.633.710.000.000.000.000.000.000: Quintilliarde
    • 2 ^ 111 = 2.596.148.429.267.410.000.000.000.000.000.000
    • 2 ^ 112 = 5.192.296.858.534.830.000.000.000.000.000.000
    • 2 ^ 113 = 10.384.593.717.069.700.000.000.000.000.000.000
    • 2 ^ 114 = 20.769.187.434.139.300.000.000.000.000.000.000
    • 2 ^ 115 = 41.538.374.868.278.600.000.000.000.000.000.000
    • 2 ^ 116 = 83.076.749.736.557.200.000.000.000.000.000.000
    • 2 ^ 117 = 166.153.499.473.114.000.000.000.000.000.000.000: Kombinationsmöglichkeiten Skatkarten
    • 2 ^ 118 = 332.306.998.946.229.000.000.000.000.000.000.000
    • 2 ^ 119 = 664.613.997.892.458.000.000.000.000.000.000.000
    • 2 ^ 120 = 1.329.227.995.784.920.000.000.000.000.000.000.000: Sextillion
    • 2 ^ 121 = 2.658.455.991.569.830.000.000.000.000.000.000.000
    • 2 ^ 122 = 5.316.911.983.139.660.000.000.000.000.000.000.000
    • 2 ^ 123 = 10.633.823.966.279.300.000.000.000.000.000.000.000
    • 2 ^ 124 = 21.267.647.932.558.700.000.000.000.000.000.000.000
    • 2 ^ 125 = 42.535.295.865.117.300.000.000.000.000.000.000.000
    • 2 ^ 126 = 85.070.591.730.234.600.000.000.000.000.000.000.000
    • 2 ^ 127 = 170.141.183.460.469.000.000.000.000.000.000.000.000
    • 2 ^ 128 = 340.282.366.920.938.000.000.000.000.000.000.000.000: IPv6, MD5-Länge, UUID

    Links

    Der Beitrag Zahlensysteme, Zweierpotenzen und Binärzahlen – IT-Berufe-Podcast #181 erschien zuerst auf IT-Berufe-Podcast.

    6 March 2023, 3:00 am
  • 51 minutes 16 seconds
    Aufbau und Ablauf der IHK-Abschlussprüfung in den IT-Berufen – IT-Berufe-Podcast #180

    Um den Aufbau und den Ablauf der Abschlussprüfung in den IT-Berufen geht es in der einhundertachzigsten Episode des IT-Berufe-Pocasts.

    Probeabo bei Audible (Affiliate)

    Inhalt

    • Die Teile der Abschlussprüfung sollten allen Auszubildenden und Ausbilder:innen geläufig sein, da die drei Jahre der Ausbildung hauptsächlich auf diese Prüfung hinarbeiten.
    • Der Aufbau der Abschlussprüfung ist für alle IT-Berufe identisch, die Inhalte unterscheiden sich aber natürlich. Insbesondere die Dauer und die Inhalte der Projektarbeit sind berufsspezifisch.
    • Es gibt insgesamt 7 verschiedene IT-Berufe.
      • Fachinformatiker:in
        • Anwendungsentwicklung
        • Systemintegration
        • Daten- und Prozessanalyse
        • Digitale Vernetzung
      • IT-System-Elektroniker:in
      • Kauf­mann/Kauffrau für Digitalisierungsmanagement
      • Kaufmann/Kauffrau für IT-System-Management
    • Der Großteil (60%) der Inhalte der schriftlichen Prüfung (GAP Teil 1 und WiSo) ist für alle Berufe gleich.
    • Achtung: Die IHK-Prüfungen sind bundesweit einheitlich, aber in Baden-Württemberg laufen sie anders als in den übrigen 15 Bundesländern. Die folgenden Ausführungen gelten daher ggfs. nicht für Prüfungen in Baden-Württemberg.

    Aufbau der Abschlussprüfung

    Wer es ganz genau wissen will, schaut am besten in die jeweilige Berufsverordnung:

    Die folgenden Zitate stammen aus der FIAusbV.

    Teil 1 (der gestreckten Abschlussprüfung)

    Teil 1 der gestreckten Abschlussprüfung findet im Prüfungsbereich Einrichten eines IT-gestützten Arbeitsplatzes statt. Dieser Prüfungsteil ist für alle IT-Berufe identisch.

    Im Prüfungsbereich Einrichten eines IT-gestützten Arbeitsplatzes hat der Prüfling nachzuweisen, dass er in der Lage ist,
    1. Kundenbedarfe zielgruppengerecht zu ermitteln,
    2. Hard- und Software auszuwählen und ihre Beschaffung einzuleiten,
    3. einen IT-Arbeitsplatz zu konfigurieren und zu testen und dabei die Bestimmungen und die betrieblichen Vorgaben zum Datenschutz, zur IT-Sicherheit und zur Qualitätssicherung einzuhalten,
    4. Kunden und Kundinnen in die Nutzung des Arbeitsplatzes einzuweisen und
    5. die Leistungserbringung zu kontrollieren und zu protokollieren.
    (FIAusbV §9 Abs. 2)

    Teil 1 der Prüfung ist eine schriftliche Prüfung über 90 Minuten, die nach 18 Monaten der Ausbildung absolviert werden muss. Inhalt sind alle im Ausbildungsrahmenplan (Teil der oben verlinkten Ausbildungsverordnung) und Rahmenlehrplan (für die Berufsschulen) bis zu diesem Zeitpunkt zu vermittelnden Inhalte.

    Das Ergebnis des ersten Prüfungsteils geht zu 20% in die Abschlussnote ein.

    Tipps zur Vorbereitung auf die Prüfung gibt es in meinen entsprechenden Podcast-Episoden, z.B. Prüfungsvorbereitung auf Teil 1 der gestreckten Abschlussprüfung der IT-Berufe. Und hier habe ich eine große Liste mit allen potentiellen Prüfungsthemen für dich zusammengestellt: Mögliche Themen von Teil 1 der gestreckten Abschlussprüfung (GAP) in den IT-Berufen.

    Teil 2 (der gestreckten Abschlussprüfung)

    In Teil 2 der Prüfung sollen die bereits in Teil 1 abgefragten Inhalte nicht explizit erneut abgefragt werden, sie werden aber als bekannt vorausgesetzt.

    Teil 2 der Prüfung teilt sich in vier konkrete Prüfungsteile auf:

    • Projektarbeit
    • Zwei fachspezifische schriftliche Prüfungen
    • Wirtschaft- und Sozialkunde

    Betriebliche Projektarbeit

    Die betriebliche Projektarbeit ist in allen IT-Berufen durchzuführen. Sie unterscheidet sich aber je nach Beruf und Fachgebiet. Für die Umsetzung stehen 40 Stunden zur Verfügung, aber Anwendungsentwickler:innen haben 80 Stunden.

    Der Prüfling hat eine betriebliche Projektarbeit durchzuführen und mit praxisbezogenen Unterlagen zu dokumentieren.
    Vor der Durchführung der betrieblichen Projektarbeit hat er dem Prüfungsausschuss eine Projektbeschreibung zur Genehmigung vorzulegen.
    In der Projektbeschreibung hat er die Ausgangssituation und das Projektziel zu beschreiben und eine Zeitplanung aufzustellen.
    Die Prüfungszeit beträgt für die betriebliche Projektarbeit und für die Dokumentation mit praxisbezogenen Unterlagen höchstens 80 Stunden.
    (FIAusbV §12 Abs. 2)

    Zusätzlich zur Umsetzung der Projektarbeit und ihrer Dokumentation muss ein Prüfling in diesem Prüfungsteil nachweisen, dass er/sie in der Lage ist…

    1. die Arbeitsergebnisse adressatengerecht zu präsentieren und
    2. seine Vorgehensweise bei der Durchführung der betrieblichen Projektarbeit zu begründen
      (FIAusbV §12 Abs. 3)

    Das heißt, es werden eine Projektpräsentation und ein anschließendes Fachgespräch durchgeführt. Dabei gilt:

    Die Prüfungszeit beträgt insgesamt höchstens 30 Minuten.
    Die Präsentation soll höchstens 15 Minuten dauern.
    (FIAusbV §12 Abs. 3)

    Die Gewichtung der einzelnen Prüfungsteile sieht so aus:

    • Projektdokumentation: 50%
    • Projektpräsentation und Fachgespräch: 50% (nur eine gemeinsame Note ohne Unterscheidung der beiden Teile)

    Fachspezifische schriftliche Prüfung

    Dieser Prüfungsteil ist für alle IT-Berufe unterschiedlich und fachspezifisch. Es werden zwei schriftliche Prüfungen zu je 90 Minuten geschrieben.

    Die Themengebiete für die einzelnen Berufe sind:

    • Fachinformatiker:in Anwendungsentwicklung
      • Planen eines Softwareproduktes
      • Entwicklung und Umsetzung von Algorithmen
    • Fachinformatiker:in Systemintegration
      • Konzeption und Administration von IT-Systemen
      • Analyse und Entwicklung von Netzwerken
    • Fachinformatiker:in Daten- und Prozessanalyse
      • Durchführen einer Prozessanalyse
      • Sicherstellen der Datenqualität
    • Fachinformatiker:in Digitale Vernetzung
      • Diagnose und Störungsbeseitigung in vernetzten Systemen
      • Betrieb und Erweiterung von vernetzten Systemen
    • IT-System-Elektroniker:in
      • Installation von und Service an IT-Geräten, IT-Systemen und IT-Infrastrukturen
      • Anbindung von Geräten, Systemen und Betriebsmitteln an die Stromversorgung
    • Kauf­mann/Kauffrau für Digitalisierungsmanagement
      • Entwicklung eines digitalen Geschäftsmodells
      • Kaufmännische Unterstützungsprozesse
    • Kaufmann/Kauffrau für IT-System-Management
      • Einführen einer IT-Systemlösung
      • Kaufmännische Unterstützungsprozesse

    Beide Prüfungen werden mit jeweils 10% in die Endnote eingerechnet. Die Aufgaben sind schriftlich zu beantworten und werden manuell von Prüfer:innen korrigiert.

    Wirtschaft- und Sozialkunde (WiSo)

    Im letzten Prüfungsteil soll der Prüfling nachweisen, dass er in der Lage ist…

    allgemeine wirtschaftliche und gesellschaftliche Zusammenhänge der Berufs- und Arbeitswelt darzustellen und zu beurteilen.
    (FIAusbV §15 Abs. 1)

    Diese schriftliche Prüfung dauert 60 Minuten und geht zu 10% in die Abschlussnote ein. Die Aufgaben sind durch Ankreuzen oder Eintragen von Zahlen zu beantworten und werden automatisiert korrigiert.

    Gewichtung der Prüfungsteile

    Die obigen Prüfungsteile gehen mit folgenden Gewichtungen in die Endnote ein (siehe FIAusbV §16 Abs. 1)

    • Einrichten eines IT-gestützten Arbeitsplatzes (GAP Teil 1): 20%
    • Betriebliche Projektarbeit: 50%
      • Davon 50% für die Projektdokumentation und 50% gemeinsam für Projektpräsentation und Fachgespräch
    • Fachspezifische schriftliche Prüfung: jeweils 10%
    • Wirtschafts- und Sozialkunde: 10%

    Somit zählen alle schriftlichen Prüfungen zusammen 50% der Abschlussnote und das Projekt auch 50%. Die Hälfte der Punkte liegt damit in der Hand der Prüflinge, da sie ihr Abschlussprojekt selbst auswählen, planen und durchführen können.

    Nicht-Bestehen der Prüfung

    Die Abschlussprüfung ist bestanden, wenn die genannten Prüfungsleistungen wie folgt bewertet worden sind (siehe FIAusbV §16 Abs. 2):

    • im Gesamtergebnis von Teil 1 und Teil 2 mindestens „ausreichend“ (also 50%)
    • im Ergebnis von Teil 2 mindestens „ausreichend“ (also 50%)
    • in mindestens drei Prüfungsbereichen von Teil 2 mindestens „ausreichend“ (also 50%)
    • in keinem Prüfungsbereich von Teil 2 „ungenügend“ (also mind. 30%)

    Das heißt, dass man quasi in Teil 1 der Prüfung nicht „durchfallen“ kann (sofern man die Note mit Teil 2 ausgleichen kann).

    Ggfs. kannst du ein schlechtes Ergebnis im schriftlichen Teil 2 der Prüfung durch eine mündliche Ergänzungsprüfung ausgleichen.

    Es gibt einen hervorragenden Notenrechner für die IT-Abschlussprüfung (AO2020).

    Ablauf der Abschlussprüfung

    Es gibt für Teil 1 der Prüfung eine Prüfung im Frühjahr und eine im Herbst, sowie für Teil 2 eine Sommer- und eine Winterprüfung. Die weitaus meisten Prüflinge nehmen an der Frühjahrs- bzw. Sommerprüfung teil. Auszubildende mit verkürzter Ausbildungszeit, duale Studierende oder Umschüler nehmen meist an der Herbst- bzw. Winterprüfung teil.

    Die folgenden Termine sind grobe Richtwerte. Nur die Termine der schriftlichen Prüfungen werden deutschlandweit (bis auf Baden-Württemberg) einheitlich von der Aufgabenstelle für kaufmännische Abschluss- und Zwischenprüfungen festgelegt. Die anderen Termine bestimmen die örtlichen IHKen individuell. Meist werden die Noten den Prüflingen nicht vom Prüfungsausschuss mitgeteilt, sondern sie werden nach der Prüfung durch die IHK per Post versendet.

    • Termine (Vgl. Termine der schriftlichen Abschlussprüfungen)
      • Teil 1: Februar/März (Frühjahr) bzw. September/Oktober (Herbst)
      • Teil 2: April/Mai (Sommer) bzw. November/Dezember (Winter)
      • Mündliche Prüfung (Präsentation/Fachgespräch): Mai/Juni/Juli (Sommer) bzw. Dezember/Januar (Winter)
    • Betriebliche Projektarbeit
      • Abgabe des Antrags: Februar (Sommer) bzw. September (Winter)
      • Bearbeitungszeit: ab Genehmigung des Antrags durch den Prüfungsausschuss (meist einige Wochen nach Antragsstellung) bis zu einem festgelegten Termin
      • Abgabe der Dokumentation: meist eine Woche nach der schriftlichen Prüfung Teil 2
    • Mitteilung der Prüfungsergebnisse
      • Teil 1: einige Wochen nach dem Prüfungstermin
      • Teil 2: einige Wochen nach dem Prüfungstermin, jedoch meist vor der mündlichen Prüfung
      • mündliche Prüfung: am Tag der mündlichen Prüfung
      • Gesamtergebnis: am Tag der mündlichen Prüfung

    Links

    Der Beitrag Aufbau und Ablauf der IHK-Abschlussprüfung in den IT-Berufen – IT-Berufe-Podcast #180 erschien zuerst auf IT-Berufe-Podcast.

    24 October 2022, 3:00 am
  • 1 hour 4 minutes
    RAID – Redundant Array of Independent Disks – IT-Berufe-Podcast #179

    Um das beliebte Prüfungsthema RAID geht es in der einhundertneunundsiebzigsten Episode des IT-Berufe-Podcasts.

    Probeabo bei Audible (Affiliate)

    Inhalt

    • RAID: Redundant Array of Independent Disks (bzw. früher „inexpensive“ statt „independent)
    • Idee: Mehrere Festplatten zu einem Verbund („array“) zusammenschließen
    • Ziel: Ausfallsicherheit und höhere Verfügbarkeit (durch Einführung von Redundanz)
    • Bei Ausfall einer Festplatte kann sie getauscht und das RAID-Array wiederhergestellt werden („Rebuild“), in dieser Phase ist das RAID durch die hohe Belastung aber anfälliger für einen weiteren Festplattenausfall.
    • RAID ersetzt nicht die Datensicherung.
    • Lösung: Hardware- oder Software-RAID
      • Hardware mit speziellen RAID-Controllern
      • Software meist schon ins Betriebssystem eingebaut (z.B. in Linux)
    • Alternative: JBOD (just a bunch of disks)
    • Es gibt verschiedene RAID-Level
      • Kriterien: Mindestanzahl Festplatten, Ausfallwahrscheinlichkeit, maximal verkraftbare ausgefallene Festplatten, Lese-/Schreibgeschwindigkeit, Nettokapazität

    RAID 0: Striping

    • keine Redundanz, Merksatz: „0 Redundanz“, „0 Sicherheit“
    • mindestens 2 Festplatten nötig
    • teilt Festplatten in gleich große Blöcke auf und verteilt die Daten darauf (stripes)
    • Kapazität kann komplett genutzt werden
    • dadurch kann schneller gelesen werden, da von mehreren Festplatten parallel gelesen wird
    • auch das Schreiben geht schneller, da Daten parallel auf mehrere Festplatten geschrieben werden (aufgeteilt)
    • fällt eine Festplatte aus, ist der gesamte Verbund defekt
    • Ausfallwahrscheinlichkeit steigt, da Einzelwahrscheinlichkeiten multipliziert werden (z.B. bei 1% Ausfallwahrscheinlichkeit 2,97% gesamt)
    • Einsatz: Streaming (viel Lesen, wenig Schreiben, Datenverlust verkraftbar bzw. anderweitig abgesichert), mehrere kleine zu einem großen Datenträger zusammenbauen
    • Nachteil: hohe Ausfallwahrscheinlichkeit

    RAID 1: Mirroring

    • komplette Redundanz, Merksatz: „1-zu-1-Kopie“
    • mindestens 2 Festplatten nötig
    • Daten werden auf allen Festplatten identisch abgelegt
    • Kapazität wird halbiert oder gedrittelt usw.
    • Lesegeschwindigkeit kann erhöht werden, indem Daten parallel von mehreren Festplatten gelesen werden
    • Schreiben dauert länger, weil Daten auf mehrere Platten geschrieben werden müssen (Redundanz)
    • Verbund fällt erst aus, wenn alle Festplatten ausfallen
    • Ausfallwahrscheinlichkeit sinkt deutlich, z.B. bei 1% je Platte auf 0,0001%
    • auch Mirroring ist keine Datensicherung, Viren werden sofort auf alle Platten geschrieben
    • Einsatz: Hochverfügbarkeitssysteme
    • Nachteil: geringe Nettokapazität

    RAID 5: Paritäten

    • Teilredundanz durch Ablage von Paritätsinformationen
    • mindestens 3 Festplatten nötig
    • zusätzlich zu den auf mehrere Festplatten verteilten Daten werden auf allen Festplatten Paritätsinformationen (z.B. XOR) je Datenblock abgelegt
    • Kapazität wird reduziert (z.B. 2/3 bei drei Festplatten)
    • Lesegeschwindigkeit kann erhöht werden, indem Daten parallel von mehreren Festplatten gelesen werden
    • Schreiben dauert durch Berechnung der Parität länger
    • Verbund fällt erst aus, wenn zwei Festplatten defekt sind
    • Ausfallwahrscheinlichkeit sinkt, z.B. bei 1% je Platte auf 0,0298%
    • Nachteil: bei häufigen Schreibzugriffen durch Berechnung der Parität langsamer

    Irrelevante RAID-Level

    • RAID 2: Striping mit Fehlerkorrektur, nur bei Großrechnern eingesetzt
    • RAID 3/4: wie RAID 5 nur mit dedizierter Paritätsfestplatte (die dadurch stark belastet und zum Flaschenhals wird), bei RAID 3 wird auf Byte-Ebene und bei RAID 4 auf Block-Ebene gestript
    • RAID 6: wie 5 nur mit doppelter Parität

    Kombinationen von RAID-Levels

    • best of both worlds aus anderen RAID-Leveln
    • immer von links nach rechts lesen und im Diagramm von unten nach oben: 01 -> zuerst werden zwei RAID 0 erstellt und dann zu einem RAID 1 zusammengebaut
    • ein Leg ist das RAID-Array „unten“ im Bild, aus dem das übergeordnete zusammengesetzt wird
    • es werden mind. 4 Festplatten benötigt
    • Kapazität wird halbiert
    • Verbund verträgt zwei Festplattenausfälle, aber es ist wichtig, welche Platten ausfallen

    RAID 01

    • zwei Festplatten im gleichen Leg dürfen ausfallen
    • es kann nicht erkannt werden, welche Festplatte im RAID 0 ausgefallen ist, da dann das gesamte Array defekt ist
    • bei Ausfall einer Festplatte muss das gesamte Stripeset des Legs neu aufgebaut werden

    RAID 10

    • zwei Festplatten in unterschiedlichen Legs dürfen ausfallen
    • bei Ausfall weniger Aufwand für Rebuild, weil nur im Leg gemirrort werden muss
    • Achtung: auch der RAID-Controller kann ausfallen

    Links

    Der Beitrag RAID – Redundant Array of Independent Disks – IT-Berufe-Podcast #179 erschien zuerst auf IT-Berufe-Podcast.

    10 October 2022, 3:00 am
  • 1 hour 15 minutes
    Datensicherung (Backup) – IT-Berufe-Podcast #178

    Um das beliebte Prüfungsthema Datensicherung geht es in der einhundertachtundsiebzigsten Episode des IT-Berufe-Podcasts. Inhalt Datensicherung ist quasi das deutsche Wort für Backup und behandelt das Sichern und Wiederherstellen von Daten auf Sicherungsmedien wie Magnetbändern, externen Festplatten oder der Cloud. Es geht hierbei um den Schutz vor Datenverlust. Abgrenzung von Datensicherung, Datensicherheit und Datenschutz. Siehe auch...

    Der Beitrag Datensicherung (Backup) – IT-Berufe-Podcast #178 erschien zuerst auf IT-Berufe-Podcast.

    26 September 2022, 3:00 am
  • More Episodes? Get the App
© MoonFM 2024. All rights reserved.