<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Softwareentwicklung on Devcartes</title>
    <link>https://devcartes.de/categories/softwareentwicklung/</link>
    <description>Recent content in Softwareentwicklung on Devcartes</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>de</language>
    <lastBuildDate>Tue, 14 Apr 2026 00:00:00 +0100</lastBuildDate><atom:link href="https://devcartes.de/categories/softwareentwicklung/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Die moralische Dimension technischer Schulden</title>
      <link>https://devcartes.de/posts/tech-debt-ethics/</link>
      <pubDate>Tue, 14 Apr 2026 00:00:00 +0100</pubDate>
      
      <guid>https://devcartes.de/posts/tech-debt-ethics/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Was sind technische Schulden
    &lt;div id=&#34;was-sind-technische-schulden&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#was-sind-technische-schulden&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;In meinem vorherigen Artikel zum Thema &lt;strong&gt;&lt;a href=&#34;https://devcartes.de/posts/tech-debts/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Technische Schulden&lt;/a&gt;&lt;/strong&gt; gehe detailliert darauf ein, was technische Schulden sind, wie sie entstehen, wie man sie erkennt und wie man sie verhindern bzw. verantwortungsvoll damit umgehen kann.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Einstieg - Das Erbe der anderen
    &lt;div id=&#34;einstieg---das-erbe-der-anderen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#einstieg---das-erbe-der-anderen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der erste Tag mit einer neuen Codebase ist immer ein bisschen wie das Auspacken einer Erbschaft.
Man weiß nicht genau, was einen erwartet, doch man hofft auf sauberen Code und gute Dokumentation.
Doch was man manchmal vorfindet ist das genaue Gegenteil.&lt;/p&gt;
&lt;p&gt;Nun zu einem realen Vorfall, wie ich ihn in meiner Zeit als Freiberuflicher Entwickler erlebt habe.&lt;/p&gt;
&lt;p&gt;Die erste Aufgabe klang simpel: einen bestehenden Bug fixen.&lt;/p&gt;
&lt;p&gt;Nachdem ich etwa vier Stunden gebraucht hatte, um das Projekt zu finden, denn es lag nicht auf dem firmeninternen Gitlab Server, sondern auf dem Rechner des ehemaligen Kollegen, öffnete ich die Datei, die ich für &amp;ldquo;zuständig&amp;rdquo; hielt.&lt;/p&gt;
&lt;p&gt;Was ich vorfand waren dreitausend Zeilen Code, kein Kommentar, keine Struktur, die diesen Namen verdient hätte.&lt;/p&gt;
&lt;p&gt;Stattdessen Methoden, die sich über Hunderte von Zeilen erstreckten und alles auf einmal taten:
Datenbankzugriffe, Businesslogik, UI-Rendering, irgendwo dazwischen ein paar Magic Numbers, die niemand mehr erklären konnte.&lt;/p&gt;
&lt;p&gt;Der eigentliche Bug war schnell behoben, doch ihn zu lokalisieren hat zwei Tage gedauert.&lt;/p&gt;
&lt;p&gt;Nachlässigkeit war der ausschlaggebende Punkt und nicht technische Komplexität.
Wegen einer Haltung, die ich später in diesem Projekt immer wieder antreffen würde:
Versionierung? Beiwerk. Formatierung? Beiwerk. Dokumentation? Beiwerk.&lt;/p&gt;
&lt;p&gt;Was dabei übersehen wurde?
Meine Zeit ist kein Beiwerk.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Technische Schulden neu definiert
    &lt;div id=&#34;technische-schulden-neu-definiert&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#technische-schulden-neu-definiert&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der Begriff stammt von Ward Cunningham, einem der Mitautoren des Agilen Manifests.
Er prägte ihn in den frühen 1990ern und meinte damit ursprünglich etwas Pragmatisches: Manchmal ist es sinnvoll, eine nicht-optimale Lösung zu wählen, um schnell voranzukommen.
So wie man einen Kredit aufnimmt, um heute investieren zu können und den man morgen zurückzahlt.&lt;/p&gt;
&lt;p&gt;Der entscheidende Teil dieses Bildes wird heute gerne vergessen:&lt;br&gt;
&lt;strong&gt;Schulden müssen zurückgezahlt werden. Mit Zinsen.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wer einen Kredit aufnimmt und ihn ignoriert, hat in erster Linie ein Charakterproblem und erst dann entsteht auch ein Finanzproblem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dasselbe gilt für Code.&lt;/strong&gt;
Technische Schulden, die bewusst aufgenommen und dokumentiert werden, um später getilgt zu werden, sind ein legitimes Werkzeug und manchmal sogar unverzichtbar.&lt;br&gt;
Technische Schulden, die aus Bequemlichkeit entstehen, still wachsen und still weitergereicht werden, sind etwas ganz anderes.&lt;/p&gt;
&lt;p&gt;Und sie wachsen immer, das ist das Heimtückische an ihnen.&lt;/p&gt;
&lt;p&gt;Jede neue Funktion, die auf einem schlechten Fundament aufbaut, macht das Fundament instabiler.
Jede Abkürzung, die heute genommen wird, verengt den Korridor für morgen.
Was als kleine Unordnung beginnt, wird zum Monolith, den niemand mehr anfassen will – weil niemand mehr versteht, was passiert, wenn man es tut.
Der Zinseszins schlägt zu: Die Schulden wachsen nicht linear.
Sie wachsen exponentiell.&lt;/p&gt;
&lt;p&gt;Aber es gibt noch eine Dimension, die in dieser Finanzbuchhaltung fehlt.
In der realen Welt zahlt derjenige die Zinsen, der den Kredit aufgenommen hat.
Bei technischen Schulden zahlen oft andere: der Kollege, der den Code drei Jahre später debuggt.
Die Entwicklerin, die eine neue Funktion einbauen soll und erst mal Wochen damit verbringt zu verstehen, was überhaupt da ist.
Das Unternehmen, das Kunden verliert, weil ein System unter seiner eigenen Last zusammenbricht.&lt;/p&gt;
&lt;p&gt;Technische Schulden sind keine abstrakte Metrik in einem Qualitätsbericht.
Sie sind konkrete Lebenszeit – die von anderen Menschen. Zeit, die sie nicht wiederbekommen.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Die drei Verantwortlichkeiten
    &lt;div id=&#34;die-drei-verantwortlichkeiten&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#die-drei-verantwortlichkeiten&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Die, die nach dir kommen
    &lt;div id=&#34;die-die-nach-dir-kommen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#die-die-nach-dir-kommen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Stell dir vor, du ziehst in eine neue Wohnung.
Der Vormieter hat die Wände mit Löchern übersät, Kabel lose verlegt, einen Wasserschaden hinter dem Schrank versteckt und beim Auszug einfach zugemacht.
Du weißt nicht, was hinter den Wänden steckt, bis es tropft.&lt;/p&gt;
&lt;p&gt;Genau so fühlt es sich manchmal an, fremden Code zu erben.&lt;/p&gt;
&lt;p&gt;Das Schlimmste daran ist nicht die Arbeit, es ist die Erkenntnis, dass jemand das gewusst hat.
Dass jemand diese Entscheidungen getroffen, diese Abkürzungen genommen, diese Verwahrlosung hinterlassen hat – und dann gegangen ist.
Ohne ein Wort, ohne einen Kommentar, ohne den Mut, sich zu seinem eigenen Code zu bekennen.&lt;/p&gt;
&lt;p&gt;Hinter jedem chaotischen Repository steckt ein Mensch, der einen anderen Menschen um dessen Zeit gebracht hat.
Nicht mit Absicht, vielleicht.
Aber Fahrlässigkeit ist keine Entschuldigung – sie ist eine Entscheidung, die man nicht bewusst getroffen hat.&lt;/p&gt;
&lt;p&gt;Der Kollege, der heute deinen Murks debuggt, hat Familie, Hobbys, und allgemein Dinge, die er lieber täte, als in dreitausend Zeilen ungekennzeichnetem Code nach einer Race Condition zu suchen, die du vor drei Jahren eingebaut hast, weil du keine Zeit hattest, es richtig zu machen.
Diese Stunden bekommt er nicht wieder zurück, die Energie, die er in das Verstehen steckt, was eigentlich da ist, fehlt ihm für das, was sein sollte: neue Dinge bauen, Probleme lösen, wachsen, Innovation vorantreiben.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Schlechter Code ist oft kein technisches Problem, sondern allzu häufig eine Geringschätzung der Zeit anderer.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Die, die deine Software benutzen
    &lt;div id=&#34;die-die-deine-software-benutzen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#die-die-deine-software-benutzen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Der Nutzer sieht keinen Code.
Er sieht ein Formular, das sich nicht abschicken lässt.
Eine App, die abstürzt.
Daten, die verloren gehen.
Eine Fehlermeldung, die er nicht versteht und die niemand vorgesehen hat zu erklären.&lt;/p&gt;
&lt;p&gt;Was er nicht sieht: dass sein Ärger, sein Datenverlust, seine Frustration die direkte Konsequenz einer Entscheidung ist, die jemand in einem Büro getroffen hat – still, unsichtbar, für ihn folgenlos.
Sicherheitslücken entstehen nicht aus dem Nichts.
Sie entstehen, wenn jemand entscheidet, dass Validierung heute keine Priorität hat.
Datenverlust passiert nicht einfach.
Er wird vorbereitet – durch Systeme, die niemand mehr versteht, und die deshalb niemand mehr zuverlässig warten kann.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Der Nutzer zahlt die Rechnung, ohne es zu wissen und ohne gefragt worden zu sein.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Das Unternehmen
    &lt;div id=&#34;das-unternehmen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#das-unternehmen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Hier wird es nüchterner – aber nicht weniger ernst.&lt;/p&gt;
&lt;p&gt;Technische Schulden sind ein wirtschaftliches Risiko, das in den meisten Roadmaps nicht auftaucht.
Jede neue Funktion, die auf maroden Fundamenten gebaut wird, kostet mehr als geplant – weil ein Teil des Aufwands immer darin besteht, das Bestehende nicht zum Einsturz zu bringen.
Wartung wird teurer.
Onboarding neuer Entwickler dauert länger.
Experimente, die Wettbewerber in zwei Wochen umsetzen, dauern sechs Monate – weil das System keinen Spielraum mehr hat.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unternehmen, die Qualität systematisch als verzichtbar behandeln, kaufen sich kurzfristig Geschwindigkeit und bezahlen sie langfristig mit Handlungsunfähigkeit.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Das unbequeme Geständnis
    &lt;div id=&#34;das-unbequeme-geständnis&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#das-unbequeme-gest%c3%a4ndnis&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Es wäre einfach, hier aufzuhören und zu behaupten:&lt;br&gt;
&lt;em&gt;Wer schlechten Code schreibt, ist ein schlechter Mensch. Fertig.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ganz so leicht ist es aber nicht immer, denn die Wahrheit ist oft kompliziert und unbequem.&lt;/p&gt;
&lt;p&gt;Technische Schulden entstehen nicht immer aus Faulheit oder Gleichgültigkeit, manchmal entstehen sie aus echtem Druck.
Zum Beispiel aus Deadlines, die nicht verhandelbar waren, aus Ressourcen, die nicht vorhanden waren oder aus dem Wissen, dass eine unvollkommene Lösung, die heute läuft, besser ist als eine perfekte, die in drei Monaten fertig wird, dann aber vielleicht zu spät kommt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perfekter Code ist eine Illusion.&lt;/strong&gt;
Wer das Gegenteil behauptet, hat entweder noch nie unter echtem Druck gearbeitet oder lügt.&lt;/p&gt;
&lt;p&gt;Der entscheidende Unterschied liegt nicht darin, ob Schulden entstehen oder nicht, er liegt darin, &lt;em&gt;wie&lt;/em&gt; sie entstehen und mit ihnen umgegangen wird.&lt;/p&gt;
&lt;p&gt;Es gibt technische Schulden, die man bewusst aufnimmt.
Man bespricht es im Team, dokumentiert die Entscheidung, hält fest, warum diese Abkürzung heute sinnvoll ist und was es braucht, sie später zu tilgen.
Das ist kein Versagen – das ist Pragmatismus mit Verantwortungsbewusstsein.
Ein Kredit, den man kennt und plant zurückzuzahlen.&lt;/p&gt;
&lt;p&gt;Und dann gibt es die andere Art.
Die stillen Schulden.
Die, die entstehen, weil jemand gehofft hat, dass es schon niemand merken wird.
Die, die nicht dokumentiert werden, weil Dokumentation ja &amp;ldquo;Beiwerk&amp;rdquo; ist.
Die, die still in den nächsten Sprint wandern, und den übernächsten, bis sie so tief im System vergraben sind, dass niemand mehr weiß, was sie eigentlich sind – nur noch, dass man sie besser nicht anfasst.&lt;/p&gt;
&lt;p&gt;Der Unterschied zwischen diesen beiden Arten ist ein moralischer, kein technischer.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Wir nehmen diese Schuld auf, weil wir jetzt liefern müssen – und wir werden sie tilgen&lt;/em&gt; ist eine Aussage, die Respekt verdient.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Wird schon niemand merken&lt;/em&gt; ist keine Entscheidung.
Es ist eine Kapitulation.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Management und die Kultur der Eile
    &lt;div id=&#34;management-und-die-kultur-der-eile&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#management-und-die-kultur-der-eile&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Es gibt eine bequeme Ausrede, die sich in Entwicklerkreisen hartnäckig hält: Das Management ist schuld.
Die Roadmap lässt keinen Raum für Refactoring, die Deadlines sind unrealistisch oder der Druck kommt von oben und wir unten sind die Leidtragenden.&lt;/p&gt;
&lt;p&gt;Wie an fast jeder Geschichte ist auch an dieser etwas Wahres dran.&lt;/p&gt;
&lt;p&gt;Organisationen, die Qualität systematisch als verzichtbar behandeln, schaffen Strukturen, in denen technische Schulden keine Ausnahme sind, sondern der Standard.
Wenn Geschwindigkeit das einzige Maß für Erfolg ist, wenn jedes Sprint-Review nur nach abgeschlossenen Tickets fragt und nie nach dem Zustand des Fundaments, dann sendet das eine klare Botschaft: Nur Geschwindigkeit zählt, alles andere ist egal.
So eine Kultur schafft langfristig kein festes Fundament für Fortschritt.&lt;/p&gt;
&lt;p&gt;Aber diese Geschichte hat einen gefährlichen blinden Fleck: Sie macht Entwickler zu passiven Opfern, doch das sind sie nicht, zumindest nicht zwangsläufig.&lt;/p&gt;
&lt;p&gt;Die unbequeme Wahrheit ist, wer schweigt, macht mit.&lt;/p&gt;
&lt;p&gt;Wenn schlechte Entscheidungen nicht benannt werden, wachsen sie ungestört weiter.
Wenn technische Schulden in keinem Meeting auftauchen, weil niemand sie auf die Agenda setzt, existieren sie für das Management schlicht nicht.
Wenn Entwickler unter sich bleiben mit dem Wissen, dass ein System marode ist und dieses Wissen nie nach oben tragen, dann tragen sie Mitverantwortung für das, was daraus wird.&lt;/p&gt;
&lt;p&gt;Das Management kann keine informierten Entscheidungen über Dinge treffen, von denen es nichts weiß.
Das ist keine Entschuldigung für schlechte Führung, aber es ist eine Erklärung dafür, warum Schweigen keine neutrale Haltung ist.&lt;/p&gt;
&lt;p&gt;Die Kultur der Eile entsteht selten durch eine einzige Entscheidung, oft entsteht sie durch hundert kleine Momente, in denen jemand gedacht hat: &lt;em&gt;Ich sage es nächstes Mal. Das ist nicht mein Kampf. Es wird schon gutgehen.&lt;/em&gt;
Und jedes Mal, wenn jemand so denkt, geht ein kleines Bisschen Information verloren.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Die Stimme erheben – Verantwortung annehmen
    &lt;div id=&#34;die-stimme-erheben--verantwortung-annehmen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#die-stimme-erheben--verantwortung-annehmen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Verantwortung ist nichts Abstraktes, es zeigt sich in sehr konkreten Dingen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code-Reviews&lt;/strong&gt; sind eine der wenigen Stellen im Entwicklungsprozess, an denen Qualität kollektiv verhandelt wird.
Wer ein Review durchklickt, weil er keine Zeit hat oder keinen Konflikt will, verzichtet auf diese Chance.
Wer ehrliches Feedback gibt – konstruktiv, respektvoll, aber klar – investiert in das Fundament, auf dem alle weiterarbeiten müssen.
Das zeigt, dass Code-Reviews nicht als reiner Formalismus behandelt werden dürfen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Schulden sichtbar machen&lt;/strong&gt; ist keine Schwäche oder unnötiges nörgeln, sondern Professionalität.
Ein Arzt, der einen Befund verschweigt, um den Patienten nicht zu beunruhigen, handelt nicht fürsorglich, sondern fahrlässig.
Dasselbe gilt für Entwickler, die wissen, dass ein System instabil ist und dieses Wissen für sich behalten.
Technische Schulden gehören dokumentiert, benannt, in Backlogs aufgenommen, aber definitv nicht versteckt.&lt;/p&gt;
&lt;p&gt;Entwickler müssen auch &lt;strong&gt;lernen &amp;ldquo;Nein&amp;rdquo; zu sagen&lt;/strong&gt;.
Das ist nicht bequem aber sehr wichtig.
Nicht immer ist ein Nein möglich und nicht jeden Kampf kann man gewinnen, aber wer nie Nein sagt, wer jedem Druck wortlos nachgibt und jede unrealistische Deadline kommentarlos akzeptiert, der hat aufgehört, Verantwortung zu tragen.&lt;/p&gt;
&lt;p&gt;Und besonders an alle, die gerade am Anfang stehen: Ihr lernt gerade nicht nur Programmieren.
Ihr lernt, wie ihr arbeiten wollt, welche Standards ihr setzt, welche Kompromisse ihr eingeht und welche nicht.
Ihr habt die Chance, Gewohnheiten zu entwickeln, die euch und alle, die nach euch kommen, prägen werden.&lt;/p&gt;
&lt;p&gt;Also erhebt eure Stimme, wenn ihr Mängel erkennt und steht zu euren Entscheidungen, auch wenn es mal unbequem wird.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Der Weckruf (Schluss)
    &lt;div id=&#34;der-weckruf-schluss&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#der-weckruf-schluss&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Jede Zeile Code, die du schreibst, ist eine Entscheidung.&lt;/p&gt;
&lt;p&gt;Es ist sowohl eine technische, als auch eine moralische.&lt;br&gt;
Du entscheidest, wie viel dir die Zeit derjenigen wert ist, die nach dir kommen.&lt;br&gt;
Du entscheidest, ob du ein Fundament baust oder eine Falle.&lt;br&gt;
Du entscheidest, ob du Verantwortung trägst oder weiterschiebst.&lt;/p&gt;
&lt;p&gt;Das klingt abstrakt und schwer, aber tatsächlich kann man mit kleinen Entscheidungen viel Bewirken.&lt;/p&gt;
&lt;p&gt;Hinterlässt du eine Methode mit zweihundert Zeilen, obwohl du weißt, dass sie zu lang ist und sagst, du hattest keine Zeit?&lt;br&gt;
Lässt du einen Kommentar weg, weil er dir gerade trivial erscheint und vergisst, dass er für jemand anderen alles bedeuten könnte?&lt;br&gt;
Begräbst du eine technische Schuld still, anstatt sie zu benennen, weil es so bequemer ist?&lt;/p&gt;
&lt;p&gt;Wenn du diese oder ähnliche Fragen klar mit Nein beantworten kannst, bist nicht Teil des Problems, sondern Teil der Lösung.&lt;/p&gt;
&lt;p&gt;Nimm dir zehn Minuten Zeit, um etwas zu erklären, das du gerade verstanden hast, sag im Review, was du wirklich denkst, steh in einem Meeting auf und sag:
&lt;em&gt;Das geht so nicht, ich schlage vor wir machen das so&amp;hellip;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Du weißt jetzt, was technische Schulden sind, wer sie bezahlt, wie sie entstehen und warum Schweigen keine neutrale Haltung ist.
Du weißt, dass perfekter Code eine Illusion ist, aber bewusste, dokumentierte, ehrliche Arbeit keine.&lt;/p&gt;
&lt;p&gt;Was du nun daraus machst, liegt ganz bei dir.&lt;/p&gt;
&lt;p&gt;Und denk immer daran:
Irgendwo sitzt gerade jemand an deinem Code und fragt sich, wer das hinterlassen hat und warum.&lt;/p&gt;
&lt;p&gt;Also schreibe deinen Code so, dass du guten Gewissens und mit Stolz sagen kannst:
&lt;em&gt;&lt;strong&gt;Das habe ich programmiert&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Zum Schluss möchte ich noch John Woods zitieren, der es etwas provokanter Ausdrückt, jedoch das gleiche meint:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;John Woods&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.freepik.com/free-photo/still-life-illustrating-ethics-concept_26407587.htm#fromView=search&amp;amp;page=1&amp;amp;position=47&amp;amp;uuid=15322d76-3ed1-44e5-b9a9-246f4c6c1c62&amp;amp;query=ethics&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;freepik&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Technische Schulden</title>
      <link>https://devcartes.de/posts/tech-debts/</link>
      <pubDate>Tue, 31 Mar 2026 00:00:00 +0100</pubDate>
      
      <guid>https://devcartes.de/posts/tech-debts/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Einleitung
    &lt;div id=&#34;einleitung&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#einleitung&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Jeder Entwickler kennt die Situation: Die Deadline rückt näher, der Chef sitzt einem im Nacken, der Kunde nörgelt, weil er auf sein Feature warten muss und die schöne, saubere Lösung würde zu lange dauern.
Die scheinbar logische Konsequenz: Man macht es schnell und unsauber (engl. quick and dirty).
Im &amp;ldquo;besten&amp;rdquo; Fall hinterlässt man noch einen TODO-Kommentar und verschiebt das saubere Lösen auf einen anderen Tag.&lt;/p&gt;
&lt;p&gt;Das ist der Moment, wo technische Schulden entstehen und sie entstehen in nahezu jedem Projekt.
Das perfide an ihnen, sie sind oft stille Begleiter, sie wachsen im Hintergrund, bis sie zu einem realen Problem werden.&lt;/p&gt;
&lt;p&gt;Im folgenden Artikel möchte ich untersuchen, wie genau sie entstehen, woran man sie erkennt und vielleicht am wichtigsten, wie man sie kontrolliert.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Was sind technische Schulden
    &lt;div id=&#34;was-sind-technische-schulden&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#was-sind-technische-schulden&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der Begriff wurde von Ward Cunningham geprägt, einem der Mitautoren des Agilen Manifests.
Die Analogie, die er gewählt hat, ist bis heute treffend: &lt;strong&gt;Technische Schulden funktionieren wie ein Kredit&lt;/strong&gt;.
Technische Schulden sind die Kosten, die entstehen, wenn ein Entwickler eine schnelle Lösung einer sauberen vorzieht.&lt;/p&gt;
&lt;p&gt;Wer heute einen Kredit aufnimmt, bekommt sofort Geld, zahlt jedoch morgen mehr zurück, da Zinsen oben drauf kommen.
Genauso liefert man mit einer unsauberen Lösung heute schnell ein Feature, erkauft sich damit aber zukünftigen Mehraufwand.
Code wird schwerer verständlich, Änderungen riskanter oder fast unmöglich und neue Features dauern länger, weil man sich erst ganz vorsichtig durch alten, fragilen Code kämpfen muss.
Das ist im Falle der technischen Schulden das Equivalent zu den Zinsen bei einem Kredit.&lt;/p&gt;
&lt;p&gt;Was man hier allerdings nicht vergessen darf:
Technische Schulden sind nicht automatisch ein Fehler, denn manchmal ist es eine bewusste, rationale Entscheidung – quasi ein Kompromiss, den man eingeht, weil der Markt nicht wartet oder die Produktion still steht.&lt;/p&gt;
&lt;p&gt;Es wird erst zum Problem, wenn die Schulden nicht oder zu spät zurückgezahlt werden.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Wie werden sie verursacht
    &lt;div id=&#34;wie-werden-sie-verursacht&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#wie-werden-sie-verursacht&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Im Folgenden möchte ich einige der häufigsten Ursachen für technische Schulden beschreiben.
Ich erhebe kein Anspruch auf Vollständigkeit, aber es sind die aus meiner Sicht wichtigsten und gefährlichsten.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Zeitlicher Druck
    &lt;div id=&#34;zeitlicher-druck&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#zeitlicher-druck&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Jeder Entwickler kennt das: Chef, Kunde oder externe Deadlines zwingen dazu, Abstriche bei der Codequalität zu machen.
Features müssen halbfertig veröffentlicht werden, Dokumentation wird gestrichen und Tests – um die kümmert man sich später.
Zeitlicher Druck ist wohl die häufigste Ursache für technische Schulden und gleichzeitig die am schwersten zu vermeidende.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Mangel an Bewusstsein für die Konsequenzen
    &lt;div id=&#34;mangel-an-bewusstsein-für-die-konsequenzen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#mangel-an-bewusstsein-f%c3%bcr-die-konsequenzen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Manchmal entstehen technische Schulden schlicht, weil sich niemand bewusst ist, welche Langzeitfolgen eine schnelle Entscheidung haben kann.
Ein Entwickler löst ein Problem pragmatisch, ohne zu ahnen, dass genau diese Stelle in sechs Monaten das Herzstück eines neuen Features sein wird.
Fehlende Erfahrung oder mangelndes Systemverständnis spielen hier oft eine Rolle.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Mangel an Tests
    &lt;div id=&#34;mangel-an-tests&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#mangel-an-tests&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ohne automatisierte Tests weiß niemand mit Sicherheit, ob eine Änderung am Code woanders etwas kaputt macht.
Daraus ergibt sich, dass Entwickler sich nicht mehr trauen, alten Code anzufassen und er wird zur Blackbox.
Technische Schulden, die durch fehlende Tests entstehen, sind sehr tückisch, weil sie kaum sichtbar sind, bis es zu spät ist.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Mangelhafte oder fehlende Dokumentation
    &lt;div id=&#34;mangelhafte-oder-fehlende-dokumentation&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#mangelhafte-oder-fehlende-dokumentation&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ein Sprichwort in der Softwareentwicklung besagt: Code wird viel öfter gelesen als geschrieben.
Wenn niemand dokumentiert, warum eine Entscheidung so getroffen wurde, verliert sich dieses Wissen unweigerlich – spätestens wenn der ursprüngliche Entwickler das Team verlässt.
Was übrig bleibt, ist Code, den niemand mehr richtig versteht und den niemand bearbeiten will.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Schlechte Kommunikation
    &lt;div id=&#34;schlechte-kommunikation&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#schlechte-kommunikation&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Silodenken, unklare Anforderungen, zu seltene Abstimmungen oder das klassische &amp;ldquo;das hatte ich mir anders vorgestellt&amp;rdquo; sind im Arbeitsalltag fast nicht zu vermeiden.
Wenn Entwickler, Designer und Product Manager nicht klar miteinander kommunizieren, entstehen Missverständnisse.
Doppelt implementierte Funktionen, inkonsistente Architekturentscheidungen oder Features, die an den eigentlichen Anforderungen vorbeigehen, sind typische Folgen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Verzögertes Refactoring
    &lt;div id=&#34;verzögertes-refactoring&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#verz%c3%b6gertes-refactoring&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Refactoring ist wie Küche putzen nach dem Kochen oder Aufräumen nach einer Party: Man schiebt es vor sich her, weil es anstrengend ist und &amp;ldquo;ja auch noch später gemacht werden kann&amp;rdquo;.
Doch je länger man wartet, desto verwurzelter wird schlechter Code im System und desto aufwändiger wird es, ihn zu bereinigen.
Was heute vielleicht nur eine Stunde dauern würde, dauert in einem Jahr eventuell eine Woche.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Nicht Einhaltung von Entwicklungsrichtlinien
    &lt;div id=&#34;nicht-einhaltung-von-entwicklungsrichtlinien&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#nicht-einhaltung-von-entwicklungsrichtlinien&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;In den meisten Teams gibt es Coding Standards, Architekturprinzipien oder Konventionen – manchmal ungeschrieben, manchmal explizit dokumentiert.
Werden diese ignoriert oder umgangen, entsteht inkonsistenter Code, der schwer zu lesen und zu warten ist. Besonders kritisch wird es, wenn neue Teammitglieder diese Abkürzungen als Standard übernehmen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Das Fehlen von Entwicklungsrichtlinien
    &lt;div id=&#34;das-fehlen-von-entwicklungsrichtlinien&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#das-fehlen-von-entwicklungsrichtlinien&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ohne klare Entwicklungsrichtlinien entwickelt jeder Entwickler seinen eigenen Stil und das Ergebnis ist inkonsistenter Code, der schwer zu lesen und definitiv noch schwerer zu warten ist.
Coding Standards, Architekturprinzipien und Konventionen sind essentiell, da sie dafür sorgen, dass sich jeder im Team im Code zurechtfindet und nicht nur derjenige, der ihn geschrieben hat.&lt;/p&gt;
&lt;p&gt;Besonders kritisch wird es, wenn Teammitglieder diesen inkonsistenten Zustand als Normal ansehen, in ihren Alltag übernehmen und weiterführen.
Es braucht Richtlinien als Korrektiv, sonst häufen sich technische Schulden still und in großer Menge an.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Unwissenheit
    &lt;div id=&#34;unwissenheit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#unwissenheit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Nicht jede technische Schuld entsteht durch Faulheit oder Zeitdruck.
Manchmal weiß ein Entwickler einfach nicht, dass es eine bessere Lösung gibt.
Ob nun wegen fehlender Erfahrung, mangelnder Weiterbildung oder weil sich die Technologie weiterentwickelt hat, während der Code stehen blieb - es ist menschlich und doch eine mögliche Ursache für technische Schulden.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Wie erkennt man sie
    &lt;div id=&#34;wie-erkennt-man-sie&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#wie-erkennt-man-sie&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Technische Schulden sind heimtückisch, sie schleichen sich still und heimlich ein.
Oft merkt man erst, dass sie überhaupt da sind, wenn sie bereits zum echten Problem geworden sind.
Es gibt allerdings einige sehr typische Warnsignale, auf die man achten sollte.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Steigende Entwicklungsgeschwindigkeit&amp;hellip; nach unten
    &lt;div id=&#34;steigende-entwicklungsgeschwindigkeit-nach-unten&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#steigende-entwicklungsgeschwindigkeit-nach-unten&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Neue Features, die früher in zwei Tagen fertig waren, brauchen plötzlich eine Woche.
Das liegt nicht am schlechter werden des Teams, sondern an den Altlasten, die sie mit sich tragen.
Wird das Team spürbar langsamer, ohne dass die Komplexität der Anforderungen gestiegen ist, ist das ein typisches Zeichen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Angst vor Änderungen
    &lt;div id=&#34;angst-vor-änderungen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#angst-vor-%c3%a4nderungen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;&amp;ldquo;Fass das bloß nicht an, dann geht irgendwas kaputt&amp;rdquo;, &amp;ldquo;Hier musst du besonders vorsichtig sein, niemand weiß so genau, warum der Code überhaupt funktioniert&amp;rdquo;.
Diese Sätze sind deutliche Warnsignale.
Wenn Entwickler bestimmte Teile des Codes meiden wie ein Minenfeld und regelrecht Angst haben sie zu verändern, stecken dort fast immer technische Schulden dahinter.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Häufige und wiederkehrende Bugs
    &lt;div id=&#34;häufige-und-wiederkehrende-bugs&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#h%c3%a4ufige-und-wiederkehrende-bugs&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Bugs, die immer wieder auftauchen, oft an denselben Stellen, deuten stark auf strukturelle Probleme hin.
Man muss die Ursachen angehen, statt die Symptome zu bekämpfen. Der eigentliche Code ist fragil oder unverständlich und kann deshalb nicht wirklich repariert werden.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Niemand versteht den Code mehr
    &lt;div id=&#34;niemand-versteht-den-code-mehr&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#niemand-versteht-den-code-mehr&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Wenn ein Entwickler einen Abschnitt öffnet und erstmal zehn Minuten braucht, um zu verstehen was da passiert oder schlimmer, wenn niemand im Team mehr erklären kann, warum etwas so gebaut wurde, sind das fast sicher technische Schulden.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Einarbeitung neuer Entwickler dauert ungewöhnlich lang
    &lt;div id=&#34;einarbeitung-neuer-entwickler-dauert-ungewöhnlich-lang&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#einarbeitung-neuer-entwickler-dauert-ungew%c3%b6hnlich-lang&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ein gesundes Projekt lässt sich in überschaubarer Zeit verstehen.
Wenn neue Teammitglieder Wochen oder Monate brauchen, um produktiv zu werden, ist das oft ein Zeichen, dass der Code zu komplex, zu schlecht dokumentiert oder inkonsistent geworden ist.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Wie kann man sie verhindern
    &lt;div id=&#34;wie-kann-man-sie-verhindern&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#wie-kann-man-sie-verhindern&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Technische Schulden vollständig zu vermeiden ist unrealistisch und wie wir gesehen haben, manchmal auch gar nicht sinnvoll.
Das Ziel ist nicht null Schulden, sondern die Schulden bewusst aufnehmen und sie zeitnah und kontrolliert wieder zurückzuzahlen.
Hier sind die wichtigsten Maßnahmen dafür.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Klare Entwicklungsrichtlinien etablieren
    &lt;div id=&#34;klare-entwicklungsrichtlinien-etablieren&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#klare-entwicklungsrichtlinien-etablieren&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ein Team braucht eine gemeinsame Basis: Coding Standards, Codeversionierung (Git), Architekturprinzipien, Konventionen für Benennung und Struktur.
Das muss kein dickes Handbuch sein, aber es muss die wichtigsten Punkte enthalten, allen bekannt sein und aktiv gelebt werden.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Automatisierte Tests von Anfang an
    &lt;div id=&#34;automatisierte-tests-von-anfang-an&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#automatisierte-tests-von-anfang-an&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ein Testkonzept muss von Anfang existieren und Tests dürfen nicht bis zum Schluss aufgeschoben werden, denn sie sind eine Investition in die Zukunft.
Wer von Beginn an testet, kann später ohne Angst refactoren, weil sofort klar wird, dass etwas bricht und wo.
Der beste Zeitpunkt für Tests ist immer &lt;strong&gt;jetzt&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Regelmäßiges Refactoring einplanen
    &lt;div id=&#34;regelmäßiges-refactoring-einplanen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#regelm%c3%a4%c3%9figes-refactoring-einplanen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Refactoring muss zum normalen Entwicklungsalltag gehören und darf nicht auf unbestimmte Zeit verschoben werden.
Kleine, regelmäßige Aufräumarbeiten verhindern, dass sich Schulden überhaupt erst gefährlich anhäufen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Code Reviews
    &lt;div id=&#34;code-reviews&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#code-reviews&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Vier Augen sehen mehr als zwei, sagt man und es ist tatsächlich so, denn man sieht seine eigenen Fehler oft nicht.
Regelmäßige Code Reviews helfen dabei, schlechte Lösungen früh zu erkennen, bevor sie sich im System festsetzen.
Gleichzeitig fördern sie den Wissensaustausch im Team, was ein unterschätzter Nebeneffekt ist.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Dokumentation als Teil der Arbeit verstehen
    &lt;div id=&#34;dokumentation-als-teil-der-arbeit-verstehen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#dokumentation-als-teil-der-arbeit-verstehen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Dokumentation darf nicht als ein notwendiges Übel angesehen werden, sondern muss Teil der eigentlichen Arbeit sein.
Wer während der Entwicklung fünf Minuten investiert um zu erklären, warum eine (schlechtere) Entscheidung so getroffen wurde, spart seinem Team in der Zukunft Zeit und Kopfzerbrechen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Technische Schulden sichtbar machen
    &lt;div id=&#34;technische-schulden-sichtbar-machen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#technische-schulden-sichtbar-machen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Was nicht sichtbar ist, wird nicht priorisiert oder &amp;ldquo;aus den Augen aus dem Sinn&amp;rdquo;.
Technische Schulden sollten aktiv erfasst werden, sei es als Einträge im Backlog oder zum Beispiel als (TODO-) Tags im Code.
Nur wenn das Team und das Management sehen, was sich angesammelt hat, können richtige Entscheidungen getroffen werden, wann und wie die Schulden zurückgezahlt werden.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Zeitdruck bewusst managen
    &lt;div id=&#34;zeitdruck-bewusst-managen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#zeitdruck-bewusst-managen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Das ist leichter gesagt als getan und dennoch extrem wichtig.
Wenn Deadlines auf Kosten der Qualität gehen, muss man diese Entscheidung bewusst treffen und die Konsequenzen sollten klar sein.
Wer einen Kompromiss eingeht, muss ihn dokumentieren und sicherstellen, dass die Schulden auch zeitnah bezahlt werden.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Fazit
    &lt;div id=&#34;fazit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#fazit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Technische Schulden sind (oft) kein Zeichen von schlechtem Entwicklerhandwerk, sondern in fast jedem Softwareprojekt vertreten.
Manchmal entstehen sie durch Druck von außen, manchmal durch fehlende Strukturen, manchmal schlicht durch Unwissenheit.&lt;/p&gt;
&lt;p&gt;Gefährlich werden sie dann, wenn man sie ignoriert.&lt;/p&gt;
&lt;p&gt;Der erste und meiner Meinung nach wichtigste Schritt ist Bewusstsein.
Technische Schulden wahrnehmen, sie benennen und als das behandeln, was sie sind, eine bewusste Entscheidung mit Konsequenzen.
Wer das tut, kann sie kontrollieren, aktiv abbauen und verhindern, dass sie das Projekt eines Tages lahmlegen.&lt;/p&gt;
&lt;p&gt;Sauberer Code muss immer das Ziel sein, denn mit ihm steht und fällt der langfristige Erfolg eines Projekts.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.freepik.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;freepik&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Rusty Bytes #1 - Traits, Monomorphisierung und Dynamic Dispatch</title>
      <link>https://devcartes.de/posts/rusty-bytes/traits/</link>
      <pubDate>Wed, 11 Mar 2026 00:00:00 +0100</pubDate>
      
      <guid>https://devcartes.de/posts/rusty-bytes/traits/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Was sind Traits?
    &lt;div id=&#34;was-sind-traits&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#was-sind-traits&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Traits sind Rusts Version von Interfaces.
Ein Trait definiert eine Schnittstelle, eine Menge von Methoden, die ein Typ implementieren muss, außer es gibt eine Standardimplementierung.
Wer schon mit Interfaces aus C#, Java oder Kotlin gearbeitet hat, kennt das Konzept.&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;trait&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;German&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;impl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;German&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hallo!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;impl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hello!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Traits können auch eine &lt;strong&gt;Standardimplementierung&lt;/strong&gt; mitbringen, die ein Typ überschreiben kann aber nicht muss:&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;trait&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hi!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;So weit, so bekannt.&lt;/p&gt;
&lt;p&gt;Interessant wird es, wenn man Traits als Parameter verwendet, denn da beginnt die eigentliche Frage:
Was passiert dann zur Compile-Zeit und welche Auswirkungen hat es auf die Laufzeit?&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Monomorphisierung – Polymorphismus zur Compile-Zeit
    &lt;div id=&#34;monomorphisierung--polymorphismus-zur-compile-zeit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#monomorphisierung--polymorphismus-zur-compile-zeit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Wenn eine Funktion einen generischen Typ mit Trait-Bound erwartet, erzeugt der Rust-Compiler für jeden konkreten Typ, mit dem die Funktion aufgerufen wird, eine eigene spezialisierte Version.
Das nennt sich &lt;strong&gt;Monomorphisierung&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;: &lt;span class=&#34;nc&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Der Compiler sieht, dass &lt;code&gt;greet&lt;/code&gt; mit &lt;code&gt;German&lt;/code&gt; und &lt;code&gt;English&lt;/code&gt; aufgerufen wird, und erzeugt intern je eine Funktion für Englisch und eine für Deutsch:&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet_german&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;German&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet_english&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Das ist gleichbedeutend mit dem &lt;code&gt;impl Trait&lt;/code&gt;-Syntax, der etwas lesbarer ist:&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;impl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Vorteil:&lt;/strong&gt;&lt;br&gt;
Zur Laufzeit gibt es keinen Overhead. Der Compiler kennt den konkreten Typ, kann ihn inline optimieren und direkt den richtigen Funktionsaufruf einsetzen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nachteil:&lt;/strong&gt;&lt;br&gt;
Die Binärgröße wächst, denn für jeden Typ, mit dem die Funktion genutzt wird, landet eine eigene Kopie im kompilierten Code.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Dynamic Dispatch – Polymorphismus zur Laufzeit
    &lt;div id=&#34;dynamic-dispatch--polymorphismus-zur-laufzeit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#dynamic-dispatch--polymorphismus-zur-laufzeit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Manchmal ist der konkrete Typ erst zur Laufzeit bekannt, so zum Beispiel wenn verschiedene Typen in einer Liste gesammelt werden sollen.&lt;/p&gt;
&lt;p&gt;Hier kommt &lt;code&gt;dyn Trait&lt;/code&gt; ins Spiel.&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;greet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;dyn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Statt einer spezialisierten Funktion pro Typ erzeugt der Compiler ein &lt;strong&gt;Trait Object&lt;/strong&gt;.
Das ist ein sogenannter &lt;strong&gt;Fat Pointer&lt;/strong&gt;, der aus zwei Teilen besteht, einem Zeiger auf die Daten und einem Zeiger auf eine &lt;strong&gt;vtable&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Die vtable wiederum ist eine Tabelle mit Funktionszeigern für alle Methoden des Traits, wo zur Laufzeit die richtige Implementierung nachgeschlagen und aufgerufen wird.&lt;/p&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;greeters&lt;/span&gt;: &lt;span class=&#34;nb&#34;&gt;Vec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Box&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;dyn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Greet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;vec!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Box&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;German&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Box&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;greeters&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Das wäre mit Monomorphisierung nicht möglich, da der Compiler den Typ jedes Eintrags zur Compile-Zeit kennen müsste.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vorteil:&lt;/strong&gt;&lt;br&gt;
Flexibel, kleinere Binärgröße, heterogene Collections möglich.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nachteil:&lt;/strong&gt;&lt;br&gt;
Laufzeit-Overhead durch den vtable-Lookup, keine Inlining-Optimierungen möglich.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Wann was?
    &lt;div id=&#34;wann-was&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#wann-was&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;impl Trait&lt;/code&gt; / Generics&lt;/th&gt;
          &lt;th&gt;&lt;code&gt;dyn Trait&lt;/code&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Auflösung&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Compile-Zeit&lt;/td&gt;
          &lt;td&gt;Laufzeit&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Höher&lt;/td&gt;
          &lt;td&gt;Etwas geringer&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Binärgröße&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Wächst pro Typ&lt;/td&gt;
          &lt;td&gt;Konstant&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Heterogene Collections&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;✗&lt;/td&gt;
          &lt;td&gt;✓&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Typinformation&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Vollständig bekannt&lt;/td&gt;
          &lt;td&gt;Zur Compile-Zeit nicht bekannt&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Als Faustregel gilt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;impl Trait&lt;/code&gt; ist der Standard&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dyn Trait&lt;/code&gt; kommt zum Einsatz wenn der Typ erst zur Laufzeit bekannt ist oder eine heterogene Collection benötigt wird.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Fazit
    &lt;div id=&#34;fazit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#fazit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Traits sind mehr als nur Interfaces.
Die Entscheidung zwischen Monomorphisierung und Dynamic Dispatch ist eine Entscheidung zwischen Compile-Zeit-Garantien und Laufzeit-Flexibilität.&lt;/p&gt;
&lt;p&gt;Im Vergleich zu Java oder C#, wo jeder Methodenaufruf über eine virtuelle Tabelle aufgelöst wird, gibt Rust einem die Wahl – und macht sie sichtbar.&lt;/p&gt;
&lt;p&gt;Das ist typisch Rust. &lt;strong&gt;Explizit&lt;/strong&gt;, &lt;strong&gt;kontrolliert&lt;/strong&gt; und &lt;strong&gt;ohne versteckten Overhead&lt;/strong&gt;, aber mit einer etwas steileren Lernkurve.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Erstellt mit &lt;a href=&#34;https://chatgpt.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ChatGPT&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Quelltext #3 - Linux, Ladybird und Rust</title>
      <link>https://devcartes.de/posts/source/linux-ladybird-rust/</link>
      <pubDate>Wed, 04 Mar 2026 00:00:00 +0100</pubDate>
      
      <guid>https://devcartes.de/posts/source/linux-ladybird-rust/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Quelltext #3
    &lt;div id=&#34;quelltext-3&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#quelltext-3&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Auch diese Woche möchte ich dir wieder von Projekten und Neuigkeiten berichten, die mich erstaunt, bewegt und verwundert haben.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Linux Kernel
    &lt;div id=&#34;linux-kernel&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#linux-kernel&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Zum Linux Kernel gibt es gleich zwei spannende Neuigkeiten.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Extended LTS
    &lt;div id=&#34;extended-lts&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#extended-lts&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Die Kernel Versionen 6.18, 6.12 und 6.6 bekommen nun offiziell verlängerten Support &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Version&lt;/th&gt;
          &lt;th&gt;Supportende (jetzt)&lt;/th&gt;
          &lt;th&gt;Supportende (bisher)&lt;/th&gt;
          &lt;th&gt;Released&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;6.18&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Dezember 2028&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Dezember 2027&lt;/td&gt;
          &lt;td&gt;2025-11-30&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;6.12&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Dezember 2028&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Dezember 2026&lt;/td&gt;
          &lt;td&gt;2024-11-17&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;6.6&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Dezember 2027&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Dezember 2026&lt;/td&gt;
          &lt;td&gt;2023-10-29&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Version 7.0
    &lt;div id=&#34;version-70&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#version-70&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Mit dem Release von Linux 6.19 am 8. Februar hat Linus Torvalds eine große Ankündigung gemacht:
Die nächste Kernel Version wird &lt;strong&gt;Linux 7.0&lt;/strong&gt; heißen.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Torvalds betont ausdrücklich, dass es kein großes &amp;ldquo;Breaking Change&amp;rdquo; Release ist, sondern wie immer &lt;strong&gt;„solid progress&amp;quot;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Das Merge-Window für 7.0 öffnete am 9. Februar, der erste Release Candidate erschien am 22. Februar.
Die finale Veröffentlichung wird für Mitte April erwartet.&lt;/p&gt;
&lt;p&gt;Rust-Support im Kernel gilt nun als &lt;strong&gt;stabil&lt;/strong&gt; und ist nicht mehr als experimentell markiert.&lt;/p&gt;
&lt;p&gt;Für Gamer interessant: Der neue TIP Time Slice Extension-Mechanismus erlaubt es Anwendungen, kurzzeitig mehr CPU-Zeit anzufordern, was sich positiv auf 1%-Low-FPS auswirken könnte.&lt;/p&gt;
&lt;p&gt;Außerdem kommen ein Live Update Orchestrator für unterbrechungsfreie Kernel-Upgrades unter laufenden VMs, Direct I/O für Btrfs bei Blockgrößen über der Page Size, autonomes Self-Healing für XFS sowie Unterstützung für ML-DSA Post-Quantum-Signaturen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Längere Unterstützung von Kernel Versionen ist vor allem für Serverbetreibende interessant, da ein Kernel-Update immer ein gewisses Risiko birgt.&lt;/p&gt;
&lt;p&gt;Eine neue Kernel Version ist immer spannend.
Und wenn auch keine großen &amp;ldquo;Breaking Changes&amp;rdquo; kommen, so bin ich doch sehr gespannt auf den neuen TIP Time Slice Extension-Mechanismus.
Außerdem freut mich das langfristige Commitment zu Rust, da es meiner Meinung nach wieder frischen Wind in die Linux-Entwicklung bringt.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Pop!_OS Upgrade 24.04 LTS
    &lt;div id=&#34;pop_os-upgrade-2404-lts&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pop_os-upgrade-2404-lts&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Pop!_OS bekommt das sehr lang ersehnte Upgrade von der Version 22.04 auf die Version 24.04&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;.
Die Entwickler von System76 hatten sich entschieden, das Upgrade nach hinten zu verschieben, um sich auf die Entwicklung der neuen Desktopumgebung konzentrieren zu können.&lt;/p&gt;
&lt;p&gt;Die neue Version kommt nun auch offiziell mit dem COSMIC Desktop als Standard.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-1&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-1&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Auch wenn ich mittlerweile glücklich bei EndeavourOS bin, habe ich Pop!_OS lange Zeit verwendet und nutze es noch heute auf einem älteren Laptop.
Daher freue ich mich sehr, dass dieses Upgrade nun endlich kommt, gerade weil es in der Community in letzter Zeit immer Unmut darüber gab, dass System76 das Upgrade so lange herausgezögert hat.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Ladybird Browser wechselt zu Rust
    &lt;div id=&#34;ladybird-browser-wechselt-zu-rust&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#ladybird-browser-wechselt-zu-rust&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Das Ladybird-Projekt, das mit großem Ehrgeiz einen unabhängigen Browser-Engine von Grund auf neu schreibt, hat einen bemerkenswerten Kurswechsel vollzogen:&lt;/p&gt;
&lt;p&gt;Nach dem gescheiterten Versuch mit Swift setzt Gründer Andreas Kling nun auf &lt;strong&gt;Rust&lt;/strong&gt; als Nachfolger für C++.&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;
Kling kündigt aber auch an, dass der Wechsel sukzessive durchgeführt wird und somit noch eine Weile in C++ und Rust parallel entwickelt wird.&lt;/p&gt;
&lt;p&gt;Swift hatte Probleme mit der C++-Interoperabilität und begrenztem Platform-Support außerhalb des Apple-Ökosystems. Rust bringt beides mit und hat dazu ein reifes Ökosystem sowie viele bestehende Contributor, die die Sprache bereits kennen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-2&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-2&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Die schnellen Wechsel von C++ auf Swift und dann zu Rust hinterlassen bei mir einen etwas unangenehmen Beigeschmack, der Unbeständigkeit.
Andererseits ist Ladybird noch ein junges Projekt und da gehören Fehlentscheidungen und schnelle Änderungen noch dazu.
Den Wechsel zu Swift konnte ich allerdings von Anfang an nicht ganz nachvollziehen.&lt;/p&gt;
&lt;p&gt;Als passionierter Rust-Entwickler freue ich mich natürlich über die Wahl von Rust als Programmiersprache, da ich mich zum einen selbst als Contributor beteiligen kann aber auch, weil es dem Rust-Universum noch mehr Vielfalt schenkt.
Da Rust seine Wurzeln bei Mozilla hat, ist es meiner Meinung nach eine naheliegende Wahl für einen Browser.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Rust
    &lt;div id=&#34;rust&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#rust&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;

&lt;h3 class=&#34;relative group&#34;&gt;State of Rust Survey 2025
    &lt;div id=&#34;state-of-rust-survey-2025&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#state-of-rust-survey-2025&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Die Ergebnisse der diesjährigen Umfrage sind da: 7.156 Antworten und damit etwas weniger als im Vorjahr &lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Inhaltlich gibt es wenig Überraschung.
Langsame Compile-Zeiten und hoher Speicherverbrauch bleiben die meistgenannten Kritikpunkte.&lt;br&gt;
Positiv fiel auf, dass lang ersehnte Features wie Let Chains und Async Closures gut ankommen.&lt;/p&gt;
&lt;p&gt;Ganz oben auf der Wunschliste stehen: Generic Const Expressions und verbesserte Trait-Methoden.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Debugging Survey 2026
    &lt;div id=&#34;debugging-survey-2026&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#debugging-survey-2026&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Direkt aus den Ergebnissen der State of Rust Survey heraus hat das Compiler Team nachgehakt. &lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt;
Debugging taucht regelmäßig als eines der größten Ärgernisse auf.&lt;/p&gt;
&lt;p&gt;Von inkonsistenter Unterstützung über verschiedene Debugger (GDB, LLDB, CDB) und Betriebssysteme bis hin zu fehlendem First-Class-Support für Async-Code.&lt;/p&gt;
&lt;p&gt;Die Umfrage läuft bis 13. März, wer also Rust aktiv nutzt und einen Einfluß auf dessen Zukunft nehmen möchte, sollte teilnehmen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-3&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-3&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Rust zieht sich durch diese Ausgabe des Quelltext wie ein rostroter Faden.&lt;/p&gt;
&lt;p&gt;Es freut mich zu sehen, dass Rust in so vielen Projekten ein fester Bestandteil geworden ist und die Rust Foundation regelmäßige Umfragen veranstaltet und daraus auch echte Konsequenzen zieht.
Das schafft meiner Meinung nach Vertrauen und sichert Rust eine hoffentlich lange Zukunft.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Erstellt mit &lt;a href=&#34;https://chatgpt.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ChatGPT&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/docs/kernel/website.git/commit/content/releases.rst?id=d04587da86a3464881e0c97aabddd2c271105698&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Commit von Greg Kroah-Hartman&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://lkml.org/lkml/2026/2/22/297&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Linus Torvalds Ankündigung der neuen Kernel Version&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.system76.com/post/pop-24-04-lts-upgrade&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Ankündigung des Upgrades im System76 Blog&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://ladybird.org/posts/adopting-rust/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Ladybird Blog Artikel zum Umstieg auf Rust&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.rust-lang.org/2026/03/02/2025-State-Of-Rust-Survey-results/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Rust Blog: State of Rust Survey&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:6&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.rust-lang.org/2026/02/23/rust-debugging-survey-2026/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Rust Blog: Debugging Survey&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Empfehlungen: Rustlings</title>
      <link>https://devcartes.de/posts/recommendations/rustlings/</link>
      <pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://devcartes.de/posts/recommendations/rustlings/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Quick Facts
    &lt;div id=&#34;quick-facts&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#quick-facts&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Rustlings&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Typ&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Interaktives Terminal-Lernprogramm&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Sprache&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Englisch&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Preis&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Kostenlos, Open Source (MIT)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Übungen&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;~100&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Zeitaufwand&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;ca. 10–15 Stunden gesamt&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Voraussetzungen&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Grundlegende Programmierkenntnisse&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Link&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;a href=&#34;https://rustlings.rust-lang.org&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;rustlings.rust-lang.org&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Worum geht es
    &lt;div id=&#34;worum-geht-es&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#worum-geht-es&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Rustlings ist eine Sammlung kleiner Übungsaufgaben, die direkt im Terminal läuft.&lt;/p&gt;
&lt;p&gt;Das Konzept ist einfach. Du bekommst Übungsdateien, die entweder nicht kompilieren oder einen Test nicht bestehen.
Deine Aufgabe ist es, den Fehler zu finden und zu beheben.
Rustlings beobachtet dabei die Datei und gibt dir Feedback, sobald du speicherst.&lt;/p&gt;
&lt;p&gt;Das Programm ist ein offizielles Rust-Foundation-Projekt und eng mit dem &lt;a href=&#34;https://doc.rust-lang.org/book/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;offiziellen Rust-Buch&lt;/a&gt; verbunden.
Das Buch erklärt die Konzepte und Rustlings gibt dir die Möglichkeit sie direkt zu üben.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Für wen ist es geeignet
    &lt;div id=&#34;für-wen-ist-es-geeignet&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#f%c3%bcr-wen-ist-es-geeignet&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Reine Anfänger ohne Vorerfahrung werden vermutlich schnell überfordert sein.
Nicht wegen der Aufgaben selbst, sondern weil Konzepte wie Ownership oder das Typsystem vorausgesetzt werden, ohne sie vollständig herzuleiten.&lt;/p&gt;
&lt;p&gt;Rustlings richtet sich an Entwickler*innen, die bereits eine Programmiersprache kennen und Rust von Grund auf lernen möchten.
Auch als Auffrischung funktioniert Rustlings gut. Wer Rust eine Weile nicht aktiv genutzt hat und wieder einsteigen möchte, kann sich gezielt einzelne Kapitel vorknöpfen, ohne von vorne anfangen zu müssen.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Welche Themen werden behandelt
    &lt;div id=&#34;welche-themen-werden-behandelt&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#welche-themen-werden-behandelt&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Rustlings deckt den Großteil der Rust-Grundlagen ab.
Zu jeder Übung gibt es eine oder mehrere Stellen im Buch, die tiefere Erklärungen bieten.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Aufgaben&lt;/th&gt;
          &lt;th&gt;Kapitel im Buch&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;variables&lt;/td&gt;
          &lt;td&gt;§3.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;functions&lt;/td&gt;
          &lt;td&gt;§3.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;if&lt;/td&gt;
          &lt;td&gt;§3.5&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;primitive_types&lt;/td&gt;
          &lt;td&gt;§3.2, §4.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;vecs&lt;/td&gt;
          &lt;td&gt;§8.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;move_semantics&lt;/td&gt;
          &lt;td&gt;§4.1-2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;structs&lt;/td&gt;
          &lt;td&gt;§5.1, §5.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;enums&lt;/td&gt;
          &lt;td&gt;§6, §19.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;strings&lt;/td&gt;
          &lt;td&gt;§8.2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;modules&lt;/td&gt;
          &lt;td&gt;§7&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;hashmaps&lt;/td&gt;
          &lt;td&gt;§8.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;options&lt;/td&gt;
          &lt;td&gt;§10.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;error_handling&lt;/td&gt;
          &lt;td&gt;§9&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;generics&lt;/td&gt;
          &lt;td&gt;§10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;traits&lt;/td&gt;
          &lt;td&gt;§10.2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;lifetimes&lt;/td&gt;
          &lt;td&gt;§10.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;tests&lt;/td&gt;
          &lt;td&gt;§11.1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;iterators&lt;/td&gt;
          &lt;td&gt;§13.2-4&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;smart_pointers&lt;/td&gt;
          &lt;td&gt;§15, §16.3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;threads&lt;/td&gt;
          &lt;td&gt;§16.1-3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;macros&lt;/td&gt;
          &lt;td&gt;§20.5&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;clippy&lt;/td&gt;
          &lt;td&gt;Appendix D&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Quelle: &lt;a href=&#34;https://github.com/rust-lang/rustlings/blob/main/exercises/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Rustlings Github Repository&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Wie lernt man am besten damit
    &lt;div id=&#34;wie-lernt-man-am-besten-damit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#wie-lernt-man-am-besten-damit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der klassische Ansatz, den auch das offizielle Rust-Buch empfiehlt, ist eine Kombination aus beiden Ressourcen parallel:
Kapitel lesen, passende Rustlings-Aufgaben lösen, weiterlesen.
Das Buch erklärt das jeweilige Konzept, Rustlings lässt einen es direkt umsetzen.&lt;/p&gt;
&lt;p&gt;Wer lieber hands-on lernen möchte, kann auch direkt mit Rustlings beginnen und bei Bedarf im Buch oder in der Dokumentation nachschlagen.
Das ist für erfahrene Entwicklerinnen und Entwickler oft der schnellere Weg.&lt;/p&gt;
&lt;p&gt;Meine Empfehlung, nicht gleich die Musterlösung öffnen, sonst nimmt man sich selbst etwas weg.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Persönliches Highlight
    &lt;div id=&#34;persönliches-highlight&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pers%c3%b6nliches-highlight&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Was mich an Rustlings am meisten überzeugt, ist der schnelle Feedback-Loop.
Man spart sich das Aufsetzen eines Projekts, das Schreiben von Boilerplate und das Navigieren durch Compiler-Fehler in fremdem Code.&lt;/p&gt;
&lt;p&gt;Man macht einfach auf, liest den Fehler, denkt nach und schreibt Code.&lt;br&gt;
Oder auch nicht, aber dann weiß man zumindest genau, woran es hängt.&lt;/p&gt;
&lt;p&gt;Außerdem zeigt Rustlings nach jeder gelösten Aufgabe die empfohlene Musterlösung.
Man lernt also nicht nur, den Code zum Laufen zu bringen, sondern auch, wie idiomatisches Rust aussieht.
Und das kann deutlich vom eigenen ersten Ansatz abweichen.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Zum Schluss
    &lt;div id=&#34;zum-schluss&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#zum-schluss&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Rustlings ist kein vollständiger Kurs, ersetzt nicht das eigene Lesen oder gar einen erfahrenen Mentor, aber das will es auch nicht.
Es ist einfach ein wirklich gutes Werkzeug zum Üben.&lt;/p&gt;
&lt;p&gt;Wer Rust lernen möchte und schon etwas Programmiererfahrung hat, findet hier einen schnellen und fundierten Einstieg in die Sprache.
Ich habe es bereits durchgearbeitet und dabei genau das gefunden, was ich gesucht hatte: einen schnellen Wiedereinstieg in Rust.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Erstellt mit &lt;a href=&#34;https://chatgpt.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ChatGPT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Basierend auf „Ferris the Crab“ von Karen Rustad Tölva (Public Domain).&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Quelltext #2 - Sommer, Zen und Berge</title>
      <link>https://devcartes.de/posts/source/summer-zen-mountains/</link>
      <pubDate>Wed, 25 Feb 2026 00:00:00 +0100</pubDate>
      
      <guid>https://devcartes.de/posts/source/summer-zen-mountains/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Quelltext #2
    &lt;div id=&#34;quelltext-2&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#quelltext-2&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Willkommen zum Quelltext #2.&lt;/p&gt;
&lt;p&gt;Diese Woche: ein Sommer voller Open-Source-Möglichkeiten, ein Browser, der gerade Zen-untypisch durch die Decke geht, und Gentoo erklimmt einen Berg.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Google - Summer of Code
    &lt;div id=&#34;google---summer-of-code&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#google---summer-of-code&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Dieses Jahr veranstaltet Google den 22. &lt;strong&gt;Summer of Code (GSoC)&lt;/strong&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Drei Monate lang arbeiten Teilnehmende unter Anleitung erfahrener Mentoren an echten Projekten, für viele der erste echte Berührungspunkt mit Open Source.&lt;/p&gt;
&lt;p&gt;Man kann bei einer erfolgreichen Teilnahme sogar eine Art Stipendium (ich würde es eher Aufwandsentschädigung nennen) bekommen.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Anfang Februar hat Google die Liste der teilnehmenden Organisationen veröffentlicht, darunter OpenSUSE, Gnome, FreeBSD, GNU Project, Debian und viele mehr.&lt;/p&gt;
&lt;p&gt;Die Bewerbungsphase für Contributor startet am 16. März 2026 - wenn du Lust hast mitzumachen, lohnt sich ein Blick in die Projektliste &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ich finde das Format großartig, gerade weil es Menschen ohne Vorkenntnisse einen echten Einstieg ermöglicht.
Und vielleicht sorgt es dafür, dass ein paar mehr Leute merken, auf wie vielen unverzichtbaren Open-Source-Projekten unser aller Alltag eigentlich aufbaut — oft ohne dass wir es wissen.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Linux hat auch ohne Linus eine Zukunft
    &lt;div id=&#34;linux-hat-auch-ohne-linus-eine-zukunft&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#linux-hat-auch-ohne-linus-eine-zukunft&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Das Linux Kernel Projekt hat in seinem Maintainer-Handbuch einen neuen Schlachtplan veröffentlicht, wie zu verfahren ist, sollte der betreuende Maintainer des Mainline-Repositorys, die Rolle nicht mehr erfüllen können oder wollen.&lt;/p&gt;
&lt;p&gt;In diesem Fall wird innerhalb von 72 Stunden von dem Organisator des letzten Maintainer Summits oder dem aktuellen Vorsitzenden der Linux Foundation ein Meeting einberufen, um eine Nachfolgelösung zu finden.&lt;/p&gt;
&lt;p&gt;Innerhalb von zwei Wochen wird das Ergebnis dann per Mailingliste an die gesamte Community verteilt.&lt;/p&gt;
&lt;p&gt;Kein rein theoretisches Szenario — 2018 hat Torvalds bereits eine kurze Auszeit genommen, in der Greg Kroah-Hartman das Release von Linux 4.19 übernommen hat.
Ein echter Nachfolger auf Dauer ist jedoch eine ganz andere Frage.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-1&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-1&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ich finde es gut, dass dieses Thema offen angegangen wird, da es in der Community schon seit Jahren ein Gefühl der Unsicherheit gibt, was mit dem Kernelprojekt passiert, sollte Linus Torvalds mal nicht mehr können oder wollen.&lt;/p&gt;
&lt;p&gt;Ich denke aber auch, dass trotz dieses Notfallplans nicht alle Unsicherheiten ausgeräumt sind — nur die Zeit wird zeigen, was im Ernstfall passiert.
Dennoch hoffe ich, dass Linus Torvalds uns noch lange erhalten bleibt.&lt;/p&gt;
&lt;p&gt;Immerhin hat er dem Linux Kernel vor ca. 35 Jahren Leben eingehaucht und ist seither der &lt;strong&gt;Benevolent Dictator for Life (BDFL)&lt;/strong&gt;&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Gentoo ist jetzt auch auf dem Codeberg
    &lt;div id=&#34;gentoo-ist-jetzt-auch-auf-dem-codeberg&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#gentoo-ist-jetzt-auch-auf-dem-codeberg&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Am 16. Februar hat Gentoo auf Planet Gentoo&lt;sup id=&#34;fnref:5&#34;&gt;&lt;a href=&#34;#fn:5&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;5&lt;/a&gt;&lt;/sup&gt; bekanntgegeben, dass das Projekt nun einen Repository-Mirror auf Codeberg&lt;sup id=&#34;fnref:6&#34;&gt;&lt;a href=&#34;#fn:6&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;6&lt;/a&gt;&lt;/sup&gt; betreibt — und dort auch Contributions eingereicht werden können.&lt;/p&gt;
&lt;p&gt;Gentoo plant, sich sukzessive von GitHub zu lösen — GitHub versuche seine Nutzer zunehmend zur Nutzung von Copilot zu drängen, so Gentoo in ihrem Jahresrückblick 2025.&lt;sup id=&#34;fnref:7&#34;&gt;&lt;a href=&#34;#fn:7&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Willkommen auf dem (Code-)Berg, Gentoo.&lt;/em&gt;&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-2&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-2&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ich finde es gut, dass sich Organisationen wie Gentoo gegen den (KI-)Zwang großer Firmen wehren und diese nachvollziehbaren Konsequenzen daraus ziehen — das stärkt Plattformen wie Codeberg enorm, was wiederum der gesamten Open-Source-Welt zugutekommt.&lt;/p&gt;
&lt;p&gt;Warum ich selbst eines meiner Projekte von Codeberg zu Gitlab umgezogen habe, könnt ihr im Abschnitt &lt;a href=&#34;https://devcartes.de/posts/source/summer-zen-mountains/#umzug-von-codeberg-zu-gitlab&#34; &gt;Umzug von Codeberg zu GitLab&lt;/a&gt; nachlesen.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Zen Browser wächst so schnell wie kein anderer
    &lt;div id=&#34;zen-browser-wächst-so-schnell-wie-kein-anderer&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#zen-browser-w%c3%a4chst-so-schnell-wie-kein-anderer&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;In einer neuen Github Statistik, veröffentlicht am 18. Februar 2026, ist der Zen Browser auf Platz 1 in der Kategorie &amp;ldquo;Das am schnellsten wachsende Open-Source-Projekt, gemessen an der Anzahl von Contributor&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Der Zen Browser basiert auf Firefox, hat jedoch einige deutliche Veränderungen im Bereich der GUI vorgenommen, unter anderem vertikale Tabs, Tabs-Kacheln und die sogenannten Zen Mods.
Diese mutigen Neuerungen im eher konservativen Browser-Bereich kommen bei vielen Nutzern gut an.&lt;/p&gt;
&lt;p&gt;Der rasante Zuwachs könnte darauf zurückzuführen sein, dass der Browser Arc keine Weiterentwicklung mehr erfährt.
Hinzu kommt, dass Firefox im vergangenen Jahr mit negativen Schlagzeilen zu kämpfen hatte — unter anderem die Kontroverse um die geänderten Nutzungsbedingungen, in denen das Versprechen gestrichen wurde, Nutzerdaten niemals zu verkaufen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-3&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-3&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ich nutze den Zen Browser als Alternative zum Firefox und mag besonders die vertikalen Tabs, die Datenschutzversprechen und die schnelle Entwicklung neuer Funktionen und Bugfixes.&lt;/p&gt;
&lt;p&gt;Genau diese Art Open-Source-Projekt zeigt, dass man auch auf einem hart umkämpften Markt noch etwas Neues schaffen und aus einer Nische heraus eine Erfolgsgeschichte schreiben kann.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Persönliches
    &lt;div id=&#34;persönliches&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pers%c3%b6nliches&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Umzug von Codeberg zu GitLab
    &lt;div id=&#34;umzug-von-codeberg-zu-gitlab&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#umzug-von-codeberg-zu-gitlab&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Mitte letzter Woche habe ich meine Webseite von Codeberg nach GitLab umgezogen — Codeberg Pages sind noch nicht ganz so ausgereift, und die Downtime ist spürbar höher.&lt;/p&gt;
&lt;p&gt;Für meine privaten Open-Source-Projekte bleibt Codeberg trotzdem die erste Wahl — der Umzug war pragmatisch und kein Abschied.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Erstellt mit &lt;a href=&#34;https://chatgpt.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ChatGPT&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://summerofcode.withgoogle.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Google Summer of Code&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://developers.google.com/open-source/gsoc/help/student-stipends&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Contributor Stipendien for 2026&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://summerofcode.withgoogle.com/programs/2026/organizations&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Teilnehmende Orgnisationen beim GSoC&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://de.wikipedia.org/wiki/Benevolent_Dictator_for_Life&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Benevolent Dictator for Life&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:5&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gentoo.org/news/2026/02/16/codeberg.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Planet Gentoo - Gentoo on Codeberg&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:5&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:6&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://codeberg.org/gentoo/gentoo&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Gentoo Repository auf Codeberg&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:6&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:7&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gentoo.org/news/2026/01/05/new-year.html?pubDate=20260217&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;2025 in retrospect &amp;amp; happy new year 2026!&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:7&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Quelltext #1 - Grüner Tee &amp; Discord-Exodus</title>
      <link>https://devcartes.de/posts/source/green-tea/</link>
      <pubDate>Wed, 18 Feb 2026 00:00:00 +0100</pubDate>
      
      <guid>https://devcartes.de/posts/source/green-tea/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;Worum geht es in dieser Serie
    &lt;div id=&#34;worum-geht-es-in-dieser-serie&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#worum-geht-es-in-dieser-serie&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Es gibt jede Woche mehr interessante Entwicklungen in der Open-Source-Welt, als ich in einem Artikel unterbringen könnte – aber ich versuche es trotzdem.
In dieser Serie fasse ich zusammen, was mich in der jeweiligen Woche beschäftigt hat: neue Releases, kontroverse Entscheidungen, Trends, die sich langsam abzeichnen.&lt;br&gt;
Der Blickwinkel ist immer mein eigener – subjektiv, manchmal meinungsstark, aber immer neugierig.
Wer einen nüchternen Newsfeed sucht, wird woanders besser bedient. Wer wissen will, was einen Linux-affinen Entwickler gerade umtreibt, ist hier richtig.&lt;/p&gt;
&lt;p&gt;Den Namen &lt;strong&gt;Quelltext&lt;/strong&gt; habe ich gewählt, weil er für mich zwei Dinge auf einmal beschreibt:
die Welt, über die ich schreibe – Software, Code, Open Source – und das, was diese Serie sein soll:
verlässliche Informationen, aber auch ein Einblick in das, was diese Themen in mir auslösen.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Cosmic Desktop - Epoch 2 &amp;amp; 3 Roadmap vorgestellt
    &lt;div id=&#34;cosmic-desktop---epoch-2--3-roadmap-vorgestellt&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#cosmic-desktop---epoch-2--3-roadmap-vorgestellt&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;System 76 haben ihre Roadmap für den Cosmic Desktop&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; der nächsten 12 - 18 Monate vorgestellt.
Der Cosmic Desktop ist als Rolling Release geplant, daher sollen fertiggestellte Features wochenweise verteilt werden.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Highlights - Epoch 2
    &lt;div id=&#34;highlights---epoch-2&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#highlights---epoch-2&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Bereich&lt;/th&gt;
          &lt;th&gt;Änderungen&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Performance &amp;amp; Rendering&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Reaktives Rendering (60–80 % weniger CPU), neuer Vulkan Renderer, Gaming‑Optimierungen&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Desktop &amp;amp; Workflow&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;libcosmic‑Rewrite, IME, Animationen, Hot Reloading, Time‑Travel Debugging, Clipboard‑Manager, COSMIC Sync&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Look &amp;amp; Feel&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Live Wallpapers, neue Shortcuts, Accessibility‑Upgrades&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Highlights - Epoch 3
    &lt;div id=&#34;highlights---epoch-3&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#highlights---epoch-3&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Bereich&lt;/th&gt;
          &lt;th&gt;Änderungen&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Animationen &amp;amp; Workspace&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Flüssigere Workspace‑Übergänge, verbesserter App‑Launcher, Feinschliff bei Animationen&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Display &amp;amp; Input&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;HDR, Night Light, Gamepad‑Support, Touchpad‑Gesten, Session Restore&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Theming&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Neues Theming‑System, Shader‑Anpassungen, automatisches Theme‑Matching&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Apps&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Verbesserungen an COSMIC Files, Store, Player und Edit; Flatpak‑Permissions‑GUI; Fingerprint‑Support&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Das Linux-Ökosystem lebt von Vielfalt – und Cosmic ist dafür ein besonders spannendes Beispiel: modern, durchdacht, und noch mitten in der Entwicklung.&lt;/p&gt;
&lt;p&gt;Seit einigen Wochen nutze ich Cosmic selbst als täglichen Treiber und kenne seine aktuellen Schwächen daher aus erster Hand.&lt;/p&gt;
&lt;p&gt;Umso gespannter bin ich auf das, was die Roadmap verspricht.
Ganz oben auf meiner persönlichen Wunschliste stehen die &lt;strong&gt;Performance-Verbesserungen: 60–80 % weniger CPU-Last&lt;/strong&gt;, das ist bei einem so jungen Projekt sicherlich nicht ungewöhnlich und doch wäre das ein riesiger Sprung.&lt;br&gt;
Dazu kommt der &lt;strong&gt;Clipboard-Manager&lt;/strong&gt;, dessen Fehlen mich im Alltag doch etwas stört, und die Verbesserungen an &lt;strong&gt;COSMIC Files&lt;/strong&gt;, das durchaus noch einige Features vermissen lässt.&lt;br&gt;
Für mein Setup freue ich mich außerdem auf den &lt;strong&gt;Vulkan Renderer&lt;/strong&gt;, der nochmal bessere Performance verspricht, vor allem für AMD Grafikkarten.
Und zu guter Letzt &lt;strong&gt;Night Light&lt;/strong&gt;, was ich unter KDE immer gerne genutzt habe.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Go 1.26 Release
    &lt;div id=&#34;go-126-release&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#go-126-release&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Go 1.26&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; bringt eine Mischung aus Sprachverbesserungen, Performance‑Upgrades und neuen Tools – und einige davon werden den Alltag vieler Entwickler spürbar verändern.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Go 1.26 – Highlights
    &lt;div id=&#34;go-126--highlights&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#go-126--highlights&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Bereich&lt;/th&gt;
          &lt;th&gt;Änderungen&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Sprache&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;new()&lt;/code&gt; akzeptiert Ausdrücke; Generics erlauben selbstreferenzierende Type‑Parameter&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Green Tea GC standardmäßig aktiv; 30 % weniger cgo‑Overhead; mehr Stack‑Allokationen&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Neues &lt;code&gt;go fix&lt;/code&gt; mit Modernizers; Inline‑Analyzer; neue Crypto‑Pakete (&lt;code&gt;hpke&lt;/code&gt;, &lt;code&gt;mlkem&lt;/code&gt;, &lt;code&gt;cryptotest&lt;/code&gt;)&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-1&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-1&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Technisch am interessantesten finde ich den „Green Tea&amp;quot; Garbage Collector.
Die Kernidee – seitenweise statt objektweise arbeiten – klingt simpel, aber der offizielle Blogartikel der Go-Entwickler zeigt, wie viel Arbeit dahinter steckt: von den Microarchitektur-Problemen des klassischen Mark-Sweep-Algorithmus bis hin zur AVX-512-Vektorisierung.&lt;/p&gt;
&lt;p&gt;Wer sich für die Details interessiert, dem empfehle ich einen Blick in &lt;a href=&#34;https://go.dev/blog/greenteagc&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;The Green Tea Garbage Collector&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Gefreut hat mich auch das neue &lt;code&gt;go fix&lt;/code&gt;. Automatische Code-Migrationen klingen unspektakulär, sind aber für größere oder langlebige Projekte ein richtig nützliches Feature.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Godot Engine 4.6 Release
    &lt;div id=&#34;godot-engine-46-release&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#godot-engine-46-release&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Godot 4.6 ist erschienen&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; – und das Release-Motto &amp;ldquo;It’s all about your flow&amp;rdquo; trifft es gut. Es geht weniger um neue Kernfeatures als viel mehr um &amp;ldquo;Quality-of-Life‑Features&amp;rdquo;.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Godot 4.6 – Highlights
    &lt;div id=&#34;godot-46--highlights&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#godot-46--highlights&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Bereich&lt;/th&gt;
          &lt;th&gt;Änderungen&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Editor &amp;amp; Workflow&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Neues Docking‑System, floatbare Panels, Modern Theme, Drag‑and‑hover Tab‑Switching, klickbare Fehlermeldungen&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Physics&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Jolt Physics als Standard für neue 3D‑Projekte&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Rendering &amp;amp; Animation&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;SSR‑Overhaul, neues IK‑Framework (TwoBoneIK, FABRIK, CCDIK)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Architektur&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;LibGodot als einbettbare Library; Unique Node IDs für robustere Refactorings&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-2&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-2&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ich verfolge Godot seit Jahren und nutze es regelmäßig für kleine Projekte. Genau deshalb freue ich mich über die großartige Arbeit, die das Team und die Community hier leistet.&lt;/p&gt;
&lt;p&gt;Das neue Docking-System ist so ein Fall.
Wer viel im Editor arbeitet, kennt das: Man arrangiert seine Panels, öffnet ein neues Fenster, und plötzlich ist alles verschoben.
Floatbare Panels klingen unspektakulär, sind aber ein echter Qualitätsgewinn.&lt;/p&gt;
&lt;p&gt;Dazu kommt das neue „Modern&amp;quot; Theme, nach Jahren mit dem gleichen Editor-Look ist das eine willkommene Auffrischung.
Ein Interface, das gut aussieht, macht für mich tatsächlich einen Unterschied: Man verbringt viel Zeit darin und ein aufgeräumtes, modernes Design senkt unterschwellig die kognitive Last.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Filen – Änderung bei kostenlosen Accounts
    &lt;div id=&#34;filen--änderung-bei-kostenlosen-accounts&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#filen--%c3%a4nderung-bei-kostenlosen-accounts&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Filen, der datenschutzorientierte Cloud-Speicher, führt eine Änderung bei der Registrierung neuer kostenloser Accounts ein.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Was ändert sich
    &lt;div id=&#34;was-ändert-sich&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#was-%c3%a4ndert-sich&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Neue Accounts erhalten die kostenlosen 10 GB nur noch, wenn die Registrierungs-IP wie ein normaler Consumer-Anschluss aussieht.
VPN-Nutzer können weiterhin einen Account erstellen, starten aber ohne freien Speicher – es sei denn, sie upgraden.
Bestehende Accounts sind nicht betroffen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Warum
    &lt;div id=&#34;warum&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#warum&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Filen begründet den Schritt mit einem starken Anstieg von Missbrauch: automatisierte Massenaccounts, kriminelle Nutzung und VPN-basierte Multi-Accounting-Netzwerke haben das Ausmaß erreicht, wo es den Dienst und reguläre Nutzer spürbar belastet. Abuse-Reports, Reputationsrisiken und DNS-Blocklisten wie Quad9 sind die konkreten Folgen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Meine Meinung
    &lt;div id=&#34;meine-meinung-3&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#meine-meinung-3&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;Ich finde die Entscheidung nachvollziehbar.
Filen positioniert sich als Privacy-First-Dienst und genau das macht den Missbrauch durch VPN-Netzwerke so attraktiv.
Filen steht vor der Wahl, entweder den Dienst gefährden oder gezielt eingreifen.&lt;/p&gt;
&lt;p&gt;Die Lösung ist ein Kompromiss, aber ein fairer.
VPN-Nutzer werden nicht ausgesperrt, sie verlieren nur den automatischen Anspruch auf kostenlosen Speicher.
Wer Filen ernsthaft nutzen möchte, kann das weiterhin mit oder ohne VPN.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Flathub-Trends: Auf der Suche nach Discord-Alternativen
    &lt;div id=&#34;flathub-trends-auf-der-suche-nach-discord-alternativen&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#flathub-trends-auf-der-suche-nach-discord-alternativen&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Die aktuellen Flathub-Trends zeigen einen auffälligen Schwerpunkt: Revolt (jetzt Stoat), Element, FluffyChat, Cinny und sogar TeamSpeak tauchen prominent auf – alles Messenger und Kommunikationsplattformen, die als Discord-Alternativen gehandelt werden.
Das kommt nicht von ungefähr.&lt;/p&gt;
&lt;p&gt;Discord hat kürzlich einschneidende Änderungen angekündigt, die in einigen Ländern bereits umgesetzt werden.
Ab März sollen alle Nutzer standardmäßig als „Teen&amp;quot; eingestuft werden, mit entsprechend eingeschränkten Funktionen.
Wer nachweisen möchte, dass er volljährig ist, muss sich per Ausweis verifizieren.&lt;/p&gt;
&lt;p&gt;Das wirft berechtigte Fragen auf.
Discord ist kein Dienst, der für Transparenz oder Datenschutz bekannt ist und die Datenleaks der letzten Jahre liegen noch nicht lange zurück.
Die Kombination aus Ausweispflicht und einer Plattform mit fragwürdiger Sicherheitsbilanz ist für viele Nutzer schwer zu akzeptieren.&lt;/p&gt;
&lt;p&gt;Vielleicht ist genau das der Moment, um offene Alternativen ernsthafter zu testen.
Die Flathub-Zahlen legen nahe, dass einige Nutzer damit bereits losgelegt haben.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Schluss
    &lt;div id=&#34;schluss&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#schluss&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Das war die erste Ausgabe von Quelltext. Was die nächste Woche bringt, weiß ich noch nicht, aber die Open Source Welt ist immer in Bewegung und so bin ich mir sicher, dass es auch nächste Woche wieder Interessantes zu berichten gibt.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Quellenangaben
    &lt;div id=&#34;quellenangaben&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#quellenangaben&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;!-- Add your attributions here, for example:
- Image: [Source Name](URL) - License
- Quote: [Author Name](URL)
- Inspiration: [Source](URL)
--&gt;
&lt;ul&gt;
&lt;li&gt;Vorschaubild: Erstellt mit &lt;a href=&#34;https://chatgpt.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ChatGPT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.system76.com/post/cosmic-epoch-2-and-3-roadmap&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://blog.system76.com/post/cosmic-epoch-2-and-3-roadmap&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://go.dev/blog/go1.26&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://go.dev/blog/go1.26&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://godotengine.org/releases/4.6/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://godotengine.org/releases/4.6/&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Empfehlungen: The Nature of Code</title>
      <link>https://devcartes.de/posts/recommendations/nature-of-code/</link>
      <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>https://devcartes.de/posts/recommendations/nature-of-code/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Quick Facts:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Autor:&lt;/strong&gt; Daniel Shiffman&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Veröffentlichung:&lt;/strong&gt; 3. September 2024 (zweite Edition)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Umfang:&lt;/strong&gt; ca. 500 Seiten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Format:&lt;/strong&gt; Online frei verfügbar + Printversion&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Programmierer, Artists&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href=&#34;https://natureofcode.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;natureofcode.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ISBN-10:&lt;/strong&gt; 1718503709&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ISBN-13:&lt;/strong&gt; 978-1718503700&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Worum geht es?
    &lt;div id=&#34;worum-geht-es&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#worum-geht-es&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Daniel Shiffman beschreibt sein Buch in der Einleitung wie folgt:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;hellip; exploring the unpredictable evolutionary and emergent properties of nature in software via the creative coding framework Processing &amp;hellip;&lt;/p&gt;
&lt;p&gt;Daniel Shiffman&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Sinngemäß: Das Buch erforscht, wie emergente und evolutionäre Phänomene aus der Natur durch Code lebendig gemacht werden können – umgesetzt mit dem Creative-Coding-Framework Processing.&lt;/p&gt;
&lt;p&gt;Konkret bedeutet das: Du lernst, wie Schwerkraft, Schwärme, Fraktale, zelluläre Automaten und andere natürliche Systeme programmiert werden.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Für wen ist das Buch?
    &lt;div id=&#34;für-wen-ist-das-buch&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#f%c3%bcr-wen-ist-das-buch&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ideal für:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creative Coder, die ihre Arbeiten mit echten Naturphänomenen anreichern möchten&lt;/li&gt;
&lt;li&gt;Entwickler, die Mathematik und Physik endlich &lt;em&gt;verstehen&lt;/em&gt; statt nur auswendig lernen wollen&lt;/li&gt;
&lt;li&gt;Studierende, die generative Kunst, Simulationen oder Game-Physics interessant finden&lt;/li&gt;
&lt;li&gt;Alle, die bei &lt;a href=&#34;https://www.youtube.com/@TheCodingTrain&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;The Coding Train&lt;/a&gt; auf YouTube hängengeblieben sind (über diesen Kanal wird es vermutlich nochmal einen separaten Empfehlungsartikel geben)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Du solltest mitbringen:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grundkenntnisse in JavaScript oder einer ähnlichen Programmiersprache&lt;/li&gt;
&lt;li&gt;Neugierde auf Mathematik und Physik (Vorkenntnisse nicht nötig!)&lt;/li&gt;
&lt;li&gt;Lust, Code auszuprobieren und zu experimentieren&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Eher nicht geeignet, wenn:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Du noch nie programmiert hast&lt;/li&gt;
&lt;li&gt;Du trockene, akademische Lehrbücher bevorzugst&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Was behandelt das Buch?
    &lt;div id=&#34;was-behandelt-das-buch&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#was-behandelt-das-buch&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The Nature of Code&lt;/strong&gt; ist in elf Kapitel gegliedert, die aufeinander aufbauen, aber auch einzeln gelesen werden können.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Teil 1 - Unbelebte Objekte
    &lt;div id=&#34;teil-1---unbelebte-objekte&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#teil-1---unbelebte-objekte&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;0 - Zufall&lt;/strong&gt; - Verschieden Arten von Zufall&lt;br&gt;
&lt;strong&gt;1 - Vektoren&lt;/strong&gt; – Die Grundlage für Bewegung und Position im Raum&lt;br&gt;
&lt;strong&gt;2 - Kräfte&lt;/strong&gt; – Gravitation, Reibung, Wind und wie Objekte darauf reagieren&lt;br&gt;
&lt;strong&gt;3 - Oszillation&lt;/strong&gt; – Pendel, Wellen und trigonometrische Bewegungen&lt;br&gt;
&lt;strong&gt;4 - Partikelsysteme&lt;/strong&gt; – Feuer, Rauch, Regen und andere Effekte&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Teil 2 - Es lebt
    &lt;div id=&#34;teil-2---es-lebt&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#teil-2---es-lebt&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;5 - Autonome Agenten&lt;/strong&gt; – Wie Objekte Entscheidungen treffen und sich verhalten&lt;br&gt;
&lt;strong&gt;6 - Physik-Engines&lt;/strong&gt; – Integration von Box2D für realistische Kollisionen&lt;br&gt;
&lt;strong&gt;7 - Zelluläre Automaten&lt;/strong&gt; – Conway&amp;rsquo;s Game of Life und ähnliche Systeme&lt;br&gt;
&lt;strong&gt;8 - Fraktale&lt;/strong&gt; – Selbstähnliche Muster und rekursive Strukturen&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;Teil 3 - Intelligenz
    &lt;div id=&#34;teil-3---intelligenz&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#teil-3---intelligenz&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;9 - Evolutionäre Algorithmen&lt;/strong&gt; – Genetische Algorithmen und künstliche Selektion&lt;br&gt;
&lt;strong&gt;10 - Neuronale Netze&lt;/strong&gt; – Grundlagen von Machine Learning&lt;br&gt;
&lt;strong&gt;11 - Neuroevolution&lt;/strong&gt; - Wie neuronale Netze durch Evolution lernen&lt;/p&gt;
&lt;p&gt;Jedes Kapitel erklärt die &lt;strong&gt;mathematischen Grundlagen&lt;/strong&gt;, zeigt &lt;strong&gt;lauffähigen Code&lt;/strong&gt; (in p5.js/JavaScript) und bietet &lt;strong&gt;Übungen zum Experimentieren&lt;/strong&gt;. Alle Beispiele sind online interaktiv verfügbar.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Warum lohnt sich das Buch?
    &lt;div id=&#34;warum-lohnt-sich-das-buch&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#warum-lohnt-sich-das-buch&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Drei Gründe, warum ich dieses Buch jedem empfehle:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Es verändert, wie du Mathematik siehst&lt;/strong&gt;&lt;br&gt;
Plötzlich sind Vektoren keine abstrakten Pfeile mehr, sondern Bewegung. Sinus und Cosinus werden zu Wellen. Matrizen zu Transformationen. Du &lt;em&gt;verstehst&lt;/em&gt; statt nur anzuwenden.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Daniel Shiffman ist ein Ausnahme-Lehrer&lt;/strong&gt;&lt;br&gt;
Seine Begeisterung ist ansteckend. Er erklärt nicht nur &lt;em&gt;was&lt;/em&gt;, sondern &lt;em&gt;warum&lt;/em&gt;. Jedes Kapitel fühlt sich an wie eine spannende Entdeckungsreise, nicht wie trockener Unterricht.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Es ist ein Türöffner&lt;/strong&gt;&lt;br&gt;
Die Techniken aus dem Buch brauchst du überall: Spieleentwicklung, Datenvisualisierung, Simulationen, generative Kunst, Machine Learning. Es ist eine Investition, die sich vielfach auszahlt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Zusatz:&lt;/strong&gt; Es kostet nichts, alle Beispiele sind interaktiv, und die Community ist riesig und hilfsbereit.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Wie liest man es am besten?
    &lt;div id=&#34;wie-liest-man-es-am-besten&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#wie-liest-man-es-am-besten&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Daniel Shiffman gibt in der Einleitung eine klare Empfehlung.
Behandle das Buch wie einen Lehrplan und arbeite es über mehrere Wochen hinweg durch.&lt;/p&gt;
&lt;p&gt;Besondere Betonung liegt auf &lt;strong&gt;durcharbeiten&lt;/strong&gt;, nicht nur lesen! Die Code Beispiele solltest du abtippen, erweitern und damit experimentieren.&lt;/p&gt;
&lt;p&gt;Manche Kapitel schaffst du locker in einer Woche, für andere solltest du dir mehr Zeit lassen – je nachdem, wie tief du einsteigen möchtest.&lt;/p&gt;
&lt;p&gt;Zum Programmieren nutzt du am besten den Browser und p5.js.&lt;/p&gt;
&lt;p&gt;Wenn du zusätzlich Videos zum Lernen möchtest, kannst du dir Daniels Kanal &lt;a href=&#34;https://www.youtube.com/@TheCodingTrain&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;The Coding Train&lt;/a&gt; auf Youtube anschauen.
Hier gibt es alle Kapitel nochmal in Videoform und viele Erweiterungen zu den einzelnen Themen.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Verfügbarkeit
    &lt;div id=&#34;verfügbarkeit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#verf%c3%bcgbarkeit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Das Buch ist online kostenlos verfügbar direkt auf der Seite von &lt;a href=&#34;https://natureofcode.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;The Nature of Code&lt;/a&gt; oder zum selbst erstellen unter &lt;a href=&#34;https://github.com/nature-of-code&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Zudem kann man es als Printausgabe bestellen.
Ich habe meine Version beispielsweise bei Thalia bestellt.&lt;/p&gt;
&lt;p&gt;Es ist außerdem bei &lt;a href=&#34;https://nostarch.com/nature-code&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;no starch press&lt;/a&gt; erhältlich, in Deutschland allerdings nicht versandkostenfrei.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Persönliches Highlight
    &lt;div id=&#34;persönliches-highlight&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pers%c3%b6nliches-highlight&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Mein persönliches Highlight, ist das Kapitel 9 über die evolutionären Systeme.
Es zeigt, wie man mit relativ wenig Code sehr mächtige und intelligent wirkende Programme realisieren kann.&lt;/p&gt;
&lt;p&gt;Außerdem ist die Art und Weise wie Daniel das Wissen vermittelt einmalig.
Man spürt wie viel Spaß ihm die Materie aber auch das Unterrichten macht.&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Zum Schluss
    &lt;div id=&#34;zum-schluss&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#zum-schluss&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The Nature of Code&lt;/strong&gt; ist ein Buch, das man nicht einfach liest, sondern man erlebt es.
Jedes Kapitel öffnet neue Türen und zeigt, wie viel Schönheit in Mathematik und Code steckt.&lt;/p&gt;
&lt;p&gt;Dinge die nach Chaos aussehen, können einfachen Regeln folgen und genau das macht die Faszination für dieses Buch aus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mein Tipp für den Einstieg:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lies Kapitel 1-3 der Reihe nach, für die wichtigsten Grundlagen&lt;/li&gt;
&lt;li&gt;Spring dann zu den  Themen, die dich am meisten interessieren&lt;/li&gt;
&lt;li&gt;Experimentiere und baue eigene Projekte&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hinter Daniel Shiffman steht eine große, freundliche und hilfsbereite Community, also trau dich ruhig Fragen zu stellen.&lt;/p&gt;
&lt;p&gt;Ich wünsche dir viel Freude beim Programmieren, ich hatte und habe sie noch heute mit dem Buch.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Quellenangaben
    &lt;div id=&#34;quellenangaben&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#quellenangaben&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;!-- Add your attributions here, for example:
- Image: [Source Name](URL) - License
- Quote: [Author Name](URL)
- Inspiration: [Source](URL)
--&gt;
&lt;ul&gt;
&lt;li&gt;Vorschaubild: &lt;a href=&#34;https://www.freepik.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;freepik&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Zitat &amp;ldquo;Worum geht es?&amp;rdquo;: &lt;a href=&#34;https://natureofcode.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;The Nature of Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Git-Workflow mit skalierbarer Qualitätssicherung</title>
      <link>https://devcartes.de/posts/gate-based-git-workflow/</link>
      <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>https://devcartes.de/posts/gate-based-git-workflow/</guid>
      <description>&lt;p&gt;Moderne Softwareentwicklung benötigt klare, reproduzierbare und teamtaugliche Prozesse. Gerade kleine und mittlere Teams profitieren von einem Workflow, der Stabilität gewährleistet, ohne unnötige Komplexität einzuführen.&lt;br&gt;
Der folgende Git‑Workflow hat sich in realen Projekten bewährt und ist darauf ausgelegt, Qualität, Transparenz und Deployment‑Sicherheit sicherzustellen.&lt;/p&gt;
&lt;p&gt;Kein Overhead, keine unnötigen Sonderregeln, aber klare Leitlinien für ein professionelles Arbeiten.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Zielsetzung
    &lt;div id=&#34;zielsetzung&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#zielsetzung&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der Workflow verfolgt das Ziel, einen stabilen, nachvollziehbaren und automatisierbaren Entwicklungsprozess zu etablieren.&lt;/p&gt;
&lt;p&gt;Er sorgt dafür, dass:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Codequalität gesichert ist&lt;/strong&gt;, weil Reviews, Tests und CI‑Checks verpflichtend sind.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deployments reproduzierbar bleiben&lt;/strong&gt;, da jeder Schritt dokumentiert und automatisiert ist.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feature‑Entwicklung und Release‑Management getrennt&lt;/strong&gt; voneinander stattfinden, was Risiken reduziert.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Teams effizient arbeiten&lt;/strong&gt;, weil der Prozess klar strukturiert ist und keine unnötigen Entscheidungen erfordert.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Damit eignet sich der Workflow besonders für Teams, die Wert auf Stabilität legen, aber nicht in komplexe Git‑Flow‑Varianten abgleiten möchten.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Permanente Branch‑Struktur
    &lt;div id=&#34;permanente-branchstruktur&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#permanente-branchstruktur&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der Prozess basiert auf drei dauerhaften Branches, die klar definierte Rollen haben:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;main&lt;/strong&gt; – stabiler Integrationsbranch für getesteten, reviewten Code. Er repräsentiert den aktuellen Entwicklungsstand, der jederzeit deploybar ist.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;staging&lt;/strong&gt; – dient als QA‑, UAT‑ und Integrationsumgebung. Hier wird geprüft, ob der Code nicht nur technisch, sondern auch fachlich korrekt funktioniert.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;production&lt;/strong&gt; – enthält ausschließlich den Code, der live im Produktivsystem läuft.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Diese Struktur vermeidet unnötige Branch‑Hierarchien: Entwicklung auf main, Validierung auf staging, Live-Betrieb auf production.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Branch Policies
    &lt;div id=&#34;branch-policies&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#branch-policies&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Auf allen permanenten Branches gelten verbindliche Richtlinien, die die Qualität und Nachvollziehbarkeit sichern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pull Requests sind verpflichtend&lt;/strong&gt; – kein Code gelangt ohne Review in einen permanenten Branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direkte Pushes sind verboten&lt;/strong&gt; – verhindert unkontrollierte Änderungen und schützt die Stabilität.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mindestens ein Reviewer&lt;/strong&gt; – fördert Wissenstransfer und reduziert Fehler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Erfolgreiche Build‑Pipeline&lt;/strong&gt; – verhindert, dass fehlerhafter Code integriert wird.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verlinkung eines Work Items&lt;/strong&gt; – stellt sicher, dass jede Änderung einen fachlichen oder technischen Kontext hat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conventional Commits&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/strong&gt; – sorgen für konsistente Commit‑Nachrichten und erleichtern Release Notes, Changelogs und Automatisierung.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Diese Kombination aus Policies mag auf den ersten Blick streng erscheinen, doch genau das schafft die Grundlage für professionelles Arbeiten. Sie verhindert nicht nur technische Fehler, sondern etabliert eine Kultur der gemeinsamen Verantwortung: Code wird nicht mehr isoliert geschrieben, sondern im Team validiert. Die Verknüpfung mit Work Items stellt sicher, dass keine &amp;ldquo;Geisteränderungen&amp;rdquo; entstehen, deren Zweck später niemand mehr nachvollziehen kann. Und Conventional Commits machen aus der Versionshistorie ein maschinenlesbares Protokoll, das automatisierte Prozesse erst möglich macht.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Feature‑Branches
    &lt;div id=&#34;featurebranches&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#featurebranches&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Die eigentliche Entwicklung findet ausschließlich auf kurzlebigen (wenige Tage) Branches statt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feature/*&lt;/code&gt; – neue Features&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fix/*&lt;/code&gt; – kleinere Fehlerbehebungen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hotfix/*&lt;/code&gt; – dringende Korrekturen für staging oder production&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die Basis ist immer &lt;strong&gt;main&lt;/strong&gt;, um sicherzustellen, dass neue Arbeit auf dem aktuellen Stand beginnt.&lt;/p&gt;
&lt;p&gt;In der Praxis bedeutet das: Ein Feature-Branch wird erstellt, sobald die Arbeit an einem Work Item beginnt, und gelöscht, sobald der Code in main gemerged wurde. Die Benennung folgt einem klaren Muster: &lt;code&gt;feature/WORKITEM-123-kurze-beschreibung&lt;/code&gt; macht auf einen Blick deutlich, worum es geht. Feature-Branches sollten klein bleiben: maximal 3-5 Tage, besser kürzer. Das minimiert Merge-Konflikte und hält Reviews handhabbar. Ein Branch, der wochenlang existiert, ist ein Warnsignal: Entweder ist das Work Item zu groß geschnitten, oder es fehlt an Priorisierung.&lt;/p&gt;
&lt;p&gt;Kurzlebige Branches reduzieren nicht nur technische Risiken, sondern fördern auch einen kontinuierlichen Entwicklungsrhythmus. Wer täglich kleine, abgeschlossene Änderungen integriert, vermeidet die gefürchteten &amp;ldquo;Mega-Merges&amp;rdquo; am Ende eines Sprints.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Merge‑Request‑Flow
    &lt;div id=&#34;mergerequestflow&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#mergerequestflow&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der Merge-Prozess ist das Herzstück des Workflows. Er verbindet menschliche Kontrolle mit automatisierter Qualitätssicherung und stellt sicher, dass main jederzeit stabil bleibt.&lt;/p&gt;
&lt;p&gt;Der Ablauf ist schlank:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Feature‑Branch von main erstellen&lt;/li&gt;
&lt;li&gt;Entwicklung und Push → CI führt Build und Tests aus&lt;/li&gt;
&lt;li&gt;Pull Request in Richtung main&lt;/li&gt;
&lt;li&gt;Pipeline muss erfolgreich sein&lt;/li&gt;
&lt;li&gt;Code Review&lt;/li&gt;
&lt;li&gt;Merge in main&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Dieser Flow mag simpel erscheinen, doch seine Stärke liegt in der Konsequenz: Kein Schritt kann übersprungen werden. Die CI-Pipeline fungiert als erster Filter – schlägt der Build fehl oder brechen Tests, wird der Pull Request nicht einmal zur Review freigegeben. Das spart den Reviewern Zeit und verhindert, dass offensichtlich fehlerhafter Code diskutiert werden muss.&lt;/p&gt;
&lt;p&gt;Das Code Review selbst ist nicht nur eine technische Kontrolle, sondern auch ein Moment des Wissenstransfers. Reviewer lernen neue Codebereiche kennen, Entwickler erhalten Feedback zu ihrem Ansatz, und das Team entwickelt ein gemeinsames Verständnis von Qualität. Nach dem Merge ist der Feature-Branch obsolet und wird gelöscht – main bleibt damit übersichtlich und frei von Altlasten.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Staging‑Phase
    &lt;div id=&#34;stagingphase&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#stagingphase&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Nach dem Merge in main erfolgt automatisch ein Merge oder Deployment nach staging.
Diese Umgebung dient als realitätsnahe Testfläche und bildet den letzten Schritt vor der Produktion.&lt;/p&gt;
&lt;p&gt;Was genau in staging validiert wird, hängt von den Ressourcen und Anforderungen des Teams ab.
In formalen Enterprise-Umgebungen können das umfangreiche QA-Prozesse sein, in kleineren Teams reicht oft manuelles Testing durch Entwickler oder Stakeholder.
Entscheidend ist: Staging ist der Ort, an dem Code unter produktionsnahen Bedingungen geprüft wird, bevor er live geht.&lt;/p&gt;
&lt;p&gt;Mögliche Validierungsschritte in staging können sein:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;QA‑Tests&lt;/strong&gt; – technische Validierung durch dediziertes QA-Team&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manuelles Testing&lt;/strong&gt; – Entwickler oder Product Owner testen selbst&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UAT&lt;/strong&gt; – fachliche Abnahme durch Stakeholder&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrationstests&lt;/strong&gt; – Zusammenspiel verschiedener Komponenten&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smoke Tests&lt;/strong&gt; – grundlegende Funktionstests nach Deployment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abnahmen&lt;/strong&gt; – finale Freigaben für das Release (falls erforderlich)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Staging ist mehr als nur eine Testumgebung – es ist der Ort, an dem Code zum ersten Mal unter realistischen Bedingungen beweisen muss, dass er funktioniert. Anders als lokale Entwicklungsumgebungen oder isolierte CI-Systeme bildet Staging die Produktionsinfrastruktur so genau wie möglich nach: gleiche Datenbanken (anonymisiert), gleiche Services, gleiche Netzwerk-Konfigurationen. Fehler, die hier auftreten, wären in der Produktion katastrophal – hier sind sie lehrreich und korrigierbar.&lt;/p&gt;
&lt;p&gt;Die Staging-Phase fungiert damit als Sicherheitsnetz, das verhindert, dass ungetesteter oder unvollständig geprüfter Code in die Produktion gelangt.
Sie gibt dem Team die Gewissheit, dass das, was released wird, tatsächlich funktioniert.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Freigabeprozess: staging → production
    &lt;div id=&#34;freigabeprozess-staging--production&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#freigabeprozess-staging--production&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der Übergang in die Produktion ist der kritischste Moment im gesamten Workflow. Hier entscheidet sich, ob Wochen oder Monate Entwicklungsarbeit reibungslos live gehen – oder ob ein Release zurückgerollt werden muss, weil etwas übersehen wurde.&lt;/p&gt;
&lt;p&gt;Deshalb ist dieser Prozess bewusst streng geregelt. Ziel ist ein kontrollierter, nachvollziehbarer und weitestgehend automatisierter Release‑Prozess, der Risiken minimiert und Transparenz schafft. Jeder Schritt ist dokumentiert, jede Freigabe ist nachvollziehbar, und kein Deployment erfolgt ohne explizite Bestätigung.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Freigabevoraussetzungen (Release Gates)
    &lt;div id=&#34;freigabevoraussetzungen-release-gates&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#freigabevoraussetzungen-release-gates&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Bevor Code in die Produktion gelangen kann, müssen zentrale Gates erfüllt sein. Diese Gates sind keine bürokratischen Hürden, sondern Schutzmaßnahmen, die verhindern, dass unfertige, fehlerhafte oder riskante Änderungen live gehen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die folgenden Gates sind Beispiele für einen formalen Release-Prozess.&lt;/strong&gt;
Nicht jedes Team benötigt alle vier Gates in dieser Ausprägung.
Ein kleineres Team ohne dedizierte QA-Abteilung kann die QA-Freigabe durch &amp;ldquo;erfolgreiche manuelle Tests durch Entwickler&amp;rdquo; ersetzen.
Ein Startup ohne Product Owner kann UAT durch &amp;ldquo;fachliche Prüfung im Team&amp;rdquo; ersetzen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entscheidend ist das Prinzip:&lt;/strong&gt;
Bevor Code in production geht, muss er nachweislich funktionieren – technisch und fachlich.
Wie formalisiert dieser Nachweis erfolgt, richtet sich nach den Anforderungen des Projekts.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;1. QA‑Freigabe (Beispiel für formalen Prozess)
    &lt;div id=&#34;1-qafreigabe-beispiel-für-formalen-prozess&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-qafreigabe-beispiel-f%c3%bcr-formalen-prozess&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;alle Testfälle im Release‑Scope erfolgreich&lt;/li&gt;
&lt;li&gt;keine offenen Bugs mit Severity&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; 1 oder 2&lt;/li&gt;
&lt;li&gt;abgeschlossene Regressionstests&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Alternative für kleinere Teams: Erfolgreiche manuelle Tests durch Entwickler, dokumentiert als Checklist oder im PR-Kommentar.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Die QA‑Freigabe stellt sicher, dass der Code technisch stabil ist und keine bekannten kritischen Fehler enthält.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;2. UAT‑Freigabe (Beispiel für formalen Prozess)
    &lt;div id=&#34;2-uatfreigabe-beispiel-für-formalen-prozess&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#2-uatfreigabe-beispiel-f%c3%bcr-formalen-prozess&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;fachliche Abnahme aller relevanten Work Items&lt;/li&gt;
&lt;li&gt;dokumentierte Zustimmung des Product Owners&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Alternative für kleinere Teams: Kurzes Testing durch einen fachlichen Stakeholder oder Tech Lead, Freigabe per Slack/E-Mail.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Damit wird bestätigt, dass der Code fachlich korrekt ist und den Anforderungen entspricht. Technisch perfekter Code ist wertlos, wenn er nicht das tut, was die Nutzer brauchen.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;3. Technische Checks (sollten immer automatisiert sein)
    &lt;div id=&#34;3-technische-checks-sollten-immer-automatisiert-sein&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#3-technische-checks-sollten-immer-automatisiert-sein&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;erfolgreiche End‑to‑End‑Tests&lt;/li&gt;
&lt;li&gt;Security‑Scans ohne kritische Findings&lt;/li&gt;
&lt;li&gt;erfolgreiche Build‑Pipeline&lt;/li&gt;
&lt;li&gt;keine Merge‑Konflikte zwischen staging und production&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Diese Checks sollten in jedem Setup vorhanden sein, da sie automatisiert ablaufen.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Diese Checks verhindern technische Risiken und stellen sicher, dass der Code sicher und kompatibel ist.&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;4. Manuelle Freigabe (immer erforderlich)
    &lt;div id=&#34;4-manuelle-freigabe-immer-erforderlich&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#4-manuelle-freigabe-immer-erforderlich&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ein definierter Verantwortlicher (z. B. Product Owner oder Tech Lead) bestätigt das Release im Environment „production&amp;quot;&lt;/li&gt;
&lt;li&gt;ohne diese Freigabe erfolgt kein Deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Auch in kleinen Teams sollte jemand final „OK&amp;quot; sagen – verhindert versehentliche Deployments.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Dieser letzte Schritt ist bewusst manuell gehalten. Auch wenn alle automatisierten Checks bestanden sind, braucht es einen Menschen, der die Gesamtsituation bewertet: Ist jetzt der richtige Zeitpunkt für ein Release? Gibt es externe Faktoren, die dagegen sprechen? Diese finale Kontrolle sorgt für maximale Verantwortlichkeit und verhindert ungewollte Deployments.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Skalierbarkeit der Gates
    &lt;div id=&#34;skalierbarkeit-der-gates&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#skalierbarkeit-der-gates&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Die beschriebenen Release Gates lassen sich an die Größe und Reife des Teams anpassen:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Team-Größe&lt;/th&gt;
          &lt;th&gt;QA-Freigabe&lt;/th&gt;
          &lt;th&gt;UAT-Freigabe&lt;/th&gt;
          &lt;th&gt;Technische Checks&lt;/th&gt;
          &lt;th&gt;Manuelle Freigabe&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Klein (3-5)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Entwickler testen selbst&lt;/td&gt;
          &lt;td&gt;Tech Lead prüft fachlich&lt;/td&gt;
          &lt;td&gt;Automatisiert (Pflicht)&lt;/td&gt;
          &lt;td&gt;Tech Lead&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Mittel (6-15)&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Rotierende QA-Rolle oder dedizierte QA-Person&lt;/td&gt;
          &lt;td&gt;Product Owner&lt;/td&gt;
          &lt;td&gt;Automatisiert (Pflicht)&lt;/td&gt;
          &lt;td&gt;Product Owner&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Groß/Enterprise&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Dediziertes QA-Team mit formalen Testplänen&lt;/td&gt;
          &lt;td&gt;Formale UAT mit Dokumentation&lt;/td&gt;
          &lt;td&gt;Automatisiert + Security/Compliance&lt;/td&gt;
          &lt;td&gt;Release Manager&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Das Prinzip bleibt gleich: &lt;strong&gt;Nichts geht in production, ohne dass es geprüft wurde.&lt;/strong&gt; Die Formalität der Prüfung skaliert mit den Anforderungen.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Ablauf: staging → production
    &lt;div id=&#34;ablauf-staging--production&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#ablauf-staging--production&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;main → staging&lt;/strong&gt; erfolgt automatisch nach jedem Merge&lt;/li&gt;
&lt;li&gt;QA und UAT prüfen den Stand in staging&lt;/li&gt;
&lt;li&gt;nach erfüllten Gates wird automatisch ein PR von staging → production vorgeschlagen&lt;/li&gt;
&lt;li&gt;Reviewer prüfen den PR technisch und fachlich&lt;/li&gt;
&lt;li&gt;nach Freigabe:
&lt;ul&gt;
&lt;li&gt;Build&lt;/li&gt;
&lt;li&gt;Deployment nach production&lt;/li&gt;
&lt;li&gt;automatisches Tagging (&lt;code&gt;vX.Y.Z&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;automatische Release Notes (kurz + lang)&lt;/li&gt;
&lt;li&gt;Veröffentlichung der Artefakte&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Dieser Ablauf verbindet Automatisierung mit klaren manuellen Kontrollpunkten. Das Beste aus beiden Welten: Geschwindigkeit durch Automation, Sicherheit durch menschliche Urteilskraft.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Hotfix‑Prozess
    &lt;div id=&#34;hotfixprozess&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#hotfixprozess&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Fehler in der Produktion sind unvermeidlich. Entscheidend ist, wie schnell und kontrolliert sie behoben werden können. Der Hotfix-Prozess ist bewusst so gestaltet, dass er Geschwindigkeit ermöglicht, ohne die Stabilität des Workflows zu gefährden.&lt;/p&gt;
&lt;p&gt;Bei Fehlern in staging oder production:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;hotfix/*&lt;/code&gt;‑Branch von main erstellen&lt;/li&gt;
&lt;li&gt;Fehler beheben&lt;/li&gt;
&lt;li&gt;Pull Request → main&lt;/li&gt;
&lt;li&gt;normaler Flow: main → staging → production&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hotfixes werden &lt;strong&gt;niemals&lt;/strong&gt; direkt in staging oder production durchgeführt. Das mag auf den ersten Blick umständlich erscheinen – warum nicht einfach schnell den Fehler in production fixen? – doch dieser Weg führt unweigerlich zu Inkonsistenzen. Ein direkter Fix in production würde bedeuten, dass main und staging plötzlich einen anderen Stand haben. Spätere Merges würden den Fix überschreiben oder zu schwer durchschaubaren Konflikten führen.&lt;/p&gt;
&lt;p&gt;Der beschriebene Prozess stellt sicher, dass alle Umgebungen synchron bleiben und der Hotfix vollständig getestet wird, bevor er live geht. In der Praxis bedeutet das: Selbst dringende Fixes durchlaufen CI, Review und staging – nur eben priorisiert und beschleunigt.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Release‑Tags
    &lt;div id=&#34;releasetags&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#releasetags&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Nach erfolgreichem Merge in production wird automatisch ein Tag gesetzt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Format: &lt;code&gt;vX.Y.Z&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Der Tag markiert exakt den Commit, der live ist. Dies ist mehr als nur eine Formalität: Tags sind unveränderliche Markierungen in der Git-Historie, die jederzeit reproduzierbar machen, welcher Code zu welchem Zeitpunkt in der Produktion lief. Bei Incidents ermöglicht das schnelles Debugging (&amp;ldquo;Welcher Code war am 15. März live?&amp;rdquo;), bei Audits liefert es lückenlose Nachvollziehbarkeit, und bei Rollbacks gibt es ein klares Ziel, zu dem zurückgekehrt werden kann.&lt;/p&gt;
&lt;p&gt;Diese Tags folgen der Semantic Versioning Convention (SemVer), die es ermöglicht, auf einen Blick zu erkennen, ob ein Release Breaking Changes, neue Features oder nur Bugfixes enthält.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Release‑Automation
    &lt;div id=&#34;releaseautomation&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#releaseautomation&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Der gesetzte Tag ist nicht das Ende des Prozesses, sondern der Auslöser für die finale Automatisierung. Eine Release‑Pipeline wird gestartet, die alle notwendigen Artefakte erzeugt und dokumentiert:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Artefakte erzeugt (Binaries, Container-Images, Packages)&lt;/li&gt;
&lt;li&gt;automatische Release Notes generiert&lt;/li&gt;
&lt;li&gt;Dokumentation aktualisiert&lt;/li&gt;
&lt;li&gt;Benachrichtigungen versendet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Damit wird jeder Release vollständig dokumentiert und automatisiert ausgeliefert. Was früher manuell zusammengestellt werden musste – Release Notes schreiben, Stakeholder informieren, Artefakte hochladen – geschieht jetzt in Sekunden. Das spart nicht nur Zeit, sondern eliminiert auch menschliche Fehler: keine vergessenen Benachrichtigungen, keine fehlenden Artefakte, keine inkonsistenten Release Notes.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Automatische Release Notes (optional KI‑gestützt)
    &lt;div id=&#34;automatische-release-notes-optional-kigestützt&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#automatische-release-notes-optional-kigest%c3%bctzt&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Die Pipeline sammelt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Work Items&lt;/li&gt;
&lt;li&gt;Pull Requests&lt;/li&gt;
&lt;li&gt;Commits&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;und erzeugt daraus:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;eine &lt;strong&gt;Kurzfassung&lt;/strong&gt; für Endnutzer (Was ist neu? Was wurde behoben?)&lt;/li&gt;
&lt;li&gt;eine &lt;strong&gt;Langfassung&lt;/strong&gt; für technische Stakeholder (Welche Pull Requests? Welche technischen Änderungen?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Optional kann dieser Prozess durch KI-Modelle unterstützt werden, die aus den gesammelten Daten lesbare, kontextuelle Release Notes generieren. Das Ergebnis: Dokumentation, die tatsächlich gelesen wird, weil sie verständlich und relevant ist.&lt;/p&gt;
&lt;p&gt;Dies reduziert manuellen Aufwand erheblich und sorgt für konsistente, vollständige Release‑Dokumentation, die nicht mehr davon abhängt, ob jemand daran denkt, sie zu schreiben.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Prozessübersicht
    &lt;div id=&#34;prozessübersicht&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#prozess%c3%bcbersicht&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;feature/* 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓ (PR, CI, Review)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;main 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓ (automatisch)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;staging 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓ (QA, UAT, Gates erfüllt)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PR staging → production 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓ (Review, Approval)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;production 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓ (Deployment erfolgreich)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Tag vX.Y.Z 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ↓ (automatisch)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Release-Pipeline 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   → Artefakte
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   → AI Release Notes (kurz + lang)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   → Dokumentation
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   → Notifications&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Grenzen und Anwendbarkeit
    &lt;div id=&#34;grenzen-und-anwendbarkeit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#grenzen-und-anwendbarkeit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Ich möchte an dieser Stelle nicht verschweigen, dass auch dieser Workflow nicht für jedes Team und jedes Projekt gleichermaßen geeignet ist.
Er entfaltet seine Stärken vor allem in bestimmten Kontexten:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dieser Workflow passt gut, wenn:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;das Team aus 3-20 Entwicklern besteht (klein genug für Abstimmung, groß genug, dass Prozesse nötig sind)&lt;/li&gt;
&lt;li&gt;Stabilität wichtiger ist als maximale Deployment-Geschwindigkeit&lt;/li&gt;
&lt;li&gt;regulatorische Anforderungen oder Audit-Trails erforderlich sind&lt;/li&gt;
&lt;li&gt;mehrere Umgebungen (dev, staging, production) existieren&lt;/li&gt;
&lt;li&gt;das Team bereit ist, in CI/CD-Infrastruktur zu investieren&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Weniger geeignet für:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ein- oder Zwei-Personen-Projekte – hier ist der Overhead zu groß&lt;/li&gt;
&lt;li&gt;Experimentelle Prototypen oder MVPs, bei denen schnelle Iteration wichtiger ist als Stabilität&lt;/li&gt;
&lt;li&gt;Teams, die mehrmals täglich deployen möchten (Continuous Deployment im engeren Sinne) – der staging-Gate verlangsamt bewusst&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Anpassbar für verschiedene Team-Größen:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kleine Teams (3-5 Entwickler) ohne dediziertes QA:&lt;/strong&gt; Entwickler testen selbst in staging, Tech Lead gibt final frei. Die Release Gates sind vereinfacht, aber das Prinzip bleibt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mittlere Teams (6-15 Entwickler):&lt;/strong&gt; QA-Rolle kann rotieren, UAT durch Product Owner oder fachliche Stakeholder.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Große Teams/Enterprise:&lt;/strong&gt; Formale QA-Abteilung, dokumentierte UAT, Compliance-Anforderungen – hier entfaltet der Workflow seine volle Stärke.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Trade-offs, die bewusst eingegangen werden:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Geschwindigkeit vs. Sicherheit:&lt;/strong&gt; Der Weg von main über staging nach production dauert länger als ein direktes Deployment. Das ist gewollt, kostet aber Zeit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexibilität vs. Konsistenz:&lt;/strong&gt; Keine Ausnahmen zu erlauben (keine direkten Pushes, keine Skip-Reviews) schränkt in Ausnahmesituationen ein.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatisierung vs. Kontrolle:&lt;/strong&gt; Manuelle Freigaben verhindern vollständig automatisierte Deployments. Das ist ein bewusster Kontrollpunkt, aber auch ein manueller Eingriff.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wer täglich oder mehrmals täglich deployen möchte, braucht einen anderen Ansatz – etwa Trunk-Based Development mit Feature Flags.
Wer hingegen wöchentliche oder zweiwöchentliche Releases fährt und dabei maximale Sicherheit benötigt, findet hier eine solide Grundlage.&lt;/p&gt;
&lt;p&gt;Dieser Ansatz lässt sich modifizieren und an andere Anforderungen anpassen.&lt;/p&gt;
&lt;hr&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Fazit
    &lt;div id=&#34;fazit&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#fazit&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Dieser Git-Workflow verzichtet auf komplexe Branch-Strukturen, langlebige Feature-Branches oder manuelle Deployment-Schritte, wo Automatisierung möglich ist.
Gleichzeitig lässt er an den entscheidenden Stellen – Code Review, QA-Freigabe, finales Deployment – keinen Raum für Shortcuts.&lt;/p&gt;
&lt;p&gt;Die Stärke dieses Ansatzes liegt in seiner Klarheit. Jedes Teammitglied weiß zu jedem Zeitpunkt, wo Code steht und welche Schritte als nächstes folgen. Es gibt keine Grauzone, keine Sonderregeln für &amp;ldquo;dringende&amp;rdquo; Änderungen, keine Diskussionen darüber, ob ein Review &amp;ldquo;diesmal&amp;rdquo; ausnahmsweise übersprungen werden kann.&lt;/p&gt;
&lt;p&gt;Für Teams, die Wert auf Stabilität, Nachvollziehbarkeit und Automatisierung legen, bietet dieser Workflow eine gute Grundlage.&lt;/p&gt;
&lt;hr&gt;
&lt;!-- Add your attributions here, for example:
- Image: [Source Name](URL) - License
- Quote: [Author Name](URL)
- Inspiration: [Source](URL)
--&gt;

&lt;h2 class=&#34;relative group&#34;&gt;Vorschaubild
    &lt;div id=&#34;vorschaubild&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#vorschaubild&#34; aria-label=&#34;Anker&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;Erstellt mit &lt;a href=&#34;https://chatgpt.com/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ChatGPT&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Conventional Commits ist eine Konvention für Commit-Nachrichten mit dem Format &lt;code&gt;type(scope): description&lt;/code&gt;.
Mehr Details: &lt;a href=&#34;https://www.conventionalcommits.org/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;conventionalcommits.org&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;Severity klassifiziert den Schweregrad von Bugs: 1 = kritisch (Systemausfall), 2 = schwerwiegend (wichtige Features defekt), 3 = mittel, 4 = niedrig.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
  </channel>
</rss>