Tankeledere

Fremtiden for AI-app-bygging avhenger av typesikkerhet

mm
Legg til Unite.AI blant dine foretrukne kilder på Google

AI-generert kode kan kompilere, men uten streng typesikkerhet er denne suksessen ekstremt kortvarig. Typesikkerhet er guardrailsen som forhindrer skjør kode fra å forfalle til skjulte feil og runtime-feil når systemet skalerer.

Vi må begynne å tvinge AI inn i streng typing gjennom kontekst, instruksjoner, linting og feedback-løkker. Det tar noen ekstra timer, men det produserer kode som varer.

Incitamentsproblemet

AI ønsker å gjøre deg glad. Det optimaliserer for belønningsfunksjonen det får, og det meste av tiden er det bare “kompilerer det?” Det betyr at det vil kutte hver enkelt hjørne for å nå et grønt sjekkmærke. Disse kortveisene ser fine ut på kompileringstid, men de kollapser på kjøretid.

Dette er hvorfor AI elsker any. Eller det velger en bred type som string hvor noe strengere, som en UUID, er forventet. Koden kompilerer, men riktigheten er allerede kompromittert. Verre, AI glemmer hva det skrev noen filer tidligere, så uten typesikkerhet kollapser prosjektet raskt under sin egen vekt når kompleksiteten øker.

De to typene feil

Når AI-generert kode kjører, ser du vanligvis to smaker av typesikkerhetsproblemer:

1. Kompileringstidsfeil

  • Hva skjer: Kompilatoren fanger en mismatch mellom den erklærte typen og hva som ble sendt inn.
  • Hvordan en menneske fikser det: Bestemme om kalleren er feil (konverter 42 til en string) eller funksjonssignaturen er feil (endre den til å akseptere en nummer type).
  • Hvordan AI “fikser” det: Endre argumenttypen til any. Problemet “løst”, men du har bare fjernet guardrailsen som ville ha fanget fremtidige feil.

2. Kjøretidsfeil

  • Hva skjer: Kompilatoren tror alt er fint (ofte fordi typer ble løsnet), men den faktiske verdien på kjøretid matcher ikke antagelsen.
  • Hvordan en menneske fikser det: Spore variabelen tilbake til sin kilde (som en API eller database-spørring) og fikse typen på grensen så data kommer inn som en korrekt string.
  • Hvordan AI “fikser” det: Uten kontekst, gjetter det. Kanskje det wrapper alt i String(…), eller bare utvider typen igjen. Krasjen forsvinner på denne plassen, men nå er logikken ødelagt. Numbers som var ment for matematikk er nå strings.

Denne syklusen av kjøretidsfeil → AI “fikser” → løsere typing kompenserer raskt. Resultatet er en kodebase som kompilerer og kaster færre kjøretidsfeil, men kan ikke betros. Tenk en helseplanleggingsystem hvor legevakter håndteres av appen. En typematch feiler inn: en int for timer behandles som en string. AI “fikser” det ved å løsne typen til any. Koden kompilerer og feilen forsvinner, men skiftregningene bryter stille, dobbeltbooker leger og lar en hel fløy av sykehuset uten dekning.

Database-multiplikator

Øyeblikket du kobler til en database, feiler og årsaker blir vanskeligere å spore. SQL er typet for en grunn. Hver skjema (INT, TEXT, UUID, BOOLEAN) koder antagelser om dine data.

Når en AI flatt alles til string | any, mister du disse garantiene:

  • Dårlige skriver: setter inn “true” i en booleansk felt kompilerer, men ødelegger DB.
  • Dårlige lesinger: spørring returnerer NULL, men AI antok en string, noe som fører til en kjøretidskrasj.
  • Ødelagte relasjoner: hvis en relasjonsnøkkel forventes som en UUID men AI behandler det som en string og sender feilaktige verdier, vil sammenføyningene ikke krasje, men de vil returnere ingen data. Dette skjuler feilene til de dukker opp senere som manglende eller inkonsistente resultater..

Dette er hvorfor seriøse lag bruker typede språk og påtvinger typesikkerhet fra skjema til API. Hvis du ikke gjør det, stopper databasen å beskytte deg og skjulte problemer kompenserer.

Hvorfor modne lag påtvinger streng typing

Streng typing er ikke om å sakke utviklere ned. Det handler om å gjøre skala mulig.

Typer:

  • Koderer intensjon inn i koden.
  • Gjør omstruktureringer trygge og forutsigbare.
  • Fanger hele klasser av feil før de treffer produksjon.
  • Viser fremtidige utviklere (og AI) nøyaktig hvordan man bruker en funksjon eller objekt.

Uten typesikkerhet, AI sin kode slapphet kompenserer. Med det, produserer AI kode du kan betro og utvide.

Hvordan tvinge AI inn i typesikkerhet

Du må behandle AI som en junior-ingeniør. Rask, talentfull, men uansvarlig uten retning.

Gi riktig kontekst

Gi det grensesnitt og typer det kan bruke. Vis eksempler på bruk. Vær bestemt om den riktige måten å strukturere kode på.

Gi strenge instruksjoner

Veldig tydelig la AI vite å ikke bruke any, aldri tillate ukjent, og å ha hver metode, objekt og variabel typet. Forvent at det har en hard tid med å følge disse instruksjoner (spesielt på den første passeringen).

Påtving med linting

Akkurat som når du gjennomgår en junior-utviklers kode, må du også gjennomgå AI sin. Design tilpassede lint-regler som definerer hva “god kode” betyr for deg. Før linting-feil tilbake til modellen til den passerer. Det kan ta flere runder, men det skifter belønningsfunksjonen mot å inkludere typesikkerhet.

Iterer med sjekker

Kompileringstidsfeil, kjøretidslogging, klikk-gjennom-tester. Hver iterasjon tvinger AI til å stramme typer og nærme seg produksjonsgrad kode.

En bedre måte å bygge

Jeg har lært at å ofre rå genereringshastighet for høyere kvalitet betaler seg på lang sikt. Det betyr å kjempe for null toleranse for any typer, påtvinge flere feedback-løkker og strenge linting-regler som AI må passe før den kalles “ferdig”. Det tar konstant innsats, men det er den eneste måten å holde kvalitet fra å gli.

Tidligere nevnte jeg en viktig poeng: når AI begynner å fikse kjøretidsfeil ved å løsne typer, går du inn i en ond sirkel. Hver fiksering fjerner en guardrail, og resultatet kompenserer til en kodebase som kompilerer, men er skjør og ikke vedlikeholdbar. Det motsatte er også sant: hvis du tvinger AI til å respektere typesikkerhet på hver passering, skaper du en dydig sirkel. Hver iterasjon strammer guardrailsene, kodebasen blir renere, og kvalitet kompenserer til noe du kan betro og bygge på.

Dette er systemet jeg tror leverer varig kodekvalitet. Hver iterasjon er designet for å stramme standarder, ikke å svekke dem. Det er samme grunn til at de beste ingeniørlagene velger sterkt typede språk. Typesikkerhet er baseline-guardrailsen for vedlikeholdbarhet, og å la AI ignorere det garanterer at din app aldri vil nå produksjonsgrad.

Brad Eckert er en livslang entrepreneur og ingeniørleder med over ett tiår med erfaring i å ta produkter fra idefasen gjennom kundelevering og videre. En avdeling fra MIT, er han nå medstifter og CTO i Woz, en Y Combinator-bakket AI-plattform som gjør det mulig for alle å bygge og skala opp programvareforretninger, uten å kode.