diff --git a/LerntagebuchBeispiel.md b/LerntagebuchBeispiel.md index 1c8fd26..d6587c9 100644 --- a/LerntagebuchBeispiel.md +++ b/LerntagebuchBeispiel.md @@ -1,4 +1,4 @@ -
+ # Mein Lerntagebuch für Programmiermethoden und -werkzeuge Das ist ein Beispiel wie ein Lerntagebuch aussehen könnte. ## SU 01 (21.10.2021) ### Lernziel - Organisatorisches - @@ -19,4 +19,4 @@ weg. Aber wenn mich irgendwas stört oder begeistert, kann ich es hier anmerken. --- ## SU 02 (28.10.2021) ...hier geht's bald weiter -
\ No newline at end of file + diff --git a/lerntagebuch.md b/lerntagebuch.md index 7e359e4..ecfbbe3 100644 --- a/lerntagebuch.md +++ b/lerntagebuch.md @@ -1,19 +1,22 @@ -Vorlesung(2.11.2022) +# Mein Lerntagebuch für Programmiermethoden und -werkzeuge -Lernziele +## Vorlesung (2.11.2022) -Es gibt viele Arten von programmierParadigmen: -1. Imperative programmierung erklärt, dass ein Programm aus einer Folge von Anweisungen besteht, die vorgeben, +### Lernziele + +Es gibt viele Arten von programmierParadigmen: + +1. Imperative programmierung erklärt, dass ein Programm aus einer Folge von Anweisungen besteht, die vorgeben, in welcher Reihenfolge was vom Computer getan werden soll. 2. Bei Deklarative Programmierung steht die Beschreibung des Problems im Vordergrund. Danach wird der Lösungsweg automatisch ermittelt. -3. Die prozedurale Programmierung ergänzt das imperative Konzept aufeinander folgender Befehle um den Ansatz, +3. Die prozedurale Programmierung ergänzt das imperative Konzept aufeinander folgender Befehle um den Ansatz, einen Algorithmus in überschaubare Teile zu zerlegen. -4. Objektorientierte Programmierung, wie der Name beschreibt, bezieht sich auf eine Prorammiersprache(Java :D), +4. Objektorientierte Programmierung, wie der Name beschreibt, bezieht sich auf eine Prorammiersprache(Java :D), welche Objekte, Kalssen und Vererbung unterstützt. -5. Funktionalen Programmierung ist eine Verfeinerung der deklarative Progammierung, -bei dem die grundlegenden Ausdrücke die Erzeugung von Funktionen (die Abstraktion) und +5. Funktionalen Programmierung ist eine Verfeinerung der deklarative Progammierung, +bei dem die grundlegenden Ausdrücke die Erzeugung von Funktionen (die Abstraktion) und die Anwendung von Funktionen (die Applikation) sind. Aber nur für Berechnungen. -6. Bei typisierten Progammiersprachen wird für Variablen sowie Parameter und Rückgabewerte von Prozeduren festgelegt, +6. Bei typisierten Progammiersprachen wird für Variablen sowie Parameter und Rückgabewerte von Prozeduren festgelegt, von welchem Datentypen sie sind(int oder void und so weiter). 7. Typenlose Programmiersprachen ist das Gegenteil von typisierte Programmiersprache. den Typ von Variablen, Parametern und Rückgabewerten wird nicht festgelegt. @@ -34,26 +37,26 @@ STUPID - Indescriptive Naming - Duplication -Kritik +### Kritik Keep It Simple and Stupid(Komplezität soll vermieden werden). -Vorlesung(9.11) +## Vorlesung (9.11) -Lernziele +### Lernziele Entwurfmuster (design patterns) sind bewährte Lösungsschablonen für wiederkehrende Entwurfsprobleme sowohl in der Architektur als auch in der Softwarearchitektur und -entwicklung. Sie stellen damit eine wiederverwendbare Vorlage zur Problemlösung dar, die in einem bestimmten Zusammenhang einsetzbar ist. Sie stammt aus der Architektur mit der Verbreitung von Programmiersprachen adaptiert. -Die Vorteile davon ist: +Die Vorteile davon ist: 1. erprobte Lösungen für Wiederkehrende Aufgaben. -2. Vor- und Nachteile sind bekannt. +3. Vor- und Nachteile sind bekannt. 3. die Kommunikation vereinfachen. 4. eignen sich zur Dokumentation. -Die Nachteile davon ist: +Die Nachteile davon ist: 1. hohe Einstiegshürde. 2. Im Code schwer identifizierbar. @@ -80,15 +83,94 @@ Typen des Verhaltensmusters: 5. Nullobjekt. 6. Strategie. -IDE - Integrated Development Environment ist eine Zielplattform für fast alle Programmierer, +IDE - Integrated Development Environment ist eine Zielplattform für fast alle Programmierer, wo sie da coden kann zB. Eclipse, VS Code, Notepad(lmao). Eine der Automatisierung der IDE ist Code Insight, welche seinen Job den Code automatisch komplett zu typen ist zB sysout wird automatisch zu System.out.println() getauscht. Andere Automatiesierungen sind safe actions, Code Formatierung für lesbarkeit und natürlich Compilieren. Der Unterschied zwischen einfache und komplexe Refactorings ist, eine auf aktuelle Datei beschränkt, andere über mehrere Dateien. -Andere automatisierte Refactorings sind Umbenennungen, Signaturen von Methoden, Verschieben con Codeteilen und Zusammenfassen -von Codeteilen. Debugging wird erklärt durch die Beobachtung des Programms während der Laufzeit, um Fehler zu identifizieren -und zu löschen. +Andere automatisierte Refactorings sind Umbenennungen, Signaturen von Methoden, Verschieben con Codeteilen und Zusammenfassen +von Codeteilen. Debugging wird erklärt durch die Beobachtung des Programms während der Laufzeit, um Fehler zu identifizieren +und zu löschen. -Kritik +### Kritik Keine für diese Woche :D. + +## Vorlesung (16.11) + +### Lernziele + +*git* als Source Code Management. + +Konzepte von *git*: + +1. basiert auf _change sets_, nicht Datei. +2. *commits* wird von SHA gesichert. +3. *branches* sind Aufkleber auf commits. +4. Staging area(siehe Kritik). + +Safety creates confidence: + +1. permanenter Zugriff auf den letzten Arbeitszustand. +2. Zugang zu verschiedenen Status (production, develop, feature in progress). +3. Änderungen im Laufe der Zeit/zwischen Funktionen oder *branches* vergleichen. + +Simple methods vs SCM: + +|Simple methods | Source Code Management | +|---------------------------- |------------------------------- | +|exsessive disk usage |optimised for minimal disk usage| +|chunky granularity |fine granularity | +|no ”commit message” |annotated change | +|hard to navigate / search |easy navigation/search | +|manual merges |automated merge | +|copies/archives on net shares|change history as tree | +|simple local copies | +|zip archives | +|no tooling required | +|easy diff | +| no technical relationships | + +Centralized SCM: + +|Pro|Contra| +|---|---| +|Jeder *commit* für verfügbar| zentrale Instanz erforderlich| +|aktueller Editor allen bekannt|*locking* verhindert paralleles Arbeiten| +|easy backup/restore|*branching* und *merging* sofort sichtbar für alle| +|unbegrenzte Ressourcen für das Repository|keine Offline-Arbeit| + +Distributed SCM: +|Pro|Contra| +|---|---| +|kein zentraler Server nötig|local history out of sync| +|mehrere *remotes* möglich|kein Schutz gegen gleichzeitige Änderungen| +|arbeiten ohne (ständigen) Netzzugang| +|implizite backups| +|Offline-Arbeit - lokale "Experimente"privat bleiben| + +Branching: + +1. master/main +2. develop +3. release +4. hotfix +5. feature + +Rebase vs Merge: + +|`rebase` wenn|`merge` wenn| +|---|---| +|an einem unfertigen *feature* arbeiten, das noch nicht in andere *branches* eingebunden wurde|aktuell _branch develop_ oder *master*| +|eine saubere Historie ist erwünscht|Die Historie sollte mit der Zeitachse synchron bleiben| +|dein *branch* hat viele Commits (mit funktionierenden UnitTests)|dein *branch* wurde bereits gemerged| +|einen "Squash-Commit" vorzubereiten| + +### Kritik + +Keep commits small and clean for easier problem solving and back tracking. + + + + +