Code Monkey home page Code Monkey logo

programmiermethoden-campusminden / prog2-lecture Goto Github PK

View Code? Open in Web Editor NEW
7.0 4.0 5.0 93.04 MB

Lecture "Programmieren 2"

Home Page: https://www.hsbi.de/elearning/goto.php?target=crs_1352130&client_id=FH-Bielefeld

License: Creative Commons Attribution Share Alike 4.0 International

Makefile 3.84% TeX 4.21% Java 91.56% Dockerfile 0.17% HTML 0.21%
java testing refactoring git logging teaching-materials oer clean-code teaching-website hacktoberfest

prog2-lecture's Introduction

archetype title
home
IFM 2.1: Programmieren 2 (PO23, Sommer 2024)

... And, lastly, there's the explosive growth in demand, which has led to many people doing it who aren't any good at it. Code is merely a means to an end. Programming is an art and code is merely its medium. Pointing a camera at a subject does not make one a proper photographer. There are a lot of self-described coders out there who couldn't program their way out of a paper bag.

\hfill -- John Gruber auf daringfireball.net

Kursbeschreibung

Sie haben letztes Semester in Prog1 die wichtigsten Elemente und Konzepte der Programmiersprache Java kennen gelernt.

In diesem Modul geht es darum, diese Kenntnisse sowohl auf der Java- als auch auf der Methoden-Seite so zu erweitern, dass Sie gemeinsam größere Anwendungen erstellen und pflegen können. Sie werden fortgeschrittene Konzepte in Java kennenlernen und sich mit etablierten Methoden in der Softwareentwicklung wie Versionierung von Code, Einhaltung von Coding Conventions, Grundlagen des Softwaretests, Anwendung von Refactoring, Einsatz von Build-Tools und Logging auseinander setzen. Wenn uns dabei ein Entwurfsmuster "über den Weg läuft", werden wir die Gelegenheit nutzen und uns dieses genauer anschauen.

Überblick Modulinhalte

  1. Fortgeschrittene Konzepte in Java
    • Funktionale Programmierung: Default-Methoden, Funktionsinterfaces, Methodenreferenzen, Lambdas, Stream-API
    • Generische Programmierung: Generics
    • Parallele Programmierung: Threads
    • Reguläre Ausdrücke, Annotationen, Reflection
    • CLI, Konfiguration, fremde APIs nutzen
    • Graphische Oberflächen mit Swing
  2. Fortgeschrittenes OO-Design
    • Entwurfsmuster: Strategy, Template-Method, Factory-Method, Singleton, Observer, Visitor, Command, ...
  3. Programmiermethoden
    • Versionskontrolle: Git
    • Testen, Coding Conventions, Refactoring
    • Logging, Build-Tools, CI

(durchgestrichene Themen nicht im Sommersemester 2024)

Team

  • Carsten Gips (Sprechstunde nach Vereinbarung)
  • Tutoren (siehe ILIAS-Mitgliederliste)

Kursformat

{width="80%"}

:::::: {.tabs groupid="vl-pr"} ::: {.tab title="Vorlesung"}

Vorlesung (2 SWS)

Mi, 08:00 - 09:30 Uhr (online)

Durchführung als Flipped Classroom.

::: ::: {.tab title="Praktikum"}

Praktikum (2 SWS)

Praktikumsgruppe Zeit Raum
Gruppe 1 Mi, 11:30 - 13:00 Uhr online
Gruppe 2 Mi, 09:45 - 11:15 Uhr D320
Gruppe 3 Mi, 09:45 - 11:15 Uhr online
Gruppe 4 Mi, 11:30 - 13:00 Uhr D320

Praktika Gruppen 2 und 4 in Präsenz.

::: ::::::

Online-Sitzungen per Zoom (Zugangsdaten siehe ILIAS). Sie können hierzu den Raum J104 nutzen.

Prüfungsform, Note und Credits

Parcoursprüfung, 5 ECTS (PO23)

:::::: {.tabs groupid="exams"} ::: {.tab title="Prüfung im ersten Zeitraum"}

  • Stationen:
    • Praktikum: 10x Übungsblätter mit jeweils 1P (Einzelbearbeitung, mindestens 60% bearbeitet, fristgerechte Abgabe der Lösungen im ILIAS, Vorstellung der Lösungen im Praktikum => Punkte)
    • Schriftliche Prüfung (digitale Klausur) mit 100P; Prüfungsvorbereitung
  • Gesamtnote: 4.0: ab 50P, alle 5P nächste Teilnote, 1.0: ab 95P

Die nächste Klausur für "Programmieren 2" wird am Mittwoch, 24. Juli 2024 angeboten. Die Klausur wird als digitale Klausur auf dem Prüfungs-ILIAS der HSBI in Präsenz vor Ort in Minden im Raum B40 durchgeführt. Die Prüfung beginnt um 09:00 Uhr und dauert 90 Minuten. Ein DIN-A4-Zettel ist als Hilfsmittel zugelassen. Der geprüfte Stoff bezieht sich auf den zuletzt durchgeführten Kurs (Sommer 2024, s.u.). Weitere Informationen siehe Prüfungsvorbereitung.

::: ::: {.tab title="Prüfung im zweiten Zeitraum"}

  • Stationen:
  • Gesamtnote: 4.0: ab 50P, alle 5P nächste Teilnote, 1.0: ab 95P

::: ::::::

Materialien

Literatur

  1. "Java ist auch eine Insel". Ullenboom, C., Rheinwerk-Verlag, 2021. ISBN 978-3-8362-8745-6.
  2. "Pro Git (Second Edition)". Chacon, S. und Straub, B., Apress, 2014. ISBN 978-1-4842-0077-3.
  3. "The Java Tutorials". Oracle Corporation, 2023.
  4. "Learn Java". Oracle Corporation, 2023.

Tools

Fahrplan

Hier finden Sie einen abonnierbaren Google Kalender mit allen Terminen der Veranstaltung zum Einbinden in Ihre Kalender-App.

[Bitte geben Sie uns Feedback: Nehmen Sie bitte an der anonymen Umfrage zu "Programmieren 2" teil.]{.alert}

Monat Tag Vorlesung Praktikum
April 17. Orga (Zoom), FAQ
24. Generics: Klassen und Methoden, Bounds und Wildcards, Type Erasure, Polymorphie; Gradle B01
Mai 01. Mai-Feiertag Mai-Feiertag
08. Einführung Versionierung, Git Basics; Lambda-Ausdrücke; Javadoc B02
15. Dienstbesprechung B03
22. Git-Branches, Branching-Strategien; Methodenreferenzen; Logging B04
29. Git-Remotes, Git-Workflows; Stream-API; Record-Klassen; Intro Dungeon B05
Juni 05. Einführung Testen, JUnit-Basics; Optional; Visitor-Pattern B06
12. Testfallermittlung, Mocking; Default-Methoden; Observer-Pattern; Serialisierung B07
19. Code-Smells, Coding-Rules, Refactoring; Continuous Integration (CI) B08
26. RegExp; Template-Method-Pattern, Command-Pattern; Enumerationen B09
Juli 03. Intro Threads, Synchronisierung, Highlevel Threadkonzepte; Konfiguration B10
10. Rückblick (Zoom), Prüfungsvorbereitung
tbd Klausur (Campus Minden, B40)

Abgabe der Übungsblätter jeweils bis 08:00 Uhr im ILIAS.

Förderungen und Kooperationen

Förderung durch DH.NRW (Digi Fellowships)

Die Überarbeitung dieser Lehrveranstaltung wurde vom Ministerium für Kultur und Wissenschaft (MKW) in NRW im Einvernehmen mit der Digitalen Hochschule NRW (DH.NRW) gefördert: "Fellowships für Innovationen in der digitalen Hochschulbildung" (Digi Fellowships).

Kooperation mit dem DigikoS-Projekt

Diese Vorlesung wird zudem vom Projekt "Digitalbaukasten für kompetenzorientiertes Selbststudium" (DigikoS) unterstützt. Ein vom DigikoS-Projekt ausgebildeter Digital Learning Scout hat insbesondere die Koordination der digitalen Gruppenarbeiten, des Peer-Feedbacks und der Postersessions in ILIAS technisch und inhaltlich begleitet. DigikoS wird als Verbundprojekt von der Stiftung Innovation in der Hochschullehre gefördert.

::: slides

LICENSE

Unless otherwise noted, this work is licensed under CC BY-SA 4.0. :::

prog2-lecture's People

Contributors

aheinisch avatar amatutat avatar cagix avatar crappyalgorithm avatar dependabot[bot] avatar dkirshner avatar jedi101 avatar jposselt avatar kurisox avatar tgrothe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

prog2-lecture's Issues

[BUG] Fix Groß-/Kleinschreibung in Bib-File

Für die deutschsprachigen Einträge wird nur das erste Word des Titels korrekt im Literaturverzeichnis wiedergegeben, die restlichen Wörter werden alle (teilweise fälschlich) klein geschrieben.

see https://pandoc.org/MANUAL.html#capitalization-in-titles


Mögliche Lösung: jgm/pandoc#8209 (comment)

langid = {de}
langid = {en}

zu jedem Eintrag hinzufügen.


Update: Man kann analog zu Bibtex die Titel mit doppelten geschweiften Klammern schützen. Sobald aber dann eine gemischte Schreibweise vorliegt, packt Pandoc ein [...]{.nocase} um den Titel dazu, was Hugo dann wieder nicht versteht.

[QUESTION] Change Repo-Name?

Wir haben unsere Organisation "PM-Dungeon" und das Vorlesungs-Repo "Lecture" genannt. Das passt auch eigentlich ganz gut.

Aber mir ist kürzlich aufgefallen, wenn Studis sich das Repo forken, dass dann der Fork im Studi-Repo auch einfach nur "Lecture" heisst, was nicht besonders aussagekräftig ist.

Mein Vorschlag ist, dass wir den Namen für das Lecture-Repo nochmal überdenken. Vielleicht "PM-Lecture" (bestes denglisch)?

@AMatutat @Tobias321 Was denkt Ihr?

Neues Thema: Spring Boot?

Spring Boot ist ja ein recht populäres Framework im Java-Bereich.

  • Macht es Sinn, das in eine Lehrveranstaltung mit Java-Fokus zu integrieren?
  • Ist es evtl. zu komplex für ein zweites Semester?
  • Ist es evtl. zu komplex für 1..2 Blöcke a 15..20 Minuten?
  • Wird es im Studium schon an anderer Stelle besprochen?

[Tooling] Toolchain vereinfachen: Templates mit Pandoc nachbauen

  • Einsatz des Wikis für die Skripte (?)
  • Einsatz von Jupyter-Skripten als Skripte (?)
  • Hugo-Templates mit Pandoc nachbauen (?)
  • Anderes Hugo-Theme (?)
  • Anderen Seitengenerator (mkDocs, mdBook, ...)?

see https://github.com/PM-Dungeon/pmdungeon-html/issues/18#issuecomment-950134772

Wiki:
naja, das rendering findet quasi ausschließlich in github statt, es gibt ein rudimentäres menü und ein rudimentäres toc für jede seite. ansonsten halt die markdown-ansicht wie auch im normalen repo. andererseits gibt es keine "richtige" versionskontrolle und auch keine anzeige von contributors etc. ...

Jupyter:
ich bin neulich mal über ein projekt eines kollegen im saarland gestolpert: https://github.com/uds-se/fuzzingbook ... der schreibt initial alles in jupyter-notebooks und hat eine toolchain, die das in folien (reveal.js mit nettem style) plus markdown plus html für eine webseite übersetzt. der witz ist aber, dass github diese jupyter-notebooks bereits relativ "schön" anzeigt: mathe wird sauber gerendert etc. (beispiel: https://github.com/uds-se/fuzzingbook/blob/master/notebooks/Grammars.ipynb oder https://github.com/uds-se/fuzzingbook/blob/master/notebooks/ProbabilisticGrammarFuzzer.ipynb) ... das bringt mich angesichts dieser unklaren situation, ob nun eine datenschutzerklärung notwendig ist oder nicht und wenn ja, was genau da rein muss, ins nachdenken. man könnte mit pandoc plus einem ci-workflow aus dem markdown die jupyter-notebooks erzeugen und die in einem seitenbranch einchecken (lassen). diese notebooks können sich die studis direkt im github/browser ansehen (inkl. code, abbildungen, mathe) und auch runterladen und als notebook ausführen (also mit den code-snippets interaktiv rumspielen). dann könnte man sich die webseite und den ganzen stress dazu sparen. zumal die toolchain md > pandoc > md > hugo > html sich in der praxis als erstaunlich anfällig zeigt :/

das einzige, was mir da fehlt, sind (a) ein menü über alle seiten und (b) ein toc/navigation in einer seite. aber (a) könnte man durch gliederungsseiten ohne probleme selbst manuell nachbauen und (b) geht vermutlich auch, man muss es sicher nur aktivieren (pandoc beispielsweise kann auch markdown mit toc erzeugen, aber das muss man ihm erst sagen). für die pandoc-webseite wird sowas ähnliches gemacht (siehe https://github.com/jgm/pandoc-website/blob/master/Makefile).

Alternative: Hauptrepo mit Unterlagen und Quizzes und Sourcen etc., automatische Generierung der Pages als HTML (https://github.com/pandoc-scholar/pandoc-scholar) oder Jupyter (https://github.com/uds-se/fuzzingbook). Je Semester ein neues Repo, dort Syllabus und Grading etc. in Markdown only und Schedule manuell mit Links in YT/FH-Medien plus Hauptrepo (gh-pages) für einzelne Lectures. Dann wird kein Menü o.ä. gebraucht und man hat eine schlanke Lösung, und im Hauptrepo hat man nicht die Vermischung aus Inhalten und Orga-Kram. Zusätzlich können im Semester-Repo die Issues und Discussions für die Kommunikation genutzt werden.

Pandoc:

  • Pages mit eigenem Template (Make plus Pandoc-Template)
  • Navigation in Page mit TOC (Export mit --toc-Option)
  • Navigation über alle Pages mit Menü
  • Konfigurierbarer Schedule

[QUESTION] PM-Dungeon Praktikum Ablauf

Die Aufgabenblätter für die Aufgaben IM Dungeon müssen überarbeitet/erstellt werden.
Dafür sollten wir uns auf einen Ablauf einigen.

Idee 1 Klassisch:

  • regelmäßige Arbeitsblätter mit fester Struktur (Blatt 1 -> Blatt 2-> ... -> letztes Blatt"
  • pro:
    • bekannt
    • klare Struktur
    • klarer Zusammenhang zwischen dem Thema der Vorlesung und dem Praktikum (jeweils aus der gleichen Woche)
    • einfacher für die Tutoren
  • con:
    • sehr statisch
    • keine Flexibilität welche Technik für welches Problem genutzt wird,

Idee 2 Aufgabenpool:

  • die Aufgaben werden als ein großer Pool zur Verfügung gestellt und die Studis können die Aufgaben in jeder beliebigen Reihenfolge abarbeiten
  • pro:
    • Die Studis müssen selbst auf die Idee kommen, welche Technik für welche Aufgabe am besten geeignet ist
    • Flexibilität für die Studis
    • Abwechslungsreichere Lösungen
  • con:
    • größere Korrekturanforderung an die Tutoren
    • keine Technik als Vorgabe. Was ist, wenn jemand alle Aufgaben auf die "dümmste" Weise umsetzt?
    • Wie viele Aufgaben pro Woche? Manche Features sind komplexer/aufwendiger als andere.
      • könnte man da mit einem Werte-System arbeiten? Jede Aufgabe bekommt, abhängig vom Aufwand, einen Wert und jede Woche müssen Aufgaben gemacht werden, die zusammen einen Wert x haben.

Andere Fragen:

  • wollen wir das Projekt am Ende des Semesters beibehalten?
  • Lerntagebuch?
  • In Sysprog haben wir über "Konzept-Abnahmen" gesprochen. Können/wollen wir das auch integrieren? Wird das evtl. zu viel? Dann hätten wir Trockenübung, Konzept und Dungeon.

VL neu: Pattern: Command-Pattern

  • Prüfen: Ist das wirklich ein normales Pattern?
  • Neues 10-Minuten-Mopped für VL (Tabelle updaten)

Update: Lt. "Game Programming Pattern" gibt es ein "Command"-Pattern. "Flyweight" und "Type Object" sind in unserem Kontext evtl. auch ganz interessant ...

[FEATURE] Factory-Pattern als (neues) Thema in VL

Das Factory-Pattern würde sich perfekt für die Erzeugung von Monstern eignen.
Die MonsterFactory schaut sich an, welches Design aktuell verwendet wird und wie weit fortgeschritten der Spieler ist (je weiter, desto stärker die Monster) und schmeißt dann die entsprechenden Monster raus.

Ich hab keinen aktuellen Plan zur Hand, daher weiß ich nicht, ob und wann das Pattern Bestandteil der Vorlesung ist. Am alten Praktikum orientiert, wäre Blatt 02 das Blatt mit den Monstern.

Aufgabe: Beschreibungstexte für "freie" Aufgaben

In alle drei Pools A, B und C gibt es je eine freie Aufgabe mit 10P.

  • Der Beschreibungstext sollte deutlich machen, dass sich die Studis hier "austoben" dürfen.
  • Es sollte ein oder zwei Beispiel-Ideen geben, damit die Studis eine Idee des gewünschten Umfangs bekommen.
  • Es sollte deutlich werden, dass hier keine bereits existierenden Aufgaben und auch keine bereits abgegebenen Aufgaben bearbeitet werden können, sondern dass es um neue Ideen geht.

Update:

  • Für die Projekt-Seite könnte direkt assignments/pool_p/_index.md genommen werden, da es darunter nur eine einzige Seite mit der Projektbeschreibung gibt
  • Spätestens eine Woche vor Projekt: Im Praktikum Pitch mit Jonas diskutieren
    • Konzept/Pitch kann mdl. sein, dient vor allem der Machbarkeit und Aufwandsabwägung
    • 10P für inhaltliche Dinge absprechen
  • Erste Woche: Feinkonzept, Grundgerüst/Grobimplementierung
    • 10 Punkte für Feinkonzept und Grundimplementierung: TBD
  • Zweite Woche: Implementierung, Dokumentation, Lerntagebuch
    • Inhaltliche Punkte für Umsetzung
    • Punkte für schriftliche Ausarbeitung: Kriterien TDB
    • Abzüge wie bei den Dungeon-Aufgaben sonst

=> erstes Projekt: entweder in der Woche vor dem E-Assessment oder in der Woche mit dem E-Assessment

Vorlage Aufgabenstruktur

Sowohl für die Konzeptaufgaben als auch für die Dungeonaufgaben wird ein festes Template benötigt.

Für alle Typen:

  • Name/Überschrift
  • Aufgabenstellung
  • Punkte

Für Dungeonaufgaben

  • Angabe zu welchen Pool das gehört

Für Konzeptaufgaben:

  • ggf. verweis auf Vorgaben
  • Abgabedatum

@cagix Für Hugo/Pandoc wird vermutlich ein festes Format benötigt, oder?

[BUG] Update all files to reflect new repo name

  • Repo: "PM-Lecture"
  • Readme.md: Link zu den Contributors
  • static/license.html: Link zu den Contributors
  • static/license.html: Link auf das Repo
  • config.yaml: Link auf die GH-Page
  • config.yaml: editURL
  • Zusätzlich noch einmal "grep" nach dem alten Repo-Namen
  • Lokale Workingcopy: git remote set-url origin <neuer pfad>

follow up of #50

Makefile verbessern

  • Die Pfade zu den Pages tauchen mehrfach auf: Makefile, Schedule, ... Prüfen, ob sich das Makefile vereinfachen lässt, und ob die Auflistung der Files für die Pandoc-Vorverarbeitung wirklich notwendig ist
  • Targets überarbeiten, damit Dinge tatsächlich nur bei Bedarf neu übersetzt werden
  • Alle .md mit Pandoc vorverarbeiten (?)

edit: ist in Makefile aus https://github.com/Compilerbau/Lecture gelöst


@jposselt Kannst Du bitte das Makefile aus https://github.com/Compilerbau/Lecture hier als Pull-Request einkippen? Da hast Du viel Zeit reingesteckt, also solltest Du auch hier als Author auftreten!

Verzeichnisstrukturen vereinfachen

  • Recherche: Können Hugo-related Ordner verschoben werden? Wo/Wie sieht die Konfiguration aus?
  • Schiebe alle Hugo-related Ordner in den neuen Unterordner hugo/
  • Achtung: da sind drei Git-Submodules dabei (einfach verschieben reicht nicht)
  • Config für Hugo anpassen

[FEATURE] Deploy-to-Abgabe

"deploy-to-abgabe": neben dem framework von nelson bin ich neulich über das hier gestolpert: "code freak" (paper, github). klingt wie ein "richtiges" framework und wird scheinbar bereits relativ breit an der uni kiel eingesetzt ...

Aufgabe: Metadaten

Die Metadaten für die Aufgaben müssen überprüft und ggf. angepasst werden.

  • Stimmen die Punkte?
  • Autor?
  • ggf. Abgabedatum (wird über data/schedule.yaml definiert)
  • Gewichtung

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.