====== Proseminar „Softwareentwicklung in der Wissenschaft“ ======
===== Beschreibung =====
Im Seminar werden wir die Softwareentwicklung in der Wissenschaft diskutieren. Im Detail der Prozess von der wissenschaftlichen Fragestellung über die Modellierung und Programmierung bis hin zur Analyse der Ergebnisse. Hierzu werden Softwareentwicklungswerkzeuge und Mechanismen vorgestellt und deren Umsetzung in der bestehenden Praxis analysiert.
Die Lehrmaterialien sind typischerweise in englischer Sprache.
Beachten Sie auch unsere allgemeinen organisatorischen [[:teaching:organisatorische_hinweise:seminar_proseminar#seminare|Hinweise zu Seminaren]].
===== Zielgruppe =====
Das Proseminar eignet sich für Studierende im Bachelortudiengängen mit Bezug zur Informatik sowie als Seminar im Masterstudiengang in den Geowissenschaften.
Wir fordern explizit Studierende der angewandten Informatik zur Teilnahme auf beispielsweise Bioinformatik, Wirtschaftsinformatik sowie Geowissenschaftler.
Für Studierende der Informatik und Geowissenschaften wird die Anrechnung innerhalb des Studiums problemlos möglich, Studierende anderer Studiengänge müssen die Anrechnung mit dem jeweiligen Prüfungsausschuss klären.
Interessierte Zuhörer sind auch herzlich willkommen.
===== Daten der Veranstaltung =====
|| Ort || [[https://www.uni-hamburg.de/onTEAM/campus/index.html?loc=i12340438|DKRZ]], Raum 034 ||
|| Zeit || Montag 14:15 - 15:45 oder Montag 16:15 - 17:45 ||
|| Vorbesprechung || Montag 06.04.2020 14:15 ||
|| Mailingliste || [[https://wr.informatik.uni-hamburg.de/listinfo/siw-20|SIW-20]] ||
===== Dozenten =====
* [[People:Hermann Lenhart]] (Ansprechpartner)
* [[People:Alumni:Michael Kuhn]]
* [[People:Jannek Squar]]
* [[People:Georgiana Mania]]
* [[People:externals:Petra Nerge]]
* [[https://www.mi.uni-hamburg.de/arbeitsgruppen/atmosphaerenmessungen/personen/tobias-finn.html|Tobias Sebastian Finn (MI)]]
==== Theorie ====
Vertiefende Vorträge zu Einzelaspekten der Softwareentwicklung in der Wissenschaft, z.B:
* Modellierung und Simulation
* Leistungsanalyse und Effizienz
* Auswahl der Numerik und Algorithmen
* Algorithm Engineering
* Verifikation, und Validierung:
* Assesment of Accuracy and Reliability
* Qualität von berechneten Lösungen (floating point Repräsentation), Conditionierung
* Computer-assisted Proofs and Self-Validating Methods
* General Methods for Implementing Reliable and Correct Software
* Design and execution of validation experiments
* Solution Verification & Fehlerquellen
* Software Engineering
* ...
===== Zeitplan =====
Nach der Festlegung der Themen soll der Inhalt mit dem jeweiligen Betreuer diskutiert werden.
{{teaching:sommersemester_2020:siw20-intro-new.pdf|Einführungs-Vortrag}}
Abschließend soll aus den Ausarbeitungen ein Bericht generiert werden.
Das LaTeX-Template hierzu wird von uns vorgegeben.
==== 14:15 - 15:45 ====
* 11.05.
* Testen ((Michael Kuhn)) - Benedikt Blume {{teaching:sommersemester_2020:siw-20-testen-blume.pdf|Vortrag}} {{:teaching:sommersemester_2020:siw-20-testen-blume-ausarbeitung.pdf|Ausarbeitung}}
* Inhalt: Motivation, Arten von Tests (Vor- und Nachteile), Test-Frameworks (z. B. [[https://github.com/google/googletest|Google Test]], [[https://testanything.org/|Test Anything Protocol]])
* Versionsverwaltung: Git ([[https://guides.github.com/introduction/git-handbook/|Quelle1]]) ([[https://product.hubspot.com/blog/git-and-github-tutorial-for-beginners|Quelle2]]) ((Hermann Lenhart)) - Jan Witt {{teaching:sommersemester_2020:siw-20-git-witt.pdf|Vortrag}}, {{teaching:sommersemester_2020:siw-20-git_report_witt.pdf|Ausarbeitung}}
* 18.05.
* Integrierte Softwareentwicklungsumgebung: Eclipse ([[https://www.tutorialspoint.com/eclipse/index.htm|Quelle1]]) ([[https://javatutorial.net/java-eclipse-tutorial|Quelle2]]) ((Hermann Lenhart)) - Angelina Heinrichs {{teaching:sommersemester_2020:siw-20_-eclipse-heinrichs.pdf|Vortrag}},{{teaching:sommersemester_2020:siw-20-eclipse_ausarbeitung.pdf|Ausarbeitung}}
* Softwareverwaltung: [[https://spack.io/|Spack]] ((Michael Kuhn)) - Teffy Sam {{teaching:sommersemester_2020:siw-20-spack_sam.pdf|Vortrag}} {{:teaching:sommersemester_2020:siw-20-spack-sam-ausarbeitung.pdf|Ausarbeitung}}
* Inhalt: Motivation, Vergleich mit anderen Softwareverwaltungstools (siehe EasyBuild-Thema), Benutzung (siehe [[https://spack-tutorial.readthedocs.io/en/latest/|Tutorial]])
* 25.05.
* Grundlegendes Python Setup (venv, pip, argparse, yaml config files) ((Jannek Squar)) - Jonas Lefert {{ :teaching:sommersemester_2020:siw-20_python-config_lefert.pdf |Vortrag}} {{ :teaching:sommersemester_2020:siw-20_lefert_grundlagen_python_ausarbeitung.pdf |Ausarbeitung}}
* 08.06.
* Python Dask ((Jannek Squar)) - Alena Pils {{ :teaching:sommersemester_2020:siw-20-dask-pils.pdf |Vortrag}} {{ :teaching:sommersemester_2020:siw-20-dask-pils-material.tar.gz |Notebooks}} {{ :teaching:sommersemester_2020:siw-20_pils_dask_ausarbeitung.pdf |Ausarbeitung}}
* 15.06.
* Cloud Computing ([[https://www.zdnet.com/article/what-is-cloud-computing-everything-you-need-to-know-from-public-and-private-cloud-to-software-as-a/|Quelle1]])([[https://www.infoworld.com/article/2683784/what-is-cloud-computing.html|Quelle2]]) ((Hermann Lenhart)) - Giorgi Narimanashvili {{teaching:sommersemester_2020:siw-20-cloud_computing_giorgi_narimanashvili.pdf|Vortrag}}, {{teaching:sommersemester_2020:siw-20-giorgi-narimanashvili-cloud-computing.pdf|Ausarbeitung}}
* Cloud Computing in der Wissenschaft ([[https://ieeexplore.ieee.org/document/4637787|Quelle1]])([[https://ieeexplore.ieee.org/abstract/document/6310879|Quelle2]]) ((Hermann Lenhart)) - Maximilian Marquardt {{teaching:sommersemester_2020:siw-20-marquardt-cloud_computing_wissenschaft.pdf|Vortrag}},{{teaching:sommersemester_2020:siw-20-marquardt_cloud-in-science.pdf|Ausarbeitung}}
* 22.06.
* Python: Grundlagen neuronaler Netze ((Jannek Squar)) - Jonah Lüdemann {{ :teaching:sommersemester_2020:siw-20-nn-luedemann.pdf |Vortrag}} {{ :teaching:sommersemester_2020:siw-20_luedemann_grundlagen-nn_ausarbeitung.pdf |Ausarbeitung}}
* GANs in der Wissenschaft ([[https://arxiv.org/abs/1805.00850|Paper1]]),([[https://arxiv.org/abs/1702.00403|Paper2]]) ((Tobias Finn)) - Johannes Kolhoff {{teaching:sommersemester_2020:siw-20-gans_in_der_wissenschaft-kolhoff.pdf|Vortrag}},{{teaching:sommersemester_2020:siw-20-gans-in-science-johannes-kolhoff.pdf|Ausarbeitung}}
* 29.06.
* Deep Learning in der Wissenschaft? ([[https://www.nature.com/articles/s41586-018-0438-y|Paper1]]),([[ https://www.nature.com/articles/s41586-019-1582-8|Paper2]]) ((Tobias Finn))
* Einführung in [[https://llvm.org/|LLVM]] ((Jannek Squar))
* 06.07.
* MPI: Datentypen ([[http://wgropp.cs.illinois.edu/courses/cs598-s16/lectures/lecture27a.pdf|Quelle1]])([[https://pages.tacc.utexas.edu/~eijkhout/pcse/html/mpi-data.html|Quelle2]]) ((Hermann Lenhart))
* MPI: Einseitige Kommunikation ([[http://htor.inf.ethz.ch/publications/img/mpi3-rma-overview-and-model.pdf|Paper]]) ((Hermann Lenhart))
* 13.07.
* Software Parallelisierung: Parallelisierungsbibliotheken: TBB ([[https://software.intel.com/en-us/tbb|Quelle1]]) ([[https://kriemann.name/Ronald/publications/parprog/lecture4.pdf|Quelle2]]) **[English Only]**((Georgiana Mania)) -- Lars Taddey {{ :teaching:sommersemester_2020:siw-20-tbb-taddey.pdf |Vortrag}}
* Software-Tool für "interactive data science and scientific computing": Jupyter Notebook ([[https://jupyter.org/|Quelle1]]) ([[https://www.tutorialspoint.com/jupyter/index.htm|Quelle2]]) ((Hermann Lenhart)) - Khorshid Biria {{teaching:sommersemester_2020:siw-20-jupyter_notebook-biria.pdf|Vortrag}},{{teaching:sommersemester_2020:siw-20-khorshid-biria-ausarbeitung.pdf|Ausarbeitung}}
==== 16:15 - 17:45 ====
* 11.05.
* Moderne Programmiersprachen: [[https://www.rust-lang.org/|Rust]] ((Michael Kuhn)) - Christian Willner {{teaching:sommersemester_2020:siw-20-rust-willner.pdf|Vortrag}} {{:teaching:sommersemester_2020:siw-20-willner-rust-ausarbeitung.pdf|Ausarbeitung}}
* Inhalt: Motivation, grundlegende Syntax, Unterschiede zu anderen Sprachen (Vor- und Nachteile), kleines Beispielprogramm (z. B. C vs. Rust)
* Moderne Programmiersprachen: Clojure ([[https://clojure.org|Quelle1]])([[https://www.braveclojure.com/introduction/|Tutorial online book - Part I and II]]) **[English Only]** ((Georgiana Mania)) - Christian Wolff {{teaching:sommersemester_2020:siw-20-clojure-wolff-sources.pdf|Vortrag}},{{teaching:sommersemester_2020:siw-20-christian_wolff_clojure.pdf|Ausarbeitung}}
* 18.05.
* Buildsysteme: [[https://cmake.org/|CMake]] ((Michael Kuhn))
* Inhalt: Motivation, Vergleich mit anderen Buildsystemen (siehe Meson-Thema), Benutzung, kleines Beispiel
* Buildsysteme: [[https://mesonbuild.com/|Meson]] ((Michael Kuhn)) - Erik Alaverdyan {{:teaching:sommersemester_2020:siw-20-meson-alaverdyan.pdf|Vortrag}} {{:teaching:sommersemester_2020:siw-20-meson-alaverdyan-ausarbeitung.pdf|Ausarbeitung}}
* Inhalt: Motivation, Vergleich mit anderen Buildsystemen (siehe CMake-Thema), Benutzung, kleines Beispiel
* 25.05.
* Python: Einführung und Neuerungen mit Python3 ((Jannek Squar)) - Mike Nguyen {{ :teaching:sommersemester_2020:siw-20-python3-nguyen.pdf |Vortrag}} {{ :teaching:sommersemester_2020:siw-20_nguyen_python3_ausarbeitung.pdf |Ausarbeitung}}
* Python in HPC ([[https://dl.acm.org/doi/10.1109/MCSE.2007.58|Quelle1]]) ([[https://www.csc.fi/documents/200270/224366/basic_python.pdf/e18a3c4e-fe61-421d-bc10-6bfefcc23639|Quelle2]]) ((Hermann Lenhart)) - Malte Eickhoff {{teaching:sommersemester_2020:siw-20-eickhoff-python_in_hpc.pdf|Vortrag}},{{teaching:sommersemester_2020:siw-20-python2hpc-malte-eickhoff.pdf|Ausarbeitung}}
* 08.06.
* Python: Datenverarbeitung mit numpy/pandas/matplotlib ((Jannek Squar)) - Larissa Lach {{ :teaching:sommersemester_2020:siw-20-datenverarbeitung-lach.pdf |Vortrag}} {{ :teaching:sommersemester_2020:siw-20_lach_datenverarbeitung_ausarbeitung.pdf |Ausarbeitung}}
* Python: Probabilistic programming ([[ https://pyro.ai/|Paper]]) ((Tobias Finn)) - Katja Neumann {{teaching:sommersemester_2020:siw-20-probprog-neumann.pdf|Vortrag}},{{teaching:sommersemester_2020:siw-20_probprog_katjaneumann.pdf|Ausarbeitung}}
* 15.06.
* Leistungsmessungen ((Jannek Squar)) - Henri-Leon Kordt {{teaching:sommersemester_2020:siw20-benchmarking-kordt.pdf|Vortrag}}
* Inhalt: Motivation, Vorgehensweise, Leistungsmetriken, Statistik (siehe z. B. [[https://beza1e1.tuxen.de/articles/basic_benchmark_statistics.html|Basis Benchmark Statistics]])
* 12 Regeln für statistisch korrektes Benchmarking ([[https://htor.inf.ethz.ch/publications/img/hoefler-scientific-benchmarking.pdf|Paper]])
* Vektorisierung ([[https://www.youtube.com/watch?v=Ujixa4WI8ek|SX-Aurora Tsubasa]], [[https://sx-aurora.github.io/|Blog]]) ((Jannek Squar)) - Benni Möller {{ :teaching:sommersemester_2020:siw-20-vektorisierung-moeller.pdf |Vortrag}} {{ :teaching:sommersemester_2020:siw-20_moeller_vektorisierung_ausarbeitung.pdf |Ausarbeitung}}
* 22.06.
* Machine Learning: Generative Adversarial Networks (GANs) ([[https://arxiv.org/abs/1406.2661|Paper]]) ((Tobias Finn)) - Hergen Lehmann
* Continuous Integration ((Michael Kuhn)) -- Finn Welker {{:teaching:sommersemester_2020:siw-20-welker-ci.pdf|Vortrag}}
* Inhalt: Motivation, Möglichkeiten von CI (automatisierte Tests, Publizieren von Artefakten), CI-Frameworks (z. B. [[https://github.com/features/actions|GitHub Actions]], [[https://drone.io/|Drone CI]], [[https://circleci.com/|CircleCI]])
* 29.06.
* Softwareverwaltung: [[https://easybuilders.github.io/easybuild/|EasyBuild]] ((Michael Kuhn))
* Inhalt: Motivation, Vergleich mit anderen Softwareverwaltungstools (siehe Spack-Thema), Benutzung
* 06.07.
* Numerische Reproduzierbarkeit und parallele Berechnungen ([[https://ieeexplore.ieee.org/abstract/document/6812157|Paper]]) ((Petra Nerge)) - Karl Ihlenfeldt {{ :teaching:sommersemester_2020:siw-20-numerische_reproduzierbarkeit-ihlenfeldt.pdf |Vortrag}},{{teaching:sommersemester_2020:siw-20-numerische-reproduzierbarkeit-karl-ihlenfeldt.pdf|Ausarbeitung}}
* Numerische Reproduzierbarkeit: Konzept für bit-genaue Anwendungen. ([[https://ieeexplore.ieee.org/abstract/document/6877351|Paper]]) ((Petra Nerge)) -- Laura Wenderoth {{ :teaching:sommersemester_2020:siw-20-bitgenaue-anwendungen-wenderoth.pdf |Vortrag}},{{teaching:sommersemester_2020:siw-20-reproduzierbarkeit-bit-genauer-anwendungen-laura-wenderoth.pdf|Ausarbeitung}}
* 13.07.
* Softwareverwaltung: Container ((Michael Kuhn)) - Pascal Kröger {{:teaching:sommersemester_2020:siw-20-kroeger-container.pdf|Vortrag}}
* Inhalt: Motivation, Technologien ([[https://www.docker.com/|Docker]], [[https://podman.io/|Podman]]), Nutzungsszenarien
===== Offene Themenliste =====
* 14: Software-Dokumentationstool: Doxygen & Sphinx ([[http://www.doxygen.nl/manual/starting.html|Quelle1]]) ([[https://medium.com/@richdayandnight/a-simple-tutorial-on-how-to-document-your-python-project-using-sphinx-and-rinohtype-177c22a15b5b|Quelle2]])((Hermann Lenhart))
* 16: Software Parallelisierung: OpenMP ([[https://computing.llnl.gov/tutorials/openMP/|Quelle1]]) ([[https://www.openmp.org/wp-content/uploads/omp-hands-on-SC08.pdf|Quelle2]]) **[English Only]**((Georgiana Mania))
* 17: Software Parallelisierung: A Case Study for Performance Portability using OpenMP 4.5 ([[https://sc18.supercomputing.org/proceedings/workshops/workshop_files/ws_waccpd109s2-file1.pdf|Paper]]) **[English Only]**((Georgiana Mania))
* 18: Software Parallelisierung: Integrating GPU support for OpenMP offloading directives into Clang ([[https://www.researchgate.net/publication/301459042_Integrating_GPU_support_for_OpenMP_offloading_directives_into_Clang|Paper]]) **[English Only]**((Georgiana Mania))
* 34: LLVM: Umgang mit dem [[https://clang.llvm.org/docs/IntroductionToTheClangAST.html|AST]] ((Jannek Squar))
* 35: LLVM: [[https://llvm.org/docs/WritingAnLLVMPass.html|Pass]]-Programmierung ((Jannek Squar))
* 36: LLVM: Profiling mit DiscoPoP ([[https://link.springer.com/chapter/10.1007/978-3-319-16012-2_3|Paper]])((Jannek Squar))
* 37: Post-Compiler Optimierungen ([[https://github.com/facebookincubator/BOLT|BOLT]], Propeller [ [[https://github.com/google/llvm-propeller/|Quelle 1]], [[https://groups.google.com/forum/#!msg/llvm-dev/ef3mKzAdJ7U/1shV64BYBAAJ|Quelle 2]] ]) ((Jannek Squar))
* 38: Reproduzierbarkeit: Wie ein mehr davon? ([[https://www.esaim-proc.org/articles/proc/abs/2014/02/proc144523/proc144523.html|Paper]])((Petra Nerge))
* 43: Variational Autoencoder ([[https://arxiv.org/abs/1312.6114|Paper1]]),([[https://arxiv.org/abs/1606.05908|Paper2]]) ((Tobias Finn))