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!

  • 41 minutes 46 seconds
    Lastenheft und Pflichtenheft – IT-Berufe-Podcast #189

    Die Unterscheidung von Lastenheft und Pflichtenheft ist Thema der einhundertneunundachzigsten Episode des IT-Berufe-Podcasts.

    Probeabo bei Audible (Affiliate)

    Inhalt

    Kurzübersicht Lastenheft

    • Definition laut DIN 69901-5: „vom Auftraggeber festgelegte Gesamtheit der Forderungen an die Lieferungen und Leistungen eines Auftragnehmers innerhalb eines Auftrages“.
    • Verfasst von: Auftraggeber, also aus Sicht des Kunden.
    • Inhalt: Lösungsneutrale funktionale und nicht-funktionale Anforderungen an ein Produkt, eine zu erstellende Software oder ein Projektergebnis aus Sicht des Auftraggebers.
    • Fragen: WAS soll erreicht werden? WARUM ist das wichtig? WOFÜR wird das benötigt? WER will das haben?
    • Ziel: Basis, um Angebote von potenziellen Auftragnehmern einzuholen. Es bildet die Grundlage für das vom Auftragnehmer zu erstellende Pflichtenheft.
    • Rechtliche Relevanz: keine
    • Mögliche Inhalte
      • Anforderungen der Stakeholder (z.B. Fachlichkeit, Regualatorik, Usability, Performance, Hardware-/Netwerk-/Softwareumgebung)
      • Ist-Zustand und Soll-Zustand
      • Abnahmekriterien für die Prüfung, ob die Anforderungen erfüllt sind
      • Einschränkungen bei zu verwendenden Technologien
      • Anforderungen an den Auftragnehmer (z.B. Zertifizierung)
      • Schnittstellen
      • Sonstige Anforderungen (z.B. Dauer, Kosten, Meilensteine)

    Kurzübersicht Pflichtenheft

    • Definition laut DIN 69901-5: „vom Auftragnehmer erarbeitete[n] Realisierungsvorgaben aufgrund der Umsetzung des vom Auftraggeber vorgegebenen Lastenhefts“.
    • Verfasst von: Auftragnehmer, also aus Sicht des Dienstleisters.
    • Inhalt: Vorschlag für technische Lösung der Anforderungen aus dem Lastenheft.
    • Fragen: WIE sollen die Anforderungen umgesetzt werden? WELCHE Technologien kommen zum Einsatz?
    • Ziel: Konkretes Angebot eines Auftragnehmers, um die Anforderungen aus dem Lastenheft des Auftraggebers zu erfüllen. Basis für die Kalkulation von Kosten/Aufwänden und das Erstellen eines Angebots. Definiert die Vorgaben für die spätere Implementierung.
    • Rechtliche Relevanz: wird Vertragsbestandteil und dient zur Abnahme der erbrachten Leistung
    • Mögliche Inhalte
      • Spezifikationen des geplanten Ergebnisses bzw. die technische Realisierung, z.B. Architektur, Technologien, UML-Diagramme, ER-Modelle, geplante Prozessabläufe, UI-Entwürfe
      • Entwicklungsprozess, Projektplan mit Meilensteinen, Vorgaben zur Kommunikation
      • Ressourcen wie konkrete Personen, Subunternehmen, Technologien

    Definitionen aus dem IT-Handbuch

    Beginnen wir mit einer Definition der Begriffe. Dafür schaue ich immer gerne in das IT-Handbuch*, das bis vor einigen Jahren noch der „offizielle“ Prüfungsbegleiter war und als Nachschlagewerk mit in die Prüfung genommen werden durfte. Dort werden Lasten- und Pflichtenheft wie folgt definiert:

    Lastenheft

    Das Lastenheft enthält alle Forderungen des Auftraggebers (Kunden) an die Lieferungen und/oder Leistungen eines Auftragnehmers. Die Forderungen sind aus Anwendersicht einschließlich aller Randbedingungen zu beschreiben. Diese sollten quantifizierbar und prüfbar sein. Im Lastenheft wird definiert, was für eine Aufgabe vorliegt und wofür diese zu lösen ist.

    Pflichtenheft

    Das Pflichtenheft enthält das vom Auftragnehmer erarbeitete Realisierungsvorhaben auf der Grundlage des Lastenheftes. Das Pflichtenheft enthält als Anlage das Lastenheft. Im Pflichtenheft werden die Anwendervorgaben detailliert und in einer Erweiterung die Realisierungsforderungen unter Berücksichtigung konkreter Lösungsansätze beschrieben. Im Pflichtenheft wird definiert, wie und womit die Forderungen zu realisieren sind.

    Gut verständlich finde ich auch die Erläuterungen in der Wikipedia, die sich auf die DIN 69901 stützen (die leider nicht kostenfrei verfügbar ist):

    Lastenheft

    Gemäß DIN 69901-5 […] beschreibt das Lastenheft die „vom Auftraggeber festgelegte Gesamtheit der Forderungen an die Lieferungen und Leistungen eines Auftragnehmers innerhalb eines Auftrages“. Das Lastenheft beschreibt in der Regel somit, was und wofür etwas gemacht werden soll. [Herv. d. Verf.]

    Pflichtenheft

    Das Pflichtenheft beschreibt in konkreter Form, wie der Auftragnehmer die Anforderungen des Auftraggebers zu lösen gedenkt – das sogenannte wie und womit. […] Laut DIN 69901-5 umfasst das Pflichtenheft die „vom Auftragnehmer erarbeiteten Realisierungsvorgaben aufgrund der Umsetzung des vom Auftraggeber vorgegebenen Lastenhefts“. [Herv. d. Verf.]

    Vor- und Nachteile von Lasten- und Pflichtenheft

    • Gute Planungssicherheit für den Auftraggeber. Er weiß genau, was er bekommt und wie teuer es wird.
    • Eher starres Vorgehen ist nur geeignet für Projekte, die für einen langen Zeitraum unverändert bleiben (Wasserfallmodell).
    • Das Erstellen der Dokumente ist sehr aufwändig und zeitintensiv.
    • In agilen Vorgehensmodellen wie Scrum werden sie nicht verwendet.
    • Alternative: Arbeit in Inkrementen, Minimum Viable Product

    Relevanz für die Praxis und die IHK-Projektarbeit

    Lasten- und Pflichtenheft sind zwei Artefakte, die ich in (fast) jeder IHK-Projektdokumentation erwarte. Da die Abschlussprojekte eine genaue Zeitvorgabe haben (40 bzw. 80 Stunden) und auch die Anforderungen zu Beginn komplett feststehen (sollten), eignen sich Lasten- und Pflichtenheft gut für die Dokumentation der Anforderungen.

    Wenn man eine Priorisierung durchführen müsste, würde ich mehr Gewicht auf das Pflichtenheft legen, da dieses die Grundlage für den Vertrag zur Erstellung der Software ist. Das heißt, die Abnahme am Ende des Projekts erfolgt „gegen“ das Pflichtenheft. Was dort nicht enthalten ist, wird auch nicht umgesetzt.

    Das ist übrigens auch eine häufige Frage im Fachgespräch: Warum ist das Pflichtenheft so wichtig? Weil es Vertragsbestandteil ist. Die Abgrenzung zwischen Lasten- und Pflichtenheft wird übrigens auch gerne als Prüfungsfrage (schriftlich und mündlich) genommen.

    Aber auch im realen Leben haben Lasten- und Pflichtenheft ihre Daseinsberechtigung in bestimmten Projekten, z.B. wenn es um sicherheitskritische Produkte geht, die nicht „mal eben“ agil entwickelt werden können/dürfen.

    Wer erstellt das Lasten- und Pflichtenheft?

    Wie die Definitionen oben nahelegen, sollte im Rahmen des IHK-Abschlussprojekts das Lastenheft vom Kunden bzw. der Kundin erstellt werden und das Pflichtenheft vom Prüfling. Der/die Kund:in formuliert, was er/sie gerne hätte (also die fachlichen Anforderungen), und der Prüfling definiert die dazu passende konkrete technische Lösung.

    In der Praxis ist es allerdings häufig so, dass Kunden ihre Anforderungen gar nicht genau kennen, geschweige denn sie so formulieren können, dass ein:e ITler:in sie versteht. Daher spricht nichts dagegen, dass Prüflinge schon beim Erstellen des Lastenhefts mitarbeiten.

    Wenn du genau in die Zeitplanung von Gerdas und Markus‘ Dokumentation schaust, wirst du feststellen, dass bei uns im Unternehmen genau so gearbeitet wird. Es wurde nämlich im Rahmen der Projektplanung Zeit für die Unterstützung des Fachbereichs bei der Erstellung des Lastenhefts eingeplant. Die Entwickler:innen helfen den Kunden z.B. bei der Formulierung der Anforderungen, aber auch bei deren Identifikation. Gute Methoden dafür sind z.B. Brainstorming oder Interviews.

    Aufbau und Formulierung

    Zu Inhalt, Aufbau und (gerade für die Projektdokumentation interessant) Formulierung von Lasten- und Pflichtenheft gibt es keine harten Vorgaben. Letztlich bestehen beide Artefakte aus Prosa.

    Lastenheft

    Ich persönlich würde einen etwas „moderneren“ Ansatz wählen und im Lastenheft User-Storys verwenden (für Beispiele verweise ich wieder auf die beiden obigen Dokumentationen). Durch diese Vorgabe wird man bei der einheitlichen Formulierung unterstützt und muss sich nicht alles neu ausdenken.

    Es gibt aber auch andere Ansätze, wie z.B. die richtig „enterprisey“ Volere-Templates. Da ist allein das Inhaltsverzeichnis aller möglichen Anforderungen schon ellenlang.

    Pflichtenheft

    Das Pflichtenheft sollte dann natürlich einige konkrete technische Artefakte beinhalten, da es ja so spezifisch wie möglich sein muss. Ich beschreibe es immer gerne so: Das Pflichtenheft muss man einem/einer Softwareentwickler:in ohne Kommentar auf den Tisch legen können und er/sie entwickelt dann allein auf dieser Basis die gewünschte Software. Dass das in der Praxis so nicht funktioniert (und auch nicht meine präferierte Umgangsweise ist) ist hoffentlich klar.

    Man kann aber durchaus alle in der Entwurfsphase erstellten Artefakte ins Pflichtenheft packen: Use-Case-Diagramm, Klassendiagramm, Komponentendiagramm, ERM, Tabellenmodell, GUI-Mockups, Testszenarien usw. Wie gesagt: Was nicht im Pflichtenheft steht, wird nicht umgesetzt (und nicht bezahlt).

    Berücksichtigung in der IHK-Projektdokumentation

    Da sowohl Lasten-, als auch Pflichtenheft recht lang werden können, empfehle ich, in der Projektdokumentation ausschließlich Ausschnitte daraus abzubilden. Und damit meine ich nicht Deckblatt und Inhaltsverzeichnis (habe ich leider schon oft so gesehen), sondern die konkreten Anforderungen bzw. Lösungsvorschläge. Also zeig bitte interessante Inhalte und nicht unwichtigen Kram.

    Da die Seiten in der Projektdokumentation begrenzt sind, kann man vielleicht sogar zwei Fliegen mit einer Klappe schlagen und Lasten-/Pflichtenheft sowie projektrelevante technische Inhalte daraus in nur einem Anhang zeigen. Beispiel: Das Pflichtenheft enthält ein Komponentendiagramm der geplanten Anwendung. Dann könnte der einseitige Auszug aus dem Pflichtenheft (die Seiten mit dem Komponentendiagramm) im Anhang der Dokumentation sowohl im Kapitel „Architektur“, als auch im Kapitel „Pflichtenheft“ referenziert werden. Einmal wird eben auf das Diagramm verwiesen und einmal auf das Pflichtenheft als erstelltes Artefakt.

    Ich persönlich würde aber eher die für die Artefakte spezifischen Inhalte zeigen, also die formulierten Anforderungen. Denn das ist der eigentlich interessante Inhalt der beiden Dokumente im Rahmen der Projektdokumentation. Gerda und Markus haben das auch so gemacht.

    Fazit

    Lasten- und Pflichtenheft sind zwei wichtige Artefakte, die sowohl im richtigen Leben, als auch in der IHK-Abschlussprüfung relevant sind. Schau dir die Definitionen und einige Beispiele in Ruhe an und lerne sie auch für die Prüfung.

    Literaturempfehlungen

    Heinrich Hübscher - IT-Handbuch: IT-Systemelektroniker/-in, Fachinformatiker/-in: Schülerband (Affiliate)*

    Links

    Der Beitrag Lastenheft und Pflichtenheft – IT-Berufe-Podcast #189 erschien zuerst auf IT-Berufe-Podcast.

    12 August 2024, 3:00 am
  • 1 hour 2 minutes
    Teamarbeit bei der Softwareentwicklung mit Christian Kranert – IT-Berufe-Podcast #188

    Um Teamarbeit bei der Softwareentwicklung geht es im Interview mit Christian Kranert in der einhundertachtundachzigsten Episode des IT-Berufe-Podcasts.

    Probeabo bei Audible (Affiliate)

    Inhalt

    Vorstellung Christian Kranert

    Christian hat sich schon in Episode 164 des Podcasts über Softwarequalität ausführlich vorgestellt, aber hier noch einmal die wichtigsten Eckdaten.

    • Christian Kranert
    • seit 17 Jahren in der IT und Softwareentwicklung tätig
    • angefangen mit Visual Basic 6 auf Windows 95
    • Ausbildung zum Fachinformatiker für Anwendungsentwicklung absolviert
    • viel im SAP-Umfeld mit ABAP entwickelt
    • inzwischen hauptsächlich mit C# unterwegs
    • lebt und arbeitet in Nürnberg bei Head On Solutions GmbH
    • entwickelt dort Cloud-Software für lokale Geschäfte wie Friseur-Studios zum Planen von Terminen, Kassieren, Buchhaltung usw.
    • ist Abteilungsleiter mit eigenem Team

    Teamarbeit in der Softwareentwicklung

    Warum brauchen wir Teamarbeit bei der Softwareentwicklung?

    • bei der Komplexität heutiger Software ist es fast undenkbar, diese alleine zu entwickeln
    • heutige Webanwendungen enthalten z.B. sehr viel UI-Entwicklung und sind im Backend und Frontend sehr komplex, Stichwort: Full Stack
    • Christians Unternehmen hat ein eigenes Team ausgelagert nur für VueJS im Frontend
    • durch das Team entsteht auch bessere Software
    • wir wollen doch die „echte Welt“ übersetzen in Code und dort gibt es auch mehr als einen Benutzer
    • gemeinsam zu entwickeln macht mehr Spaß, ist sozial, man kann voneinander lernen, man kann sich weiterentwickeln
    • die interdisziplinäre Zusammenarbeit mit dem Fachbereich bzw. Kunden ist auch extrem wichtig

    Wie sieht erfolgreiche interdisziplinäre Zusammenarbeiten zwischen dem IT-/Entwicklungs-Team und anderen Abteilungen aus?

    • der Fachbereich erklärt den Entwickler:innen die Fachlichkeit
    • Entwickler:innen dürfen/müssen das aber auch hinterfragen und ggfs. bessere Lösungen vorschlagen
    • man sollte erst über das Problem reden und nicht schon über Lösung
    • es muss die generelle Bereitschaft zur Teamarbeit vorhanden sein und eine entsprechende Kultur

    Welche Prozessmodelle (z.B. Wasserfall, Scrum) unterstützen/behindern die Teamarbeit?

    • das klassische Wasserfallmodell ist eher hierarchisch aufgebaut mit Lasten-/Pflichtenheft und passt nicht so gut zur Teamarbeit
    • Scrum ist aber auch kein Allheilmittel
    • das Daily ist sehr wichtig, denn Kommunikation ist der Schlüssel zu erfolgreicher Teamarbeit

    Wie sieht richtig gute Teamarbeit in der Softwareentwicklung aus?

    • Kommunikation ist das A und O, z.B. wenn ein Feature fertig ist, damit die Kolleg:innen darauf aufsetzen können
    • alle Teammitglieder:innen sollten auch aktiv Hilfe anbieten und einfordern
    • die gesamte Softwareentwicklung ist Teamarbeit und die geht schon mit der Produktidee los
    • dabei kann es helfen, verschiedene Perspektiven einzunehmen, um ein besseres Bild der Anforderungen zu bekommen
    • auch weitere Aufgaben lassen sich besser im Team lösen: Risiken abschätzen, Prioritäten ableiten, Product Backlog füllen
    • wenn das Verhältnis von Kosten und Nutzen passt, startet die Implementierung und Aufgaben werden im Team verteilt
    • in Christians Team werden Konzepte z.B. gemeinsam erarbeitet, ganz einfach in OneNote*
    • das Team startet mit einem Datenmodell als Diskussionsgrundlage und legt dann die Datentypen fest
    • außerdem werden Mockups erstellt, um darüber gemeinsam zu diskutieren
    • sehr wichtig ist auch das gemeinsame Festlegen von Namen im Team, denn viele Köpfe haben mehr (fachliches) Wissen als einer alleine
    • der große Vorteil bei dieser Vorgehensweise ist, dass früh erkannte Fehler bei Anpassungen wenig kosten im Vergleich zu späteren Projektphasen, wenn alles schon umgesetzt ist

    Warum ist die Teamkultur nicht nur beim Code Review wichtig und wie sieht sie aus?

    • Christians Team entwickelt oft im Pair Programming zusammen und führt danach noch Code Reviews durch
    • hier war oft insb. beim Testen die Einstellung, dass das doch jemand anders macht und nicht die Aufgabe der Softwareentwickler:innen sei
    • aber gerade beim Testen ist die Abstimmung mit den Tester:innen wichtig, damit man nicht den kompletten Code umschreiben muss, wenn man am Test vorbei entwickelt hat

    Wie stellt man sicher, dass alle Teammitglieder:innen sich aktiv einbringen und wie kann eine Führungskraft Teamarbeit fördern/behindern?

    • die Führungskraft ist sehr wichtig, denn ihre zentrale Aufgabe ist die Pflege der Teamkultur
    • die häufig anzutreffene Skepsis bei Entwickler:innen gegenüber Meetings muss von der Führungskraft abgebaut werden
    • Meetings müssen aber natürlich auch einen Mehrwert für alle Teilnehmer:innen bieten und müssen vernünftig geplant und vorbereitet werden
    • auch für Entwickler:innen sind Meetings wichtig, da sie helfen, offene Fragen zu klären und Entscheidungen herbeizuführen
    • Teamarbeit kann die Teammitglieder:innen motivieren, wenn man gemeinsam eine gute Lösung findet und z.B. eine „harte Nuss“ knackt

    Braucht ein Team eine Leitung?

    • das kommt stark auf das Team an

    Storming, Forming, Norming, Performing: gibt es das wirklich in der Praxis?

    • Christian hat das mal in einem Buch gelesen, aber nur dunkel in Erinnerung
    • in der Praxis durchlaufen die Teams diese Phasen wohl tatsächlich, aber intuitiv verhalten sich die Mitglieder:innen meist den Phasen entsprechend

    Wie sieht häufig die (negative) Realität in Sachen Teamarbeit aus bzw. an welchen Fehlern scheitert Teamarbeit häufig?

    • Juniors werden vernachlässigt und bekommen keine oder zu wenig Unterstützung
    • Hierarchiedenken, gerade wenn Softwareentwicklung nicht das Kerngeschäft des Unternehmens ist
    • Introvertiertheit der Teammitglieder:innen
    • aber auch Extrovertiertheit bzw. Egozentrik bei Teammitglieder:innen
    • Mangel an Diversität im Team

    Wie wird man als Entwickler:in „teamfähig“?

    • Persönlichkeitsentwicklung! dazu gibt es viele gute Bücher
    • eine fördernde und fordernde Führungskraft ist wichtig für das Empowerment der Teammitglieder:innen
    • die Führungskraft sollte z.B. One-on-Ones mit Mitarbeitenden führen, immer wieder nachfragen und auch die eigene Entwicklung aufzeigen
    • loben und wertschätzen sollten bei jeder Führungskraft dazu gehören
    • Empathie ist auch wichtig
    • Konflikte sollten schnell gelöst werden

    Wie wichtig ist eine gute Fehlerkultur?

    • sehr wichtig
    • Fehler müssen erlaubt sein und dürfen nicht „geahndet“ werden
    • aber was ist eigentlich ein Fehler? Schludrigkeit ist sicherlich kein Fehler
    • Checklisten können helfen, eine gewisse Basisqualität sicherzustellen

    Wie können schon Azubis in die Teamarbeit integriert werden?

    • einfach mal loslegen und sie an die Hand nehmen
    • Azubis direkt in echte Projekte einbinden, aber ohne harten Deadlines oder großes Fehlerpotential
    • viel loben
    • Checklisten helfen auch hier beim Einstieg

    Was sind die Folgen, wenn nicht im Team gearbeitet wird?

    • Christian hat noch nie jemanden kennengelernt, der/die sich aktiv gewehrt hat gegen Teamarbeit
    • eher haben die Kolleg:innen evtl. Angst mitzumachen
    • den berühmten „10x-Develover“ gibt es nicht, aber Seniors können als Multiplikatoren im Team wirken und Juniors voranbringen und damit das gesamte Team

    Wie/wo kann man dich erreichen?

    Links

    Der Beitrag Teamarbeit bei der Softwareentwicklung mit Christian Kranert – IT-Berufe-Podcast #188 erschien zuerst auf IT-Berufe-Podcast.

    6 May 2024, 3:00 am
  • 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. 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...

    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
  • More Episodes? Get the App
© MoonFM 2024. All rights reserved.