Update Programming languages authored by Han Hien's avatar Han Hien
--- ---
title: Programming languages title: Programming languages
--- ---
# Programming languages # Programmiersprachen
Contents: Inhalt:
* [Summary](#summary) * [Zusammenfassung](#zusammenfassung)
* [Issue](#issue) * [Problemstellung](#problemstellung)
* [Decision](#decision) * [Entscheidung](#entscheidung)
* [Status](#status) * [Status](#status)
* [Details](#details) * [Details](#details)
* [Assumptions](#assumptions) * [Annahmen](#annahmen)
* [Constraints](#constraints) * [Einschränkungen](#einschränkungen)
* [Positions](#positions) * [Positionen](#positionen)
* [Argument](#argument) * [Argumentation](#argumentation)
* [Implications](#implications) * [Implikationen](#implikationen)
* [Related](#related) * [Verwandtes](#verwandtes)
* [Related decisions](#related-decisions) * [Verwandte Entscheidungen](#verwandte-entscheidungen)
* [Related requirements](#related-requirements) * [Verwandte Anforderungen](#verwandte-anforderungen)
* [Related artifacts](#related-artifacts) * [Verwandte Artefakte](#verwandte-artefakte)
* [Related principles](#related-principles) * [Verwandte Prinzipien](#verwandte-prinzipien)
* [Notes](#notes) * [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 Wir wählen **Java** für das Backend.
We are choosing Java for the backend.
We are choosing JavaScript / Typescript for the frontend.
Wir wählen **JavaScript / TypeScript** für das Frontend.
### Status ### Status
Decided. Alternatives Entschieden. Alternativen können in der Zukunft erneut evaluiert werden.
## Details ## Details
### Annahmen
### Assumptions Die Frontend-Anwendungen sind typische Webapplikationen mit:
The front-end applications are typical:
* Typical users and interactions
* Typical browsers and systems
* Typical developments and deployments
The front-end requirements are the following:
* We want to ensure fast development and an easy learning process for new developers.
* We value provability, such as type safety.
* We do not need legacy compatibility.
The back-end requirements are the following:
* Typical standarts for quality, reliability and security.
* Fast and easy development process, easy learning process for new developers.
### Constraints
There are no technical constraints for the languages.
### Positions
We considered these langauges:
* C#
* Java
* JavaScript
* TypeScript * Typischen Benutzerinteraktionen
* Typischen Browsern und Betriebssystemen
* Typischen Entwicklungs- und Deployment-Prozessen
### Argument Die Anforderungen an das Frontend sind:
Summary per language: * Schnelle Entwicklung und eine einfache Einarbeitung neuer Entwickler.
* Gute Typensicherheit und Nachweisbarkeit im Code.
* Keine Abhängigkeit von veralteten Technologien.
* 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. Die Anforderungen an das Backend sind:
* Java: All devs in team know it. Spring framework is widely used and industry standart. Lots of learning material * Übliche Standards für **Qualität, Zuverlässigkeit und Sicherheit**.
* Schnelle und einfache Entwicklung, sowie eine einfache Einarbeitung neuer Entwickler.
* 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. ### Einschränkungen
* TypeScript: Wide range of frontend frameworks. Direct compatibility to JS. Industry standart for modern web applications. Es gibt keine technischen Einschränkungen für die Wahl der Programmiersprachen.
### Implications ### Positionen
Front-end developers will need to learn TypeScript. This is likely an easy learning curve if the developer's primary experience is using JavaScript. Wir haben folgende Sprachen in Betracht gezogen:
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 * **C#**
* **Java**
* **JavaScript**
* **TypeScript**
TypeScript and Java are widely used in current projects. So there should be a lot of learning material and existing projects or packages. ### Argumentation
IDE support for these languages is very good since JetBrains sells IntelliJ for Java development and WebStorm for TypeScript development. Bewertung der einzelnen Sprachen:
* **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.
## Related * **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.
* **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.
### 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. Weitere Notizen können hier ergänzt werden.
\ No newline at end of file