Connect with us

Tankeledere

Fremtiden for AI-app-bygging avhenger av typesikkerhet

mm

AI-generert kode kan kompilere, men uten streng typesikkerhet er denne suksessen ekstremt kortvarig. Typesikkerhet er guardrailsen som stopper 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 å behage deg. Den optimaliserer for belønningfunksjonen den får, og det meste av tiden er det bare “kompilerer den?” Det betyr at den vil kutte hver enkelt hjørne for å komme til en grønn checkmark. Disse kortveiene ser fine ut på kompileringstid, men de kollapser på kjøretid.

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

De to typene feil

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

1. Kompileringfeil

  • 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 i orden (ofte fordi typer ble løsnet), men den virkelige 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 den. Kanskje den 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 forverrer raskt. Resultatet er en kodebase som kompilerer og kaster færre kjøretidsfeil, men ikke kan stoles på. Forestill deg et helse-scheduling-system hvor legers skift håndteres av appen. En type-mismatch gli inn: en int for timer behandles som en string. AI’en “fikser” det ved å løsne typen til any. Koden kompilerer og feilen forsvinner, men skift-regningene bryter stille sammen, dobbelt-booker leger og lar en hel fløy av sykehuset være dekket.

Databasemultiplikator

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

Når en AI flattener alt til string | any, mister du disse garantiene:

  • Dårlige skriver: innsetting av “true” i et boolesk felt kompilerer, men korrumperer DB-en.
  • Dårlige lesninger: spørring returnerer NULL, men AI-en antok en string, noe som fører til en kjøretidskrasj.
  • Ødelagte relasjoner: hvis en relasjon-nøkkel forventes som en UUID men AI-en behandler den 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 database å beskytte deg og skjulte problemer forverres.

Hvorfor modne lag påtvinger streng typing

Streng typing er ikke om å bremse utviklere. Det handler om å gjøre skalerbarhet 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-kodens slapphet forverrer. Med det, produserer samme AI kode du kan stole på og utvide.

Hvordan tvinge AI inn i typesikkerhet

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

Gi riktig kontekst

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

Gi strenge instruksjoner

La AI-en vite at den aldri skal bruke any, aldri tillate unknown, og at hver metode, objekt og variabel skal typene. Forvent at den har vanskelig for å følge disse instruksjonene (spesielt på første pass).

Påtving med linting

Akkurat som når du gjennomgår en junior-utviklers kode, må du også gjennomgå AI-koden. 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 skyfter belønningfunksjonen mot å inkludere typesikkerhet.

Iterer med sjekker

Kompileringfeil, kjøretidslogging, klikk-gjennom-tester. Hver iterasjon tvinger AI-en til å stramme typer og nærme seg produksjonskvalitetskode.

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-en må passe før du kan kalde koden “ferdig”. Det tar konstant innsats, men det er den eneste måten å holde kvaliteten fra å gli.

Tidligere nevnte jeg et viktig punkt: 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 forverrer til en kodebase som kompilerer, men er skjør og umaintainable. Det motsatte er også sant: hvis du tvinger AI-en til å respektere typesikkerhet på hver pass, skaper du en dydig sirkel. Hver iterasjon strammer guardrailsene, kodebasen blir renere, og kvaliteten forverrer til noe du kan stole på 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ør-lagene velger sterkt typede språk. Typesikkerhet er guardrailsen for maintainability, og å la AI ignorere den garanterer at appen din aldri vil nå produksjonskvalitet.

Brad Eckert er en livslang entrepreneur og ingeniørleder med over et tiår med erfaring med å ta produkter fra idefasen gjennom kundedistribusjon og utover. En avgangselev fra MIT, er han nå medstifter og CTO av Woz, en Y Combinator-støttet AI-plattform som gjør det mulig for alle å bygge og skala software-bedrifter, uten å kreve kode.