Читать книгу Prinzipien des Softwaredesigns - John Ousterhout - Страница 16
Strategische Programmierung
ОглавлениеDer erste Schritt hin zu einem guten Softwaredesign ist die Erkenntnis, dass funktionierender Code nicht ausreicht. Es ist nicht akzeptabel, unnötige Komplexität in das System zu bringen, um Ihre aktuelle Aufgabe schneller abschließen zu können. Am wichtigsten ist die langfristige Struktur des Systems. In jedem System entsteht ein Großteil des Codes dadurch, dass die bestehende Codebasis erweitert wird. Daher ist es Ihre Aufgabe, beim Entwickeln diese zukünftigen Erweiterungen zu ermöglichen. Sie sollten also nicht den funktionierenden Code als wichtigstes Ziel ansehen, auch wenn Ihr Code natürlich funktionieren muss. Vor allem müssen Sie ein sehr gutes Design schaffen, das zudem noch funktioniert. Das ist strategisches Programmieren.
Für das strategische Programmieren braucht man eine Investitionsmentalität. Statt den schnellsten Weg zum Abschluss Ihres aktuellen Projekts zu wählen, müssen Sie Zeit investieren, um das Design des Systems zu verbessern. Diese Investitionen werden Sie kurzfristig ein wenig verlangsamen, aber langfristig werden Sie damit schneller sein, wie Abbildung 3-1 demonstriert.
Abbildung 3-1: Zu Beginn wird ein taktisches Vorgehen beim Programmieren für einen schnelleren Fortschritt sorgen als ein strategischer Ansatz. Aber die Komplexität summiert sich beim taktischen Ansatz schneller auf, was die Produktivität verringert. Mit der Zeit führt das strategische Vorgehen zu schnellerem Fortschritt. Beachten Sie: Dieses Diagramm soll nur der qualitativen Veranschaulichung dienen – ich kenne keine empirischen Untersuchungen zum genauen Verlauf der Kurven.
Manche der Investitionen werden proaktiv sein. So lohnt es sich zum Beispiel, für jede neue Klasse ein wenig Zeit aufzuwenden, um ein einfaches Design zu finden – statt also die erste Idee zu implementieren, die Ihnen in den Sinn kommt, probieren Sie ein paar alternative Designs aus und wählen das sauberste davon. Versuchen Sie, sich ein paar Richtungen vorzustellen, in die sich das System in Zukunft ändern könnte, und stellen Sie sicher, dass diese mit Ihrem Design möglich sind. Das Schreiben guter Dokumentation ist ein weiteres Beispiel für eine proaktive Investition.
Andere Investitionen werden eher reaktiv sein. Egal, wie viel Sie im Voraus investieren – Sie werden bei Ihren Designentscheidungen immer Fehler machen. Irgendwann werden diese Fehler offensichtlich werden. Entdecken Sie ein Designproblem, ignorieren Sie es nicht einfach oder programmieren darum herum – nehmen Sie sich ein wenig Zeit, um es zu beheben. Wenn Sie strategisch programmieren, werden Sie immer wieder kleine Verbesserungen am Systemdesign vornehmen. Das ist das Gegenteil von taktischer Programmierung, bei der Sie fortlaufend für ein wenig mehr Komplexität sorgen, die in der Zukunft für Probleme sorgen wird.