Update Programming languages authored by Han Hien's avatar Han Hien
---
title: Programming languages
---
# Programming languages
# Programmiersprachen
Contents:
Inhalt:
* [Summary](#summary)
* [Issue](#issue)
* [Decision](#decision)
* [Zusammenfassung](#zusammenfassung)
* [Problemstellung](#problemstellung)
* [Entscheidung](#entscheidung)
* [Status](#status)
* [Details](#details)
* [Assumptions](#assumptions)
* [Constraints](#constraints)
* [Positions](#positions)
* [Argument](#argument)
* [Implications](#implications)
* [Related](#related)
* [Related decisions](#related-decisions)
* [Related requirements](#related-requirements)
* [Related artifacts](#related-artifacts)
* [Related principles](#related-principles)
* [Notes](#notes)
* [Annahmen](#annahmen)
* [Einschränkungen](#einschränkungen)
* [Positionen](#positionen)
* [Argumentation](#argumentation)
* [Implikationen](#implikationen)
* [Verwandtes](#verwandtes)
* [Verwandte Entscheidungen](#verwandte-entscheidungen)
* [Verwandte Anforderungen](#verwandte-anforderungen)
* [Verwandte Artefakte](#verwandte-artefakte)
* [Verwandte Prinzipien](#verwandte-prinzipien)
* [Notizen](#notizen)
## Summary
## Zusammenfassung
### Problemstellung
### Issue
Wir müssen entscheiden, welche Programmiersprachen wir für unser Projekt verwenden.
Wir benötigen eine Sprache für unser **webbasiertes Frontend** und eine für unser **REST-API-Backend**.
We need to decide wich programming languages we use for our project. We need a language for our web-based frontend and a language for our REST-API backend.
### Entscheidung
### Decision
We are choosing Java for the backend.
We are choosing JavaScript / Typescript for the frontend.
Wir wählen **Java** für das Backend.
Wir wählen **JavaScript / TypeScript** für das Frontend.
### Status
Decided. Alternatives
Entschieden. Alternativen können in der Zukunft erneut evaluiert werden.
## Details
### Annahmen
### Assumptions
The front-end applications are typical:
* Typical users and interactions
* Typical browsers and systems
Die Frontend-Anwendungen sind typische Webapplikationen mit:
* Typical developments and deployments
* Typischen Benutzerinteraktionen
* Typischen Browsern und Betriebssystemen
* Typischen Entwicklungs- und Deployment-Prozessen
The front-end requirements are the following:
Die Anforderungen an das Frontend sind:
* We want to ensure fast development and an easy learning process for new developers.
* Schnelle Entwicklung und eine einfache Einarbeitung neuer Entwickler.
* Gute Typensicherheit und Nachweisbarkeit im Code.
* Keine Abhängigkeit von veralteten Technologien.
* We value provability, such as type safety.
Die Anforderungen an das Backend sind:
* We do not need legacy compatibility.
* Übliche Standards für **Qualität, Zuverlässigkeit und Sicherheit**.
* Schnelle und einfache Entwicklung, sowie eine einfache Einarbeitung neuer Entwickler.
The back-end requirements are the following:
### Einschränkungen
* Typical standarts for quality, reliability and security.
* Fast and easy development process, easy learning process for new developers.
Es gibt keine technischen Einschränkungen für die Wahl der Programmiersprachen.
### Constraints
### Positionen
There are no technical constraints for the languages.
Wir haben folgende Sprachen in Betracht gezogen:
* **C#**
* **Java**
* **JavaScript**
* **TypeScript**
### Positions
### Argumentation
We considered these langauges:
Bewertung der einzelnen Sprachen:
* C#
* **C#**: Abgelehnt, da zu wenige Entwickler im Team Erfahrung damit haben. Außerdem hat C# eine vergleichsweise kleine Community und wenige bestehende Projekte bzw. Lernmaterialien für das Frontend.
* Java
* JavaScript
* TypeScript
### Argument
Summary per language:
* C#: Rejected, because of to many not experienced devs in the team. Also a small community and too few existing projects and learning materials on the front-end side.
* **Java**: Alle Entwickler im Team beherrschen Java. Das Spring-Framework ist weit verbreitet und gilt als **Industriestandard**. Zudem gibt es eine große Menge an Lernmaterial.
* Java: All devs in team know it. Spring framework is widely used and industry standart. Lots of learning material
* **JavaScript**: Abgelehnt für das Backend aufgrund fehlender Typensicherheit und eines zu komplexen Ökosystems in Server-Umgebungen. Teilweise für das Frontend abgelehnt, da TypeScript die gleichen Möglichkeiten bietet, aber mit Typensicherheit.
* JavaScript: Rejected, because of missing typesafety and too complicated eco system in server environments. Partly rejected for frontend since TypeScript has typesafety and is completely compatible to JS.
* TypeScript: Wide range of frontend frameworks. Direct compatibility to JS. Industry standart for modern web applications.
### Implications
Front-end developers will need to learn TypeScript. This is likely an easy learning curve if the developer's primary experience is using JavaScript.
Back-end developers will need to learn Java and the spring web framework. Since all dev already know Java the learning can concentrate on the spring framework
TypeScript and Java are widely used in current projects. So there should be a lot of learning material and existing projects or packages.
IDE support for these languages is very good since JetBrains sells IntelliJ for Java development and WebStorm for TypeScript development.
## Related
### Related decisions
* **TypeScript**: Große Auswahl an modernen **Frontend-Frameworks**. Volle Kompatibilität mit JavaScript. **Industriestandard** für moderne Webanwendungen.
We will aim toward ecosystem choices that align with these langauges.
### Implikationen
We need to choose a frontend framework. It will likely be a TypeScript based framework.
- **Frontend-Entwickler müssen TypeScript lernen**. Da es eine Erweiterung von JavaScript ist, sollte die Lernkurve gering sein, besonders für Entwickler mit JavaScript-Erfahrung.
- **Backend-Entwickler müssen Java und das Spring-Framework lernen**. Da alle Entwickler bereits Java beherrschen, liegt der Fokus auf der Einarbeitung in das Spring-Framework.
- **TypeScript und Java sind weit verbreitet**, sodass viele Lernmaterialien und bestehende Projekte oder Pakete verfügbar sind.
- **IDE-Support ist sehr gut**, da **JetBrains IntelliJ** für Java-Entwicklung und **WebStorm** für TypeScript-Entwicklung anbietet.
## Verwandtes
### Related requirements
### Verwandte Entscheidungen
Our entire toolchain must support these languages.
Wir werden das **Ökosystem** an unseren gewählten Sprachen ausrichten.
Wir müssen ein **Frontend-Framework** auswählen, das voraussichtlich auf **TypeScript** basieren wird.
### Related artifacts
### Verwandte Anforderungen
We expect we may export some secrets to environment variables.
Unsere gesamte **Toolchain** muss diese Programmiersprachen unterstützen.
### Verwandte Artefakte
### Related principles
Wir erwarten, dass wir einige **geheime Umgebungsvariablen** exportieren müssen.
We aim for stable and easily mantainable code. Speed might be neglected, if it requires to build unsafe code.
### Verwandte Prinzipien
Wir streben **stabilen und leicht wartbaren Code** an. Geschwindigkeit könnte dabei **hintenangestellt** werden, wenn sie unsicheren Code erfordert.
## Notes
## Notizen
Any notes here.
\ No newline at end of file
Weitere Notizen können hier ergänzt werden.