fakhrullah
2 years ago
1 changed files with 268 additions and 173 deletions
-
441lerntagebuch.md
@ -1,176 +1,271 @@ |
|||||
# Mein Lerntagebuch für Programmiermethoden und -werkzeuge |
|
||||
|
|
||||
## Vorlesung (2.11.2022) |
|
||||
|
|
||||
### 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, |
|
||||
einen Algorithmus in überschaubare Teile zu zerlegen. |
|
||||
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 |
|
||||
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, |
|
||||
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. |
|
||||
8. SOLID vs STUPID |
|
||||
|
|
||||
SOLID |
|
||||
- Seperation of Concern |
|
||||
- Open/closed Principle |
|
||||
- Liskov Substitution Principle |
|
||||
- Interface Segregation Principle |
|
||||
- Dependency Inversion Principle |
|
||||
|
|
||||
STUPID |
|
||||
- Singleton |
|
||||
- Tight Coupling |
|
||||
- Untestability |
|
||||
- Premature Optimization |
|
||||
- Indescriptive Naming |
|
||||
- Duplication |
|
||||
|
# Mein Lerntagebuch für Programmiermethoden und -werkzeuge |
||||
|
|
||||
|
## Vorlesung (2.11.2022) |
||||
|
|
||||
|
### 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, |
||||
|
einen Algorithmus in überschaubare Teile zu zerlegen. |
||||
|
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 |
||||
|
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, |
||||
|
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. |
||||
|
8. SOLID vs STUPID |
||||
|
|
||||
|
SOLID |
||||
|
- Seperation of Concern |
||||
|
- Open/closed Principle |
||||
|
- Liskov Substitution Principle |
||||
|
- Interface Segregation Principle |
||||
|
- Dependency Inversion Principle |
||||
|
|
||||
|
STUPID |
||||
|
- Singleton |
||||
|
- Tight Coupling |
||||
|
- Untestability |
||||
|
- Premature Optimization |
||||
|
- Indescriptive Naming |
||||
|
- Duplication |
||||
|
|
||||
|
### Kritik |
||||
|
|
||||
|
Keep It Simple and Stupid(Komplezität soll vermieden werden). |
||||
|
|
||||
|
## Vorlesung (9.11) |
||||
|
|
||||
|
### 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: |
||||
|
1. erprobte Lösungen für Wiederkehrende Aufgaben. |
||||
|
3. Vor- und Nachteile sind bekannt. |
||||
|
3. die Kommunikation vereinfachen. |
||||
|
4. eignen sich zur Dokumentation. |
||||
|
|
||||
|
Die Nachteile davon ist: |
||||
|
1. hohe Einstiegshürde. |
||||
|
2. Im Code schwer identifizierbar. |
||||
|
|
||||
|
Typen des Erzeugungsmusters: |
||||
|
1. Erbauer. |
||||
|
2. Fabrikmethode. |
||||
|
3. Abstrakte Fabrik. |
||||
|
4. Einzelstück (singleton). |
||||
|
5. Multiton. |
||||
|
|
||||
|
Typen des Strukturmusters: |
||||
|
1. Adapter. |
||||
|
2. Nachrüstungsschnittstellenmuster (retrofit interface pattern) |
||||
|
3. Die Brücke. |
||||
|
4. Dekorierer. |
||||
|
5. Fassade. |
||||
|
6. Fliegengewicht. |
||||
|
|
||||
|
Typen des Verhaltensmusters: |
||||
|
1. Accumulator. |
||||
|
2. Beobachter. |
||||
|
3. Iterator. |
||||
|
4. Kommando. |
||||
|
5. Nullobjekt. |
||||
|
6. Strategie. |
||||
|
|
||||
|
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. |
||||
|
|
||||
|
### 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. |
||||
|
|
||||
|
## Vorlesung (23.11) |
||||
|
|
||||
|
### Lernziele |
||||
|
|
||||
|
Vorteile von Continuous Delivery (CI): |
||||
|
|
||||
|
1. automatisierte Prozesse verrigern Aufwand |
||||
|
2. formale Prozesse verringern Konfliktpotential |
||||
|
3. Vorstufe zu _Continuous Delivery_ |
||||
|
|
||||
|
Bestandteile von Softwareentwicklungsprozess: |
||||
|
|
||||
|
1. Code schreiben |
||||
|
2. Abhängigkeitenverwaltung |
||||
|
3. Code veröffentlichen |
||||
|
4. Integration |
||||
|
5. build-Prozess: compile und test |
||||
|
6. Bereitstellung |
||||
|
|
||||
|
Abhängigkeitenverwaltung: |
||||
|
|
||||
|
1. nicht selbst im Build-Lauf erzeugt |
||||
|
2. nicht im SCM eingecheckt |
||||
|
3. zentrale Bereitstellung (innerhalb der Organisation) |
||||
|
4. Zugriff auf einzelne Versionen |
||||
|
|
||||
|
Semantische Versionierung: |
||||
|
|
||||
|
__1.2.3-beta1__ |
||||
|
|
||||
|
1- MAJOR - inkompatible Änderungen |
||||
|
2- MINOR - zusätzliche Features, Programmteil bleibt abwärtskompatibel |
||||
|
3- PATCH - Fehlerbehebungen, Programmteil bleibt abwärtskompatibel |
||||
|
beta1- LABEL - spezifische Build-Kennzeichung |
||||
|
|
||||
|
Source Code Management (SCM): |
||||
|
|
||||
|
1. Sicherung der Arbeit einzelner Entwickler |
||||
|
2. zentrale Verfügbarmachung |
||||
|
3. Zusammenführung parallel geänderter Dateien |
||||
|
4. parallele Entwicklung verschiedener Features ermöglichen |
||||
|
5. Zugriff auf dedizierte Stände (*releases*) |
||||
|
6. Wechsel zwischen Entwicklungsständen (`branches`) |
||||
|
|
||||
|
build - Prozess: |
||||
|
|
||||
|
1. Übersetzen |
||||
|
2. ängigkeiten organisieren |
||||
|
3. automatisierte Tests ausführen |
||||
|
4. Liefer-Artefakte erzeugen |
||||
|
5. Deployment |
||||
|
|
||||
|
build-Prozess starten: |
||||
|
|
||||
|
- Abhängigkeiten auflösen |
||||
|
- compilieren |
||||
|
- automatisierte Tests ausführen |
||||
|
- Lieferartefakt erstellen |
||||
|
- Lieferartefakt ausliefern |
||||
|
|
||||
|
Integration: |
||||
|
|
||||
|
1. SCM überwachen |
||||
|
2. build-Prozess starten |
||||
|
3. Ergebnisse berichteten |
||||
|
|
||||
|
Problem des Continuous Ingegrations: |
||||
|
|
||||
|
1. kein menschlicher Eingriff |
||||
|
2. compilierbar nicht bedeutet ausführbar |
||||
|
3. CI soll immer lieferbaren Stand bereit halten |
||||
|
4. Programm muss im CI Prozess ausgeführt werden |
||||
|
|
||||
|
Vorteile automatisierter Tests: |
||||
|
|
||||
|
1. automatisierte Tests führen Programm aus |
||||
|
2. dokumentieren gewünschtes Verhalten |
||||
|
3. sind wiederholbar |
||||
|
4. erkennen Laufzeitfehler (außer UnitTests) |
||||
|
5. Ausführungszeit von Arbeitszeit entkoppelt |
||||
|
|
||||
|
gemeinsames _remote repository_ |
||||
|
|
||||
|
1. alle Entwickler arbeiten ausschließlich gegen ein gemeinsames _remote repository_ |
||||
|
2. jeder Entwickler hat (Schreib-)Zugriff |
||||
|
3. einfache Synchonisation |
||||
|
4. (gepushte) Zwischenstände für alle direkt sichtbar |
||||
|
|
||||
|
privater *fork*: |
||||
|
|
||||
|
1. es gibt ein zentrales remote repository (= _master_) |
||||
|
2. jeder Entwickler hat ein separates remote repository (= _fork_) |
||||
|
3. jedes locale repository hat 2 _remote repositories_: |
||||
|
- `origin` - *master*, nur lesend |
||||
|
- `upstream` - privater *fork*, Schreibrechte |
||||
|
|
||||
### Kritik |
### Kritik |
||||
|
|
||||
Keep It Simple and Stupid(Komplezität soll vermieden werden). |
|
||||
|
|
||||
## Vorlesung (9.11) |
|
||||
|
|
||||
### 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: |
|
||||
1. erprobte Lösungen für Wiederkehrende Aufgaben. |
|
||||
3. Vor- und Nachteile sind bekannt. |
|
||||
3. die Kommunikation vereinfachen. |
|
||||
4. eignen sich zur Dokumentation. |
|
||||
|
|
||||
Die Nachteile davon ist: |
|
||||
1. hohe Einstiegshürde. |
|
||||
2. Im Code schwer identifizierbar. |
|
||||
|
|
||||
Typen des Erzeugungsmusters: |
|
||||
1. Erbauer. |
|
||||
2. Fabrikmethode. |
|
||||
3. Abstrakte Fabrik. |
|
||||
4. Einzelstück (singleton). |
|
||||
5. Multiton. |
|
||||
|
|
||||
Typen des Strukturmusters: |
|
||||
1. Adapter. |
|
||||
2. Nachrüstungsschnittstellenmuster (retrofit interface pattern) |
|
||||
3. Die Brücke. |
|
||||
4. Dekorierer. |
|
||||
5. Fassade. |
|
||||
6. Fliegengewicht. |
|
||||
|
|
||||
Typen des Verhaltensmusters: |
|
||||
1. Accumulator. |
|
||||
2. Beobachter. |
|
||||
3. Iterator. |
|
||||
4. Kommando. |
|
||||
5. Nullobjekt. |
|
||||
6. Strategie. |
|
||||
|
|
||||
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. |
|
||||
|
|
||||
### 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. |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
*forking* is a good practice for a large scale project, where a lot of people working on the same repository at the same time. |
Write
Preview
Loading…
Cancel
Save
Reference in new issue