Die Leistungsfähigkeit von Sprachmodellen wie ChatGPT ist beeindruckend. Auf Kommando erzeugen sie Source-Code in beliebigen Programmiersprachen, generieren Dokumentation aus bestehendem Code und finden Fehler in vorhandenen Methoden. Da stellt sich die Frage, ob Sprachmodelle nur nützliche Werkzeuge für Software-Entwickler sind oder ob Sprachmodelle nicht auch Software-Entwickler ersetzen können.
Tim Wellhausen
Geteiltes Leid ist doppelte Freud – Erfahrungen zum Zerkleinern eines Software-Systems
Der Hype und die Berichterstattung um Microservices scheinen langsam abzuflauen. Umso mehr ist es nun an der Zeit, möglichst objektiv darüber zu berichten, welchen Nutzen und welche Nachteile der Trend zu kleineren Systemen gebracht hat.
Microservices werden nicht nur dafür beworben, mit ihnen neue Systeme zu entwickeln, sondern auch dafür, bestehende System in kleinere Teile zu zerlegen. Letzteres ist der schwierigere Fall, gilt es doch, lange gewachsene Strukturen zu entflechten.
Welchen Nutzen hat HATEOAS für REST-Schnittstellen?
HATEOAS ist nicht nur eine sperrige Abkürzung, es ist auch schwierig herauszufinden, welche Vorteile dieser Ansatz für REST-Schnittstellen bietet. Das ist schade, denn damit lassen sich manche Probleme in der Client-Entwicklung elegant vereinfachen.
Laut Roy Fielding, dem Urheber der REST-Konzepts, sind die meisten sogenannten REST-Schnittstellen nicht RESTful in seinem Sinne. Eine Schnittstelle, die nur Daten liefert, hilft einer Client-Anwendung nicht zu verstehen, wie die Daten auszuwerten sind.
„Lebenslanges Lernen“ – was bedeutet das für einen IT-Freiberufler?
Ich stehe in der Mitte meines Berufslebens und staune immer wieder, wenn ich mit Mitt-Zwanzigern zusammenarbeite. Denn manche meiner jüngeren Kollegen kommen direkt von der Uni oder haben erst wenig Berufserfahrung. Trotzdem ist ihr technisches Wissen auf einem sehr hohen Stand. Da kann mir schon mal der Gedanke kommen: „Und mit denen konkurriere ich jetzt?!“
Bei näherem Betrachten entspanne ich mich wieder schnell. Und das liegt an mehreren wichtigen Einsichten:
Vom (Eigen-)leben eines Software-Systems
Code-Reviews sind für mich ein täglicher Bestandteil der Software-Entwicklung. Mein Haupt-Augenmerk richte ich in meinen Reviews darauf, ob die eingereichten Änderungen die bestehenden Strukturen des Systems berücksichtigen. Beim Nachdenken darüber, warum mir das Einhalten von Strukturen so wichtig ist, kam ich auf den Gedanken, dass Software-Systeme ein Eigenleben entwickeln. Davon handelt dieser Artikel…
Zeit für Neues: Von Wicket zu Angular – einfacher als gedacht
In den vergangenen Jahren ging der Trend in der Client-Entwicklung weg vom serverseitigen Rendern hin zu clientseitigen Frameworks. Wer als Java-Entwickler nie richtig warm mit Javascript wurde, blieb trotzdem bei bewährten Frameworks wie Wicket. Mit Angular steht jetzt eine Alternative zur Verfügung, die auch hartgesottenen Java-Entwicklern entgegenkommt.
Angular bietet einem Java-Entwickler endlich eine Plattform, die sich gar nicht so sehr von der serverseitigen Welt unterscheidet.
Hacken mit Spring Boot und den Netflix-Bibliotheken
Microservices sind derzeit ein beliebter Ansatz für den Entwurf von Server-Anwendungen. Wer sich in einer Java-/Spring-Umgebung bewegt, sollte sich dazu mit den Netflix-Bibliotheken Ribbon, Eureka und Hystrix beschäftigen.
Bis vor kurzem war der Monolith das vorherrschende Muster beim Aufsetzen einer neuen serverseitigen Anwendung. Warum auch nicht? Solange sich die Funktionalität von einem überschaubaren Team umsetzen lässt und die Anforderungen an die Skalierbarkeit gering sind, hat der Alles-in-einem-Ansatz viele Vorteile.
Aktuell geht der Trend jedoch in Richtung Microservices.
Spring Boot und das Application-Server-Dilemma
Spring Boot erscheint als eine natürliche Weiterentwicklung des Spring-Frameworks. Das Spring-Ökosystem hat seit jeher das Ziel, die Entwicklung von serverseitigen Anwendungen zu vereinfachen und immer mächtigere Funktionalität zur Verfügung zu stellen.
Das Spring-Framework ist für mich deswegen unentbehrlich. Spring Boot verwende ich trotzdem ungerne.
Datenstrukturen ändern, aber bitte ohne Ausfallzeiten!
Bei einem anstehenden Release mit Änderungen an den Datenstrukturen hatte man es früher einfach: Server herunterfahren, Migrationsskripte laufen lassen, Server wieder hochfahren, fertig. In Zeiten von Server-Clustern und 24/7-Verfügbarkeit sind Änderungen an der Datenstruktur heute nicht mehr ganz so einfach.
Strukturänderungen im laufenden Betrieb müssen gut geplant und schrittweise umgesetzt werden. Ansonsten läuft man schnell in Gefahr, inkonsistente Daten oder Fehler in der Anwendung zu erhalten.
Thrift-API mit Spring: Wie integriert man beides?
Wenn man eine Server-Schnittstelle plant, denkt man heutzutage als Erstes an eine REST-API. Für öffentliche Schnittstellen ist REST oft auch eine gute Wahl. Für nicht-öffentliche Schnittstellen lohnt sich jedoch auch ein Blick auf Apache Thrift. Möchte man Thrift dann zusammen mit dem Spring-Framework verwenden, stellt man fest, dass die Integration etwas sperrig ist.
Öffentliche Schnittstellen sollten möglichst technologie- und plattformneutral und für Client-Anwendungen einfach zu nutzen sein. REST erfüllt diese Anforderungen, daher sind REST-basierte APIs weit verbreitet. Die Kehrseite der Technologieneutralität ist jedoch, dass REST keine Hilfe bei der Implementierung einer Anbindung bietet.