KI in der Softwareentwicklung – Wie funktionieren Tools wie GPT-3?

Anwendungen aus dem Bereich der Künstlichen Intelligenz (KI) werden in den kommenden Jahrzehnten viele Bereiche unserer Arbeitswelt durch Automatisierung revolutionieren. Diese These wird heutzutage kaum noch bestritten. In dieser Studie wird untersucht, wann KI menschliche Fähigkeiten in unterschiedlichen Bereichen übertreffen wird, und in vielen Bereichen scheint dies kurz bevorzustehen. Die KI schafft also ein riesiges Potential im Bereich der Entwicklung smarter Software. Doch auch der Softwareentwicklung selbst steht unbestritten ein großer Wandel bevor. KI-basierte Tools werden auch hier viele Automatismen ermöglichen, die eine Programmierung wie sie heute stattfindet grundlegend verändern wird.

Pete Warden beispielsweise, einer der Chefentwickler von Tensorflow (einem der relevantesten Deep Learning Frameworks), prophezeit in seinem Blog, dass in einem Zeithorizont von zehn Jahren die Mehrzahl der Jobs im Bereich der Softwareentwicklung kein Programmieren an sich mehr erfordern wird.  Schon jetzt nutzen viele Entwickler KI-gestützte Tools wie Codota und IntelliCode, welche auf Basis von Syntax-Bäumen, Rankings und Assoziationen Code-Analysen durchführen und so die klassische Auto-Completion sehr mächtig machen. Einen sehr interessanten Beitrag zu diesem Thema lieferte unser Trivadis Kollege Dr. Martin Luckow in seinem Sparx-Talk, den man hier anschauen kann.

Continue reading
Posted in Did you know? | Tagged , , , , | Leave a comment

Warum sich ein Blick auf ein zentrales State-Management lohnt.

In Angular leben die Daten in einer komponentenzentrierten Welt. Die Daten werden in der Komponente gespeichert, und die Komponenten sind isoliert voneinander, sodass diese Dreh- und Angelpunkt der Daten sind. Möchte man dann auf die Daten zugreifen, kommt man nur mit Hilfe der Komponente heran. Gut, oder? Jede Komponente kümmert sich nur um die Daten, die es selbst betrifft. Das hört sich doch eigentlich nach sauberer Programmierung an.

Wenn nicht folgendes wäre … Was ist, wenn die Komponenten gar nicht so isoliert voneinander leben wie gedacht?  Was ist, wenn die Komponenten sich wie ein Team verhalten: Jeder hat zwar seinen Verantwortungsbereich, aber es müssen Informationen unter den Teammitgliedern ausgetauscht werden.

Continue reading
Posted in Web as a Platform | Tagged , | Leave a comment

Project Valhalla’s Inline Types – Codes Like a Class, Works Like an int

After nearly 7 years it’s time to have a short look at project Valhalla. The project’s main goal is to increase the performance of Java on modern hardware. While it remains still unclear when the project will finish, several things have already been revealed.

Some of you may have heard of the new “value” or “data” type that should be introduced with Valhalla. However, the name was changed to “inline” type. This post will focus on the current status of this part.

Another goal of the project is about specialized generics. As the status of this branch is even more unclear, I will not cover it here.

Continue reading
Posted in Java Basics | Tagged , , | Leave a comment

Performance Evaluation of Different Programming Languages in AWS Lambda

Serverless is in theory an architectural principle independent of a programming language. Nevertheless, there are differences in the behavior and performance of different languages in such an environment. Since, disregarding any reuse, each serverless function does need to have its own execution environment, the building of said execution environment is a crucial factor for the execution time of the function overall. This first initialization of said execution environment is called a cold start. Regardless of programming languages, the cold start time is a problem for all serverless functions, since they generally run in containerized execution environments. However, the language can have a big impact on its severity. Languages that are designed to be executed by its own virtual machine to ensure platform independence might have a worse performance overall than a language that is taking on a more lightweight approach like JavaScript. But the cold start time is not the only factor when measuring the performance. If an application exceeds a certain frequency threshold, the called serverless function might still have an active container that is ready to be reused for another function execution. Considering these points, it is imperative to build a comprehensive understanding of the differences in performance. To further investigate these performance differences of different programming languages for serverless functions, an experiment was conducted.

Continue reading
Posted in Java Runtimes - VM, Appserver & Cloud | Tagged , , , | 3 Comments

A full CI environment with Docker 2/2

In part 1 of this blog post we already set up quite some development environment. We have a remote source code management server to work with. A repository manager to handle our dependencies and additionally implemented a quality check. However, it would be nice to have some automation of those steps. We basically want to achieve that every single committed line of code goes through the same steps. We want to have a continuous integration pipeline!

In this post I will show you how to add an automation server to our toolchain, namely Jenkins. Instead of handling everything separately from the host, we will outsource all steps. The main task is to provide Jenkins with the necessary privileges to allow communication with the other tools.

Continue reading
Posted in Build, config and deploy | Tagged , , , , | Leave a comment

Microframeworks mit Kotlin

Ein Microframework ist ein minimalistisches Webanwendungs-Framework. Was es in der Regel von traditionelleren, großen Anwendungsframeworks unterscheidet, ist der Fokus auf Einfachheit und Geschwindigkeit der Entwicklung, die viel kleinere Codebasis oder das Fehlen einiger fortgeschrittener Features, wie z.B. Templating-Engines, fortgeschrittene Sicherheitsfunktionen usw. In diesem Blogpost werde ich einige Microframeworks vorstellen, die zusammen mit Kotlin verwendet werden können. Lass uns einen Blick darauf werfen.

Continue reading
Posted in Other languages for the Java VM | Tagged , , , , | Leave a comment

A full CI environment with Docker 1/2

In my recent blog posts I talked about using Docker to build and deploy an image to the Azure cloud. In later posts I advertised to check out WSL2 as your new Docker environment. Today I want to show you one of the major advantages of Docker. You can get your hands on some nice tools quite fast. It’s a stunning advantage as a developer when you need to build a complete development environment from scratch. This can be due to an evaluation or start of a new project. Or you need a tool you didn’t consider to use because of a complicated installation process. With Docker you don’t need to install everything on your host system but as a set of containers. With Docker Compose you can start, stop, update or dump the whole environment with a single command. This comes in handy when you want to quickly board new team members which could be almost as easy as running git clone and docker-compose up.

Getting the containers and starting them is quite fast, however some configuration has to be done to allow flawless communication between the different tools. In this post I want to show you how to set up a continuous integration (CI) environment solely using Docker. I will use the following tools for that: GitLab, Nexus, SonarQube, Postgres, Maven, (Jenkins in part 2).

This first part will only cover setting up the different tools. How to manage the integration into an automated continuous integration pipeline using Jenkins will be covered in part 2. This mostly includes networking.

Continue reading
Posted in Build, config and deploy | Tagged , , | 1 Comment