@atlefren Jeg tror ikke AI vil overta så mye som man tror, i et lengre perspektiv. Ikke før den kunstige intelligensen blir mer intelligent.
En utvikler kan se potensiale i både gammel og ny kode. En dagens generative AI motorer skjønner knapt nok koden den genererer. De fremtidige generasjonene vil nok forstå bedre koden den genererer, men det er fortsatt et langt stykke frem til at den ser potensialet i dens egen kode.
En god utvikler i dag vil forstå om koden som skrives er generisk og kan gjenbrukes. Og hvis utvikleren kommer over kode som man vet er effektiv og som gjør mye av det en ny utfordring trenger - så vil utvikleren se potensialet i koden med litt "refactoring" og så gjenbruke koden flere steder. Dagens AI evner ikke dette.
En utvikler med bred erfaring med flere programmeringsspråk vil også forstå hvilke språk som egner seg mer enn andre, ut fra oppgaven. Og en særdeles dyktig utvikler vil også se potensialet i et programmeringsspråk hvis det utvides med noen ekstra funksjoner, og dermed kan språket utvikles videre. Noe som skjer med de fleste programmeringsspråk i dag. Dette vil i lengden gi mer effektiv kode, men det kan ta lengre tid å nå frem til målet.
Det er her de som hyper AI ikke skjønner noen de viktigste begrensingene til LLMene:
- Den er ikke intelligent - den kan ikke tenke "utenfor boksen".
- Den forstår ikke fullt ut resultatet av sine egne svar
- Det en AI genererer trenger ikke være sant, riktig eller realistisk
Eksempel: I OpenVPN 3 Linux prosjektet vurderer vi å bytte fra C++ til Rust. Trengte et godt D-Bus bibliotek og så at zbus hadde nesten alt vi trengte. En av kollegene mine involverte seg og fikk inn det som trengs av manglede funksjonalitet inn i zbus og vi vet nå at alt bortsett fra en selve OpenVPN 3 Core biblioteket vil gi store utfordringer, så alt av stacken bortsett fra selve klienten er klart for Rust.
Min kollega spurte da, for gøy, flere AI/LLMer om hvordan man kunne bruke OpenVPN 3 Core library (skrevet i C++) fra Rust. Og det manglet ikke på kreative svar. Alle pekte på forskjellige OpenVPN crates som kunne brukes og gjorde dette veldig enkelt. Problemet var at ingen av disse Rust crates eksisterte i virkeligheten.
Noe som Inga Strumke også påpeker mer generelt:
– Språkmodeller er lagd for å skrive gode setninger, ikke for å undersøke virkeligheten.
(ref: https://www.nrk.no/tromsogfinnmark/folk-bruker-kunstig-intelligens-feil_-sier-forsker-inga-strumke-1.17398359)
Det dagens AI kan brukes til, hvis den trenes primært på dine egne data (altså ikke en av disse generelle LLM tjenestene)
:
- Forstå kode godt nok til å kunne gi en generell forklaring på hva koden gjør - men den kan fortsatt ha misforstått noen detaljer
- Generere kode basert på en template, for eksempel refactoring av eksisterende kode den allerede kjenner. For eksempel: Flytt
class Foo
fra namespace ABC
til namesspace DEF
og gi den navnet class Bar
. Slike "kjedelige" og repeterende oppgaver har jeg mer tro på at AI kan håndtere bedre - fordi den kan også "forstå" nok til oppdatere tilhørende dokumentasjon samtidig. - Generere et generelt rammeverk med litt generell dokumentasjon for å komme i raskere gang.
Jeg tror nok at vi vil se AI og LLM bli tatt mer i bruk, men ikke i de store grande visjonene til AI hypen. Det blir mer som en assistent til dagens utviklere for å redusere mengden repeterende kode som må skrives.
Samtidig vil programmeringsspråkene også utvikle seg, til å også gjøre programmeringen enklere - noe vi definitivt så med vårt prøveprosjekt med OpenVPN 3 Linux i Rust. Mengden "boilerplate code" som trengtes for å få D-Bus integrasjonen endte opp mye mindre enn i C++, da zbus craten tok meste parten av den jobben.