AI har fått stor oppmerksomhet for sine evner til å akselerere utviklingsprosesser, tilby raske løsninger og hjelpe til med en rekke programmeringsoppgaver. Likevel er det viktig å forstå både styrkene og svakhetene som følger med å bruke AI i utvikling. Når du står overfor et komplekst problem, er det avgjørende å vite når du bør stole på AI og når det er best å stole på din egen kompetanse. Her diskuteres de situasjonene der AI kan være et kraftig verktøy, samt de tilfellene der du kanskje bør ta over og gjøre det manuelt.

AI har blitt trenet på høynivå programmeringsspråk og abstraksjoner, og har derfor en tendens til å være svært god på oppgaver som er standardiserte eller forutsigbare. Imidlertid sliter AI med lavnivåoperasjoner som involverer bit-manipulering, optimalisering av minne eller maskinvare-spesifikke instruksjoner. Hvis du trenger å skrive kode som er tett knyttet til maskinvaren, som for en mikrokontroller eller SIMD-instruksjoner, vil AI kunne generere kode som kan virke plausibel, men som ikke nødvendigvis er optimal, eller til og med feil, på maskinnivå. AI har ikke en konkret forståelse av CPU-cache eller de tidkrevende kravene i sanntidssystemer. Dette er oppgaver der du enten må teste AI-genererte forslag nøye, eller skrive koden manuelt, for å unngå feil som kan påvirke ytelsen negativt.

Et annet område der AI har sine begrensninger, er når det kommer til svært spesifikke eller nisjebaserte rammeverk. Hvis du jobber med et nytt rammeverk som ikke eksisterte på tidspunktet AI ble trent, kan den ha problemer med å forstå den nyeste versjonen eller til og med produsere kode som ser ut til å passe, men som i realiteten er foreldet eller bruker ikke-eksisterende funksjoner. For eksempel, hvis en ny versjon av et web-rammeverk ble lansert med betydelige endringer forrige måned, vil AI ikke være oppdatert på disse endringene. I slike tilfeller er det viktig å gå tilbake til dokumentasjonen for rammeverket og gi AI tilstrekkelig kontekst for at den kan gi relevante forslag.

AI er heller ikke kjent for å være kreativ når det gjelder UI/UX-design. Det kan generere grunnleggende grensesnitt som er nyttige for velkjente mønstre, som skjemaer eller dashbord, men hvis du ønsker å skape et unikt og innovativt brukergrensesnitt uten klare precedens, kan AI være begrenset. Det kan ende opp med å sette sammen kjente komponenter, men å finne virkelig nyskapende design er fortsatt noe som krever menneskelig innsikt. For spesialtilpassede løsninger, vil det være nødvendig for deg som utvikler å gi AI veiledning eller gjøre justeringer på de forslagene den gir.

AI kan også ha problemer med å tolke implisitte eller motstridende krav. Dersom du for eksempel ber den om å gjøre noe "effektivt", kan AI slite med å forstå hva som faktisk er viktig for deg – om du prioriterer minnebruk eller hastighet. Den har ikke en ekte forståelse av endemålet og kan lett misforstå hva du virkelig ønsker. Her er det menneskelig ferdighet og forståelse som spiller en stor rolle, spesielt når kravene er uklare eller når det er snakk om forretningsregler som er spesifikke for ditt domene.

For eksempel, ved utvikling av en ny 3D-grafikkmotor i Rust, der ytelse er avgjørende og algoritmene er nye, vil AI kunne være nyttig for å sette opp grunnleggende rammer som et vindu og en render-loop. Men de spesialtilpassede og innovative delene av systemet vil kreve at du som utvikler tar over og finner løsninger på egen hånd. AI kan ikke gi innsikten som kreves for virkelig nyskapende løsninger. Den kan kun hjelpe til med mønstre og gjenkjente løsninger. Når innsikten er på plass, kan AI derimot raskt implementere den i koden.

Når du bruker AI, er det viktig å forstå hva den er god på. AI er utmerket for å generere standardiserte mønstre og kode. Det kan raskt sette opp et prosjekt eller lage kode for kjente løsninger. Det gir deg mer tid til å fokusere på de unike og kreative delene av utviklingen, der menneskelig innsikt og erfaring er uunnværlige. Bruk AI for bredde, for å generere mye kode og bygge grunnleggende strukturer, men ikke vær redd for å ta styringen på de mer komplekse og spesifikke delene av prosjektet.

Det er viktig å validere og teste koden AI genererer, spesielt i sikkerhetskritiske applikasjoner. AI kan lett overse detaljer som kan føre til sårbarheter. Derfor er det fortsatt nødvendig å gjennomgå og teste AI-generert kode på samme måte som du ville gjort med kode skrevet manuelt. Det samme gjelder for promptene du gir til AI. Hvis beskrivelsen din er uklar eller ambisiøs, kan AI lage løsninger som ikke helt møter dine behov. Derfor er presisjonsarbeid i beskrivelsen av kravene avgjørende.

I en tid der AI blir en integrert del av utviklingsprosessen, er det viktig å holde et balansert perspektiv. Løsningene som AI gir, bør vurderes som verktøy som hjelper deg, men aldri som erstatning for din egen tekniske forståelse og kreativitet. AI er best når det hjelper deg med de vanlige og repeterende delene av utviklingen, mens du som utvikler tar ansvar for å løse de unike problemene og innovasjonene som krever menneskelig intelligens og erfaring.

Hvordan seniorutviklere kan bruke AI for å øke produktiviteten uten å miste essensiell menneskelig innsikt

Seniorutviklere har en unik evne til å forstå de historiske årsakene bak hvordan ting er bygget i et selskap eller hvordan en bransje fungerer. Denne domeneinnsikten gir dem et fortrinn når de bruker kunstig intelligens (AI), ettersom de lettere kan oppdage feil AI gjør, som en nybegynner ikke ville fange opp. For å maksimere verdien av AI, må du som seniorutvikler fortsette å investere i å forstå problemområdet ditt på et dypt nivå. Dette innebærer å holde deg oppdatert på virksomhetens behov, brukerfeedback, samt nye forskrifter som påvirker programvaren. AI vil ikke automatisk ta hensyn til disse faktorene med mindre du instruerer det om å gjøre det. Når du kombinerer din domeneinnsikt med AIs hastighet, oppnår du de beste resultatene.

Seniorutviklere bør også bruke sin erfaring og intuisjon til å veilede AI. For eksempel, hvis du vet at en rask løsning vil føre til vedlikeholdsproblemer senere, kan du instruere AI om å implementere en mer bærekraftig løsning. Stol på den dømmekraften du har utviklet gjennom årene—hvis en kodebit ser «merkelig» ut eller for god til å være sann, bør du grave dypere. Ofte vil du ha fanget noe som AI ikke har tatt høyde for. Å kunne forutse andre- og tredjefaseffekter av koden er et kjennetegn på senioringeniører, og dette er en vane som ikke bør overskygges av AI. Tvert imot, denne erfaringen bør anvendes på det AI produserer.

Med AI som tar på seg en større del av kodinga, får seniorutviklere mer tid til å fokusere på de menneskelige sidene ved ingeniørfaget: å kommunisere med interessenter, lede designmøter og ta avgjørelser som setter teknologi i samsvar med forretningsstrategi. Tim O’Reilly og andre påpeker at ettersom rutinert koding blir enklere, vil verdien flytte seg mot å bestemme hva som skal bygges og hvordan komplekse systemer skal orkestreres. Senioringeniører er ofte de som orkestrerer og ser det store bildet, og det er derfor viktig å ta på seg den rollen. Det er nå mer essensielt enn noensinne å ta ansvar for oppgaver som AI ikke kan gjøre—de krever erfaring, menneskelig skjønn og, ofte, samarbeid på tvers av team.

En seniorutvikler som utnytter AI effektivt kan være betydelig mer produktiv enn en som ikke gjør det. Men de som virkelig vil utmerke seg, er de som bruker sine menneskelige styrker for å forsterke AIs produksjon, snarere enn å la det gå på autopilot. En Reddit-bruker uttalte en gang at «AI er en programmeringsforsterker» som «øker produktiviteten til seniorprogrammerere» betraktelig. Dette forsterkningseffekten er ekte, men det er din ekspertise som blir multiplisert. Derfor er det viktig å holde denne ekspertisen skarp og sentral i utviklingsprosessen.

Mellomnivå ingeniører står overfor et betydelig press for å utvikle seg. Mange av de oppgavene som tradisjonelt har fylt tiden deres—som å implementere funksjoner, skrive tester og fikse enkle feil—blir stadig mer automatisert. Dette betyr ikke at de er utdatert, men at de må heve sitt fokus. Overgangen skjer fra å skrive kode til å bygge spesialisert kunnskap. For å navigere denne utviklingen, bør mellomnivåingeniører fokusere på å håndtere systemintegrasjon og grensesnitt, samt å bygge domenespesifikk ekspertise.

Som systemene blir mer komplekse, blir det essensielt å forstå og håndtere grensene mellom komponenter. Dette innebærer API-design, hendelsesskjemaer og datamodeller—alle områder som krever nøye vurdering av forretningskrav og fremtidig fleksibilitet. Det er viktig å fordype seg i grunnleggende datavitenskap, som inkluderer avansert forståelse av områder som datamodeller, distribuerte systemer, databaseoptimering og nettverksprotokoller.

AI har en tendens til å løse det generelle tilfellet som standard, men virkelige programvarer er fulle av kanttilfeller og endrende krav. Det er utviklerens jobb å stille spørsmål som «Hva hvis...?» og undersøke svakheter. Kritisk tenkning og fremtidsrettet planlegging blir dermed viktige ferdigheter. Dette kan innebære å tenke på nullverdier, nettverksbrudd eller uvanlige brukerhandlinger.

Domenespesifikk ekspertise er også avgjørende. For eksempel, erfaring innen finanssystemer med regulatoriske krav, helsesystemer med personvernhensyn eller sanntidssystemer med strenge ytelseskrav. En AI har ikke samme kontekstuelle forståelse som en erfaren utvikler, og derfor er det viktig å bygge på denne kunnskapen for å ta de beste beslutningene om hvor og hvordan AI kan anvendes.

Ytelsesoptimalisering og DevOps er også områder der AI kan gi forslag, men der menneskelig forståelse fortsatt er uunnværlig. Identifikasjon og løsning av systemomfattende ytelsesproblemer krever en dyp forståelse av hele stakken, fra databaseforespørsler til frontend-rendering. I en tid der kodegenerering blir mer automatisert, er det å forstå hvordan systemer kjører i produksjon blitt enda mer verdifullt.

Med AI som tar på seg en større del av koden, blir grundig kodegjennomgang og kvalitetssikring enda viktigere. AI-generert kode bør behandles som om den kommer fra en junior utvikler: det er utviklerens ansvar å oppdage feil, sikkerhetshull eller slurvete implementeringer. Dette betyr at ferdigheter innen enhetstesting, integrasjonstesting og feilsøking bør styrkes. Skriving av gode tester er en ferdighet som tvinger utvikleren til å forstå spesifikasjonen og bekrefte korrekthet. Det er viktig å anta at ingenting fungerer før det er bevist.

Kvalitetssikring er et område hvor menneskelig grundighet er avgjørende. AI kan hjelpe til med feilsøking, men det mangler den spesifikke forståelsen av applikasjonens kontekst. Det er mennesker som besitter domene-spesifikk kunnskap og en forståelse av brukernes forventninger som gjør vurderingene av potensielle problemer relevante. Diagnostisering av komplekse feil krever kreativ problemløsning og evnen til å vurdere en bred rekke faktorer—ferdigheter som er naturlig menneskelige.