Inhaltsverzeichnis

10. Code

Themen
Ziel der Programmierung: Intellektuelle Beherrschung komplexer Zusammenhänge
Die Aufgabe von Code: Kommunikation
Software-Entropie
Glossar
PDF
Kapitel bei Springer
https://link.springer.com/chapter/10.1007/978-3-662-71607-6_10


Zentrale Aspekte

Zusammenfassung

Programmierung ist für alle nichttrivialen Probleme ein derart komplexes Unterfangen, dass wir als Menschen damit überfordert sind. Das eine große Ziel der gesamten Softwaretechnik seit der Softwarekrise in den 1960er Jahren war und ist es, Softwareentwicklung intellektuell beherrschbar(er) zu machen. Einen wesentlichen Anteil daran hat die Lesbarkeit des Quellcodes.

Programmierer kommunizieren durch ihren Code. Man kann nicht nicht, nur unzureichend kommunizieren. Wer das versteht und einsieht, dass sie oder er am ehesten den eigenen Code wieder lesen wird, wird versuchen, an der Lesbarkeit zu arbeiten. Codequalität ist letztlich eine Frage der persönlichen Einstellung und Disziplin und der Wertschätzung des Lesers bzw. der Nutzerin.

Erschwerend kommt hinzu: Die Qualität von Code nimmt über die Dauer der Entwicklung eines Projekts meist ab: ein als Software-Entropie bekanntes Phänomen. Die Lösung ist gerade *nicht* der große Neuentwurf, zumal das die Ursache des Problems (unsere Unfähigkeit, sauberen Code zu schreiben) nicht behebt. Nur die kontinuierliche Verbesserung im Kleinen und die eigene in der Praxis gewonnene Erfahrung haben Aussicht auf Erfolg. Das erfordert einmal mehr Problembewusstsein, die Bereitschaft, sich Strategien anzueignen, und die persönliche Disziplin, diese Strategien auch im Alltag einzusetzen.

Codequalität und insbesondere Lesbarkeit ist für wissenschaftliche Software nicht optional, sondern notwendige Voraussetzung für die Wissenschaftlichkeit: Ohne Nachvollziehbarkeit keine Wissenschaft.

Fragen zur Vertiefung und Wiederholung

Diese Fragen dienen der persönlichen Beschäftigung mit der Thematik, es werden aber keine Antworten zur Verfügung gestellt.

Eine kommentierte und handverlesene Liste mit weiterführender Literatur zum Thema. Die Auswahl ist zwangsläufig subjektiv.

Es gibt viele Bücher, die sich mit Codequalität und seinen diversen Aspekten beschäftigen. Ein Buch, das sich explizit mit sauberem Code befasst, ist „Clean Code“ von Robert C. Martin [Martin, 2008Martin, Robert C. (2008): Clean Code. A Handbook of Agile Software Craftmanship, Prentice Hall, Upper Saddle River, New Jersey]. Aus einer ähnlichen Perspektive gehen Andrew Hunt und David Thomas in ihrem Buch „The Pragmatic Programmer“ [Hunt, 1999Hunt, Andrew; Thomas, David (1999): The Pragmatic Programmer, Addison-Wesley, Boston, Thomas, 2020Thomas, David; Hunt, Andrew (2020): The Pragmatic Programmer, Addison-Wesley, Boston] auf diese Aspekte ein. Hierher stammt auch der Verweis auf die „Broken-Window-Theorie“.

Ein sehr umfangreiches Buch, das nicht aus dem Dunstkreis der agilen Methoden kommt, ist Steve McConnells „Code Complete“ [McConnell, 2004McConnell, Steve (2004): Code Complete. A practical handbook of software construction, Microsoft Press, Redmond, Washington], mit ca. 1000 Seiten allerdings eher schwergewichtig.

Sehr kurz und knapp und mit einem klaren Fokus auf C, C++ und Java ist „The Practice of Programming“ von Brian Kernighan und Rob Pike [Kernighan, 1999Kernighan, Brian W.; Pike, Rob (1999): The Practice of Programming, Addison Wesley, Boston]. Viele gute Hinweise finden sich auch in „The Art of UNIX Programming“ von Eric S. Raymond [Raymond, 2004Raymond, Eric S. (2004): The Art of UNIX Programming, Addison Wesley, Boston], hier sicherlich vor dem Hintergrund der UNIX-Programmierung, wie der Buchtitel schon verrät. Gute Hinweise speziell zur Entwicklung von Software in den Naturwissenschaften, die stark auf numerischen Berechnungen basiert, liefert [Oliveira, 2006Oliveira, Suely; Stewart, David (2006): Writing Scientiic Software. A Guide to Good Style, Cambridge University Press, Cambridge].

Spezifisch für den Python-Kontext geschrieben und bewusst nicht abwägend, sondern direkt (opinionated) ist „The Hitchhiker's Guide to Python“ [Reitz, 2016Reitz, Kenneth; Schlusser, Tanya (2016): The Hitchhiker's Guide to Python, O'Reilly, Sebastopol]. Das entsprechende Kapitel fasst dafür auf sehr knappem Raum viele gute Regeln zusammen. Ebenfalls auf Python bezogen, aber spezifischer und sich an erfahrenere Programmierer richtend sind [Bader, 2019Bader, Dan (2019): Python Tricks, dbader.org, o.A., Slatkin, 2015Slatkin, Brett (2015): Effective Python, Addison-Wesley, Upper Saddle River, NJ]

Ein Klassiker ist das Buch „The Elements of Programming Style“ von Kernighan und Plaugher [Kernighan, 1978Kernighan, Brian W.; Plauger, P. J. (1978): The Elements of Programming Style, McGraw-Hill, New York], das nicht nur mit seinem Titel eine Reminiszenz an „The Elements of Style“ von Strunk und White [Strunk, 2000Strunk, William, Jr.; White, E. B. (2000): The Elements of Style, Longman, New York] ist. An diesen beiden Büchern sieht man, dass Klarheit im Ausdruck und guter Stil zeitlos und unabhängig von der konkreten (Programmier-)Sprache sind – und die wesentlichen Zutaten bereits vor Jahrzehnten bekannt waren. Der Strunk&White wird in der Python-Gemeinde als Referenz für die sprachliche Qualität von Kommentaren herangezogen.

Darüber hinaus gibt es viele hilfreiche andere Bücher. Nichtnennung bedeutet nicht, dass sie schlechter, sondern ggf. nur, dass sie dem Autor nicht bekannt sind.

Gründe für Refactoring und gegen das Neuschreiben

Joel Spolski, u.a. Mitgründer der Plattform Stack Overflow, hat im Jahr 2000 in einem Artikel mit dem Titel Things You Should Never Do, Part I beschrieben, welchen Fehler Netscape machte - nämlich die komplette Code-Basis wegzuwerfen und neu zu schreiben -, was mit drei Jahren Stillstand und einem vollkommenen Verschwinden des vorher führenden Webbrowsers endete.