Huzzah: Een nieuwe experimentele manier om te coderen met AI

Als je een software engineer bent zoals ik, waren de eerste maanden van 2026 ongelooflijk. Coding agents werden plotseling goed genoeg, waardoor we geen code meer handmatig hoefden te schrijven.

Maar als je zoals ik bent, stuitte je op een gegeven moment op een muur. De honingmaand eindigde en de nieuwigheid verdween. De dopamine-stoten stopten. Het is nu augustus en ik voel me volledig uitgeput. Om eerlijk te zijn, ik ben het zat om lange teksten in het Engels te schrijven om elke wijziging die ik in mijn codebase wil, te beschrijven.

Tegelijkertijd wil ik niet terug naar het handmatig schrijven van al mijn code. Dat was een monotoon proces waar ik voor de rest van mijn leven graag vanaf blijf. Toch voel ik dat ik betere inzichten en controle nodig heb over wat mijn code precies doet. Ik wil weten dat mijn output hoogwaardige, betrouwbare software is. Ik wil me als professional goed voelen over mijn werk.

Ik ben dus op zoek naar een manier om beide voordelen te combineren.

De problemen met coding agents

Mijn problemen met huidige coding agents zijn als volgt:

  • Geen betrouwbaar verslag van menselijke intentie: Prompts worden weggegooid en het is onduidelijk of de code door AI is gegenereerd. We zijn de centrale autoriteit kwijt die uitdrukt wat de mens van de machine wil, en ik denk dat het belangrijk is om die realiteit te erkennen.
  • Imperatieve instructies: AI-chats zijn imperatieve, stap-voor-stap instructies die wijzigingen in de applicatie beschrijven, in plaats van de applicatie zelf. Dit betekent dat instructies vaak herhaald worden en daardoor gedurende de ontwikkeling herhaaldelijk tokens verbruiken. Dit is inefficiënt.
  • Inefficiëntie van natuurlijke taal: Veel natuurlijke taal bestaat om sociale redenen, niet om informatieve. De gemiddelde zin bevat weinig werkelijke informatie. Op deze manier met een machine communiceren is omslachtig.

Een alternatief paradigma: Huzzah

Om deze problemen aan te pakken, bouw ik aan een experimentele editor. Ik noem het Huzzah, en het stelt een alternatief paradigma voor om met LLM's (Large Language Models) te werken.

Het verschil in aanpak is als volgt:

  • Coding agents: Prompts zijn (a) langdurig/uitgebreid, (b) imperatief en (c) vluchtig.
  • Huzzah: Prompts zijn (a) pseudocode, (b) declaratief en (c) persistent.

Vergelijking: Fizz Buzz

Laten we een eenvoudig voorbeeld nemen: het maken van "fizz buzz" met behulp van AI. We doen dit op twee verschillende manieren.

Met coding agents

Je start een chat in je favoriete tool en typt iets als het volgende: "Maak een functie die 100 keer loopt. Als het getal deelbaar is door 3, print "fizz". Als het getal deelbaar is door 5, print "buzz". Als het getal door beide deelbaar is (zoals 15), print "fizz buzz"."

Als je een aanpassing wilt maken, stuur je een vervolgbericht naar de chat: "In plaats van 100 keer te lopen, moet de functie een getal als input accepteren en dat aantal keren lopen."

Je herhaalt dit proces totdat je tevreden bent.

Met Huzzah

Je maakt een nieuw bestand aan genaamd fizz_buzz.hz. Hierin schrijf je een pseudocode-representatie, op jouw eigen manier. Persoonlijk zou ik het zo doen:

fizz_buzz()
loop 100
modulo 3 ? "fizz"
5 ? "buzz"
both ? "fizz buzz"

Zodra je het bestand opslaat, genereert Huzzah automatisch de echte code. Als je een aanpassing moet maken, update je simpelweg je bestand:

fizz_buzz(n)
loop n
modulo 3 ? "fizz"
5 ? "buzz"
both ? "fizz buzz"

Bij het opslaan van het bestand registreert Huzzah het verschil (de diff) en gebruikt dit als prompt voor de LLM. De betreffende broncode wordt vervolgens opnieuw gegenereerd.

Andere voorbeelden

Om een beter beeld te krijgen van hoe dit er in andere scenario's uit zou zien, volgen hier enkele alternatieve voorbeelden.

1. Winkelmandje (Shopping cart)

list cart
list inventory
mock_data = // include some mock data
init()
inventory.fill(mock_data)
add_item(id)
cart.add(item by id)
remove_item(id)
cart.filter(item by id)
checkout()
return cart.sum(item by price) and format as price

2. Takenlijst (Todo List)

Todo {
id: int
text: str
completed: bool
}
add_todo(text)
todos.add(text, completed = false)
toggle_todo(id)
todo = todos.get by id
todo.completed = NOT .completed
remove_todo(id)
todos.filter by id

Voordelen

Het belangrijkste voordeel is dat de pseudocode veel beknopter en leesbaarder is dan uitgebreide prompts. Daarnaast zijn er andere voordelen:

  • Ontwerpproces: Het schrijven van prompts op deze manier activeert je geest, omdat het meer voelt alsof je de vorm van de code ontwerpt.
  • Flexibiliteit: Je kunt zo beknopt of zo uitgebreid zijn als je zelf wilt.
  • Documentatie: De pseudocode fungeert als documentatie voor ontwikkelaars, omdat een mens het heeft geschreven om zijn intentie uit te drukken.
  • Taal-onafhankelijkheid: Je kunt taal-agnostische pseudocode schrijven en dit gebruiken als basis voor meerdere programmeertalen of omgevingen. Denk hierbij aan complexe algoritmen, zoals een CRDT.

Kanttekeningen

Er bestaat uiteraard geen perfecte oplossing. Enkele beperkingen zijn:

  • Het is mogelijk dat er problemen ontstaan met deze aanpak bij zeer grote projecten (at scale).
  • Deze methode is overduidelijk geschikter voor nieuwe codebases dan voor bestaande.
  • Als je geen domeinkennis hebt, is natuurlijke taal waarschijnlijk de eenvoudigere interactiemethode.
  • Sommige zaken zijn wellicht moeilijker betrouwbaar uit te drukken, zoals afhankelijkheden tussen verschillende bestanden (cross-file dependencies).
  • LSP-type functies (Language Server Protocol) zouden niet beschikbaar zijn, hoewel deze plausibel gegenereerd zouden kunnen worden.

Huidige status

Huzzah is momenteel in actieve ontwikkeling en bevindt zich in een experimentele fase. De broncode en installatie-instructies zijn beschikbaar via de officiële kanalen.