Dieser Artikel entstand aus einer Diskussion im Team zum Thema Null-Safety in der Programmierung. Dabei haben wir uns über die Bedeutung von defensiver Programmierung und die Vermeidung von Nullpointer-Exceptions ausgetauscht.
Im Speziellen ging es um die Verwendung von String.isEmpty:
import org.apache.commons.lang3.StringUtils;
...
String string = null;
string.isEmpty() || StringUtils.isEmpty(string)
Die Verwendung von StringUtils in diesem Beispiel würde verhindern, dass eine Nullpointer-Exception auftreten kann. Diese Vorgehensweise fällt meiner Meinung nach in die Kategorie „Defensives Programmieren“.
Defensive Programming geht davon aus, dass Software niemals fehlerfrei sein kann. Es wird immer Lücken und Schwachstellen geben, die ausgenutzt werden können. Deshalb ist es wichtig, mögliche Probleme im Voraus zu erkennen und darauf vorbereitet zu sein.
Defensives Programmieren ist aber nicht nur eine technische Angelegenheit. Sie hat auch einen philosophischen Aspekt. Es geht darum, proaktiv zu handeln und sich auf das Schlimmste vorzubereiten, anstatt zu hoffen, dass alles glatt läuft.
In der Software-Entwicklung bedeutet dies, dass man sich immer bewusst macht, dass Fehler passieren können und dass man Maßnahmen ergreift, um diese Fehler abzufangen. Man geht davon aus, dass es nicht ausreicht, den Code zu schreiben, sondern dass man sich darauf vorbereiten muss, dass der Code auch fehlerhaft sein kann.
Defensives Programmieren ist meiner Meinung nach eine wichtige philosophische Grundhaltung für uns Software-Entwickler, die uns daran erinnert, dass wir uns nicht darauf verlassen können, dass unsere Software fehlerfrei ist und vor allem auch bleibt. Wir sollten uns immer darauf vorbereiten, dass Fehler auftreten können, und Maßnahmen ergreifen, um diese Fehler abzufangen.
Als Führungskraft ist es unsere Aufgabe, immer wieder deutlich zu machen, dass diese „Philosophie“ ein wichtiger Wert im Team sein muss.