Modernes Software Engineering -  David Farley

Modernes Software Engineering (eBook)

Bessere Software schneller und effektiver entwickeln

(Autor)

eBook Download: EPUB
2023 | 1. Auflage
288 Seiten
MITP Verlags GmbH & Co. KG
978-3-7475-0636-3 (ISBN)
Systemvoraussetzungen
34,99 inkl. MwSt
  • Download sofort lieferbar
  • Zahlungsarten anzeigen

»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.



David Farley ist Gründer und Consultant von Continuous Delivery Ltd und verfügt über jahrelange Erfahrung als Programmierer, Software Engineer und Systemarchitekt. Seine bahnbrechenden Ansätze haben die Arbeit von Entwicklern und Teams revolutioniert. Als Head of Software Development für London Multi Asset Exchange (LMAX) hat er eines der schnellsten Finanzsysteme der Welt aufgebaut. Er war einer der ersten, der agile Methoden wie Continuous Integration und automatisierte Tests angewendet hat und ist Betreiber des erfolgreichen Youtube-Kanals »Continuous Delivery«.

Kapitel 1:
Einführung


1.1  Engineering – Die praktische Anwendung von Wissenschaft


Software-Entwicklung ist ein Prozess des Entdeckens und Erkundens; um darin erfolgreich zu sein, müssen Software-Entwickler Experten im Lernen werden.

Der beste Ansatz zum Lernen ist die Wissenschaft, also müssen wir die Techniken und Strategien der Wissenschaft übernehmen und sie auf unsere Probleme anwenden. Dies wird oft dahin gehend missverstanden, dass wir zu Physikern werden müssen, die alles mit einer für Software unangemessenen Präzision messen. Engineering ist pragmatischer als das.

Wenn ich sage, dass wir die Techniken und Strategien der Wissenschaft anwenden sollten, meine ich, dass wir einige ziemlich grundlegende, aber dennoch äußerst wichtige Konzepte anwenden sollten.

Die wissenschaftliche Methode, die die meisten von uns in der Schule gelernt haben, wird von Wikipedia wie folgt beschrieben:

  • Charakterisieren: Beobachte den aktuellen Zustand.

  • Hypothesen aufstellen: Erstelle eine Beschreibung, eine Theorie, die die Beobachtung erklären könnte.

  • Vorhersagen: Triff eine Vorhersage auf Grundlage der Hypothese.

  • Experimentieren: Teste die Vorhersage.

Wenn wir unser Denken auf diese Weise organisieren und beginnen, Fortschritte auf der Grundlage vieler kleiner, formloser Experimente zu machen, verringern wir das Risiko, vorschnell falsche Schlüsse zu ziehen, und leisten am Ende bessere Arbeit.

Wenn wir damit beginnen, die Variablen in unseren Experimenten zu kontrollieren, um mehr Konsistenz und Zuverlässigkeit in unseren Ergebnissen zu erreichen, führt uns das in Richtung deterministischerer Systeme und Code. Wenn wir beginnen, unseren Ideen gegenüber skeptisch zu sein und zu untersuchen, wie wir sie widerlegen könnten, können wir schlechte Ideen schneller erkennen und eliminieren sowie viel schneller Fortschritte machen.

Dieses Buch basiert auf einem praktischen, pragmatischen Ansatz zur Lösung von Softwareproblemen, basierend auf einer formlosen Adaption grundlegender wissenschaftlicher Prinzipien, mit anderen Worten: Engineering!

1.2  Was ist Software Engineering?


Die Definition von Software Engineering, die meinen Überlegungen in diesem Buch zugrunde liegt, lautet wie folgt:

Software Engineering ist die Anwendung eines empirischen, wissenschaftlichen Ansatzes, um effiziente, wirtschaftliche Lösungen für praktische Probleme in der Softwareentwicklung zu finden.

Die Anwendung eines Engineering-Ansatzes bei der Software-Entwicklung ist vor allem aus zwei Gründen wichtig. Erstens ist Software-Entwicklung immer eine Praxis des Entdeckens und Lernens, und zweitens muss unsere Fähigkeit zu lernen nachhaltig sein, wenn es unser Ziel ist, »effizient« und »wirtschaftlich« zu sein.

Das bedeutet, dass wir die Komplexität der von uns geschaffenen Systeme so steuern müssen, dass unsere Fähigkeit, Neues zu lernen und uns anzupassen, erhalten bleibt.

Wir müssen also Experten im Lernen und Experten im Umgang mit Komplexität werden.

Es gibt fünf Techniken, die die Grundlage für diese Fokussierung auf das Lernen bilden. Um Experten im Lernen zu werden, brauchen wir insbesondere Folgendes:

  • Iteration

  • Feedback

  • Inkrementalismus

  • Experimente

  • Empirismus

Dies ist ein evolutionärer Ansatz für die Entwicklung komplexer Systeme. Komplexe Systeme entspringen nicht bereits vollständig ausgearbeitet unserer Vorstellungskraft. Sie sind das Ergebnis vieler kleiner Schritte, in denen wir unsere Ideen ausprobieren und dabei auf Erfolge und Misserfolge reagieren. Dies sind die Werkzeuge, die uns Erkunden und Entdecken ermöglichen.

Diese Arbeitsweise bringt einige Einschränkungen in Bezug darauf mit sich, wie wir sicher voranschreiten können. Wir müssen in der Lage sein, so zu arbeiten, dass die Entdeckungsreise, die das Herzstück eines jeden Software-Projekts ist, erleichtert wird.

Folglich müssen wir neben der Konzentration auf das Lernen so arbeiten, dass wir Fortschritte machen können, wenn die Antworten und manchmal sogar die Richtung unsicher sind.

Dazu müssen wir Experten im Umgang mit Komplexität werden. Unabhängig von der Art der Probleme, die wir lösen, oder der Technologien, die wir zu ihrer Lösung einsetzen, ist der Umgang mit der Komplexität der Probleme, mit denen wir konfrontiert sind, und den Lösungen, die wir dafür anwenden, ein zentrales Unterscheidungsmerkmal zwischen schlechten und guten Systemen.

Um Experten im Umgang mit Komplexität zu werden, brauchen wir Folgendes:

  • Modularität

  • Kohäsion

  • Trennung von Zuständigkeiten (engl. Separation of Concerns)

  • Abstraktion

  • Lose Kopplung

Es ist leicht, diese Konzepte zu betrachten und sie als bekannt abzutun. Ja, Sie sind fast sicher mit allen von ihnen vertraut. Ziel dieses Buchs ist es, sie zu ordnen und in eine zusammenhängende Strategie für die Entwicklung von Softwaresystemen zu überführen, die Ihnen hilft, Ihr Potenzial bestmöglich auszuschöpfen.

Dieses Buch beschreibt, wie diese zehn Konzepte als Werkzeuge zur Steuerung der Software-Entwicklung eingesetzt werden können. Es beschreibt anschließend eine Reihe von Konzepten, die als praktische Werkzeuge dienen, um eine effektive Strategie für jede Software-Entwicklung voranzutreiben. Zu diesen Konzepten gehören die folgenden:

  • Testbarkeit

  • Deploybarkeit

  • Geschwindigkeit

  • Kontrolle der Variablen[1]

  • Continuous Delivery (dt. Kontinuierliche Bereitstellung)

Wenn wir diese Denkweise anwenden, sind die Ergebnisse tiefgreifend. Wir erstellen Software von höherer Qualität, wir produzieren schneller, und die Mitarbeiter der Teams, die diese Prinzipien anwenden, berichten, dass sie mehr Spaß an ihrer Arbeit haben, weniger Stress empfinden und eine bessere Work-Life-Balance haben.[2]

Das sind gewagte Behauptungen, aber auch sie werden durch Daten gestützt.

1.3  Die Rückeroberung des »Software Engineering«


Ich habe mit dem Titel dieses Buchs gerungen, nicht weil ich nicht wusste, wie ich es nennen wollte, sondern weil unsere Branche die Bedeutung von Engineering im Zusammenhang mit Software so neu definiert hat, dass der Begriff abgewertet wurde.

In der Software-Branche wird er oft einfach als Synonym für »Code« angesehen oder als etwas, das die Leute abschreckt, da es als übermäßig bürokratisch und verfahrenstechnisch gilt. Für echtes Engineering könnte nichts weiter von der Wahrheit entfernt sein.

In anderen Disziplinen bedeutet Engineering einfach »Dinge, die funktionieren«. Es ist der Prozess bzw. das Verfahren, das angewendet wird, um die Chance, gute Arbeit zu leisten, zu erhöhen.

Wenn unsere Verfahren im »Software Engineering« es uns nicht ermöglichen, bessere Software schneller zu entwickeln, dann sind sie nicht wirklich im Sinne des Engineerings, und wir sollten sie ändern!

Das ist der Grundgedanke dieses Buchs, und sein Ziel ist es, ein nachvollziehbar konsistentes Modell zu beschreiben, das einige Grundprinzipien zusammenfasst, die die Grundlage jeder guten Software-Entwicklung bilden.

Es gibt nie eine Erfolgsgarantie, aber wenn Sie sich diese gedanklichen Hilfsmittel und organisatorischen Grundsätze zu eigen machen und sie auf Ihre Arbeit anwenden, werden Sie Ihre Erfolgschancen sicherlich erhöhen.

1.4  Wie man Fortschritte macht


Software-Entwicklung ist eine komplexe, anspruchsvolle Tätigkeit. Sie ist in gewisser Weise eine der komplexesten Tätigkeiten, die unsere Spezies ausübt. Es ist lächerlich zu erwarten, dass jeder Einzelne oder sogar jedes Team die Bewältigung dieser Aufgabe jedes Mal von Grund auf neu erfinden kann oder sollte, wenn wir ein neues Projekt beginnen.

Wir haben gelernt und lernen weiterhin, was funktioniert und was nicht. Wie können wir also, sowohl als gesamte Branche als auch als Teams, Fortschritte machen und auf den Schultern von Giganten aufbauen, wie Isaac Newton einmal sagte, wenn jeder bei allem ein Veto einlegen kann? Wir brauchen einige vereinbarte Grundsätze und eine Disziplin, die unsere Aktivitäten leitet.

Die Gefahr bei dieser Denkweise besteht darin, dass sie bei falscher Anwendung zu drakonischem, übermäßig direktivem »Entscheidung-von-oben«-Denken führen kann.

Wir werden auf frühere schlechte Denkmuster zurückfallen, nämlich dass die Aufgabe von Managern und Führungskräften darin besteht, allen anderen zu sagen, was sie zu tun haben und wie sie es tun sollen.

Das große Problem bei »präskriptivem« oder übermäßig »direktivem« Vorgehen ist, was wir tun sollen, wenn einige unserer Ansichten falsch oder unvollständig sind. Das wird unvermeidlich sein. Wie können wir also schlechte, eingefahrene Konzepte hinterfragen und neue, potenziell großartige, jedoch unerprobte Konzepte bewerten?

Es gibt eine sehr gute Herangehensweise dafür, diese Probleme zu lösen. Es ist ein Ansatz, der uns die geistige Freiheit gibt, Dogmen zu hinterfragen und zu widerlegen und zwischen modischen, jedoch schlechten, und großartigen Konzepten zu unterscheiden, unabhängig davon, aus welcher Quelle sie stammen. Er ermöglicht es uns, die schlechten Ideen durch bessere zu ersetzen und gute...

Erscheint lt. Verlag 22.8.2023
Sprache deutsch
Themenwelt Mathematik / Informatik Informatik Betriebssysteme / Server
ISBN-10 3-7475-0636-4 / 3747506364
ISBN-13 978-3-7475-0636-3 / 9783747506363
Haben Sie eine Frage zum Produkt?
EPUBEPUB (Wasserzeichen)
Größe: 4,1 MB

DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasser­zeichen und ist damit für Sie persona­lisiert. Bei einer missbräuch­lichen Weiter­gabe des eBooks an Dritte ist eine Rück­ver­folgung an die Quelle möglich.

Dateiformat: EPUB (Electronic Publication)
EPUB ist ein offener Standard für eBooks und eignet sich besonders zur Darstellung von Belle­tristik und Sach­büchern. Der Fließ­text wird dynamisch an die Display- und Schrift­größe ange­passt. Auch für mobile Lese­geräte ist EPUB daher gut geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür die kostenlose Software Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür eine kostenlose App.
Geräteliste und zusätzliche Hinweise

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

Mehr entdecken
aus dem Bereich
Das Praxisbuch für Administratoren und DevOps-Teams

von Axel Miesen

eBook Download (2022)
Rheinwerk Computing (Verlag)
27,93