Weaving the Web

Schwerpunkt im Medieninformatik Master

Empfohlene Voraussetzungen/ Kenntnisse und Fertigkeiten

Lesezeit: ~ 5 mins

In diesem Schwerpunkt werden einschlägige Kenntnisse und Fertigkeiten im Bereich Web-Technologien und Web-Development vorrausgesetzt.

Datenstrukturen

Sie sollten in der Lage sein Daten modellieren und strukturieren zu können und mindestens mit folgenden Datenstrukturen vertraut sein: Objekte, (Linked) Lists, Arrays, Stacks, Queues, Graphen, Bäume und Hashtables.

Algorithmen

Neben den Datenstrukturen gehören einige grundlegende Algorithmen zum Handwerkszeug: Suchen (Binary Search, Breadth First Search, Depth First Search, Hash Table), Sortieren(Merge Sort, Quick Sort, Heap Sort), Bäume(Inorder, Preorder und Postorder Traversal).

Testing

Sie sollten in der Lage sein die selbst entwickelte Software zu testen, um sicherzustellen, dass diese auch wirklich funktioniert. Dazu sollten mindestens die folgenden Konzepte und damit einhergehende Technologien und Tools bekannt sein: Test Driven Development, Unit Tests und Debugging.

Kommunikationstechnik

Um im Web arbeiten zu können müssen sie einige Konzepte und Protokolle kennen. Hier sollten mindestens die folgenden bekannt sein: HTTP, HTTPS, SSH, OSI Model.

Laufzeitverhalten

Neben der eigentlichen Realisierung eines Projekts ist oftmals auch dessen Performance relevant, besonders wenn man Services entwickelt, die einer größern Anzahl von Zugriffen ausgesetzt sind. Dazu sollten sie in der Lage sein das Laufzeitverhalten von Quellcode zu beurteilen.

Terminal

Das Terminal ist eines der wichtigsten Werkzeuge bei der Softwareentwicklung. Daher sollten mindestens die folgenden Unix Befehle bekannt sein (oder die dazugehörigen Windowsbefehle): cd, mv, mkdir, rm, pwd, ls, cat, find, grep, chmod, touch.

Softwareentwicklung

Dieser Abschnitt beschreibt einige allgemeine Grundlagen zur Softwareentwicklung. Einerseits sollten Sie ein Verständnis für den Entwicklungsprozess als Ganzes mitbringen, andererseits sollte Sie geeignete Techniken kennen, um Ihre Gedanken innerhalb des Entwicklungsprozess kommunizieren und dokumentieren zu können.

Vorgehensmodelle

Scrum oder die agile Entwicklungmethoden allgemein, werden häufig in Web Projekten eingesetzt. Daher sollte zumindest ein Verständnis für den Ablauf des Prozess vorhanden sein. Außerdem sollte man den Unterschied zum Wasserfallmodell kennen.

Git und Github

Git und Github als defacto Standard im Web Development sollten bekannt sein und problemlos beherrscht werden. Das bedeutet in diesem Fall auch die Anwendung im Terminal. Folgende Befehle/ Konzepte sollten Ihnen bekannt sein: git workflow, add & commit, push & pull, branching, update & merge, tagging, pull requests.

Semantic Versioning

Änderungen an Software wird durch verschiedene Versionen dokumentiert. Eine der wichtigsten und geläufigsten Form der Versionierung ist «Semantic Versioning». Es sollte klar sein, wofür die einzelnen Zahlen bei einer Version stehen und man sollte selbst in der Lage sein die eigene Software zu versionieren.

Dokumentation

Neben geeigneten Commit Messages sollte Code auch dokumentiert werden. Dabei sollten zwei Dinge bewusst werden: guter Quellcode dokumentiert sich selbst und die dazugehörige Dokumentation sollte insgesamt beschreiben was der Code macht und Punkte beschreiben, welche sich nicht direkt aus dem Code erschließen lassen.

Unified Modelling Language(UML)

Um Ideen im Team diskutieren und skizzieren zu können, bedarf es einer geeigneten Darstellung. Eine übliche Form zur Beschreibung ist UML. UML umfasst viele verschiedene Formen von Diagrammen. Oft ist aber das Verständnis des Klassendiagramms vollkommen ausreichend, um Objekte und Interaktionen zu skizzieren. Damit kann die entsprechende Lösung auf einem Whiteboard diskutiert werden.

Layout & Prototyping

Die Entwicklung eines User Interfaces gehört beim Webdevelopment oft dazu. Daher müssen entsprechende Entwürfe in Teams diskutiert werden. Daher sollten Sie Prototyping / Wireframing verstanden haben und anwenden können. Kenntnisse in systematischem Umgang mit Design (Atomic Design, Design Systems) sind wünschenswert.

(Naming) Conventions

Die Entwicklung von sauberen Quellcode ist ein wichtiger Skill eines Entwicklers. Daher sollte man die üblichen Konventionen der verwendeten Sprache kennen und diese einhalten können. Außerdem sollte ein Bewusstsein für weitere organisatorische und syntaktische Regeln existieren.

Patterns

Für diverse wiederkehrende Probleme der Programmierung gibt es bereits Lösungen. Sie sollten mit den folgenden Entwurfsmustern vertraut sein: Strategie, Kompositum, Beobachter, Adapter, Besucher, Iterator, Kommando.

Architekturen

Bei dem Entwurf einer Webanwendung kommen eine Vielzahl von verschiedenen Architekturen zum Einsatz. Folgende Modelle sollten Ihnen bekannt sein: Schichtenarchitektur, Event-Driven Architektur, Monolithische Architektur, Microservice Architektur, Serverless Architektur.

Komponenten von Architekturen

Neben konkreten Architekturmustern gibt es noch viele weitere Konzepte bei einer Webanwendung. Im Folgenden sind einige weitere Technologien und Muster aufgelistet, welche teilweise zu den bereits beschriebenen Mustern gehören. Auch an dieser Stelle muss man nicht alle im Detail kennen, aber sollte man als Backend Developer arbeiten wollen, sollte man diese mindestens einordnen und beschreiben können: Publish Subscribe, API Gateway, REST, Message Broker, Caching, Queue, Service Discovery, Event-Driven Architecture, Authentication(Token-based Authentication, Session-based Authentication), Continuous Integration / Continuous Delivery, SQL / NoSQL, Domain Driven Design.

Frontend Development

Dieser Abschnitt beschreibt die notwendigen Grundlagen im Bereich Frontend Development. Neben den offensichtlichen Grundkenntnissen, wie HTML, CSS und JS werden hier auch einige weiterführende Technologien aufgeführt.

HTML

Da HTML die absolute Grundlage einer Webseite darstellt, müssen Sie in der Lage sein Content mit sinnvollem, semantischen Markup abzubilden und zu strukturieren.

CSS

Zur Einflussnahme auf die Darstellung im Browser müssen Sie mit den wesentlichen Konzepten und Eigenschaften von CSS vertraut sein: Selektoren, Eigenschaften, Vererbung, Floats, Positioning, Display, Box Model, Grid und Flexbox. Kenntnisse von Preprozessoren (SCSS o.Ä.) und CSS Methodologien (BEM, OOCSS) sind wünschenswert.

Javascript

Javascript ist die Sprache des Browsers und sollte mindestens in den Grundzügen verstanden worden sein. Dazu gehören Elemente, wie Variablen, Schleifen oder Funktionen, aber auch die Prototype Chain, das this Keyword und Muster, wie Closures, DOM API und Eventlistener.

Development Tools

Darüber hinaus sollten Sie im Umgang mit den grundlegenden Entwicklungstools geübt sein: Developer Konsole im Browser, Taskrunner (Gulp, Grunt, NPM Script), IDE/ Editor, Package Managers (Yarn, NPM). Kenntnisse in Containervirtualisierung (Docker) sind wünschenswert.