Federico Mena-Quintero
federico@gnome.org 2013
Miguel de Icaza
miguel@gnome.org
Morten Welinder
mortenw@gnome.org

This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.

Als besondere Ausnahme gewähren die Inhaber des Urheberrechts die Erlaubnis, den Beispiel-Code in diesem Dokument ohne Einschränkungen unter den Bedingungen Ihrer Wahl zu kopieren, zu verändern und weiterzugeben.

Guter, lesbarer Code erhält die Wartungsfähigkeit des Projekts
Mario Blättermann
mario.blaettermann@gmail.com 2016, 2018
Christian Kirbach
christian.kirbach@gmail.com 2016, 2020
Stefan Melmuk
stefan.melmuk@gmail.com 2018
Tim Sabsch
tim@sabsch.com 2021

# Die Bedeutung von gutem Code

GNOME ist ein ambitioniertes Freies Softwareprojekt und besteht aus vielen Softwarepaketen, die mehr oder weniger unabhängig voneinander sind. Ein beträchtlicher Anteil der Arbeit in GNOME wird von Freiwilligen übernommen. Auch wenn viele Menschen in Voll- oder Teilzeit an GNOME arbeiten, machen Freiwillige dennoch einen Großteil an den Mitwirkenden aus. Programmierer kommen und gehen wieder, und widmen GNOME unterschiedlich viel Zeit. Das »echte Leben« der Menschen ändert sich vielleicht und wirkt sich darauf aus, viele Zeit sie in GNOME stecken können und wollen.

Softwareentwicklung erfordert viel Zeit und Mühe. Daher können Teilzeit-Mitwirkende nur selten alleine große Projekte starten. Es ist viel einfacher und belohnender, wenn sie zu bestehenden Projekten beitragen, weil dies schnell zu sichtbaren und nützlichen Ergebnissen führt.

Daraus schlussfolgern wir, dass bestehende Projekte es so einfach wie möglich für Menschen machen müssen, an ihnen mitzuwirken. Ein Teilaspekt davon ist, sicherzustellen, dass die Programme einfach zu lesen, verstehen, ändern und warten sind.

Unordentlicher Code ist schwer zu lesen und führt dazu, dass Menschen das Interesse an ihm verlieren, wenn sie ihn nicht verstehen können. Es ist weiterhin wichtig, dass Programmierer den Code verstehen können, damit sie bereits nach kurzer Zeit durch Fehlerbehebungen und Verbesserungen mitwirken können. Quellcode ist eine Form von Kommunikation und für Menschen gedacht - nicht für Rechner. So wie Sie vermutlich keinen Roman mit lauter Rechtschreibfehlern, schlechter Grammatik und nachlässig gesetzter Interpunktion lesen möchten, sollten auch Programmierer guten Code schreiben, der leicht von anderen Leuten verstanden und bearbeitet werden kann.

Im folgenden finden Sie einige wichtige Qualitätsmerkmale von gutem Code:

# Übersichtlichkeit

Übersichtlicher Code ist mit geringem Aufwand leicht zu lesen. Dritte können ihn einfach verstehen. Darunter fällt der Programmierstil selbst (Platzierung von geschweiften Klammern, Einrückung, Variablennamen) und der eigentliche Kontrollfluss im Code.

# Konsistenz

Konsistenter Code erlaubt zu verstehen, wie ein Programm funktioniert. Beim Lesen von konsistentem Code erstellt man unbewusst einige Annahmen und Erwartungen, wie der Code funktioniert, sodass man leichter Änderungen einpflegen kann. Code, der an unterschiedlichen Orten gleich aussieht, sollte auch gleich funktionieren.

# Erweiterbarkeit

Allgemeiner Code ist einfacher wiederzuverwenden und zu ändern als sehr spezifischer Code mit vielen hartcodierten Annahmen. Wenn jemand einem Programm eine neue Funktion hinzufügen möchte, ist dies natürlich einfacher, wenn der Code von Anfang an erweiterbar ist. Code, der nicht auf diese Weise geschrieben wurde, kann dazu führen, dass Menschen hässliche Hacks implementieren müssen, um Funktionen hinzuzufügen.

# Korrektheit

Korrekter Code führt dazu, dass man weniger Zeit mit Fehlersuche verbringt, die man stattdessen in neue Funktionsmerkmale stecken kann. Auch Nutzer schätzen korrekten Code, denn niemand mag Programmabstürze. Code, der auf Korrektheit und Stabilität ausgelegt ist (also Code, der explizit versucht sicherzustellen, dass der Programmstatus erhalten bleibt), verhindert alle möglichen ärgerlichen Fehler.

# Bücher

Code Complete von Steve McConnell.

Refactoring: Improving the Design of Existing Code von Martin Fowler.

Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software von Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides.

Object-Oriented Design Heuristics von Arthur Riel.