====== 101 - Computational Thinking ====== **Studiensemester:** 1\\ **Turnus:** Wintersemester **Lehrveranstaltungen:**\\ 4 SWS Seminaristischer Unterricht\\ 4 SWS Praktikum **Geplante Gruppengröße:**\\ Seminaristischer Unterricht: ca. 45 Studierende\\ Praktikum: ca. 20 Studierende **Präsenzzeit:**\\ 60 Stunden Seminaristischer Unterricht\\ 60 Stunden Praktikum **Workload/Selbststudium:**\\ 300 Stunden Workload / 180 Stunden Selbststudium **ECTS:** 10 **Modulverantwortung:**\\ Prof. Dr. Martin Hobelsberger (FK 07)\\ **Lehrende:**\\ Prof. Dr. Martin Hobelsberger (FK 07)\\ Prof. Dr. Thomas Kofler (FK 07)\\ N.N. ===== Lehrinhalte ===== * Konzepte und Methoden des Computational Thinking * Grundlegene Konzepte, Arbeitsweisen und Aufbau von IT Systemen * Grundlegende Konzepte der prozeduralen Programmierung auf der Basis einer aktuellen, allgemein verfügbaren Programmiersprache * Einführung und Einstieg in die objektorientierte Programmierung Im Einzelnen werden behandelt: * Der intrinsische, sozial-gesellschaftliche und langfristige Wert des Computational Thinkings * Informationsverarbeitung: Informationsdarstellung und Codierung (Binärsystem und andere Formate), Informationsmanipulation (Funktionsweise von Gattern bis zum Addierer), Informationskreislauf (Prinzipien und Arbeitsweise eines IT-Systems), Gegenüberstellung von Hard- und Software * Computational Thinking verstehen als Kunstform: Unterschied zwischen konkreter Welt, modellierter Welt und abstrahierter Welt, Unterschied zwischen Programmieren und Computational Thinking betont als kreativer Akt, Definition von Quellcode, Programm und Algorithmus, Evolution unterschiedlicher Programmiersprachen * Grundlagen der Programmierung mit u.a.: Arithmetische Ausdrücke, Variablen und Datentypen, Kontrollstrukturen, Datenstrukturen, Arrays und Listen, Strings und Textzeichen, Funktionen, Rekursion, Klassen und Methoden, Exception Handling, Tests * Bearbeitung/Lösung konkreter algorithmischer Probleme aus den Bereichen der jeweiligen Studiengänge (z.B. Anaylse und Darstellung von Datensätzen, Erstellung und Nutzung eines neuen binären Bildformats, Bildverarbeitung, Animation einer Schwingung, Zeichnen einer Schneeflocke, Nutzung eines Web Crawlers, Animation * Einführung in Algorithmen und Datenstrukturen: Entwicklung einer Intuition für Komplexität, Tradeoff zwischen Speicher und Rechenleistung (z.B. verlustfreie Komprimierung von Daten), Sortieralgorithmen, Konzept der Hashfunktion (Dictionaries/HashMaps), mehrdimensionale Listen, Unterschied zwischen veränderlichen (mutable) und unveränderlichen (immutable) Datenstrukturen, Entwurf eigener erster einfacher Datenstrukturen (z.B. ein Namensregister), Umgang mit Datenstukturen aus dem Bereich des Scientific Computing (z.B. Numpy-Arrays und Pandas-Datenframes) ===== Kompetenzorientierte Lernziele ===== ==== Fachkompetenz ==== Die Studierenden erwerben die Fähigkeit, algorithmische Lösungskonzepte für Problemstellungen zu entwickeln und diese mit einer höheren Programmiersprache umzusetzen. Sie können eine Problemstellung analysieren, die zur Lösung erforderlichen Schritte identifizieren, diese Schritte verbalisieren, geeignete Konstrukte auswählen sowie syntaktisch und semantisch korrekt umsetzen. Im konkreten werden folgende Ziele adressiert: Studierende im Kurs Computational Thinking * entwickeln ein breites und solides Verständnis von Informatik, der Informationsverarbeitung und Programmierung. * kennen den Grundlegenden Aufbau und die Funktionsweise von IT Systemen. * entwickeln die Kompetenz algorithmisch zu denken, um u.a. Alltagssituationen in Algorithmen (- unmissverständliche Lösungsschritte) zu übertragen oder Probleme in Teilprobleme zu zerlegen. Weiterhin ist algorithmisches Denken erforderlich, um algorithmisch abstrakte Ähnlichkeiten zu erkennen und für sich zu nutzen (Mustererkennung) oder wichtige von unwichtigen Informationen zur Lösung eines Problems zu unterscheiden und ihre Lösungsschritte dadurch so allgemein wie möglich zu halten. * entwickeln die Kompetenz effiziente Lösungskonzepte für (Programmier-) Problemstellungen zu entwickeln. * entwickeln die Fähigkeit Lösungsschritte in unmissverständlicher Form niederzuschreiben (Design von Algorithmen). * wenden moderne Werkzeuge zur Umsetzung von Lösungskonzepten an. * setzen Programmierprojekte eigenständig und im Team um. * entwickeln eine Neugier für noch unbekannte und ungelöste Probleme. * werden für sozial-gesellschaftliche Zusammenhänge im Rahmen der Informationsverarbeitung sensibilisiert. * entwickeln ihre eigenen sozialen Kompetenzen weiter. ==== Methodenkompetenz ==== Die Studierenden setzen Werkzeuge zur Erstellung von Software sinnvoll ein. ==== Selbstkompetenz ==== Die Studierenden modellieren Lösungen mit Hilfe von Konstrukten in Programmiersprachen, so dass eine algorithmische Verarbeitung möglich wird. ==== Sozialkompetenz ==== Die Studierenden erarbeiten Lösungen zu anwendungsnahen Problemen im Team. Studierende präsentieren und erläutern Teammitgliedern ihre Lösungen. ==== Vorkenntnisse/Teilnahmevoraussetzungen ==== keine ==== Verwendung des Moduls ==== Das Modul ist ein Pflichtmodul in den MUC.DAI Studiengängen 'Informatik und Design' und 'Digital Engineering'. ==== Prüfungsform ==== praP oder schrP ==== Lehrformen ==== * Seminaristischer Unterricht * praktische Programmieraufgaben * praktische Programmierprojekte ==== Lehrmethoden ==== * virtuelle Lehr-Lernräume * interaktive Notebooks, interaktives Jupyter-Buch * Folien * Tafel * anwendungsorientierte Projekte * Lehr-/Lernvideos * Gastvorträge ==== Literatur ==== * Paul Curzon, Peter W. McOwan, Computational Thinking: Die Welt des algorithmischen Denkens – in Spielen, Zaubertricks und Rätseln. Springer Verlag * Klein, Bernd. Einführung in Python 3: Für Ein-und Umsteiger. Carl Hanser Verlag GmbH Co KG, 2017 * Klein, Bernd. Numerisches Python: Arbeiten mit NumPy, Matplotlib und Pandas. Carl Hanser Verlag GmbH Co KG, 2019 * VanderPla, Jake. Python Data Science Handbook, O'Reilly Media, Inc. 2016