GreenCoding

Aufklärungsarbeit energieintensive Programmieranwendungen

Handlungsempfehlung 1: Handy so selten als möglich ersetzen!

Begründung: Für den Lebenszyklus eines Smartphones kann davon ausgegangen werden, dass die Endnutzung mit etwa 10% gegenüber der Produktion mit 90% zur Gesamtemission beiträgt.

Handlungsempfehlung 2: Video schauen auf Handys und noch mehr auf größeren Screenen vermeiden!

Videokonsum auf Handys ist äußerst energieintensiv. Das Schauen eines zehnminütigen HD-Videos auf dem Handy entspricht beispielsweise dem fünfminütigen Gebrauch eines 2.000 W Ofens auf Volllast (Vgl. The Shift Project, 2020, IIId 2. Energy consumption of digital action)

Konkretes Coding

Handlungsempfehlung 1: Einbezug Faktor Mensch bei der Programmierung!

Ressourcenschonendes Programmieren bedeutet nicht, den perfekten Code zu schreiben, optimale Speicher-, Energie- und Geschwindigkeitsresultate zu erzielen und jede Zeile überzuanalysieren. Insbesondere in Anwendungssoftware ist der Faktor ‚Mensch‘ erheblich und das performanteste Backend wird eine unintuitive Oberfläche nicht ausgleichen können. Es sollten daher keine überflüssigen Funktionen implementiert werden und die Zielgruppe in den Planungsprozess einbezogen werden(Rentrop, 2021).

Handlungsempfehlung 2: Im Fall der Wahl zwischen verschiedenen Softwaresprachen C verwenden.

Ein Ergebnis der Forschung ist, dass C in nahezu allen Vergleichen sein energieeffizientes Profil beweist (Vgl. Pereira; Couto u. a., 2017). Darum sollte, sofern nicht genauere Analysen vorliegen, vereinfachend auf C abgestellt werden.

Handlungsempfehlung 3: Beachte beim Programmieren die folgenden Aspekte:

• Kenne die Eigenheiten der verwendeten Programmiersprache
→ Beispiel: Vergleiche Array-Typen in C# und Java15
• Beachte die Weiterentwicklung innerhalb der Programmiersprache, denn neue Sprachspezifikationen können alte ‚Best Practices‘ ersetzen
→ Beispiel: Java stellt seit Java 8 (2014) default methods in Interfaces zur Verfügung, kam diese Evolution in der .NET-Welt erst 2019 mit C# 8.0.
• Beachte bekannte ‚Best Practices‘ und die Empfehlungen der Sprachentwickler:innen
• Teste die Umsetzung der häufig verwendeten Methodenmuster und optimiere insbesondere diese; hinterfrage hier auch Altbewährtes!16

Handlungsempfehlung 4: Vergleiche die Performance bei der Wahl zwischen verschiedenen Containern!

Regelmäßig führen unterschiedliche Container auch zu unterschiedlichem Energieverbrauch.

Handlungsempfehlung 5: Analysiere die Performanceunterschiede bei der Verwendung von verschiedenen Schleifen!

Beispiel: In der Effizienzbewertung muss bei der Gegenüberstellung von foreach- und for-Ansätzen insbesondere die Zugriffshäufigkeit berücksichtigt werden, da für eine foreach-Iteration das Element nur einmal für alle folgenden Aktionen geladen werden muss.

Handlungsempfehlung 6: Nutze die Effizienzgewinne paralleler Programmierung!

Bei kleineren Bearbeitungsprozeduren sollte der Einsatz paralleler Implementierungen vorsichtig eingesetzt werden. Sie sollten lediglich bei sehr langen Listen angewandt werden. Hier zeigen sie eine weit performantere Leistung als die sequentiellen Ansätze, die etwa das Anderthalbfache an Zeit benötigen. Im Falle kürzerer Listen (50 Elemente) können sie jedoch gut das Achtfache an Zeit aufwänden!

Handlungsempfehlung 7: Wähle die effizienteste Methode des Nullchecks!

die Arbeit mit Daten eines gewünschten Typs kommt es häufig zur Notwendigkeit eines null-Checks. So können Performance-Einbußen durch überflüssige NullReferenceExceptions28, die abgefangen und behandelt werden müssen, vermieden werden29. Beim Vergleich von vier gängigen Methoden wurde jede Variante zehnfach über eine for-Schleife aufgerufen. Der Test wurde für die Variable Person person unter dem Parameter isAPerson einmal mit person = null; und einmal mit person = new Person("Walter","Meier"); durchgeführt. Die person is null-Methode stellt in beiden Fällen die performanteste Wahl dar. Der is-Operator wurde in C# in den letzten Sprachspezifikationen stets erweitert und ermöglicht nun umfangreiche MusterAbgleiche - selbst auf Eigenschaftenebene.30 Auffällig ist das schlechte Abschneiden der Equals-Methode. Da die Person das Interface IEquatable<T>31 nicht implementiert, wird die Equals-Methode der object-Klasse verwendet. Da sie für die string-Klasse ebenfalls die langsamste Variante darstellt, scheint die Empfehlung gegen diese Methode jedoch auch im allgemeineren Rahmen getroffen werden zu können.

Handlungsempfehlung 8: Vermeide die weitverbreitete Methode des string + -Operators!

Stattdessen empfiehlt sich die Verwendung des StringBuilderCache sowohl aufgrund der Ausfürungszeit als auch der Speicherzuweisungen. Bei weniger komplexen Konkatenierungen, das heißt ‚geringere Anzahl an Verkettungen‘ oder weniger Manipulationen wie die Notwendigkeit von Trennzeichen, kann auf String.Concat, String.Join oder String.Format zurückgegriffen werden. Bei einfacher Anwendung kann op_Add (+) verwendet werden, da die einmalige Neuinstanzierung des string unumgänglich ist.

Handlungsempfehlung 9: Wisse insbesondere um das, was Du nicht programmieren sollst!

Ein wichtiger Schluss aus dem Review verschiedener Performanceoptimierungen ist, dass das Wissen um die ‚not ToDos‘ - insbesondere auf grundlegender Ebene - den entscheidenden Einfluss hat.

Quellen

Broska, Maike (2022). Code-Optimierung Motivation zum „Grünen Programmieren“. Assignment AKAD University

PEREIRA, Rui; CARÇÃO, Tiago; COUTO, Marco; CUNHA, Jácome; FERNANDES, João Paulo; SARAIVA, João, 2017. Helping Programmers Improve the Energy Efficiency of Source Code. In: 2017 XI IEEE/ACM 39th International Conference on Software Engineering Companion (ICSE-C), S. 238–240. Abger. unter DOI: 10.1109/ICSE-C.2017.80.

PEREIRA, Rui; COUTO, Marco; RIBEIRO, Francisco; RUA, Rui; CUNHA, Jácome; FERNANDES, João Paulo; SARAIVA, João, 2017. Energy Efficiency across Programming Languages: How Do Energy, Time, and Memory Relate? In: Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering. Vancouver, BC, Canada: Association for Computing Machinery, S. 256–267. SLE 2017. ISBN 9781450355254. Abger. unter DOI: 10.1145/3136014.3136031.

RENTROP, Christian, 2021. Software-Qualität sicherstellen und messen online2021-04-15 [besucht am 2022-02-11]. Abger. unter: https://www.dev-insider.de/software-qualitaetsicherstellen-und-messen-a-609609/.