# Mein Lerntagebuch für Programmiermethoden und -werkzeuge
# Mein Lerntagebuch für Programmiermethoden und -werkzeuge
##SU 01 (21.10.2021)
##SU 01 (21.10.2021)
###Lernziel
###Mein Lernziel für diese Woche bestand aus:
###Lernziel
###Mein Lernziel für diese Woche bestand aus:
Sich mit Organisation und Lernplan vertraut zu machen
Sich mit Organisation und Lernplan vertraut zu machen
Wer ist ein Programmierer? Künstler oder Handwerker?
Wer ist ein Programmierer? Künstler oder Handwerker?
@ -14,44 +14,44 @@
Einen GitLab account einzurichten und einen neuen Projekt erstellen.
Einen GitLab account einzurichten und einen neuen Projekt erstellen.
Sich mit git vertraut zu machen.
Sich mit git vertraut zu machen.
###Erkenntnis
###Erkenntnis
Ich habe erfahren, was mich im Laufe des Semesters erwartet und welche Anforderungen ich erfüllen müsste um erfolgreich den Kurs zu bestehen. Ich habe die Prinzipien kennengelernt, die einem Programmierer helfen erfolgreich und effektiv zu sein und die Folgen der Nichtbeachtung dieser Prinzipien.
Ich habe erfahren, was mich im Laufe des Semesters erwartet und welche Anforderungen ich erfüllen müsste um erfolgreich den Kurs zu bestehen. Ich habe die Prinzipien kennengelernt, die einem Programmierer helfen erfolgreich und effektiv zu sein und die Folgen der Nichtbeachtung dieser Prinzipien.
Beim Praktikum habe ich gelernt, wie man einen account beim GitLab erstellt und mithilfe von Terminal und git-Befehlen ein neues Repository erstellt.
Beim Praktikum habe ich gelernt, wie man einen account beim GitLab erstellt und mithilfe von Terminal und git-Befehlen ein neues Repository erstellt.
###Wiederholung
###Wiederholung
Diese Woche gab es keine Wiederholung, da wir zum ersten Mal Unterricht hatten.
Diese Woche gab es keine Wiederholung, da wir zum ersten Mal Unterricht hatten.
###Kritik
###Kritik
Es gibt keine Kritik
Es gibt keine Kritik
###Mitteilung an die Dozierenden
###Mitteilung an die Dozierenden
Es gibt keine Mitteilung an die Dozierenden
Es gibt keine Mitteilung an die Dozierenden
##SU 02 (31.10.2021)
##SU 02 (31.10.2021)
###Lernziel
####Mein Lernziel für diese Woche bestand aus:
###Lernziel
####Mein Lernziel für diese Woche bestand aus:
####Programmierparadigmen:
####Programmierparadigmen:
#####Imperative Programmierung:
#####Imperative Programmierung:
Programm besteht aus der Reihe der Anweisungen, die vorgeben in welcher Reihenfolge was vom PC getan werden soll.
Programm besteht aus der Reihe der Anweisungen, die vorgeben in welcher Reihenfolge was vom PC getan werden soll.
Sehr hardwernah
Sehr hardwernah
Programm ist gut nachvollziehbar
Programm ist gut nachvollziehbar
#####Deklarative Programmiersprachen:
#####Deklarative Programmiersprachen:
Die Beschreibung des Problems steht im Vordergrund
Die Beschreibung des Problems steht im Vordergrund
z.B Haskell, List, Prolog, XAML (SQL...)
z.B Haskell, List, Prolog, XAML (SQL...)
Vorteil: die sind kürzer, als imperative Sprachen
Vorteil: die sind kürzer, als imperative Sprachen
mathematische Beweise lassen sich leichten durchführen
mathematische Beweise lassen sich leichten durchführen
Es gibt keine Nebenwirkungen aufgrund der Transparenz
Es gibt keine Nebenwirkungen aufgrund der Transparenz
#####Prozedurale Programmierung:
#####Prozedurale Programmierung:
Weiterentwicklung der imperativen Sprachen
Weiterentwicklung der imperativen Sprachen
aufeinander folgende Befehle mit Zelregung des Algorythmus. Diese Zerlegung heisst Funktionen
aufeinander folgende Befehle mit Zelregung des Algorythmus. Diese Zerlegung heisst Funktionen
Aufrufen von Unterprogrammen und das Durchleiten von Werten und die Rückgabe von Werten
Aufrufen von Unterprogrammen und das Durchleiten von Werten und die Rückgabe von Werten
@ -60,7 +60,7 @@
Fehlerzustände werden über spezielle Rückgabewerte kommuniziert
Fehlerzustände werden über spezielle Rückgabewerte kommuniziert
Beispiele: Cobol, C...
Beispiele: Cobol, C...
#####Objektorientierte Programmierung:
#####Objektorientierte Programmierung:
Es ist eine Technik, welche Objekte, Klassen und Vererbung unterstützt
Es ist eine Technik, welche Objekte, Klassen und Vererbung unterstützt
Merkmale:
Merkmale:
@ -71,7 +71,7 @@
Wiederverwendbarkeit von Programmteilen
Wiederverwendbarkeit von Programmteilen
bessere Testbarkeit (Unittests - kleinere Teile unabhängig von Rest des Programms testen)
bessere Testbarkeit (Unittests - kleinere Teile unabhängig von Rest des Programms testen)
#####Funktionale Programmierung:
#####Funktionale Programmierung:
Erweiterung der deklaratieven Programmierung
Erweiterung der deklaratieven Programmierung
ineinander verschachtelete Funktionsaufrufe
ineinander verschachtelete Funktionsaufrufe
Funktionen sind den anderen Datenobjekten gleichberechtigt
Funktionen sind den anderen Datenobjekten gleichberechtigt
@ -83,7 +83,7 @@
geignet für nebenläufige Prozesse
geignet für nebenläufige Prozesse
Randbedingung: nur für Berechnungen
Randbedingung: nur für Berechnungen
#####typisierte Programmiersprachen:
#####typisierte Programmiersprachen:
jede Wariable, Parameter und Rückgabewerte haben einen vordefinirten Typ. Die festlegung ist implizit oder explizit
jede Wariable, Parameter und Rückgabewerte haben einen vordefinirten Typ. Die festlegung ist implizit oder explizit
C, C++, Java, go, C#, Python, Haskell, TypeScript
C, C++, Java, go, C#, Python, Haskell, TypeScript
Vorteile: fail fast
Vorteile: fail fast
@ -91,14 +91,14 @@
Nachteile: Typen müssen zum Programmierzeitpunkt bekannt sein
Nachteile: Typen müssen zum Programmierzeitpunkt bekannt sein
nachtägliche Änderungen können bestehenden Code brechen
nachtägliche Änderungen können bestehenden Code brechen
#####Typenlose Programmiersprachen:
#####Typenlose Programmiersprachen:
jede Wariable, Parameter und Rückgabewerte werden nicht festgelegt
jede Wariable, Parameter und Rückgabewerte werden nicht festgelegt
Beispiele: JS, Assemler x86
Beispiele: JS, Assemler x86
Vorteile: nur faktische Kompatibilität
Vorteile: nur faktische Kompatibilität
implizite Konvertierung
implizite Konvertierung
Nachteile: Typenfehler treten erst zum Laufzeit auf
Nachteile: Typenfehler treten erst zum Laufzeit auf
###Prinzipien der Programmierung:
###Prinzipien der Programmierung:
SOLID und STU
SOLID und STU
@ -115,25 +115,25 @@
DI Dependency Injection
DI Dependency Injection
###Erkenntnis
###Erkenntnis
Ich habe mehrere Programmiersprachen unter die Lupe genommen und deren Merkmale,Aufgaben- und Anwendungsfelder, sowie Nach- und Vorteile kennengelernt. Durch die Anwendung der Programmierprinzipien lernt man einen lesbaren, effizienten Code zu schreiben, der auch in der Zukunft leicht zu bearbeiten sein soll.
Ich habe mehrere Programmiersprachen unter die Lupe genommen und deren Merkmale,Aufgaben- und Anwendungsfelder, sowie Nach- und Vorteile kennengelernt. Durch die Anwendung der Programmierprinzipien lernt man einen lesbaren, effizienten Code zu schreiben, der auch in der Zukunft leicht zu bearbeiten sein soll.
###Wiederholung
###Wiederholung
Ich habe den Umgang mit git wiederholt.
Ich habe den Umgang mit git wiederholt.
###Kritik
###Kritik
Es gibt keine Kritik
Es gibt keine Kritik
###Mitteilung an die Dozierenden
###Mitteilung an die Dozierenden
Struckturierte Betrachtung der Programmiersprachen und Programmierprinzipien finden Sie im Ordner "Programmierparadigmen.md"
Struckturierte Betrachtung der Programmiersprachen und Programmierprinzipien finden Sie im Ordner "Programmierparadigmen.md"
##SU_03
##SU_03
###Lernziele:
###Lernziele:
Wir haben die Kenntnisse der Markup Sprache als Voraussetzung definiert.
Wir haben die Kenntnisse der Markup Sprache als Voraussetzung definiert.
@ -142,34 +142,34 @@
ursprünglich aus der Architektur
ursprünglich aus der Architektur
mit der Verbreitung der OOP adaptiert
mit der Verbreitung der OOP adaptiert
###Vorteile:
###Vorteile:
erprobte Lösungen für Wiederkehrende Aufgaben
erprobte Lösungen für Wiederkehrende Aufgaben
Vor- und Nachteile sind bekannt
Vor- und Nachteile sind bekannt
erleichtern die Kommunikation (funktioniert so gut wie nie. Durch DP haben selben Kontext)
erleichtern die Kommunikation (funktioniert so gut wie nie. Durch DP haben selben Kontext)
hohe Einstiegshürde (Lernaufwand und es dauert eine Weile)
hohe Einstiegshürde (Lernaufwand und es dauert eine Weile)
im Code schwer identifizierbar
im Code schwer identifizierbar
###Wo helfen die DP:
###Wo helfen die DP:
Makro-Design (auf Architekturebene), (Grobentwurf).ModulebeneArchitekt, Team
Makro-Design (auf Architekturebene), (Grobentwurf).ModulebeneArchitekt, Team
Mikro-Design (wie die Codebestandteile zueinander stehen)
Mikro-Design (wie die Codebestandteile zueinander stehen)
###3 verschiedene Kategorien:
###3 verschiedene Kategorien:
####Erzeugungsmuster: Erbauer (builder)
####Erzeugungsmuster: Erbauer (builder)
Fabrkimethode (factory method)
Fabrkimethode (factory method)
Abstrakte Fabrik (abctract factory)
Abstrakte Fabrik (abctract factory)
Eizelstück (singleton)
Eizelstück (singleton)
Multiton
Multiton
####Strukturmuster: Adapter
####Strukturmuster: Adapter
retrofit interface pattern
retrofit interface pattern
Die Brücke
Die Brücke
Dekorierer
Dekorierer
@ -177,7 +177,7 @@
Fliegengewicht
Fliegengewicht
####Verhaltensmuster: Accumulator
####Verhaltensmuster: Accumulator
Beobachter
Beobachter
Iterator
Iterator
Kommando
Kommando
@ -186,7 +186,7 @@
###IDE Intergrated Development Environment
###IDE Intergrated Development Environment
Geschichte
Geschichte
alle die an einem Projekt beteiligt sind müssen gleiche Patameter für Compiler haben
alle die an einem Projekt beteiligt sind müssen gleiche Patameter für Compiler haben
@ -195,99 +195,99 @@
Navigation
Navigation
Debuging etc.
Debuging etc.
###Einteilung: Sprache
###Einteilung: Sprache
Plattform
Plattform
###Beispiele: Eclipse, VS Code ...
###Beispiele: Eclipse, VS Code ...
###Einfache und komplexe Refactorings (eine oder mehrere Dateien)
###Einfache und komplexe Refactorings (eine oder mehrere Dateien)
###Debugging: Beobachtung des Programms während der Laufzeit (Reihenfolge der Prozeduren und Werte der Tabelle)
###Debugging: Beobachtung des Programms während der Laufzeit (Reihenfolge der Prozeduren und Werte der Tabelle)
###Praktik: Wir haben die Übung mit dem Debugger durchgeführt
###Praktik: Wir haben die Übung mit dem Debugger durchgeführt
###Erkenntnis
###Erkenntnis
Wir haben die Vor- und Nachteile der IDE kennengelernt. Ihre Einsatzmöglichkeiten und auch die Möglichkeit den Code zu debuggen.
Wir haben die Vor- und Nachteile der IDE kennengelernt. Ihre Einsatzmöglichkeiten und auch die Möglichkeit den Code zu debuggen.
###Wiederholung
###Wiederholung
keine
keine
###Kritik
###Kritik
keine
keine
###Mitteilung an die Dozierenden
###Mitteilung an die Dozierenden
keine
keine
##SU_04
##SU_04
###Lernziele
###Lernziele
####SCM (Source Code Managment)
####SCM (Source Code Managment)
Warum Git (Unterschiede Centralized vs. distributed SCM)
Warum Git (Unterschiede Centralized vs. distributed SCM)
Konzept von Git
Konzept von Git
####Warum Git so sicher ist: permanenter Zugang zu den letzten Ständen.
####Warum Git so sicher ist: permanenter Zugang zu den letzten Ständen.
Vergleich mit verschiedenen Versionen
Vergleich mit verschiedenen Versionen
einfache Methoden
einfache Methoden
####SCM: optimal für minimale Disk Nutzung
####SCM: optimal für minimale Disk Nutzung
notierte Veränderungen
notierte Veränderungen
einfache Navigation
einfache Navigation
automatisierte Merges
automatisierte Merges
####centralized vs. distributed SCM
####centralized vs. distributed SCM
centralized: Geschichte ist auf dem zentralen Netzwerk vorhanden. Entwickler arbeiten mit der Kopie.
centralized: Geschichte ist auf dem zentralen Netzwerk vorhanden. Entwickler arbeiten mit der Kopie.
distributed: Jeder Entwickler hat eigen Geschichte.
distributed: Jeder Entwickler hat eigen Geschichte.
####Der Konzept: basiert auf Sets und nicht auf Files
####Der Konzept: basiert auf Sets und nicht auf Files
Commits gesichert durch SHA
Commits gesichert durch SHA
Staging Bereich
Staging Bereich
####Keep commits small: Erlaubt Git die Konflichte automatisch selbst zu lösen
####Keep commits small: Erlaubt Git die Konflichte automatisch selbst zu lösen
Erlaubt es dir die Konflichte manuell zu lösen.
Erlaubt es dir die Konflichte manuell zu lösen.
Einfacher zu "cherry pick"
Einfacher zu "cherry pick"
Detailisierte Dokumentation
Detailisierte Dokumentation
Veränderungen sind einfacher in der History zu finden.
Veränderungen sind einfacher in der History zu finden.
####Keep commits clean: commiete wenn Projekt compiliert wurde und alle Tests erfolgreich abgeschlossen wurden.
####Keep commits clean: commiete wenn Projekt compiliert wurde und alle Tests erfolgreich abgeschlossen wurden.
####Branching:
####Branching:
#####Master: infinite lifetime, dedicated responsible committer,spawns from initial commit, each commit references a shipping event, commits are tagged
#####Master: infinite lifetime, dedicated responsible committer,spawns from initial commit, each commit references a shipping event, commits are tagged
with version number, no direct commits, only merges (--no-ff) from release or fix branch allowed.
with version number, no direct commits, only merges (--no-ff) from release or fix branch allowed.
Develop: infinite lifetime, first commit is start of project (initial commit), is always in shippable state. (compiles, all (automated) test pass), every developer can commit a shipping ready feature (but should be done by a build server)
Develop: infinite lifetime, first commit is start of project (initial commit), is always in shippable state. (compiles, all (automated) test pass), every developer can commit a shipping ready feature (but should be done by a build server)
###Erkenntnis
###Erkenntnis
####Wir haben heute die Konzepte und Funktionsweise von Git kennengelernt. Ausserdem habe ich erfahren welche Vorsätze wichtig sind um es effektiv mit dem Git zu arbeiten. In der Praktischen Stunde haben wir versucht die das angeeignete Wissen anzuwenden. Dabei haben wir die folgende Git-Kommanden verwendent. git init, git add, git commit, git push, git checkout, git remote, git fetch, git clone, git status...
####Wir haben heute die Konzepte und Funktionsweise von Git kennengelernt. Ausserdem habe ich erfahren welche Vorsätze wichtig sind um es effektiv mit dem Git zu arbeiten. In der Praktischen Stunde haben wir versucht die das angeeignete Wissen anzuwenden. Dabei haben wir die folgende Git-Kommanden verwendent. git init, git add, git commit, git push, git checkout, git remote, git fetch, git clone, git status...
####privater fork: es gibt ein zentrales RR (= master)
####privater fork: es gibt ein zentrales RR (= master)
jeder Entwickler hat ein separates RR (= fork)
jeder Entwickler hat ein separates RR (= fork)
jedes LR hat 2 RR
jedes LR hat 2 RR
origin -> master, nur lesend
origin -> master, nur lesend
upstream -> privater fork, Schreiberechte
upstream -> privater fork, Schreiberechte
Änderungen werden per Pull Request aus dem fork in maser repository übernommen
Änderungen werden per Pull Request aus dem fork in maser repository übernommen
###Erkenntnis
###Erkenntnis
####In der Praxisunterricht haben wir die erworbene Kenntnisse über remote repositories in das Praxis umgesetzt und Umgang damit trainiert.
####In der Praxisunterricht haben wir die erworbene Kenntnisse über remote repositories in das Praxis umgesetzt und Umgang damit trainiert.
###Wiederholung
###Wiederholung
####Zur Wiederholung haben wir den Umgang mit local repositories geübt. Die nächste Aufgabe war so aufgebaut, dass es ohne vorkenntnisse über lokal repositories nicht möglich war, diese zu bewältigen.
###Kritik
####Zur Wiederholung haben wir den Umgang mit local repositories geübt. Die nächste Aufgabe war so aufgebaut, dass es ohne vorkenntnisse über lokal repositories nicht möglich war, diese zu bewältigen.
###Kritik
####keine
####keine
###Mitteilung an die Dozierenen
###Mitteilung an die Dozierenen
####keine
####keine
##SU_06
###Lernziele
####Begriffe: Regelprozess -> ständig, kein Endterminn
Linienmaßnahme -> Aufgabe einer einzelnen Organisationseinheit
#####V - Modell: *Erweiterung des Wasserfallmodels für Softwareentwicklung
*Entwicklungsschritte werden Testebenen gegenübergestellt
#####Agile Modelle: *fixiert Aufwand und Zeit - nicht den Umfang
*Menschen und Interaktionen sind wichtiger, als Prozesse und Werkzeuge
*Funktionierende Software ist wichtiger als eine umfassende Dokumentation
*Zusammenarbeit mit dem Kunden ist wichtiger als die Vertragsverhandlung
*Reagieren auf Veränderung ist wichtiger als das Festhalten an einem Plan
#####Kanban *Teilaufgaben definieren
*Backlog
*Workflow Darstellung
#####Burn Down Chart *Projektfortschritt über die Zeit
*Abschätzung des verbliebenen Aufwands
*setzt fixe Arbeitspakete mit bekanntem (geschätzten) Aufwand voraus
####Techniken
#####Scrum: *fixe Intervalle
*regelmäßige Meetings (Planning, Daily(nicht mehr als 10 min, was habe ich gemacht, was habe ich vor), Review(eine Stunde. was im letzten Sprint gut/schlecht was, was wir nicht mehr machen sollen usw.))
*auch die Meetings mit owner, stackeholder.
*Tracking der story points (velocity/pace)
*kein Wettbewerb zwischen den Teams!
####Schätzverfahren
#####Eine verlässliche Aufwandschätzung ist die Basis für ein erfolgreiches Projektmanagement
*früh anwendbar
*Reaktion auf Anforderungsänderungen
*Nachvollziehbarkeit
*liefert auch Zeitaufwandsschätzung
*geringe Kosten
#####*Schätzung nach Aufwandspunkten, nicht nach Zeit
*keine planbaren Störfaktoren
*(automatisiertes) Testen und Refactoring immer einrechnen
*Aufgaben im möglichst kleine Teilaufgaben zerlegen
*möglich spät schätzen
*sagen sie NEIN wenn nicht genug Informationen vorhanden sind
####Schätzverfahren Beispiele
#####Drei Werte Weg: Sie schätzen für jede Aufgabe 3 Werte:
*erwartet normale Aufwand wenn alles wie erwartet abläuft
*minimum wenn besonders günstige Umstände eintreffen
*maximum wann alles schief geht
#####Hitstorischer vergleich: Sie orientieren sich an bereits bearbeiteten Aufgaben
*eigene Aufgaben
*Aufgaben der Kollegen
*ähnliche Kompläxität -> ähnliche Punktzahl
#####Planning Pocker:
*spezielle Karten(Werte: 1,3, 7, 13, 21)
*jeder schätzt für sich
*gleichzeitig aufdecken
*niedrigster und höchster wert müssen begründet werden
*Abstimmiung, ob die Begründung akzeptiert wird
*Durchschnitt oder median bilden Wertung
####Dokumentation
*Lastenheft (was soll im Projekt umgestetzz werden soll)
*Pflichtenheft (das wofür wir uns bereit erklären zu tun)
*Systembeschreibung(Arc42)
####Agil
*User Stories
*Ticketsystem
###Erkenntnis
####Wir haben verschiedende Modelle der Softwareentwicklung kennengelertn und Ihre vor- und Nachtele. Dann sind auch verschieden Rollen der Menschen, die bei Entwicklung mitspielen, erläutert worden. Schätzverfahren wurde angesprochen und verschieden Möglichkeiten gezeigt, die Schätzung durchzuführen.
###Wiederholung
####Ich habe das Thema der letzten Woche wiederholt, wo der Umgang mit Git mit dem remote repository angesprochen wurde.