Marcel Lüthi (UNIBAS) – FS2020 Andreas Morel-Forster (UNIBAS) – HS2021
Beschreibung
Die Lehrveranstaltung bietet eine Einführung in das Programmieren anhand der Programmiersprache Java. Sie richtet sich an Programmieranfänger ohne, oder mit nur geringen Programmiererfahrung. Wir beginnen mit den Grundlagen der strukturierten Programmieren (d.h. Variablen, Typen, Zuweisungen, Bedingungen, Schleifen, und Funktionen) und werden dann im zweiten Teil dieser Lehrveranstaltung die Grundkonstrukte der objektorientierten Programmierung anschauen. Am Ende der Lehrveranstaltung werden die Teilnehmenden in der Lage sein, einfache Programme in Java selbständig zu schreiben und diese mithilfe von Funktionen und Klassen ansprechend zu strukturieren. Die in dieser Lehrveranstaltung eingeführten Konzepte der Objektorientierten Programmierung werden im Modul Programmieren II weiter vertieft.
Lernziele
Nach dieser Lernveranstaltung sollten die Teilnehmenden
effizient mit der Java Entwicklungsumgebung (Javac, Java, Editor) umgehen können.
Fehlermeldungen vom Compiler interpretieren und die Programme entsprechend verbessern können.
einfache
algorithmische Probleme durch Anwendung von strukturierter Programmierung lösen können.
Probleme in einfachere Teilprobleme zerlegen können und diese mittels Methoden implementieren.
einfache Datenstrukturen mittels Klassen implementieren und benutzen können.
die Grundkonzepte der Objektorientierung verstehen.
Die Lehrveranstaltung Programmierung II baut auf der Veranstaltung Programmierung I auf und vertieft in einem ersten Teil die Konzepte der objektorientierten Programmierung (Klassen & Objekte, Attribute, Methoden, Vererbung, Polymorphismus, Überladen und Überschreiben von Methoden) und führt abstrakte Klassen und Interfaces ein. Als Programmiersprache wird ebenfalls Java verwendet. Neben der Vererbungspolymorphie wird auch die parametrische Polymorphie im Kontext von generischen Klassen und generischen Methoden betrachtet und das Thema Ko- und Kontravarianz und dessen Umsetzung in Java wird diskutiert.
In einem zweiten Teil werden wichtige Pakete und Klassen der Standardbibliothek von Java betrachtet, wie das Collection-Framework, Ausnahmen, Enums und Autoboxing. Es wird gezeigt, wie die in der Basisklasse Object definierte Methode clone implementiert werden muss um Objekte zu kopieren. Dabei wird auch auf den Unterschied zwischen deep und shallow copy eingegangen. Als letztes Thema werden Streams und Lambda Ausdrücke behandelt. Diese Konzepte werden dann im Modul Programmiersprachenkonzepte weiter vertieft.
Lernziele
Nach dem Besuch der Lehrveranstaltung Programmieren II
können die Teilnehmenden Klassen entwerfen, die eine gegebene Aufgabenstellung abbilden (d.h. mit sinnvollen Attributen, Methoden und Konstruktoren).
verstehen die Teilnehmenden die Konzepte von Vererbung, abstrakten Klassen, Interfaces und Polymorphismus und können diese Konzepte in ihren Programmen korrekt anwenden.
verstehen die Teilnehmenden den Kontrollfluss eines Programmes mit Ausnahmebehandlung und können dieses Sprachfeature korrekt einsetzen.
verstehen die Teilnehmer das Konzept des generischen Collections-Frameworks und können es zur Datenhaltung in eigenen Projekten einsetzen.
sind die Teilnehmenden in der Lage, eigene generische Klassen und Methoden zu implementieren.
verstehen die Teilnehmenden den Unterschied zwischen Deep- und Shallow-Copy und können die clone-Methode korrekt implementieren.
können die Teilnehmenden Streams mit Funktionen wie map und filter geeignet bearbeiten.
Es gibt eine unglaubliche Vielfalt von Programmiersprachen. Diese Sprachen bauen auf einigen fundamentalen Konzepte auf deren Verständnis für die Programmierung—und besonders für den Programmierunterricht—von grosser Bedeutung ist.
Nachdem die Module «Programmierung 1» und «Programmierung 2» die Imperative Programmierung—basierend auf der Idee der Turing-Maschinen—und die darauf aufbauende Objekt-Orientierte Programmierung behandeln, führt dieses Modul die komplementäre Funktionale Programmierung—basierend auf der Idee des Lambda-Kalküls—ein und behandelt Konzepte wie Reinheit, Funktionen als Werte, Lambdas, Komposition, Continuations, und Monade. Wir behandeln danach das sprachübergreifende Konzept der Typen (Statische und Dynamische Typensysteme; Algebraische Datentypen: Summen-, Produkt-, und Exponential-Typen; Vererbungs- und Parametrische Polymorphie) und generell die Idee einer Formalen Semantik für Programmiersprachen und die didaktische Idee der Notionalen Maschinen.
Lernziele
Implementation einfacher Programme in funktionalem Stil; Refaktorisierung zwischen imperativen und funktionalen Programmen
Unterscheidung zwischen statischen und dynamischen Typsystemen; Identifikation und Programmierung mit algebraischen Datentypen; Programmierung mit Parametrischer und Vererbungs-Polymorphie
Interpretation fundamentaler Sprachkonzepte mit formellen Semantik-Regeln; Verwendung von Notionalen Maschinen zur Erklärung von Sprachkonzepten
Die Lehrveranstaltung stellt grundlegenden Algorithmen und Datenstrukturen vor, und gibt eine Einführung in die Analyse von Algorithmen. Der Fokus liegt dabei auf den klassischen Such und Sortieralgorithmen, sowie den fundamentalen Datenstrukturen Arrays, Listen, Bäume und Graphen. Alle eingeführten Algorithmen und Datenstrukturen werden sowohl theoretisch analysiert als auch praktisch implementiert. Dabei werden die theoretischen Resultate durch empirische Ergebnisse von Simulationen komplementiert. Die Sprachunabhängigkeit der vermittelten Konzepte wird durch gleichzeitigen Einsatz zweier Programmiersprachen (Java und Python) vermittelt.
Lernziele
Nach dieser Lernveranstaltung sollten die Teilnehmenden
die Laufzeit und Speicherkomplexität von einfachen Algorithmen analysieren und mit Gross-O Notation formalisieren können.
die klassischen Sortierverfahren, Quicksort, Mergesort und Heapsort implementieren können und deren Laufzeit und Speichereigenschaften kennen.
die Datentypen Stack, (Priority-) Queue, Maps kennen und anwenden können als auch mittels geeigneter Datenstrukturen wie Listen, Heaps oder Bäume implementieren können.
die Eigenschaften der verschiedenen Datenstrukturen kennen und diese anwendungsspezifisch bewerten und einsetzen können.
die verschiedenen Repräsentationen von Graphen kennen sowie die grundlegenden Algorithmen auf Graphen verstehen und selber implementieren können.
Dennis Komm (ETHZ), Hans-Joachim Böckenhauer (ETHZ), Juraj Hromkovic (ETHZ)
Beschreibung
Die Veranstaltung fokussiert auf den Entwurf und Analyse von Algorithmen, bei den man fortgeschrittene algorithmische und mathematische Methoden braucht. Das Hauptthema ist, wie man die Effizienz wesentlich verbessern kann, ohne zu viele der eigenen Zielsetzungen bei der Problemformulierung aufzugeben. Insbesondere bei schweren Problemen gilt, dass man ohne eine Reduktion der Wünsche die Probleme wegen des riesigen Berechnungsaufwands nicht bewältigen kann. Hier werden die Grundkonzepte erklärt und mit eindrucksvollen algorithmischen Beispielen illustriert. Es werden auch Unterrichtsbeispiele vorgestellt, die für das Gymnasium geeignet sind.
Lernziele
Die Teilnehmenden
können algorithmische Probleme nach ihrer Schwierigkeit klassifizieren
kennen grundlegende Techniken zur Behandlung schwerer Berechnungsprobleme wie Randomisierung, Approximation, Parametrisierung und den Entwurf von Algorithmen mit moderat exponentieller Laufzeit
kennen die Grenzen dieser Entwurfstechniken
verstehen das Konzept von Online-Problemen und Online-Algorithmen
Lucia Di Caro (FHNW), Ulrich Ultes-Nitsche (UNIFR)
Beschreibung
Das Modul «Formale Grundlagen / Theoretische Informatik» behandelt die formalen Aspekte der Informatik. Es gliedert sich in die Teile
«Formale Sprachen und Entscheidungsprobleme»,
«Reguläre Ausdrücke»,
«Kontextfreie Grammatiken»,
«Automatenmodelle, Turingmaschinen»,
«Logik und Erfüllbarkeit»,
«Berechenbarkeit»,
«Komplexitätstheorie».
Einerseits geht es um grundlegende Konzepte zur Formalisierung von Informatikproblemen und um Strategien diese zu lösen (Formale Sprachen, Logik und Erfüllbarkeit). Andererseits werden Werkzeuge zur Beurteilung der Leistungsfähigkeit von Automatenmodellen untersucht (Automatenmodelle und insbesondere Turingmaschinen), mit dem Ziel Informatikprobleme in theoretisch lösbare und nicht lösbare Probleme zu klassifizieren (Berechenbarkeit) und danach die praktische Lösbarkeit der theoretisch lösbaren Probleme zu untersuchen (Komplexitätstheorie).
Lernziele
Die Teilnehmenden des Moduls «Formale Grundlagen / Theoretische Informatik» sollen:
verschiedene Klassen von Sprachen und deren Darstellung verstehen, und Mechanismen zur Erkennung, Beschreibung und Generierung solcher Sprachen entwerfen und beurteilen können,
Turingmaschinen als grundlegendes Modell der Berechenbarkeit verstehen,
einfache Programmverifikation mittels Vor- und Nachbedingungen durchführen können,
aussagenlogische Formeln aufstellen und ihre Erfüllbarkeit algorithmisch überprüfen können,
berechenbare und nichtberechenbare Probleme identifizieren können,
praktisch lösbare und nicht lösbare Probleme erkennen und differenzieren können.
Das Modul «Einführung in Computersysteme» gibt den Teilnehmenden zunächst einen Einblick in die Geschichte, die Theorie und den grundlegenden Aufbau von Hardware, Betriebssystemen und Netzwerken. Dabei wird sowohl auf die Datenverarbeitung auf Bitebene als auch auf moderne Technologien wie virtuelle Maschinen und Container eingegangen. Von der Architektur einzelner Systeme ausgehend werden anschliessend die Funktionsweise von Betriebssystemen und verschiedene Architekturen von Netzwerken und verteilten Systeme vorgestellt. Dies umfasst auch die Administration der Computersysteme, insbesondere die Automatisierung von Arbeitsschritten mit einfachen Shellskripten und das Arbeiten in einem Terminal. Darauf aufbauend werden verschiedene Webtechnologien, wie z. B. HTML, CSS, JavaScript, PHP und SQL vorgestellt und damit in einfachen Übungen kleine Webanwendungen erstellt. Abschliessend wird die Socketprogrammierung zur Kommunikation von Anwendungen über das Internet besprochen.
Lernziele
Die Teilnehmenden des Moduls «Einführung in Computersysteme» sollen danach:
die Verarbeitung von Daten auf Bitebene erklären können
den konzeptuellen Aufbau eines Computers verstehen und klassifizieren können
ein Basisverständnis für die Verarbeitung von Assemblerprogrammen entwickelt haben
die grundlegende Funktionsweise des Betriebssystems verstehen
die Arbeitsweise von Computernetzwerken, insbesondere dem Internet, verstehen
sich Grundkenntnisse in der Administration von Computern und Netzwerken angeeignet haben
die Technologien für Webanwendungen und deren Zusammenhänge verstehen
wissen, wie Computerprogramme via Sockets miteinander kommunizieren
In «Sicherheit und Privacy» wird eine Einführung in relevante Fragen rund um das Thema Computer- und Netzwerksicherheit sowie kryptographischer Verfahren zur Verschlüsselung von Daten gegeben. Zunächst wird symmetrische und asymmetrische Kryptographie unterschieden und dann konkret auf Simple DES (symmetrisch) und RSA (asymmetrisch) eingegangen. Danach werden die Einsatzszenarien von Kryptographie in verschiedenen Informatikanwendungen besprochen. Um praktisch etwas Erfahrung zu sammeln, betrachten wir OpenSSL. Abschliessend wird es um Bedrohungen im Internet und den erforderlichen Schutzmechanismen gehen.
Lernziele
Nach Abschluss des Moduls können die Teilnehmenden
symmetrische von asymmetrischen Kryptoverfahren unterscheiden und deren Vor- und Nachteile bewerten
das RSA-Verfahren anwenden, seine Grundlagen verstehen und praktische Verschlüsselungen durchführen
die Bedrohungen im Internet bewerten und adäquate Gegenmassnahmen verstehen
Johanni Brea (EPFL) – FS2022 Marco Lehmann (OST) – HS2023
Beschreibung
Dank rapiden Fortschritten im Bereich Machine Learning lösen Computer immer schwierigere Aufgaben, wie visuelle Objekterkennung, Textübersetzung oder Brett- und Computerspiele. In diesem Kurs bauen wir auf Grundlagen der Statistik, Optimierung und linearen Algebra, um supervised, unsupervised und reinforcement learning zu verstehen. Wir studieren lineare und nicht-lineare Regression und Klassifikation, Dimensionsreduktion, Clusteranalyse und sequentielle Entscheidungsverfahren. Wir programmieren Anwendungen der Theorie in einer höheren Programmiersprache (python/R/julia).
Vorausgesetzte Mathematikkenntnisse Stufe I (Grundlagenfach Mathematik am Gymnasium), Stufe II (Studium in Mathematik an Hochschule) von Vorteil
Lernziele
Nach dieser Lernveranstaltung sollten die Teilnehmenden
wichtige Konzepte in Machine Learning erklären können.
Machine Learning Anwendungen programmieren können.
Thomas Fritz (UZH) – FS2021 Marcel Lüthi (UNIBAS) – HS2022
Beschreibung
Das Thema dieser Vorlesung ist die systematische, ingenieursmässige Entwicklung von grossen Softwaresystemen.
Die Vorlesung gibt einen Einblick in die grundlegenden Prinzipien der Softwareentwicklung und zeigt die Anwendung dieser Prinzipien in modernen Methodologien und Softwareentwicklungstechniken. Es werden folgende Themenschwerpunkte besprochen: Programmdesign, Anforderungsanalyse und Spezifikation von Software, Softwareverifikation sowie Softwareprozesse.
In den Übungen entwickeln die Studierenden eigene Erweiterungen für eine bestehende Software. Grundlage für die Übungen ist das Open Source Projekt JabRef. Dabei lernen die Teilnehmenden, bestehende Software zu verstehen und erweitern. Gleichzeitig werden dabei moderne Entwicklungswerkzeuge (IDEs, Versionsverwaltung / Github, Continuous Integration, ...) eingeführt und deren Verwendung am praktischen Beispiel geübt. Im zweiten Teil der Übungen konzipieren und implementieren die TeilnehmerInnen eine eigene Erweiterung für das Projekt und durchlaufen dabei alle Phasen der Softwareentwicklung, von Anforderungsanalyse bis zum Testen.
Vorausgesetzte Mathematikkenntnisse Stufe I (Grundlagenfach Mathematik am Gymnasium)
Lernziele
Kennen der grundlegenden Prinzipien der Softwareentwicklung und Entwicklungsprozessen
Erkennen der fundamentalen Prinzipien in modernen Entwicklungsmethoden und Entwicklungswerkzeugen
Erlangen der Fähigkeit sich in grosse Softwareprojekte einzuarbeiten und sich in grossen Codebasen zurechtzufinden
Moderne Entwicklungswerkzeuge und Plattformen wie Git, Github, Github Actions, anwenden können
Die grundlegenden Konzepte der diskreten Wahrscheinlichkeit, der Logik, der Algebra und der Kombinatorik werden vorgestellt im historischen Kontext ihrer Entwicklung als Forschungsinstrumente für die Erforschung der Welt. Sie werden als Instrumente eingesetzt, um Ziele zu erreichen wie die geeignete Darstellung von Information für einen gegebenen Zweck oder für die Entwicklung, Analyse und Beurteilung effizienter Algorithmen. Es wird Hintergrundwissen vermittelt sowie der fachdidaktische Weg zur verständlichen Vermittlung dieser Konzepte im Gymnasialunterricht.
Lernziele
Die Teilnehmenden
können formal korrekt sowohl direkt als auch indirekt über die Gültigkeit von Aussagen argumentieren
wenden Grundprinzipien der Kombinatorik an, um Objekte mit gegebenen Eigenschaften zu zählen
verwenden den Begriff des Grenzwertes korrekt
argumentieren korrekt, dass eine gegebene Folge konvergiert oder divergiert
verwenden die Grundbegriffe der Wahrscheinlichkeitstheorie wie Ereignis, Wahrscheinlichkeitsraum, Wahrscheinlichkeitsverteilung, Zufallsvariable, Erwartungswert und bedingte Wahrscheinlichkeit korrekt
Dieser Kurs gibt eine Einführung in die Benutzung und Funktionsweise von Datenbanksystemen. Es geht darum, Methoden für die Abfrage, das Einfügen und die Veränderung von Daten zu erlernen, sowie ein tieferes Verständnis für die Techniken von Datenbanksystemen für die sichere Verwaltung von Daten zu erlangen. Die Themen reichen von der Datenmodellierung, über das relationale Modell und die Anfragesprache SQL, bis hin zu Konzepten wie Transaktionsverwaltung. Das Wissen wird in praktischen Übungen angewendet und auf diese Weise vertieft.
Lernziele
Erlernen von Methoden für den Entwurf von Datenbankschemata
Aneignen von Kenntnissen zum Abfragen von Daten aus einem Datenbanksystem
Kennenlernen der Prinzipien von relationalen Datenbanksystemen
Am Ende des Kurses sind die Teilnehmer in der Lage, Daten zu strukturieren und modellieren, eine Datenbank aufzubauen und diese mit Daten zu befüllen und abzufragen
Im Alltag gibt es viele Phänomene, deren Unbeständigkeit unser berechtigtes Interesse an Prognosen weckt. Beispiele hierfür sind etwa Wettervorhersagen oder die Verbreitung von COVID-19.
Die Grundlage einer Computersimulation ist ein Modell, welches das Problem einerseits soweit reduziert, dass es mathematisch beschrieben werden kann, welches andererseits aber hinreichend komplex ist, um die Charakteristika des Problems widerzuspiegeln.
Dieses Modul befasst sich neben einem Einstieg ins wissenschaftliche Rechnen mit verschiedenen deterministischen und nicht deterministischen Modellen. Basierend auf Beispielen aus Physik, Biologie und Finanzmathematik werden geeignete Simulationsverfahren zum Schwarmverhalten von Tieren, zum Kursverlauf von Aktien, zur Ausbreitung von Krankheiten und zur Musterbildung eingeführt und angewendet. Konkret werden wir hierzu eine Einführung in numerische lineare Algebra, numerische Optimierung, stochastische und diskrete Simulationsverfahren, Zeitschrittverfahren und finite Differenzen geben.
Lernziele
Grundlegende Kenntnisse in numerischer linearer Algebra und Optimierungsalgorithmen.
Typische Simulationen, welche sich für den Informatikunterricht am Gymnasium eignen, kennen und im Unterricht einsetzen können.
Mit geeigneten Werkzeugen (Python, insbesondere NumPy und Matplotlib) diskrete und kontinuierliche Simulationen erstellen und die Simulationsergebnisse visualisieren können.
Im ersten Teil des Moduls «Informatik und Gesellschaft» erhalten die Teilnehmenden einen Überblick zum heutigen Stand der Digitalisierung und lernen die zahlreichen Chancen und Herausforderungen kennen. Der Link zwischen Nachhaltigkeit und Digitalisierung wird hergestellt und insbesondere das Konzept der digitalen Nachhaltigkeit eingeführt. Dieses wird durch ethische Fragen zu künstlicher Intelligenz sowie den Themen Open Source Software und Open Government Data konkretisiert.
Der zweite Teil des Moduls «Informatik und Gesellschaft» ist grob in drei Themenfelder strukturiert. Eine Einführung bietet zunächst einen Überblick zu gesellschaftlich relevanten Fragestellungen, die durch die Informatik («Digitalisierung») aufgeworfen werden, und entwickelt aufgrund der Einsicht, dass auch (oder vor allem!) Softwareentwicklung fehlerbehaftet ist, den Bedarf nach ethischen Richtlinien sowie der rigorosen Analyse der Auswirkungen solcher Technik (Technikfolgeabschätzung). Im zweiten Teil werden Sicherheits- und Datenschutzaspekte vorgestellt und deren Signifikanz anhand zweier Anwendungsbeispiele (Zensur/Anti-Zensur, Manipulation/Diskriminierung) thematisiert. Im letzten Teil werden diverse gesellschaftlich relevante Themen besprochen (z.B. Netzneutralität, eVoting).
Lernziele
Die Teilnehmenden verstehen, wie umfassend Informatik mit unserer Gesellschaft verknüpft ist.
Die Teilnehmenden realisieren die grundsätzliche Fehlerbehaftigkeit menschlichen Handelns – auch in der Informatik – und verstehen, wie darauf reagiert werden kann.
Die Teilnehmenden besitzen ein praktisches Verständnis von IT Sicherheit und deren Rolle in der Informationsgesellschaft.
Die Teilnehmenden verstehen die Konzepte Datenschutz und Datensicherheit und sehen, wie Informatik hier sowohl neue Herausforderungen schafft als auch Lösungen anbietet.
Die Teilnehmenden verstehen die ethischen und technischen Herausforderungen konkreter (digitaler) Themen, z.B. Netzneutralität oder «Machine Bias».
Die Teilnehmenden verstehen die Chancen und Herausforderungen der Digitalisierung für Gesellschaft und Wirtschaft und können diese kritisch reflektieren.
Die Teilnehmenden erkennen den Zusammenhang zwischen Digitalisierung und Nachhaltigkeit und verstehen das Konzept der digitalen Nachhaltigkeit.
Die Teilnehmenden besitzen ein Verständnis der ethischen Herausforderungen bei Deep Learning und anderen Formen von künstlicher Intelligenz.
Die Teilnehmenden verstehen die technischen und rechtlichen Aspekte von Open Source Software und Open Data und erkennen deren Nutzen für die Gesellschaft.
Analysis: Funktionen, Ableitungen, Integrale (Grenzwerte schon vorhanden)
Ausgewählte Themen der Wahrscheinlichkeitstheorie
Lernziele
Die Teilnehmenden bauen grundlegende Kompetenzen in unterschiedlichen Bereichen der Mathematik auf und sind fähig, sie zur Beschreibung und Untersuchung unterschiedlicher Phänomene sowie zu dem Entwurf und zur Gestaltung unterschiedlicher Informatikprodukte anzuwenden. Die beiden Hauptziele sind:
Die Einführung in die exakte Sprache der Mathematik als Forschungsinstrument und die Befähigung, dieses Instrument zu verwenden.
Die Prägung der mathematischen Denkweise.
Somit werden die Teilnehmenden befähigt, die Mathematik zur Beschreibung und zur Untersuchung informatischer Konzepte in unterschiedlichen Bereichen der Informatik anzuwenden.
Campus Brugg-Windisch, Gebäude 5, Bahnhofstrasse 6, CH-5210 Windisch, 5.4D02
Samstag, 12. März 2022
09:15-12:00
13:15-17:00
Campus Brugg-Windisch, Gebäude 5, Bahnhofstrasse 6, CH-5210 Windisch, 5.4D02
Samstag, 26. März 2022
09:15-12:00
13:15-17:00
Campus Brugg-Windisch, Gebäude 5, Bahnhofstrasse 6, CH-5210 Windisch, 5.4D02
Samstag, 9. April 2022
09:15-12:00
13:15-17:00
Campus Brugg-Windisch, Gebäude 5, Bahnhofstrasse 6, CH-5210 Windisch, 5.4D02
Individuelles Projekt
Beim individuellen Projekt handelt es sich um eine persönliche Arbeit, die von den Studierenden unter der Verantwortung einer Professorin oder eines Professors realisiert wird. Die Studierenden müssen ein konkretes Problem lösen und dabei ihre im Studium erworbenen Kenntnisse in die Praxis umsetzen.
Eine Beschreibung des individuellen Projekts ist hier verfügbar.
Das Formular, das beim Start des individuellen Projekts ausgefüllt werden muss, ist hier verfügbar.
Zeitplan
Der Zeitplan für den ersten und zweiten Durchgang ist hier verfügbar.