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
Zentrale Aspekte
Abstraktion ist der Schlüssel zur Beherrschung komplexer Fragestellungen.
Intellektuelle Beherrschbarkeit erfordert Disziplin bei der Programmierung.
Wiederverwertbarkeit, Zuverlässigkeit und Überprüfbarkeit
erfordern modularen, getesteten und lesbaren Quellcode.
Codequalität (insbesondere Lesbarkeit) ist nicht optional
für wissenschaftliche Auswertungssoftware.
Programmierung hat in den Wissenschaften 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?
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, Commun. ACM 15:859-865
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 Comput. Biol. 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, Comput. Sci. Eng. 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 Biol. 12:e1001745