Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:lehre:programmierkonzepte:ss2020:02:index

02. Motivation (Programmierung)

Themen
Ausgangspunkt: Die Softwarekrise
Lösungsansatz: Softwaretechnik (Software Engineering)
Problem der Wissenschaft: Programmierung nur Randthema
Schlüssel zum Erfolg: Konzepte und persönliche Disziplin
Folien
PDF
Glossar
PDF
Video
MP4


Webcast

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

Zentrale Aspekte

  • Abstraktion ist der Schlüssel zur
    Beherrschung komplexer Fragestellungen.
  • Intellektuelle Beherrschbarkeit ist ein wesentliches Kriterium.
    Sie erfordert Disziplin bei der Programmierung.
  • Wiederverwertbarkeit, Zuverlässigkeit und Überprüfbarkeit
    erfordern modularen, getesteten und lesbaren Quellcode.
  • Codequalität (insbesondere Lesbarkeit mit allen Konsequenzen)
    ist nicht optional für wissenschaftliche Auswertungssoftware.
  • Programmierung hat in den Naturwissenschaften
    trotz ihrer Bedeutung einen zu geringen Stellenwert.

Fragen zur Vertiefung und Wiederholung

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

  • Welches Schlüsselkonzept der Softwareentwicklung ermöglicht es, komplexe Fragestellungen erfolgreich bearbeiten zu können?
  • Welcher grundlegende Aspekt der Programmierung ist vielleicht am entscheidendsten für die Qualität des resultierenden Codes und damit seiner Wiederverwendbarkeit, Zuverlässigkeit und Überprüfbarkeit?
  • Was ist das vielleicht größte Problem von Programmierung im naturwissenschaftlichen Kontext?
  • Welche beiden Aspekte liefern den Schlüssel zum Erfolg für qualitativ hochwertige Software und entsprechende Produktivität (und Freude an der Arbeit)?

Weiterführende Literatur

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

Programmieren lernen

Ein gutes Buch für diejenigen, die sich intensiver und vor allem praktisch mit Programmierung im akademischen Umfeld und in den mehr physikalischen Disziplinen (inkl. Physikalischer Chemie) auseinandersetzen wollen – und denen die Vorlesung zu wenig praxisnah ist:

  • Scopatz, Anthony; Huff, Kathryn D. (2015): Effective Computation in Physics, O'Reilly, Sebastopol

Andere, (ebenfalls) auf Python zugeschnittene Bücher mit Fokus auf dessen Einsatz im naturwissenschaftlichen Kontext sind (ohne Anspruch auf Vollständigkeit):

  • Hill, Christian (2015): Learning Scientific Programming with Python, Cambridge University Press, Cambridge, UK
  • Downey, Allen B. (2015): Think Python, O'Reilly, Sebastopol
  • VanderPlas, Jake (2016): Python Data Science Handbook, O'Reilly, Sebastopol
  • McKinney, Wes (2017): Python for Data Analysis, O'Reilly, Sebastopol

Wer sich mehr mit Python beschäftigen möchte, dem sei auch „The Hitchhiker's Guide to Python“ von Reitz und Schlusser sehr empfohlen:

  • Reitz, Kenneth; Schlusser, Tanya (2016): The Hitchhiker's Guide to Python, O'Reilly, Sebastopol

Historisches zur Softwarekrise etc.

Ein sehr lesenswerter, persönlicher Bericht aus der Frühzeit der Informatik und Programmierung von einer der zentralen Figuren ist die Rede von Edsger Dijkstra 1972 anlässlich der Verleihung des Turing Award an ihn. Hier verwendet er den Begriff der „intellectual manageability“ und betont, warum er zusammen mit Abstraktion zentral für die Programmierung ist.

Auf der NATO-Konferenz zur Softwareentwicklung wurde der Begriff „software engineering“ erstmals breit bekannt gemacht. Naur und Randell haben den Bericht dieser Tagung verfasst.

Ebenfalls ein großer Klassiker, mit Fokus auf dem Projektmanagement, und dazu noch sehr gut geschrieben, ist Frederick Brooks „The Mythical Man-Month“. Hier beschreibt der Autor seine Erfahrungen bei der Entwicklung des Betriebssystems für die ersten IBM-Mainframes in den 1960er Jahren und reflektiert schonungslos über das, was gut und was schlecht war. Die Jubiläumsausgabe von 1995 enthält zusätzlich u.a. noch seinen ebenfalls berühmten Essay „No Silver Bullet—Essence and Accident in Software Engineering“. Die zentrale These dieses Essays:

There is no single development, in either technology or management technique, which by itself promises even one order-of-magnitude improvement within a decade in productivity, in reliability, in simplicity. Frederick P. Brooks: No Silver Bullet

  • Naur, P.; Randell, B. (1969): Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7-11 Oct. 1968
  • Brooks, Frederick P. (1995): The Mythical Man Month, Addison Wesley Longman, Boston
  • Dijkstra, Edsger W. (1972): The humble programmer, Communications of the ACM 15:859-865

Softwaretechnik

Eine recht umfassende und strukturierte Einführung in die Softwaretechnik liefert Ian Sommerville mit seinem Buch „Software Engineering“ (in deutscher Übersetzung verfügbar) [Sommerville, 2018Sommerville, Ian (2018): Software Engineering, Pearson, Hallbergmoos].

  • Sommerville, Ian (2018): Software Engineering, Pearson, Hallbergmoos

Wissenschaft und Programmierung

Das Problem des mangelnden Stellenwerts von Programmierung in den Wissenschaften ist mittlerweile hinlänglich bekannt. Vielleicht einer der ersten, die sich intensiv mit dem Problem und möglichen Lösungen auseinandergesetzt haben, ist Greg Wilson. Er hat mit "Software Carpentry" eine Non-Profit-Organisation gegründet, die sich die Vermittlung von Programmierkonzepten im akademischen Umfeld auf die Fahnen geschrieben hat. Die Veröffentlichung von Artikeln in Journalen mit biologischem Schwerpunkt hat u.a. den Grund, dass die Bioinformatik ohne Computer nicht denkbar wäre. Das bedeutet aber nicht, dass der normale Biologe besser programmieren kann als der Chemiker oder Physiker… (eher im Gegenteil).

  • Baxter, Susan M.; Day, Steven W.; Fetrow, Jacquelyn S.; Reisinger, Stephanie J. (2006): Scientific software development is not an oxymoron, PLoS Computational Biology 2:e87
  • Hastings, Janna; Haug, Kenneth; Steinbeck, Christoph (2014): Ten recommendations for software engineering in research, GigaScience 3:31
  • Merali, Zeeya (2010): ...why scientific programming does not compute, Nature 467:775-777
  • Wilson, Greg (2006): Software carpentry. Getting scientists to write better code by making them more productive, Computing in Science & Engineering 8:66-69
  • Wilson, Greg; Aruliah, D. A.; Brown, C. Titus; Hong, Neil P. Chue; Davis, Matt; Guy, Richard T.; Haddock, Steven H. D.; Huff, Kathryn D.; Mitchell, Ian M.; Plumbley, Mark D.; Waugh, Ben; White, Ethan P.; Wilson, Paul (2014): Best practices for scientific computing, PLoS Biology 12:e1001745

Codequalität als Frage der Einstellung des Programmierers

Die Qualität von Programmen hat letztlich viel mit der Einstellung der beteiligten Programmierer zu tun. Siehe dazu die Diskussion in Kapitel 33 von [McConnell, 2004McConnell, Steve (2004): Code Complete. A practical handbook of software construction, Microsoft Press, Redmond, Washington] und das Buch „The Pragmatic Programmer“ von Thomas und Hunt [Thomas, 2020Thomas, David; Hunt, Andrew (2020): The Pragmatic Programmer, Addison-Wesley, Boston].

  • McConnell, Steve (2004): Code Complete. A practical handbook of software construction, Microsoft Press, Redmond, Washington
  • Thomas, David; Hunt, Andrew (2020): The Pragmatic Programmer, Addison-Wesley, Boston
de/lehre/programmierkonzepte/ss2020/02/index.txt · Zuletzt geändert: 2020/09/30 21:35 von 127.0.0.1