Populære emner
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Oversettelse: Hvorfor store språkmodeller egentlig ikke kan bygge programvare
Av Conrad Irwin
En ting jeg bruker mye tid på er å intervjue programvareingeniører. Dette er åpenbart en vanskelig oppgave, og jeg tør ikke si at jeg har noen triks; Men det ga meg tid til å reflektere over hva en effektiv programvareingeniør gjør.
Kjernesyklusen for programvareutvikling
Når du ser på en ekte kjenner, vil du se at de alltid utfører følgende trinn i en syklus:
* Bygg en mental modell av behov.
* Skriv (forhåpentligvis?!) ) som implementerer kravene.
* Bygg en mental modell av hvordan koden din faktisk oppfører seg.
* Finn forskjellen mellom de to, og oppdater deretter koden (eller kravet).
Det er mange måter å oppnå disse trinnene på, men det fine med effektive ingeniører er deres evne til å bygge og vedlikeholde klare mentale modeller.
Hvordan fungerer store språkmodeller?
For å være rettferdig er store språkmodeller ganske flinke til å skrive kode. De gjør også en god jobb med å oppdatere koden når du påpeker problemet. De kan også gjøre alle tingene en ekte ingeniør ville gjort: lese kode, skrive og kjøre tester, legge til logger og (antagelig) bruke feilsøkingsprogrammet.
Men det de ikke kan gjøre er å opprettholde en klar mental modell.
Store språkmodeller vil falle i endeløs forvirring: de vil anta at koden de skriver faktisk er brukbar; Når en test mislykkes, kan de bare gjette om det er en fikskode eller en test fikset; Når de blir frustrerte, kutter de rett og slett alt ut og begynner på nytt.
Dette er det stikk motsatte av hva jeg ville forvente av en ingeniør.
Programvareingeniører tester mens de jobber. Når en test mislykkes, kan de bruke sin mentale modell til å avgjøre om de skal fikse koden eller testen, eller samle mer informasjon før de tar en avgjørelse. Når de føler seg frustrerte, kan de be om hjelp ved å kommunisere med folk. Selv om de noen ganger sletter alt og starter på nytt, er det et valg som tas etter en klarere forståelse av problemet.
Men det blir snart, ikke sant?
Vil dette endre seg etter hvert som modellene blir mer kapable? Kanskje?? Men jeg tror dette krever en grunnleggende endring i måten modeller bygges og optimaliseres på. Programvareutvikling krever modeller som er mer enn bare å generere kode.
Når en person støter på et problem, er de i stand til midlertidig å legge til side hele konteksten og fokusere på å løse problemet, og deretter gå tilbake til det store problemet. De kan også bytte mellom det store bildet og mikrodetaljene, midlertidig ignorere detaljene for å fokusere på helheten, og grave i delene når det er nødvendig. Vi blir ikke mer produktive bare ved å stappe flere ord inn i vårt "kontekstvindu", det vil bare gjøre oss gale.
Selv om vi kan håndtere en stor mengde kontekst, vet vi at disse generative modellene for tiden har flere alvorlige problemer som direkte påvirker deres evne til å opprettholde klare mentale modeller:
* Kontekstuell utelatelse: Modeller er ikke flinke til å oppdage oversett kontekstuell informasjon.
* Recency-skjevhet: De er utsatt for alvorlig nylighetsskjevhet når du arbeider med kontekstvinduer.
* Hallusinasjoner: De "fantaserer" ofte om detaljer som ikke burde eksistere.
Disse problemene er kanskje ikke uoverkommelige, og forskere jobber med å legge til minne i modeller slik at de kan utøve lignende tenkeferdigheter som vi gjør. Men dessverre, foreløpig, kan de (etter å ha gått utover et visst nivå av kompleksitet) egentlig ikke forstå hva som egentlig skjedde.
De kan ikke bygge programvare fordi de ikke kan opprettholde to like "mentale modeller" samtidig, finne ut forskjellene og bestemme om de skal oppdatere kode eller oppdatere krav.
Så, hva nå?
Det er klart at store språkmodeller er nyttige for programvareingeniører. De genererer kode raskt og utmerker seg ved å integrere krav og dokumentasjon. For noen oppgaver er dette nok: kravene er klare nok, problemene er enkle nok til at de kan gjøres over natten.
Når det er sagt, for enhver oppgave av en viss kompleksitet, kan de ikke opprettholde nok kontekst nøyaktig nok til å iterere til å endelig produsere en levedyktig løsning. Som programvareingeniør er du fortsatt ansvarlig for å sikre at kravene er tydelige og at koden faktisk leverer det den hevder å gjøre.
Hos Zed tror vi på en fremtid der mennesker og AI-agenter kan bygge programvare sammen. Vi er imidlertid overbevist om (i hvert fall foreløpig) at du er sjåføren bak rattet, og at store språkmodeller bare er enda et verktøy for hånden.
48,62K
Topp
Rangering
Favoritter