Tankeledere

Fremtiden for AI-app-bygning afhænger af typesikkerhed

mm
Føj Unite.AI til dine foretrukne kilder på Google

AI-genereret kode kan kompilere, men uden streng typesikkerhed er denne succes ekstremt kortvarig. Typesikkerhed er guardrailen, der forhindrer, at ødelagt kode udvikler sig til skjulte fejl og runtime-fejl, når systemet skalerer.

Vi må begynde at tvinge AI til streng typning gennem kontekst, instruktioner, linting og feedback-løkker. Det tager et par ekstra timer, men det producerer kode, der varer.

Incitamentsproblemet

AI ønsker at tilfredsstille dig. Det optimerer for belønningsfunktionen, det får, og det meste af tiden er det bare “kompilerer det?” Det betyder, at det vil klippe hver enkelt hjørne for at nå et grønt checkmark. Disse shortcuts ser fine ud på kompileringstidspunktet, men de kollapser på runtime.

Dette er hvorfor AI elsker any. Eller det vælger en bred type som string, hvor noget strengere, som en UUID, forventes. Koden kompilerer, men korrektheden er allerede kompromitteret. Værre, AI husker ikke, hvad det skrev et par filer tidligere, så uden typesikkerhed kollapser projektet hurtigt under sin egen vægt, når kompleksiteten øges.

De to typer fejl

Når AI-genereret kode køres, ser du normalt to typer af typesikkerhedsproblemer:

1. Kompileringstidsfejl

  • Hvad sker der: Kompileren fanger en mismatch mellem den erklærede type og hvad der blev sendt ind.
  • Hvordan en menneske fikser det: Beslut, om kalderen er forkert (konverter 42 til en string) eller funktionssignaturen er forkert (ændr den til at acceptere en nummer type).
  • Hvordan AI “fikser” det: Ændr argumenttypen til any. Problemet er “løst”, men du har lige fjernet guardrailen, der ville have fanget fremtidige fejl.

2. Runtime-fejl

  • Hvad sker der: Kompileren mener, at alt er i orden (ofte fordi typer er løsnet), men den virkelige værdi på runtime svarer ikke til antagelsen.
  • Hvordan en menneske fikser det: Sporer variablen tilbage til sin kilde (som en API eller databaseforespørgsel) og fikser typen på grænsen, så data kommer ind som en korrekt string.
  • Hvordan AI “fikser” det: Uden kontekst, gætter det. Måske omgiver det alt i String(…), eller blot udvider typen igen. Crashen forsvinder på dette sted, men nu er logikken brudt. Numre, der var tiltænkt matematik, er pludselig strings.

Denne cyklus af runtime-fejl → AI “fikser” → løsere typning forstærker hurtigt. Resultatet er en kodebase, der kompilerer og kaster færre runtime-fejl, men ikke kan tillides. Forestil dig et sundhedsplanlægningsystem, hvor lægernes vagter styres af appen. En type-mismatch sniger sig ind: en int for timer behandles som en string. AI ‘fikser’ det ved at løsne typen til any. Koden kompilerer, og fejlen forsvinder, men skiftberegningslogikken bryder stille, og lægerne dobbeltbookes, og en hel fløj af hospitalet bliver ikke dækket.

Database-multiplikator

Øjeblikket du tilslutter en database, forstærkes fejlene og deres årsager bliver sværere at spore. SQL er typet for en grund. Hver skema (INT, TEXT, UUID, BOOLEAN) kodificerer antagelser om dine data.

Når en AI flader alt ud til string | any, mister du disse garantier:

  • Dårlige skriver: indsætter “true” i et boolesk felt kompilerer, men korrumperer DB.
  • Dårlige læs: forespørgslen returnerer NULL, men AI antog en string, hvilket fører til en runtime-crash.
  • Brudte relationer: hvis en relationsnøgle forventes som en UUID, men AI behandler den som en string og sender fejlbeskeder, vil joinerne ikke crash, men de vil returnere ingen data. Dette skjuler fejl, indtil de dukker op senere som manglende eller inkonsistente resultater..

Dette er hvorfor seriøse teams bruger typede sprog og tvinger typesikkerhed fra skema til API. Hvis du ikke gør det, stopper databasen med at beskytte dig, og skjulte problemer forstærker.

Hvorfor modne teams tvinger streng typning

Streng typning handler ikke om at langsommere udviklere ned. Det handler om at gøre skala mulig.

Typer:

  • Kodificerer intentioner i koden.
  • Gør refaktoreringer sikre og forudsigelige.
  • Fanger hele klasser af fejl, før de rammer produktion.
  • Viser fremtidige udviklere (og AI) præcis, hvordan man bruger en funktion eller objekt.

Uden typesikkerhed forstærker AI’s kodensløsning. Med det producerer AI kode, du kan stole på og udvide.

Hvordan man tvinger AI til typesikkerhed

Du må behandle AI som en junior-ingeniør. Hurtig, talentfuld, men våd uden retning.

Give den rette kontekst

Giv det interfaces og typer, det kan bruge. Vis eksempler på brug. Vær bestemt om, hvordan man strukturerer kode.

Giv streng instruktion

Meget tydeligt lad AI vide, at det ikke må bruge any, aldrig må tillade unknown, og at hver metode, objekt og variabel skal være typet. Forvent, at det har svært ved at følge disse instruktioner (især på den første omgang).

Tving med linting

Lige som når du gennemgår en junior-udviklers kode, skal du også gennemgå AI’s. Design brugerdefinerede lint-regler, der definerer, hvad “god kode” betyder for dig. Feed linting-fejl tilbage til modellen, indtil det passerer. Det kan tage flere omgange, men det skifter belønningsfunktionen mod at inkludere typesikkerhed.

Iterer med kontroller

Kompileringstidsfejl, runtime-logning, klik-gennem-tests. Hver iteration tvinger AI til at stramme typer og nærme sig produktionsklar kode.

En bedre måde at bygge

Jeg har lært, at at ofre rå genereringshastighed for højere kvalitet betaler sig på lang sigt. Det betyder at kæmpe for zero tolerance for any typer, tvinge multiple feedback-løkker og streng linting-regler, som AI skal overholde, før man kalder koden ‘færdig.’ Det tager konstant indsats, men det er den eneste måde at holde kvaliteten på fra at glide.

Tidligere nævnte jeg et vigtigt punkt: når AI begynder at lave runtime-fejl ved at løsne typer, kommer du ind i en ond cirkel. Hver løsning fjerner endnu en guardrail, og resultatet forstærker til en kodebase, der kompilerer, men er ødelagt og ikke kan vedligeholdes. Det modsatte er også sandt: hvis du tvinger AI til at respektere typesikkerhed på hver omgang, skaber du en dydfuld cirkel. Hver iteration strammer guardrailene, kodebasen bliver renere, og kvaliteten forstærker til noget, du kan stole på og bygge på.

Dette er systemet, jeg tror, leverer varig kodekvalitet. Hver iteration er designet til at stramme standarder, ikke svække dem. Det er den samme grund til, at de bedste ingeniørteams vælger stærkt typede sprog. Typesikkerhed er grundlæggende guardrail for vedligeholdelse, og at lade AI ignorere det garanterer, at din app aldrig når produktionsklar.

Brad Eckert er en livslang entrepreneur og ingeniørleder med mere end et årtis erfaring med at tage produkter fra idéstadie gennem kundelevering og derefter. En af MIT's afgange, er han nu medstifter og CTO af Woz, en Y Combinator-backet AI-platform, der giver alle mulighed for at bygge og skala softwareforretninger uden kodning.