Sustainable Programming, nachhaltige Programmierung, beeinflusst den langfristigen Betrieb von Systemen. Das Sustainable Programming, insbesondere mit spezifischen Programmiersprachen, bildet ein System, dessen Nachhaltigkeit vorteilhaft genutzt werden kann.
Was ist Sustainable Programming?
Software ist überall. Sie ist in intelligenten Autos, Kühlschränken und Mikrowellen. Da sie sich in unserer Welt ausdehnt und sie einnimmt, wird es von entscheidender Bedeutung, Wege zu finden, die es ermöglichen, klar, lesbar und vor allem – einfach – zu sein. Einfachheit bei der Bewältigung von Komplexität im Maßstab zu erreichen, ist die größte Herausforderung, der sich Entwickler jeden Tag stellen müssen.
Nachhaltigkeit wird in der Regel mit der Lebensmittelindustrie, Dieselautos, Großschiffen, Energie und Wohnungsbau in Verbindung gebracht. Es ist jedoch weniger offensichtlich, dass verschiedene Architekturmuster der Softwareentwicklung im Allgemeinen und Algorithmen im Besonderen sehr unterschiedliche CO2-Bilanzen aufweisen können. Es ist nicht so, dass es uns egal ist – jeder will eine lange Akkulaufzeit auf unseren Smartphones oder kleine Rechnungen von unseren Cloud-Service-Providern, aber es ist weniger offensichtlich, wie Dinge wie endlose Null-Checks oder Spaghetti-Code die CO2-Emissionen und die Sicherheit unserer kritischen Infrastruktur beeinflussen.
Sustainable Programming setzt an diesen Punkten an und betrachtet Systeme ganzheitlich, anstatt nur die reine Funktionalität des erzeugten Codes.
Wie funktioniert Sustainable Programming?
Sustainable Programming ist ein wesentliches Element in der Industrie. Fabriken, Flugzeuge, Autos und verschiedenste Alltagsgegenstände sind oder werden computergesteuert. Echtzeitprogramme empfangen externe Interrupts oder lesen Sensoren aus, die mit der physikalischen Welt verbunden sind, und bauen Befehle als Ausgabe darauf auf. Dabei müssen sie auf ihre Eingaben innerhalb von extern festgelegten Zeitvorgaben reagieren. Auch die Sicherheit ist ein zentrales Anliegen der meisten dieser Programme. In diesem Bereich kann ein einzelner Fehler fatale Folgen haben.
Ähnlich wie natürliche Sprachen entwickeln sich auch Programmiersprachen im Laufe der Zeit weiter: Ein neues Merkmal wird hinzugefügt, ein bestehendes Merkmal wird entfernt oder geändert, mehrdeutige Teile einer Spezifikation werden deutlich gemacht, und so weiter. Diese evolutionären Veränderungen können auf externe Faktoren wie neue Hardware, neue Theorie oder Grundlagenforschung, Trends oder Moden in Sprachen und Anwendungen, interne Faktoren wie Sprachmängel, Probleme mit bestehenden Funktionen oder Feedback aus einer Gemeinschaft von Nutzern zurückzuführen sein.
Während das Ziel der Evolution darin besteht, effektivere Sprachen bereitzustellen, untergraben evolutionäre Veränderungen häufig die langfristige Nachhaltigkeit von Software. Eine Änderung der Semantik eines bestehenden Sprachmerkmals oder das Entfernen eines Merkmals insgesamt wird wahrscheinlich das Verhalten einiger bestehender Programme verändern. Andere bestehende Programme sind möglicherweise nicht mehr kompilierbar. Daher kann ein nicht gepflegter Code immer instabiler und unbrauchbarer werden. Die Sprachentwicklung ist einer der Hauptfaktoren für “bit rot” – die allmähliche Verschlechterung der Code-Nutzbarkeit im Laufe der Zeit.
Eigenschaften und Besonderheiten von Sustainable Programming
- Einmal geschriebener Code funktioniert über einen längeren Zeitraum.
- Das Design der Sprache macht es auch Einsteigern leicht, sie bei der Programmierung zu verwenden.
- Der erzeugte Code wird effizient ausgeführt.
- Die Präsentation der Sprache (wie sie auf einer Seite aussieht, wenn sie hübsch gedruckt ist) bietet sich für das Verständnis an.
Abgesehen von Echtzeitsoftware, für die besondere Merkmale hinsichtlich der Nachhaltigkeit gelten, sind webbasierte Programmiersprachen, sowohl clientseitig (HTML, CSS, JavaScript, ActionScript) als auch serverseitig (Ruby, PHP, ASP.NET/C#, Python und andere) ideal für das Sustainable Programming.
Wie kann ich Sustainable Programming beim Entwickeln nutzen?
1) Verwende Refactoring-Tools
Unreine additive Änderungen an einer Sprache führen wahrscheinlich zu Problemen bei der Softwarewartung. Eine Möglichkeit, diese Veränderungen zu mildern, besteht in Refactoring-Tools, die es Deiner Software ermöglichen, sich neben einer Sprache “mitzuentwickeln”. Refactorings können veraltete Features oder Mapping-Code für neue Programmiersprachen ersetzen, die manchmal in IDEs eingebettet oder als externe Tools bereitgestellt werden.
2) Einsatz von Verifikationstechniken
Durch die Bereitstellung einer Reihe von Tests für Deinen Code kann das beabsichtigte Verhalten des Programms erfasst und verglichen werden. Diese Tests können semantische Änderungen, die durch die Sprachentwicklung eingeführt wurden, aufdecken und zeigen, wie Du die Software entsprechend reparierst. Umfangreiche Unit-Tests können Dir helfen, den Fehler zu lokalisieren, während Integrationstests (über einen größeren Umfang) subtilere Änderungen erfassen können, die in einem kleineren Umfang verborgen bleiben.
Ebenso ermöglichen Dir Spezifikationssysteme und automatisierte Verifikationswerkzeuge, falls für Deine Sprache verfügbar, das beabsichtigte Programmverhalten zu erfassen und zu überprüfen, ob es sich in einer bestimmten Weise verhält. Automatisierte Verifikationstechniken können weniger Aufwand erfordern als das Schreiben von Tests von Hand.
3) Abhängigkeitsmanagement
Evolutionäre Probleme werden in Gegenwart von Bibliotheksabhängigkeiten verstärkt. Um diese Probleme zu beheben, solltest Du angeben, welche Versionen von Bibliotheken, Sprachen und Compilern verwendet wurden, um die Software über einige Build-Systeme zu entwickeln und zu testen, wobei man Sprach- und Bibliotheksversionen einbeziehen kann. Die Dokumentation sollte ebenfalls bereitgestellt werden.
All dies ermöglicht es zukünftigen Anwendern und Entwicklern, den ursprünglichen Softwarekontext zu replizieren und in Sprach- und Bibliotheksversionen nach oben zu arbeiten, um die Quelle jeder evolutionären Auswirkung zu finden. Containersysteme (wie Docker) können auch verwendet werden, um den gesamten Entwicklungskontext für zukünftige Replikationen zu erfassen.
Die Sprachentwicklung wird immer ein Problem sein, besonders in neuen Sprachen, die sich schneller ändern, aber mit Sorgfalt und unter Einhaltung der drei oben genannten Techniken kannst Du viele der Schwierigkeiten effektiv bewältigen.
Fazit
Sustainable Programming berücksichtigt die Nachhaltigkeit der Software selbst sowie deren Auswirkungen auf die Umwelt. Um nachhaltigen Code zu erzeugen, musst Du sowohl Sprach- und Bibliotheksänderungen im Design und der Programmierung berücksichtigen sowie Deine Programme ausgiebig testen. Abgesehen von der Echtzeitprogrammierung sind webbasierte Programmiersprachen für Client- und Serveranwendungen ideal für das Sustainable Programming.