Skip to content

Latest commit

 

History

History
94 lines (48 loc) · 9.75 KB

seminar-descriptions.md

File metadata and controls

94 lines (48 loc) · 9.75 KB

Seminar Descriptions

PX19/20

Programming Experience (PX) is a subset of User Experience (UX) focusing on software developers, which are users of their programming tools and environments. Contrary to end-users, developers have the capability to build their own tools and systems, and to adapt them for their needs. In self-sustaining systems, such as Lively4 or Squeak/Smalltalk, these tools can be adapted while they are being used.

In this seminar, the participants will create or adapt tools and systems in self-sustaining environments with a focus on the programming experience. Topics of interests are programming tools for exploratory programming, babylonian programming, and polyglot programming.

Reverse Engineering

Understanding and enhancing existing software systems can be hard, especially when the subject system is legacy software or a still prototype and good documentation, architecture and software design are missing or not yet there.

Reverse engineering is a process of analyzing such systems, by identifying its components and their interrelationships, and create representations of the system in another form or at a higher level of abstraction (see [1]), that help refactoring and evolving such systems.

In this seminar, the participants will work in teams to develop reverse engineering tools in the context of exploratory development environments Squeak (Smalltalk) and Lively4 (JavaScript) that facilitate such a process.

Constraint-basierte Programmierung 2015

A constraint is a relation that should be satisfied -- for example, that a line remains horizontal, that a resistor in an electrical circuit simulation obeys Ohm's Law, or that one column in a web page table is at least twice as wide as another. Constraints have been used in a variety of languages and systems, particularly in user interface toolkits, in planning and scheduling, in simulation, and in input rectification.

Constraints are declarative -- they specify what should be done rather than how. They thus offer flexibility in how they are applied, a property that can enable loosely coupled systems and modularization of specific concerns.

Our constraints research has been focused on the design and implementation of object-constraint languages, integrating constraints into standard object-oriented languages such as JavaScript, Ruby, Squeak, and Python. In this seminar, we will explore applications of such languages, possible designs for integrating constraints into other languages, as well as the design and implementation of solvers specifically for integration with imperative languages.

End-user Programming 2016

Computer sind zu einem festen Bestandteil der Lebens- und Arbeitswelt vieler  Menschen geworden. In immer größerem Maße benutzen diese Endanwender von Computerprogrammen nicht nur vorgefertigte Software, sondern passen diese an ihre Bedürfnisse an, erweitern die Software und teilen dann ihre Ergebnisse mit anderen. Jedoch können nicht alle Endanwender, die fachlich kompetent sind, gleichzeitig programmieren oder haben das Interesse, sich diese Fähigkeit anzueignen. Methoden und Techniken, die Endanwender ohne formale Programmierausbildung dabei unterstützen eigene Software zu entwickeln sind Scripting-  und domänespezifische Sprachen, Programmieren am Beispiel, visuelle  und natürlichsprachliche Programmierung.

Im Rahmen dieser Veranstaltung werden ausgewählte Methoden und ihre Anwendungen in konkreten Systemen vorgestellt werden, die es Menschen ohne allgemeine Programmierkenntnisse ermöglichen sollen, durch Entwicklung eigener Software ihre Arbeit zu erleichtern, Zusammenhänge zu verstehen oder ihre Freizeitaktivitäten zu unterstützen.

Web-based Development Environments 2016

Das World Wide Web hat sich zu einer Anwendungsplattform entwickelt.  Aber die Entwicklung von Webapplikationen ist oft noch komplexer als die Erstellung traditioneller Desktopanwendungen.  Web-basierte Entwicklungsumgebungen wie  Lively Kernel vereinfachen das Entwickeln, da der Programmierprozess interaktiver und direkter wird.  Zudem ist es möglich, dass ähnlich wie in einem Wiki Entwickler bei der Anwendungserstellung zusammenarbeiten.

*Die Teilnehmer des Seminars erweitern die bestehende Web-basierte Entwicklungsumgebung Lively4. Dazu arbeiten diese in kleinen Projektgruppen, beschäftigen sich mit aktuellen Fragen aus dem Bereich der Web-Entwicklung und Werkzeugunterstützung für Programmierer und setzen ihre Ergebnisse in der Umgebung um.

Project Page: https://github.com/LivelyKernel/lively4-core/

Project Wiki: https://github.com/LivelyKernel/Lively4/wiki/WebDev16

Software Design, Wintersemester 2015/2016

*The World Wide Web has become an application platform. However, the design, development, and maintenance of Web applications is in some ways more complex than traditional desktop applications, due to the distributed nature, the high latency during development, cycles of writing code, configuration management, and lack of immediacy due to "transpiling" and reloading steps to get code into the browser.

With the Lively Kernel (http://www.lively-web.org, https://www.lively-kernel.org/babelsberg) we are experimenting with various approaches to make Web development much more immediate and explorative, so programmatic content can be collaboratively created, saved, and shared directly from the browser. Participants in the seminar will work on a number of new ideas for using the Lively Kernel or Lively-like technologies to build different kinds of applications.*

Software Design 2012/2013:

Softwareentwicklung ist ein kreativer Prozess, in dem Ideen entwickelt und deren Umsetzung in Systeme überprüft und falls notwendig revidiert werden. Einige so entstandene Systemstrukturen und die in diesen zu beobachtenden Abläufe sind durch ihre Klarheit auch für andere als den ursprünglich behandelten Problemraum von Bedeutung.

*Im Rahmen dieser Veranstaltung werden ausgewählte Systeme hinsichtlich relevanter Entwurfsentscheidungen und deren Umsetzung besprochen.

Lehrinhalte

Softwarearchitekturen Entwurfsmuster Entwurfsentscheidungen Softwaresysteme: Programmiersprachen, Frameworks und Anwendungen

EUD 2016

Computer sind zu einem festen Bestandteil der Lebens- und Arbeitswelt vieler  Menschen geworden. In immer größerem Maße benutzen diese Endanwender von Computerprogrammen nicht nur vorgefertigte Software, sondern passen diese an ihre Bedürfnisse an, erweitern die Software und teilen dann ihre Ergebnisse mit anderen. Jedoch können nicht alle Endanwender, die fachlich kompetent sind, gleichzeitig programmieren oder haben das Interesse, sich diese Fähigkeit anzueignen. Methoden und Techniken, die Endanwender ohne formale Programmierausbildung dabei unterstützen eigene Software zu entwickeln sind Scripting-  und domänespezifische Sprachen, Programmieren am Beispiel, visuelle  und natürlichsprachliche Programmierung.

Im Rahmen dieser Veranstaltung werden ausgewählte Methoden und ihre Anwendungen in konkreten Systemen vorgestellt werden, die es Menschen ohne allgemeine Programmierkenntnisse ermöglichen sollen, durch Entwicklung eigener Software ihre Arbeit zu erleichtern, Zusammenhänge zu verstehen oder ihre Freizeitaktivitäten zu unterstützen.

Interactive Representations of Data Structures and Algorithms 2013

Angehende Software-Ingenieure, die große Softwaresysteme erschaffen und warten wollen, müssen zunächst die grundlegenden Bausteine solcher Systeme beherrschen: Datentypen (z.B. Arrays, verkettete Listen, Bags, Iteratoren) und darauf operierende Algorithmen (z.B. suchen, sortieren). Es gibt mehrere, sich ergänzende Wege, dieses Wissen zu erlangen: Vorlesungen von Experten besuchen (z.B. Programmiertechnik II am HPI), Literatur studieren (z.B. Algorithms von Robert Sedgewick) oder Materialien im Web ergründen (z.B. QuickSort auf Wikipedia). Dabei spielen vor allem praktische Erfahrungen eine zentrale Rolle für den Lernerfolg: Algorithmen selbst in der bevorzugten Programmiersprache schreiben, interaktive Darstellungen benutzen (z.B. für QuickSort) oder sich anderen Herausforderungen stellen (z.B. Koans).

Das allgemeine Ziel dieses Projektseminars ist es, eine interaktive Lernumgebung zu schaffen, welche es Anfängern und Fortgeschrittenen ermöglicht, Datentypen und Algorithmen im Detail zu verstehen. In der Umgebung sollen die Studenten in der Lage sein, sich eigene Lektionen aus einer Vorauswahl zu erstellen (z.B. Vergleiche QuickSort mit RadixSort hinsichtlich Speicherplatzkomplexität), ihre Lernerfolge zu protokollieren und ggf. sogar mit einer anderen Gruppe von Studenten auszutauschen, um den Lernprozess interessanter zu gestalten.

Zu den Themen zählen u.a.:

abstrakte Datentypen manuelle Speicherverwaltung automatische Speicherverwaltung Sortieren Suchen Während des Seminars werden die Teilnehmer ihre Kenntnisse in Squeak/Smalltalk vertiefen, eine erweiterbare Software-Architektur entwerfen, Aspekte des interaktiven Lernens und der Gamification ergründen, ihr Wissen über Datentypen und Algorithmen auffrischen, sowie mit einem Forschungsprototypen arbeiten (VIVIDE).*

SWA

Software-Entwicklung ist ein kreativer Prozess, in dem Ideen und Entscheidungen zwischen Entwicklern klar kommuniziert und über die Zeit dokumentiert werden müssen. In der Verwendung von Programmiersprachen und darüber hinaus haben sich Idiome, Entwurfsmuster, Frameworks und Architekturstile als hilfreich erwiesen.

Im Rahmen dieser Veranstaltung werden maßgebliche Vertreter dieser Kategorien für die objektorientierte Softwareentwicklung besprochen sowie zugehörige und weitergehende Konzepte und Ansätze vorgestellt.

Stichworte: Software-Architektur, Software-Design, objektorientierte Programmierung, Idiome, Entwurfsmuster, Architekturstile, Refactoring, Frameworks