Modernes Software Engineering - Bessere Software schneller und effektiver entwickeln

Book description

  • Deutsche Ausgabe des Bestsellers von dem Pionier für Continuous Delivery
  • Verbessern Sie Ihre Effektivität, Ihre Kreativität und damit auch Ihren Code
  • Praktischer Leitfaden für Programmierer, technische Leiter und Manager

»Es gibt viele Bücher, die Ihnen sagen, wie Sie ein bestimmtes Software-Engineering-Verfahren anwenden sollen; dieses Buch ist anders. […] Es ist ein Buch für jeden, der die Softwareentwicklung ernsthaft als echte Ingenieursdisziplin behandeln möchte, egal ob Sie gerade erst anfangen oder schon seit Jahrzehnten Software entwickeln.«
— Dave Hounslow, Software Engineer

In diesem Buch gibt Ihnen der Continuous-Delivery-Pionier David Farley praktische Strategien an die Hand, mit denen Sie Software-Projekte effektiver umsetzen, erfolgreicher managen und die Qualität Ihrer Programme grundlegend verbessern können – und damit auch Ihre tägliche Arbeit.

David Farley richtet sich an Programmierer, technische Leiter und Manager unabhängig von ihrer Erfahrung. Er beleuchtet langlebige Strategien und Prinzipien, die das Herzstück der effektiven Softwareentwicklung bilden. Dabei unterscheidet er zwischen zwei Kerndisziplinen: Erkunden und Lernen sowie Umgang mit Komplexität. Für jede der beiden vermittelt er praxisnahe Konzepte und Prinzipien, die Ihnen helfen, den gesamten Entwicklungsprozess zu verbessern, von Ihrer Denkweise bis hin zur Qualität Ihres Codes. Dafür beschreibt er effektive Strategien, die nachweislich zum Erfolg führen.

Farleys Konzepte und Techniken bilden einen ganzheitlichen, wissenschaftlichen und fundierten Ansatz zur Lösung praktischer Probleme bei der Softwareentwicklung unter realistischen wirtschaftlichen Bedingungen. Dieser allgemeingültige und langlebige Ansatz kann Ihnen helfen, sogar Probleme zu lösen, die Ihnen bisher nie begegnet sind. Er bietet Ihnen einen tiefen Einblick in Ihre tägliche Arbeit und unterstützt sie dabei, bessere Software schneller, effektiver und mit mehr Freude zu entwickeln.

Table of contents

  1. Stimmen zum Buch
  2. Impressum
  3. Vorwort
  4. Einleitung
    1. Eine Definition von Software Engineering‌?
    2. Der Inhalt des Buchs
  5. Danksagungen
  6. Über den Autor
  7. Teil I: Was ist Software Engineering?
  8. Kapitel 1: Einführung
    1. 1.1 Engineering – Die praktische Anwendung von Wissenschaft
    2. 1.2 Was ist Software ‌Engineering?
    3. 1.3 Die Rückeroberung des »Software Engineering«
    4. 1.4 Wie man Fortschritte macht
    5. 1.5 Die Geburt des Software Engineering
    6. 1.6 Paradigmenwechsel‌
    7. 1.7 Zusammenfassung
  9. Kapitel 2: Was ist Engineering?‌
    1. 2.1 Die Produktion ist nicht unser Problem
    2. 2.2 Konstruktionsingenieurwesen, nicht Produktionstechnik
    3. 2.3 Eine Arbeitsdefinition von Engineering‌
    4. 2.4 Engineering != Code‌
    5. 2.5 Warum ist Engineering so wichtig?
    6. 2.6 Die Grenzen von »Handwerk‌«
    7. 2.7 Präzision‌ und Skalierbarkeit‌
    8. 2.8 Komplexität‌ handhaben
    9. 2.9 Reproduzierbarkeit‌ und Messgenauigkeit‌
    10. 2.10 Engineering, Kreativität und Handwerk
    11. 2.11 Warum das, was wir tun, kein Software Engineering ist
    12. 2.12 Kompromisse‌
    13. 2.13 Die Illusion des Fortschritts
    14. 2.14 Der Weg vom Handwerk zum Engineering
    15. 2.15 Handwerk ist nicht genug
    16. 2.16 Zeit für ein Umdenken?
    17. 2.17 Zusammenfassung
  10. Kapitel 3: Grundlagen eines Engineering-Ansatzes
    1. 3.1 Eine Branche im Wandel?
    2. 3.2 Die Bedeutung von Messungen‌
    3. 3.3 Anwendung von Stabilität und Durchsatz
    4. 3.4 Die Grundlagen einer Ingenieursdisziplin für die Software-Entwicklung
    5. 3.5 Experten im Lernen
    6. 3.6 Experten im Umgang mit Komplexität
    7. 3.7 Zusammenfassung
  11. Teil II: Für das Lernen optimieren
  12. Kapitel 4: Iterativ arbeiten
    1. 4.1 Praktische Vorteile iterativen Arbeitens
    2. 4.2 Iteration als defensive Design-Strategie
    3. 4.3 Der Reiz des Plans
    4. 4.4 Praktische Aspekte des iterativen Arbeitens
    5. 4.5 Zusammenfassung
  13. Kapitel 5: Feedback
    1. 5.1 Ein praktisches Beispiel für die Wichtigkeit von Feedback
    2. 5.2 Feedback bei der Entwicklung
    3. 5.3 Feedback bei der Integration
    4. 5.4 Feedback beim Design
    5. 5.5 Feedback zur Architektur
    6. 5.6 Frühzeitiges Feedback bevorzugen
    7. 5.7 Feedback beim Produktdesign
    8. 5.8 Feedback in Unternehmen und Kultur
    9. 5.9 Zusammenfassung
  14. Kapitel 6: Inkrementalismus
    1. 6.1 Die Bedeutung von Modularität‌
    2. 6.2 Inkrementalismus im Unternehmen‌
    3. 6.3 Werkzeuge für den Inkrementalismus‌
    4. 6.4 Die Auswirkungen von Änderungen‌ begrenzen
    5. 6.5 Inkrementelles Design‌
    6. 6.6 Zusammenfassung
  15. Kapitel 7: Empirismus
    1. 7.1 In der Realität verankert
    2. 7.2 Trennung von Epirismus und Experiment
    3. 7.3 »Ich kenne diesen Bug!«
    4. 7.4 Selbsttäuschung vermeiden
    5. 7.5 Eine Realität erfinden, die zu unserer Argumentation passt
    6. 7.6 Von der Realität geleitet
    7. 7.7 Zusammenfassung
  16. Kapitel 8: Experimentell vorgehen
    1. 8.1 Was bedeutet »experimentell vorgehen«?
    2. 8.2 Feedback‌
    3. 8.3 ‌Hypothese
    4. 8.4 Messung‌
    5. 8.5 Kontrolle der Variablen‌‌
    6. 8.6 Automatisierte Tests als Experimente
    7. 8.7 Einordnung der Versuchsergebnisse der Tests in den Kontext
    8. 8.8 Der Umfang eines Experiments‌
    9. 8.9 Zusammenfassung
  17. Teil III: Optimieren für den Umgang mit Komplexität
  18. Kapitel 9: Modularität
    1. 9.1 Merkmale von Modularität
    2. 9.2 Die Bedeutung von gutem Design wird unterschätzt
    3. 9.3 Die Bedeutung von Testbarkeit‌
    4. 9.4 Für Testbarkeit zu designen verbessert die Modularität
    5. 9.5 Services und Modularität
    6. 9.6 Deploybarkeit und Modularität‌
    7. 9.7 Modularität auf verschiedenen Ebenen
    8. 9.8 Modularität menschlicher Systeme
    9. 9.9 Zusammenfassung
  19. Kapitel 10: Kohäsion
    1. 10.1 ‌Modularität und Kohäsion: Grundlagen des Designs
    2. 10.2 Der grundlegende Abbau von Kohäsion
    3. 10.3 Kontext ist wichtig‌
    4. 10.4 High-Performance-Software
    5. 10.5 Verbindung zur Kopplung
    6. 10.6 Hohe Kohäsion durch TDD‌‌
    7. 10.7 Wie erreicht man gute Kohäsion bei Software?
    8. 10.8 Kosten von schlechter Kohäsion
    9. 10.9 Kohäsion in menschlichen Systemen
    10. 10.10 Zusammenfassung
  20. Kapitel 11: Trennung von Zuständigkeiten
    1. 11.1 Dependency Injection
    2. 11.2 Trennung von wesentlicher und zufälliger Komplexität
    3. 11.3 Bedeutung von ‌DDD
    4. 11.4 ‌Testbarkeit
    5. 11.5 Ports‌ & Adapters‌
    6. 11.6 Wann sollte »Ports & Adapters« eingesetzt werden?
    7. 11.7 Was ist eine API‌?
    8. 11.8 Verwendung von ‌TDD zur Förderung der Trennung von Zuständigkeiten
    9. 11.9 Zusammenfassung
  21. Kapitel 12: Information Hiding und Abstraktion
    1. 12.1 Abstraktion oder Information Hiding
    2. 12.2 Was verursacht den »Big Ball of Mud«?
    3. 12.3 Unternehmerische und unternehmenskulturelle Probleme
    4. 12.4 Technische Probleme und Probleme des Designprozesses
    5. 12.5 Furcht vor Over-Engineering‌
    6. 12.6 Verbesserung der Abstraktion‌ durch Testen‌
    7. 12.7 Die Macht der Abstraktion
    8. 12.8 Undichte Abstraktionen‌
    9. 12.9 Geeignete Abstraktionen auswählen
    10. 12.10 Abstraktionen in der Anwendungsdomäne
    11. 12.11 Abstrakte zufällige Komplexität
    12. 12.12 Systeme und Code von ‌Drittanbietern isolieren
    13. 12.13 Immer das Verbergen von Informationen bevorzugen
    14. 12.14 Zusammenfassung
  22. Kapitel 13: Kopplung handhaben
    1. 13.1 Kosten von Kopplung
    2. 13.2 ‌Hochskalieren
    3. 13.3 Microservices‌
    4. 13.4 Entkopplung kann mehr Code bedeuten‌
    5. 13.5 Lose Kopplung ist nicht das Einzige, was wichtig ist
    6. 13.6 Lose Kopplung bevorzugen‌‌
    7. 13.7 Wie unterscheidet sich dies von der Trennung von Zuständigkeiten?‌
    8. 13.8 DRY ist zu simpel
    9. 13.9 Asynchronität als Werkzeug für lose Kopplung
    10. 13.10 Für lose Kopplung designen
    11. 13.11 Lose Kopplung in menschlichen Systemen
    12. 13.12 Zusammenfassung
  23. Teil IV: Werkzeuge zur Unterstützung von Engineering in der Software-Entwicklung
  24. Kapitel 14: Die Werkzeuge einer Ingenieursdisziplin‌‌
    1. 14.1 Was ist Software-Entwicklung?
    2. 14.2 Testbarkeit als Werkzeug‌
    3. 14.3 Messpunkte
    4. 14.4 Schwierigkeiten, die Testbarkeit zu erreichen‌
    5. 14.5 Wie man die Testbarkeit verbessert‌
    6. 14.6 Deploybarkeit‌
    7. 14.7 Geschwindigkeit
    8. 14.8 Die Variablen kontrollieren‌
    9. 14.9 Continuous Delivery
    10. 14.10 Allgemeine Werkzeuge zur Unterstützung von Engineering
    11. 14.11 Zusammenfassung
  25. Kapitel 15: Der moderne Software Engineer
    1. 15.1 Engineering als menschlicher Prozess
    2. 15.2 Digital disruptive Unternehmen
    3. 15.3 Ergebnisse vs. Mechanismen
    4. 15.4 Langlebigkeit und allgemeine Anwendbarkeit
    5. 15.5 Grundlagen einer Ingenieursdisziplin
    6. 15.6 Zusammenfassung

Product information

  • Title: Modernes Software Engineering - Bessere Software schneller und effektiver entwickeln
  • Author(s): David Farley
  • Release date: August 2023
  • Publisher(s): mitp Verlag
  • ISBN: 9783747506363