diff --git a/Lerntagebuch.md b/Lerntagebuch.md index 823934d..795e9b9 100644 --- a/Lerntagebuch.md +++ b/Lerntagebuch.md @@ -4,29 +4,61 @@ ### Lernziel - - Verständnis für die organisatorischen Aspekte des Fachs gewinnen - - Aufbau der Lernveranstaltung verstehen - - Identität eines Informatikers - - Eigenschaften eines Informatikers - - Erwartungen an einen Informatiker + * Verständnis für die organisatorischen Aspekte des Fachs gewinnen + * Aufbau der Lernveranstaltung verstehen + * Identität eines Informatikers + * Eigenschaften eines Informatikers + * Erwartungen an einen Informatiker 
 ### Erkenntnis - Da in der Vorlesung dieser Woche besonders die Anforderungen an einen Informatiker besprochen wurden, lassen sich aus jener Vorlesung Verhaltensweisen ziehen, welche wir im Gruppenprojekt anwenden sollten. - Hier steht besonders die Teamfähigkeit im Vordergrund, welche für solch ein Projekt unermässlich wichtig ist. - Zudem ist es allgemein wichtig, sich geduldig und konzentriert an Problemstellungen zu versuchen und schlussendlich zu lösen, wobei nicht alles auf anhieb klappen wird. + * Da in der Vorlesung dieser Woche besonders die Anforderungen an einen Informatiker besprochen wurden, lassen sich aus jener Vorlesung Verhaltensweisen ziehen, welche wir im Gruppenprojekt anwenden sollten. + * Hier steht besonders die Teamfähigkeit im Vordergrund, welche für solch ein Projekt unermässlich wichtig ist. + * Zudem ist es allgemein wichtig, sich geduldig und konzentriert an Problemstellungen zu versuchen und schlussendlich zu lösen, wobei nicht alles auf anhieb klappen wird. ### Wiederholung - Die Frage, ob Informatiker eher als Handwerker oder als Künstler einzuordnen sind: - Künstler möchten in erster Linie mit ihrem Schaffen die Gefühle des Betrachters bzw. des Konsumenten ansprechen. - Ihm ist dabei nicht wichtig, wie pragmatisch sein Werk ist, sondern welche Emotionen es hervorrufen kann. - Der Informatiker auf der anderen Seite verfolgt das Ziel, pragmatische und praktische Lösungen für Probleme zu finden, sodass durch sein Schaffen Probleme oder Komplikationen so gut wie möglich minnimiert werden, ähnlich wie bei einem Handwerker. - Demnach lässt sich der Informatiker eher zu den Handwerkern, als zu Künstlern, zuordnen. + * Die Frage, ob Informatiker eher als Handwerker oder als Künstler einzuordnen sind: + * Künstler möchten in erster Linie mit ihrem Schaffen die Gefühle des Betrachters bzw. des Konsumenten ansprechen. + * Ihm ist dabei nicht wichtig, wie pragmatisch sein Werk ist, sondern welche Emotionen es hervorrufen kann. + * Der Informatiker auf der anderen Seite verfolgt das Ziel, pragmatische und praktische Lösungen für Probleme zu finden, sodass durch sein Schaffen Probleme oder Komplikationen so gut wie möglich minnimiert werden, ähnlich wie bei einem Handwerker. + * Demnach lässt sich der Informatiker eher zu den Handwerkern, als zu Künstlern, zuordnen. ### Kritik --- -## SU 02 (28.10.2021) +## SU 02 (03.11.2023) + +### Lernziel + * Übersicht über Paradigmatische Programmierung + * Erkentnis über die Unterschiede von imperativer und declarativer Programmierung + * Überblick über die drei Hauptprogrammierparadigmen prozedurale, objektorientierte und funktionale Programmierung + * Differenzen und Grundlagen von typisierten und typenlosen Programmiersprachen + * Grundlegender Überblick über Prinzipien der Programmierung + * Erläuterung des SOLID vs. STUPID Prinzips sowie weiterreichender Prinzipien + +### Erkenntnis + * SOLID vs STUPID Prinzip: + * SOLID ist ein Akronym und steht für fünf Programmierprinzipien. + * Diese Prinzipien sollen die Gestaltung von Softwarekomponenten flexibler, wartbarer und auch erweiterbarer machen. + + * STUPID steht im Gegensatz dazu und ist ein Akronym, das besonders schlechte Praktiken in der Softwareentwicklung hervorhebt. + * Die mit dem Akronym beschriebenen Praktiken sollten in der Regel vermieden werden, um sauberen und wartbaren Code zu gewährleisten. + * Die Prinzipien und Inhalte des SOLID vs STUPID Prinzips lassen sich sehr gut auf das Gruppenprojekt anwenden, da sie das schreibens eines "guten Codes" begünstigen. + * Es liegen also viele nützliche Informationen vor, die sich für die Zukunft meiner Informatikkarriere anwenden lassen. + +### Wiederholung + * Erläuterung der imperativen Programmierung: + * Die imperative Programmierung ist ein Ansatz der Softwareentwicklung, wobei der Fokus auf genauen Anweisungen liegt. + * Diese Anweisungen beschreiben, wie eine auftretende Aufgabe/ein Problem Schritt für Schritt ausgeführt oder gelöst werden muss. + * Die imperative Programmierung beinhaltet Kontrollstrukturen wie Schleifen oder bedingten Anweisungen, um den Fluss des Programms zu steuern. + * Es liegt eine große Betonung der Details von Implementierungen und den Abfolgen von Anweisungen vor. + +### Kritik + * Etwas mehr Praxisnähe wären in der Vorlesung von Vorteil (eventuell Erläuterung von neu Erlerntem an einem Code oder ähnlichem) + + +--- +## SU 03 (dd.mm.yyyy) diff --git a/Programmierparadigmen.md b/Programmierparadigmen.md new file mode 100644 index 0000000..d5430e5 --- /dev/null +++ b/Programmierparadigmen.md @@ -0,0 +1,124 @@ +# JavaScript + +# Übersicht + * ähnliche Syntax wie in C + * Vererbung nicht durch Klassen, sondern durch Prototypen (klassenlose Objektorientierung) + * typenlose Programmiersprache + +# Imperative Programmierung: + * grundlegende Art der Programmierung, bei der Schritt-für-Schritt Anweisungen angegeben werden, um Aufgaben auszuführen + * beispielsweise Verweundung von Schleifen, bedingten Anweisungen und dekleration von Variablen + +# Funktionale Programmierung + + * Funktionen können wie Daten behandelt werden oder als Argumente für andere Funktionen dienen + * hohe Ordnungsfunktion + +# Objektorierentierung + * JavaScript ist prototypbasiert, erlaubt die Erstellung und Vererbung von Objekten + * Erstellung von Klassen und Objekten + * Hinzufügen von Methoden zu Objekten + +# Asynchrone Programmierung + * Aufgaben können parallel oder nebenläufig ausgeführt werden, ohne Hauptprogramme zu blockieren + * besonders nützlich für Aufgaben wie das Laden von Daten auf einen Server oder das Verarbeiten von Benutzereingaben + + +# Modulare Programmierung + * JavaScript unterstützt die modulare Programmierung mit ES6 und späteren Versionen + * Erstellen von Modulen und der Import von Modulen wird ermöglicht + * Fördert die Wiederverwendbarkeit + +# Vorteile + * Universelle Verwendung + * Verwendung von JavaScript im Webbrowser(Frontend) oder auf Serverseiten(Backend) + + * Leicht zu erlernen + * große Entwicklungsgemeinschaft und viele Ressourcen für das Lernen + + * Interaktive Benutzeroberfläche + * Erstellen von interaktiven und dynamischen Webseiten + * Verbessert die Benutzererfahrug + + * Asynchrone Programmierung + * gut für die Handhabung asynchroner Aufgaben + * wichtig für Webanwendungen + +# Nachteile + * Browser-Kompatiblität + * unterschiede Browser interpretieren JavaScript-Code unterschiedlicdh + + * Sicherheitsprobleme + * anfällig für Corss-Site-Scripting und Cross-Site-Request-Forgery, wenn Sicherheitsvorkehrungen nicht richtig getroffen werden + + * Typisierungsprobleme + * schwer zu debuggen und Typfehler treten erst während der Laufzeit auf + + * Ladezeit + * JavaScript Daten müssen erst vom Browser heruntergeladen und interpretiert werden + * beeinflusst die Ladezeiten von Webseiten + + * Begrenzte Serverseitenfähigkeit + * keine gute serverseite Sprache, da es viele Einschränkungen gibt im Vergleich zu spezialisierten severseitigen Sprachen + + +# Go +* Imperativ / OOP (aber keine Klassen/Vererbung) +* Einfach/lesbar +* effizient + * Orientierung an C + * Low-Level +* Statische Typisierung + * Varibalen haben festen Datentyp + * Fehlerfindung frühzeitig +* Standardbibliothek +* Cross Platform Compilation + + +# TypeScript +* Superset von JavaScript +* Starke Typisierung im Gegensatz zu JavaScript + * Statische & Dynamische Dartentypen werden unterstützt +* TypeScript ist objekt-orientiert + * Vererbung + * Schnittstellen +* Funktional (weil auf JavaScript aufbauend) +* Anwendung: große Aplikationen/Frameworks +* bessere Strukturierung + +# Java +* Imperativ +* Objekt-orientiert + * Klassenbasiert + * Zugriff wird klar definiert + + Vererbung/Polymorphismus +* Ähnlichkeiten +* Standard-Bibliotheken +* Strikt typisiert +* Funktionale Anteile seit neuren Java-Versionen +* Anweundung: Web-Applikationen, Desktop-Anwendungen + + +# C +* Imperativ +* Prozedural +* Typisierte Sprache +* Anwendung: Hardwarenahme Programmierung + * Direkter Speicherzugriff + +* Nutzung auf so ziemlich allen Systemen +* Schnell & verbraucht wenig Ressourchen +* Befehlsatz ist relativ klein + * Kann Vorteil oder Nachteil sein + * Selber schreiben oder einbinden externer Bibliotheken + + +# Python +* basierend auf C +* imperativ und prozedural +* typisierte Sprache + * macht das Programm automatisch (dynamische Typisierung) +* Objektorientierung +* Ersellen von Funktionen +* Kompiler in sich intigriert +* sehr klare Syntax