36 Punkte von GN⁺ 2025-01-08 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Artikel, der die Programmiererfahrungen der letzten 12 Monate mit LLMs (Large Language Models) zusammenfasst
  • LLMs haben die Produktivität gesteigert, und es ist schwer, zu einer Programmierweise ohne sie zurückzukehren
  • Der Fokus liegt vor allem auf der Go-Programmierumgebung; aktuell wird ein Tool namens sketch.dev entwickelt

Hintergrund

  • Begann aus Neugier auf neue Technologien.
  • Fasziniert von der Fähigkeit von LLMs, komplexe Antworten auf Fragen zu erzeugen oder Programmcode zu schreiben
  • Vermittelt ein ähnliches Gefühl von Spannung und Möglichkeiten wie damals, als das Internet erstmals aufkam
  • Es wurde bestätigt, dass es einen Nettogewinn gibt, wenn das Tool Code erzeugt, der „meistens richtig“ ist, und es wird daran gearbeitet, dies praktisch nutzbar zu machen

Wichtige Anwendungsfälle

  1. Autovervollständigung (Autocomplete)

    • Häufig wiederholte Coding-Aufgaben werden per Autovervollständigung erledigt, was die Produktivität erhöht
    • Besonders FIM-Modelle (Fill-In-the-Middle) sind für tägliche Aufgaben unverzichtbar
  2. Als Ersatz für Suche (Search)

    • Beantwortet bestimmte Programmierfragen (z. B. wie man in CSS die Transparenz eines Buttons setzt) präziser als Suchmaschinen
    • Antworten von LLMs können falsch sein, aber diese Grenzen werden akzeptiert und in der Praxis berücksichtigt
  3. Dialogbasiertes Programmieren (Chat-driven Programming)

    • Der schwierigste und zugleich wertvollste Bereich.
    • Übernimmt erste Aufgaben wie das Erstellen neuer Dateien oder das Suchen nach Bibliotheken.
    • Ziel des dialogbasierten Programmierens ist es, die aktuellen Unbequemlichkeiten zu reduzieren und die Fähigkeiten von LLMs benutzerfreundlicher zu machen

Der Kern des dialogbasierten Programmierens

  • Warum Dialog verwenden?

    • Nützlich, um einen ersten Entwurf zu liefern, wenn im Laufe des Tages die Energie nachlässt
    • Einen ersten Entwurf zu sehen und zu überarbeiten ist effizienter, als bei null anzufangen
  • Arbeitsweise mit LLMs

    1. Ein klares und prägnantes Arbeitsziel festlegen
    2. Code lesen, verifizieren und anpassen
    3. Compiler-Fehler nutzen, um Probleme schnell zu lösen
  • Effektives Schreiben von Tests

    • LLMs sind sehr engagiert beim Schreiben von Tests und können eine gründlichere Testumgebung aufbauen
    • Über beispielbasierte Tests hinaus ist auch eine Erweiterung auf Fuzz-Tests möglich

Beispiel: Fraction Sampler

  • Ziel: Einen Algorithmus in Go schreiben, der Quartile eines Datenstroms sampelt
  • Ablauf
    1. Ersten Entwurf mit einem LLM erstellen
    2. Code verbessern, indem Compiler-Fehler behoben werden
    3. Testcode neu schreiben, um eine besser lesbare Struktur zu erhalten

Potenzial für neue Code-Strukturen

  • Kleinere Pakete, mehr Tests

    • Kleine Pakete liefern klareren Code-Kontext und sind dadurch sowohl für LLMs als auch für Menschen nützlicher
    • Erhöhen die Möglichkeit unabhängiger Tests und erfolgreicher Kompilierung
  • Beispiel: API-Wrapper

    • Statt großer offizieller Bibliotheken wird empfohlen, dünne Wrapper zu verwenden, die nur die benötigten Teile implementieren
    • Geringerer Wartungs- und Lernaufwand

Ausblick: sketch.dev

  • Eine Go-IDE für LLMs
    • Bietet eine auf LLMs ausgerichtete Programmierumgebung
    • Unterstützt automatisiertes Test-Feedback, das Beheben von Compiler-Fehlern, die Integration von Go-Modulen und mehr
    • Stärkt die Zusammenarbeit zwischen Menschen und LLMs und schafft so eine produktivere Umgebung

1 Kommentare

 
GN⁺ 2025-01-08
Hacker-News-Kommentare
  • Der Autor ist bereits ein Softwareingenieur von Weltrang, ehemaliger Google-Mitarbeiter und Mitgründer/CTO von Tailscale. Beeindruckend ist, dass LLMs ihn noch produktiver machen.

    • LLMs sind nützlich, wenn man neue Ideen skizziert.
    • Früher wurden Implementierungen aus der Datenbank geholt, heute erzeugen LLMs sie in Echtzeit.
  • LLMs senken die Einstiegshürde für eine Aufgabe.

    • Sie verringern die Barriere, etwas Neues auszuprobieren.
    • Sie haben nicht die Tiefe eines Menschen, verfügen aber über breites Wissen.
    • Für Menschen, die in vielen unterschiedlichen Bereichen programmieren, sind sie nützlich.
  • Man sollte LLMs nur in Bereichen verwenden, in denen man sich gut auskennt.

    • Sie sparen nur dann Zeit, wenn man Fehler leicht erkennen kann.
    • Sie helfen bei der Suche.
  • LLMs haben Potenzial als Werkzeuge für die Softwareentwicklung.

    • sketch.dev liefert schon im ersten Versuch saubere Beispiele.
    • Es braucht LLMs, die anhand der offiziellen Dokumentation einer Sprache trainiert wurden.
    • Die Vermenschlichung von LLMs ist unangenehm.
  • Ähnlich wie bei der Nutzung von Suchmaschinen.

    • Die Verwendung der richtigen Keywords ist wichtig.
  • Es gibt kein großes Verlangen, LLMs zu verwenden.

    • Man genießt den Prozess des direkten Codens.
    • LLMs können die Kosten erhöhen.
  • Für Menschen, die keine Programmierer sind, sind LLMs eine große Hilfe.

    • Sie verkürzen die Zeit zum Schreiben von Code erheblich.
    • Sie sind nützlich für persönliche Projekte.
  • LLMs sind nützlich, um einfache Anwendungen zu schreiben.

    • Wenn man ein Minimum Viable Product beschreibt, können sie Code erzeugen.
    • Technische Schulden können sich schnell anhäufen.
  • Für Menschen, die als Hobby programmieren, sind LLMs hilfreich.

    • Sie helfen beim Einrichten der Projektstruktur und bei der Codegenerierung.
    • Unklare Anweisungen können jedoch Probleme verursachen.
  • LLMs werden hauptsächlich für Autovervollständigung und Suche verwendet.

    • ChatGPT ist nützlich, um bestehenden Code zu optimieren.