Kurzüberblick
-
Kernthema
- Vorstellung von Büchern und begleitenden Materialien, in denen Entwicklerinnen und Entwickler selbst die interne Struktur und Designentscheidungen von Open-Source-Anwendungen erläutern.
-
Wichtigste Punkte
- Softwareentwickler haben, anders als Architekten, historisch gesehen nur wenige Gelegenheiten, die Struktur großer, bedeutender Programme systematisch zu studieren.
- Dadurch entsteht das Problem, dass ähnliche Fehler wiederholt werden, statt bestehende Erfolgsmuster zu nutzen.
- Die Bücher fassen Struktur, Komponenten, Interaktionsweisen und Erkenntnisse aus dem Entwicklungsprozess wichtiger Open-Source-Projekte zusammen.
- Einsteiger können die Denkweise erfahrener Entwickler lernen; fortgeschrittene und erfahrene Entwickler können sich an Lösungsbeispielen für komplexe Designprobleme orientieren.
- Alle Materialien stehen unter der Creative Commons Attribution 3.0 License; Einnahmen aus dem Buchverkauf werden an Amnesty International gespendet.
- Beiträge aus der Community sind möglich, etwa Fehlermeldungen, Übersetzungen oder das Verfassen neuer Kapitel.
Einleitung
-
Strukturelle Grenzen beim Lernen von Softwaredesign
- Architekten betrachten in ihrer Ausbildung zahlreiche Bauwerke und lernen dazu auch die Kritik von Fachleuten kennen.
- Softwareentwickler haben dagegen nur begrenzte Möglichkeiten, große Programme tiefgehend zu verstehen.
- Viele Entwickler sammeln ihre Erfahrung vor allem anhand von Programmen, die sie selbst geschrieben haben.
- In der Folge ist die Wahrscheinlichkeit hoch, ähnliche Designfehler zu wiederholen, statt auf herausragenden früheren Designbeispielen aufzubauen.
-
Ziel der Materialien
- Ziel ist es, die reale Struktur von Open-Source-Anwendungen in analysierbarer Form bereitzustellen.
- Die Projektverantwortlichen erklären selbst die Softwarestruktur und den Hintergrund der Designentscheidungen.
- Entwickler sollen dabei unterstützt werden, die Design-Denkweise anderer Entwickler zu lernen.
Hauptteil
Die Struktur von Open-Source-Projekten wird direkt erklärt
-
Wichtige Analysegegenstände
- Insgesamt vier Bücher behandeln verschiedene Open-Source-Anwendungen und verwandte Themen.
- Jedes Kapitel erläutert die Struktur und den Designansatz eines bestimmten Projekts oder technischen Themas.
- Die Autoren sind Entwickler des jeweiligen Projekts oder einschlägige Fachleute.
-
Zentrale Fragen der Analyse
- Was sind die wichtigsten Komponenten des Programms?
- Wie interagieren die einzelnen Komponenten miteinander?
- Welche Designentscheidungen wurden im Entwicklungsprozess getroffen?
- Welche Lehren wurden bei der Erstellung des Projekts gezogen?
AOSA Volume 1 behandelt die Struktur repräsentativer Open-Source-Anwendungen
-
Wichtige Inhalte
- Behandelt werden unterschiedliche Projekte wie Asterisk, Audacity, Bash, Berkeley DB, CMake, Eclipse, Graphite, HDFS, LLVM, Mercurial, Selenium WebDriver und Sendmail.
- Abgedeckt wird ein breites Spektrum, darunter Systemsoftware, Entwicklungstools, Datenbanken, verteilte Dateisysteme, Kollaborationstools und Visualisierungstools.
-
Bedeutung
- Die interne Struktur von Open-Source-Projekten lässt sich aus der Perspektive der tatsächlichen Entwickler verstehen.
- Designprobleme und Lösungsansätze, die in unterschiedlichen Technologiebereichen wiederholt auftreten, lassen sich vergleichen.
AOSA Volume 2 bietet erweiterte Technologiebereiche und Designbeispiele
-
Wichtige Inhalte
- Behandelt werden unter anderem skalierbare Webarchitekturen, Firefox Release Engineering, FreeRTOS, GDB, GHC, Git, GPSD, MediaWiki, Moodle, nginx, Open MPI, Puppet, PyPy, SQLAlchemy, Twisted und ZeroMQ.
- Enthalten sind vielfältige Themen wie Web, Compiler, Betriebssysteme, verteilte Systeme, Language Runtimes, Frameworks und Infrastrukturtools.
-
Bedeutung
- Es werden Beispiele dafür geboten, wie komplexe Softwaresysteme entworfen und betrieben werden.
- Für fortgeschrittene und erfahrene Entwickler ist dies nützlich, um reale Beispiele für Designentscheidungen zu prüfen.
POSA behandelt Performance-Probleme in Open-Source-Anwendungen
-
Wichtige Inhalte
- Behandelt werden unter anderem High-Performance-Networking in Chrome, die Entwicklung von SocialCalc zu EtherCalc, das Build-System Ninja, Optimierung beim XML-Parsing, MemShrink, Performance in Mobilfunknetzen und Big-Data-Verarbeitung in der Bioinformatik.
-
Bedeutung
- Es zeigt, dass Verbesserungen der Software-Performance nicht nur einfache Codeoptimierung sind, sondern mit strukturellem Design, Deployment-Ansätzen, Netzwerkumgebungen und Datenverarbeitungsweisen zusammenhängen.
- Performance-Probleme lassen sich anhand konkreter Praxisbeispiele analysieren.
500 Lines or Less setzt Kernideen mit wenig Code um
-
Wichtige Inhalte
- Behandelt werden unter anderem visuelle Programmierwerkzeuge, Continuous-Integration-Systeme, dynamische Build-Systeme, Webcrawler, In-Memory-Graphdatenbanken, ereignisbasierte Web-Frameworks, ein Python-Interpreter, OCR, Web-Spreadsheets, statische Analyse, Template-Engines und einfache Webserver.
-
Bedeutung
- Die grundlegenden Designprinzipien werden innerhalb eines begrenzten Codeumfangs erklärt.
- Die Inhalte sind so aufgebaut, dass sich komplexe Systemkonzepte über kleine Implementierungen erlernen lassen.
Lizenz und Beitragsmöglichkeiten sind klar geregelt
-
Lizenz
- Die Materialien werden unter der Creative Commons Attribution 3.0 Unported License bereitgestellt.
- Sie können genutzt werden, sofern die Bedingungen zur Namensnennung erfüllt werden.
-
Verwendung der Einnahmen
- Alle durch den Buchverkauf entstehenden Tantiemen werden an Amnesty International gespendet.
-
Beitragsmöglichkeiten
- Fehler können gemeldet werden.
- Man kann sich an Übersetzungen in andere Sprachen oder Formate beteiligen.
- Es können Kapitel verfasst werden, die die Architektur neuer Open-Source-Projekte erklären.
- Wer Interesse an neuen Übersetzungen oder dem Schreiben von Kapiteln hat, kann Kontakt mit den Projektverantwortlichen aufnehmen.
Fazit
-
Kernaussage
- Diese Materialien sind eine Sammlung von Fallbeispielen, mit der sich die interne Struktur und Designentscheidungen von Open-Source-Anwendungen systematisch lernen lassen.
- Entwickler können nicht nur einzelne Codefragmente, sondern den Aufbau des Gesamtsystems und die Gründe für das Design verstehen.
- Für Einsteiger sind sie ein Ausgangspunkt, um die Denkweise erfahrener Entwickler zu lernen.
- Für fortgeschrittene und erfahrene Entwickler dienen sie als Material, um reale Fälle gelöster komplexer Designprobleme zu vergleichen und zu analysieren.
-
Praktischer Wert
- Sie sind nicht nur für Entwickler nützlich, die Open-Source-Projekte verwenden, sondern auch für jene, die selbst Systeme entwerfen und betreiben.
- Sie helfen dabei, wiederkehrende Designfehler zu reduzieren und bewährte Designbeispiele zu lernen.
- Sie zeigen, dass communitybasierter Wissensaustausch zur Verbesserung der Fähigkeiten in der Softwareentwicklung beitragen kann.
1 Kommentare
Vielen Dank