Dauer: 3 Phasen à 6 Wochen + Projektpräsentation
Unterrichtsgestaltung
(inkl. Theorie-/Praxisanteile)
Die Unterrichtsgestaltung besteht aus drei Konzepten, welche sich gegenseitig ergänzen, um einen maximalen Lernerfolg zu erzielen.
Vorlesung
Den ersten Teilbereich dabei bildet die Vorlesung.
Innerhalb der Vorlesungen werden neue Themen kurz und knapp von den Dozenten vorgestellt. In der Vorlesung geht es primär um die Vermittlung neuen Wissens, sodass hier der Theorieanteil bei 95-100% liegt. Zum Abschluss einer Vorlesung werden Übungsaufgaben, zu den Themen der Vorlesung, an die Lernenden herausgegeben.
Anhand der Vorlesung können die Lernenden selbst entscheiden, wie sie die Themen weiter vertiefen möchten.
Praktische Übung
Das zweite Konzept, welches für die Erlangung des praktischen Know-Hows zuständig ist, ist die Übung.
Nach einer Vorlesung findet eine Übung zu den Themen der Vorlesung statt, welche die Lernenden freiwillig besuchen können. In der Übung stellt ein Dozent die Themen der Vorlesung noch einmal detaillierter vor. Darüber hinaus unterstützt der Dozent die Lernenden bei der Bearbeitung der Aufgaben oder gibt Hinweise bei der Projektarbeit. Der Theorieanteil hier beläuft sich auf ein Minimum, sodass die Lernenden sich möglichst dauerhaft mit der Praxis auseinandersetzen.
Selbstorientiertes Lernen
Komplettiert wird das Lernkonzept durch das Selbstorientierte Lernen.
Beim Selbstorientierten Lernen können die Lernenden die Übungsaufgaben oder das Projekt selbstständig (ohne Dozentenunterstützung) bearbeiten. Dadurch werden die Themen der Vorlesung gefestigt. Da hier kein Dozent anwesend ist, beläuft sich der Theorieanteil auf 0%.
Unsere Lerninhalte
Phase 1
Einsatz der Sprache C/C++, Vergleich zu anderen Sprachen
Vergleich zu Java
Einführung in die Arbeitsweise des Compilers
Prozess
Befehle
Arbeitsumgebung
Prozess
Befehle
Endungen
Getting started
Semantik (Verhalten)
Boolesche Ausdrücke kombinieren
Logisches UND
Logisches ODER
Negation
Schleifen
Arbeitsweise
while-Schleife
do-while-Schleife
for-Schleife
Inkrement/Dekrement
Sprünge in Schleifen
Endlosschleifen
Grundliegende C Bibliotheken, Ein- und Ausgaben
Datentypen
Standarddatentypen in C
Datentypen verwenden
Anweisungen und Schleifen
Felder und Arrays
Einfache Arrays
Mehrdimensionale Arrays
Funktionen
Funktionsaufruf
Lokale Variable
Signatur
Strukturen
Anwendung
Zeiger
Zeiger (Pointer) deklarieren
Zeigerarithmetik
Speicherzugriffsfehler
Call by Value/Call by Reference
Speicherverwaltung in C
Zeiger auf Zeiger und Zeigerarithmetik
Best Practice mit Zeigern
Fehlersuche / Debugging / GDB
Phase 2
Einführung in C++ und Standardbibliotheken
OOP mit UML und C++
Klassen
Sichtbarkeiten
Methoden
Abstrakte Klassen
Speicherverwaltung in C++
Beispielprogramm Fahrzeugverwaltung
CodeReview
Dateioperationen und Streams
Überladen vs Überschreiben
Phase 3
friend Funktionen
Makefiles/CMake
Vererbungsmuster (Liskovsche Substitutionsprinzip)
Mehrfachvererbung
inline Funktionen
spezielle Methoden
Mathematische Berechnungen
Assembler (Speicher und Befehle)
Rechnen mit Assembler
Assembler in C++
Phasenübergreifend:
Die Lernenden werden über das gesamte Grundlagenjahr in kleinen Gruppen ein Projekt, mit wöchentlichen neuen Anforderungen, durchführen und dokumentieren. Die wöchentlich neuen Anforderungen orientieren sich dabei an den jeweils aktuell gelehrten Inhalten, innerhalb der Vorlesungen.
Mithilfe des Projektes bekommen die Lernenden so durchgehend, wie im späteren Arbeitsalltag, eine Aufgabe, die sie bearbeiten und verbessern müssen, während sie immer neue Themen erlernen, die direkt im Projekt Anwendung finden.
Lernziele/Kompetenzen
Nach Abschluss des Grundlagenjahres können die Lernenden:
- Die Funktionsweise eines Compilers erläutern
- Zwischen Compiler und Interpreter unterscheiden
- C als Untermenge von C++ differenzieren
- Datentypen in C benennen
- Auskunft über Größen verschiedener Datentypen geben
- Die main Funktion korrekt schreiben
- Funktionen schreiben
- Übergabeparameter definieren
- Rückgabewerte definieren
- Die Bestandteile einer Funktionssignatur benennen
- Einen Programmablauf umsetzen mittels If-Anweisungen, Schleifen, break und continue Anweisungen
- Ein Struktogramm erstellen
- Einen Programmablaufplan erstellen
- Fehler in einem Programm finden und beheben
- Entscheiden, welche Datentypen in bestimmten Situationen verwendet werden sollten
- Code formatieren
- Variablen und Funktionen nach Best-Practice benennen
- Fachliche Inhalte mit logischen Operatoren abbilden
- Den Programmcode strukturieren
- Den Unterschied zwischen C und C++ erkennen
- Streams verwenden
- Makros definieren
- Klassen erstellen
- Vererbung zwischen Klassen herstellen und Objektorientierte Konzepte verstehen
- Methode überschreiben
- Abstrakte Klassen definieren
- Abstraktion einsetzen in Form einfacher Patterns
- Speichermanagement betreiben
- Speicherfehler auffinden
- Speicheroptimiert programmieren
- Entwicklerwerkzeuge verstehen und sicher einsetzen
- Selbstständig einfache Probleme mithilfe von externen Quellen lösen
- Mithilfe von Suchmaschinen Lösungen für unbekannte Probleme lösen
Zusätzlich zur Entwicklung der Fachkompetenz erfolgt eine Förderung der sozial-kommunikativen, personalen und Aktivitäts- und Handlungskompetenz.
Lehrmethoden
Frontalunterricht/Präsentation
Vermittlung von gesichertem Wissen durch vom Dozenten vorbereitete Präsentationen
Plenumsdiskussion bzw. dialogisches Lernen
Direkter Einbezug der Lernenden, Mitgestaltung des Prozesses
Partnerarbeit (Pair Programming)
Behandlung eher schwierigerer Aufgaben, Notwendigkeit gegenseitiger Hilfe, Arbeitsteilung und eigenverantwortlichem Arbeiten
Einzelarbeit
Phasen des Übens und Wiederholens, Übung der Sorgfalt, Konzentration und eigenverantwortlichem Arbeiten
Selbstorganisiertes Lernen
Vorgabe der Lehrmaterialien durch Dozent. Art, Weise und Intensität der Nutzung obliegt dem Lernenden.
Lernen an Lösungsbeispielen
Erläuterung des Lerninhalts durch konkrete Beispiele
Projektarbeit in kleinen Gruppen
klare Arbeitsstruktur und sinnvolle Kooperation notwendig
Weiterbildungen
Angeleitete Lernen in Weiterbildungseinheiten als Selbststudium, Einarbeitung in die eigentlichen Inhalte, Vertiefung und Vervollkommnung der Inhalte
Projektpräsentationen
Präsentationen der Lernenden, Schulung der Präsentationskompetenz und Vermittlung von Wissen
Technische Ausstattung für Schulungsräume
Beamer, Smartboard, Arbeitsplätze mit Monitor und einen Moderationskoffer pro Schulungsraum
Einen Rechner für jeden Lernenden mit:
- Entwicklungsumgebungen
- GCC/G++
- GDB/LLDB
- Notepad++
- VS Code
- PDF-Viewer
- MS-Office
- einem aktuellen Internetbrowser
- Kopfhörer und Mikrofon
- Internetverbindung
- Git-Bash
- Zugriff auf das Azure Portal
- lokalen Administratorrechten
- Zugang zum Bitbucket im Devstack
Lernmaterialien
- Modulskripte
- Präsentationen
- Live-Codings
- Projektbeispiele
- Übungsaufgaben mit Musterlösungen
Weitere Hinweise
Modulsprache ist Deutsch, die Dokumentation, die zur Aufgabenlösung benötigt wird, ist jedoch größtenteils auf Englisch