Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:lehre:programmierkonzepte:ss2020:10:index

10. Code

Themen
Ziel der Programmierung: Intellektuelle Beherrschung komplexer Zusammenhänge
Die Aufgabe von Code: Kommunikation
Software-Entropie
Folien
PDF
Glossar
PDF
Video
MP4


Webcast

Hinweis: Der Webcast wurde mit Tiny Webcasts for Lecture(r)s erstellt.

Zentrale Aspekte

  • Ziel der Programmierung:
    intellektuelle Beherrschung komplexer Zusammenhänge
  • Programmierer kommunizieren durch ihren Code.
    Man kann nicht nicht, nur unzureichend kommunizieren.
  • Die Qualität von Code nimmt über die Dauer der Entwicklung
    eines Projekts meist ab (Software-Entropie).
  • Die Lösung ist nicht der große Neuentwurf,
    sondern die kontinuierliche Verbesserung im Kleinen.
  • Code-Qualität ist eine Frage der persönlichen Einstellung
    und Wertschätzung des Lesers/Nutzers.

Fragen zur Vertiefung und Wiederholung

Diese Fragen dienen der persönlichen Beschäftigung mit der Thematik, werden aber nicht separat in der Vorlesung besprochen.

  • Was ist das inhärente Problem jedes größeren Softwareprojekts? Welche Zielstellung ergibt sich daraus für Programmierkonzepte?
  • Was ist die primäre Aufgabe von Code (neben der korrekten Ausführung)?
  • Nennen Sie drei zentrale Aspekte „sauberen Codes“.
  • Welchen Zusammenhang gibt es zwischen „sauberem Code“ und Kriterien der Wissenschaftlichkeit? Warum ist „sauberer Code“ von so großer Bedeutung für die Entwicklung von Software zur wissenschaftlichen Datenverarbeitung?
  • Was versteht man unter dem Begriff „Software-Entropie“? Wie unterscheidet er sich grundlegend vom Konzept aus der Thermodynamik?
  • Warum ist der große Neuentwurf meist keine Lösung für das Problem der Software-Entropie? Was wäre eine Alternative?

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.

  • Bader, Dan (2019): Python Tricks, dbader.org, o.A.
  • Hunt, Andrew; Thomas, David (1999): The Pragmatic Programmer, Addison-Wesley, Boston
  • Kernighan, Brian W.; Plauger, P. J. (1978): The Elements of Programming Style, McGraw-Hill, New York
  • Kernighan, Brian W.; Pike, Rob (1999): The Practice of Programming, Addison Wesley, Boston
  • Martin, Robert C. (2008): Clean Code. A Handbook of Agile Software Craftmanship, Prentice Hall, Upper Saddle River, New Jersey
  • McConnell, Steve (2004): Code Complete. A practical handbook of software construction, Microsoft Press, Redmond, Washington
  • Oliveira, Suely; Stewart, David (2006): Writing Scientiic Software. A Guide to Good Style, Cambridge University Press, Cambridge
  • Raymond, Eric S. (2004): The Art of UNIX Programming, Addison Wesley, Boston
  • Reitz, Kenneth; Schlusser, Tanya (2016): The Hitchhiker's Guide to Python, O'Reilly, Sebastopol
  • Slatkin, Brett (2015): Effective Python, Addison-Wesley, Upper Saddle River, NJ
  • Strunk, William, Jr.; White, E. B. (2000): The Elements of Style, Longman, New York
  • Thomas, David; Hunt, Andrew (2020): The Pragmatic Programmer, Addison-Wesley, Boston

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.

de/lehre/programmierkonzepte/ss2020/10/index.txt · Zuletzt geändert: 2020/09/30 21:35 von 127.0.0.1