Nie waren die Werkzeuge zur Software-Entwicklung so vielseitig und umfangreich. Es ist zunehmend schwer überhaupt einen Überblick zu bewahren - die Auswahl ist inzwischen überwältigend. Bei codeM werden zur Zeit unter anderem folgende Technologien eingesetzt und zwar, weil sie sich für uns bewährt haben. Dies sind unsere aktuellen Favoriten:

Backend-Technologien

Go


Die Programmiersprache Go ist bestens geeignet für die Entwicklung serverseitiger Anwendungen. In Go geschriebene Programme laufen flott und praktisch überall.

Um Go kennenzulernen war das erste Projekt das Neuschreiben unserer Optimierungsengine von C nach Go. Wir suchten nach einem Weg diese Engine leichter in Softwarelösungen zu integrieren oder als Microservice zur Verfügung zu stellen. Dazu schien Go bestens geeignet zu sein. Da die C-Version optimal schnell läuft, waren wir bereit in Sachen Geschwindigkeit Einbußen zu akzeptieren (ein Geschwindigkeitsverlust von einem Faktor 2 gegenüber der C-Version wäre akzeptabel gewesen). Überraschenderweise läuft die in Go entwickelte Version fast genauso schnell! Mehr über Go? Siehe Blog: Warum Go?

Fiber


Das Webframework Fiber ist angelehnt an die Ideen von Express.js, einem beliebtem Framework für Node.js-Entwicklungen.

Fiber hat Ähnlichkeiten zu Express.js, ist aber in Go implementiert. Es ist sehr performant, denn es verwendet FastHTTP, eine der schnellsten HTTP Implentierungen in Go. Fiber ist flexibel, schnell und zuverlässig, es bietet einen sehr guten Router, vielseite "Middleware"-Komponenten und ist gut an eigene Wünsche anzupassen. Es ist nicht nur leicht zu erlernen, sondern es erwies sich auch als sehr gut dazu geeignet bestehende Projekte auf Fiber umzurüsten.

PostgreSQL


PostgreSQL, das freie objektrelationale Open Source Datenbanksystem.

Bereits seit den späten 80ern ist PostgreSQL besonders nah an dem Standard für relationale Datenbanken. Besser gesagt definiert PostgreSQL den Standard für relationionale Datenbanksysteme. Vermutlich die beste OpenSource-Datenbank der Welt.

SQLite


SQLite ist das verbreitetste und meistverwendete Datenbanksystem der Welt.

SQLite steckt in praktisch jedem Betriebsystem, Mobiltelefon, Webbrowser ... Es gibt SQLite seit 20 Jahren und fand hier zunächst keine Beachtung: zu klein, nur Spielkram. Schwer getäuscht! SQLite ist super! Nach dem Vortrag von David Crawshaw SQLite and Go fand SQLite unsere Aufmerksamkeit und wird nun bei fast allen Prototypen und gelegentlich sogar in Produktivsystemen verwendet. In den 2 Jahren seitdem wir SQLite einsetzen, gab es nie ein Problem mit SQLite - es wird sogar im Flugkontrollsystem des Airbusses eingesetzt. Der Name "SQLite" suggeriert unserer Meinung nach weniger als vorhanden ist und wird der wirklichen Qualität und Leistungsfähigkeit nicht gerecht.

Upper.io/db


Upper.io/db bezeichnet sich als ein "Productive data access layer for Go".

Und macht genau das. Es bietet eine einheitliche Abstraktionsschicht für diverse Datenbanken, z.B. PostgreSQL, SQLite, MySQL, SQLServer und sogar MongoDB. Dabei ist MongoDB gar keine relationale Datenbank! Mit Upper.io/db kann man auf datenbankspezifischen SQL-Code weitestgehend verzichten, welches den Wechsel der verwendeten Datenbank sehr erleichtert. Es ist leicht zu benutzen und man kämpft nicht gegen das Framework, wie es bei anderen ORMs schon mal passieren kann. Was ist ein ORM? Siehe Blog: ORM. Upper.io/db macht es uns leicht, mit der selben Code-Basis sowohl PostgreSQL und SQLite zu verwenden. Typischerweise SQLite während der Entwicklung und kleinen Projekten und PostgreSQL in der Produktions-Umgebung oder wenn das Projekt über die Möglichkeiten von SQLite hinaus skalieren muss.

REST-API


REST steht für REpresentational State Transfer, API steht für Application Programming Interface.

Es ist eine Architektur, wie verteilte Anwendungen über HTTP/HTTPS Daten austauschen können. Gut standardisiert, einfach, überall verfügbar. Wenn die Anwendungen im Webbrowser Daten vom Server anfragen, dann geschieht das meistens über die REST-API. Die Daten werden typischerweise im Format JSON ausgeliefert und können dadurch besonders leicht mit Javascript verarbeitet und im Webbrowser dargestellt werden.

JWT Authorization


JWT ist die Abkürzung für “JSON Web Token”, es hilft beim Handling von Login und Session Handling.

Das JSON Web Token ist ein kurzer, teilweise verschlüsselter Text, welcher es ermöglicht schnell zu überprüfen, ob ein Benutzer für einen Zugriff auf eine Funktion berechtigt ist. Sobald ein Benutzer authentifiziert wurde, erhält er für seine Session ein zeitlich begrenzt gültiges Token. Die verschlüsselten Anteile können nur serverseitig ausgelesen werden und dort dann entsprechend der Zugriff freigeschaltet werden.

Frontend-Technologien

Vue.js - Vue-Router - Vuex


Vue.js ist ein Frontend-Framework zur Entwicklung von SPA und PWA Webapplikationen. Es ist vergleichbar mit Angular und React. Vue.js ist leicht zu lernen und leicht zu verwenden.

Bei Vue.js ist es besonders gut gelungen, die Möglichkeiten zu schaffen eigene Komponenten zu entwickeln und sie miteinander oder auch mit Komponenten anderer Anbieter zu kombinieren. Die Entwicklung von Webanwendungen fühlt sich mit Vue.js richtig gut an und man kommt schnell zu guten Ergebnissen. Der Vue-Router ermöglicht die einfache Navigation zwischen den Teilen der Applikation und das interne Zustands- und Datenmanagement übernimmt Vuex, welches sich am Flux-Pattern orientiert.

Javascript / Typescript


Javascript ist wohl die beliebteste und verbreitetste Programmiersprache der Welt! Und im Webbrowser unverzichtbar. Typescript ist eine von Microsoft entwickelte Version mit statischen Datentypen.

Bei der Entwicklung von Webanwendungen kommt man an Javascript kaum vorbei. Javascript hat allerdings auch Schwächen, welche besonders bei umfangreichen Projekten sichtbar werden. Da hilft Typescript, mit Typescript wird Javascript um statische Datentypen erweitert und es liefert dabei großartige Werkzeuge mit, die den Umgang mit hunderten von Code-Dateien und tausenden von Code-Zeilen sehr erleichtern. Inzwischen ist Typescript sehr beliebt und wird u.a. seit Angular 2.0 bei Google eingesetzt und auch die neue Version von Vue.js - 3.0 - wird mit Typescript entwickelt.

Tailwind CSS


Anders als z.B. Bootstrap liefert Tailwind CSS keine vollständigen Komponenten, sondern viele kleine sogenannte "Utility"-Klassen. Nach kurzer Eingewöhnung macht das Design damit richtig Spaß.

Eigentlich sollte man durch die Verwendung von Klassen den Html-Code von Style-Elementen weitestgehend befreien. Hinter einer Klasse verbergen sich normalerweise gleichzeitig viele einzelne Stylingmerkmale. Bei Tailwind CSS geht man einen anderen Weg: Viele kleine, sehr gut strukturierte CSS-Klassen lassen sich in HTML-Elementen elegant kombinieren. Übrigens, diese Webseite verwendet Tailwind CSS.

Devextreme - Komponentenbibliothek


Devexpress ist bereits seit langer Zeit ein zuverlässiger Lieferant großartiger Komponenten für .net und Javascript. Herausragend sind das DataGrid, TreeGrid und vor allem das PivotGrid.

Mit den drei genannten Tabellenkomponenten (Daten, Pivot und Baum) lassen sich bereits wesentliche Aufgaben einer Webapplikation bewältigen. Dazu gibt es über 50 weitere fertige Komponenten für die Gestaltung von Bedienoberflächen und Formularen sowie dutzende dynamische Diagramme und Geschäftsgrafiken.

Gridsome - Static Site Generator


Gridsome erzeugt aus z.B. Html-, Markdown-, Vue- und Konfigurationsdateien eine fertige, hochoptimierte Webseite.

Gridsome ist ein sogenanntes JAMstack Framework - weitere Beispiele sind Gatsby, Next.js, Nuxt.js und VuePress. Es werden dabei mehrere Webtechnologien kombiniert um besonders performante Webseiten zu erstellen. Im Falle von Gridsome entsteht eine Vue-Applikation, die nach einer besonders kurzen Startzeit z.B. schrittweise im Hintergrund weitere Teile nachlädt und dadurch bei der Navigation zwischen den Seiten kaum auf den Webserver zurückgreifen muss. Eine statische Webseite lässt sich leicht und überall hosten und erfordert z.B. kein Content-Management-System. Übrigens, diese Webseite wurde mit Gridsome erstellt.