# Je umetna inteligenca že izbrala programske jezike prihodnosti?
*Generativna umetna inteligenca ne odpravlja pomena izbire tehnološkega sklada. Nasprotno: podjetja vse bolj izbirajo jezike in ogrodja, pri katerih orodja za programiranje z umetno inteligenco ustvarijo najbolj zanesljivo, preverljivo in vzdržno kodo.*
V razpravah o umetni inteligenci za programiranje se pogosto pojavlja obljuba, da programski jezik kmalu ne bo več pomemben: razvijalec naj bi problem opisal v naravnem jeziku, agent z umetno inteligenco pa bi sam ustvaril ustrezno rešitev v katerikoli tehnologiji. Podatki in izkušnje iz prakse za zdaj kažejo bolj zapleteno sliko.
Orodja, kot so GitHub Copilot, ChatGPT, Claude in podobni programski agenti, lahko bistveno pospešijo pripravo kode. Vendar niso enako učinkovita v vseh jezikih, knjižnicah in ogrodjih. Njihova kakovost je praviloma boljša tam, kjer obstaja veliko primerov kode, dokumentacije, vprašanj in odgovorov skupnosti ter dobro uveljavljenih razvojnih vzorcev. To daje pomembno prednost že prevladujočim ekosistemom, predvsem Pythonu, JavaScriptu in TypeScriptu.
## Python je prevzel GitHub, JavaScript ostaja temelj spleta
GitHub je v poročilu **Octoverse 2024** navedel, da je Python po številu sodelujočih razvijalcev prehitel JavaScript in postal najbolj uporabljan jezik na platformi. Rast je tesno povezana z razvojem umetne inteligence, podatkovne znanosti in strojnega učenja, kjer je Python že dolgo osrednji jezik.
To pa ne pomeni, da JavaScript izgublja pomen. JavaScript ostaja ključni jezik spletnega razvoja, TypeScript pa je postal standardna izbira za številne večje spletne in poslovne aplikacije. TypeScript je nadgradnja JavaScripta, ki doda statično tipiziranje – možnost, da razvijalec ali orodje vnaprej določi, kakšne podatke funkcija pričakuje in vrača.
V raziskavi **Stack Overflow Developer Survey 2024** je JavaScript uporabljalo 62,3 odstotka vseh anketiranih razvijalcev, TypeScript 38,5 odstotka, Python pa 51 odstotkov. Ti deleži se med posameznimi skupinami razvijalcev razlikujejo, vendar jasno kažejo, da so omenjeni jeziki med najbolj razširjenimi v stroki.
Za podjetja, ki razvijajo produkte z umetno inteligenco, je delitev dela pogosto jasna: Python se uporablja za podatkovne tokove, modele, analitiko in eksperimentiranje, JavaScript oziroma TypeScript pa za uporabniške vmesnike, nadzorne plošče, spletne aplikacije in integracije z uporabniki.
## Zakaj so programski agenti boljši v nekaterih tehnologijah?
Veliki jezikovni modeli ne razumejo kode na enak način kot izkušen razvijalec. Učijo se statističnih vzorcev iz velikih količin besedilnih in programskih podatkov. Ponudniki modelov praviloma ne razkrivajo celotnih učnih zbirk, vendar je jasno, da so javno dostopna koda, dokumentacija, odprtokodni projekti in tehnična razprava pomemben del širšega okolja, iz katerega modeli pridobivajo znanje.
Posledica je praktična: če razvijalec od agenta z umetno inteligenco zahteva komponento v Reactu, API v Node.js ali podatkovni proces v Pythonu, bo model pogosto znal ponuditi razmeroma uporaben osnutek. Pri manj razširjenem ogrodju ali zelo specifični interni tehnologiji pa je več možnosti, da bo ustvaril zastarelo rešitev, uporabil neobstoječ API ali predlagal kodo, ki je videti prepričljivo, vendar v praksi ne deluje.
To ustvarja povratno zanko. Več razvijalcev uporablja določeno tehnologijo, več primerov nastane v javnih repozitorijih in dokumentaciji, zato so orodja umetne inteligence pri njej bolj uporabna. Ker so orodja bolj uporabna, jo nova podjetja še pogosteje izberejo.
Tak mehanizem lahko poveča vstopne ovire za nova ogrodja in manjše odprtokodne skupnosti. Tehnološko boljša rešitev ni nujno tudi rešitev, za katero bo programski agent znal takoj ustvariti kakovostno kodo, teste in dokumentacijo.
## TypeScript kot varovalka pri kodi, ki jo ustvari umetna inteligenca
Hitrejše ustvarjanje kode ne pomeni nujno hitrejšega razvoja kakovostnega produkta. Eden največjih izzivov pri uporabi generativne umetne inteligence je preverjanje pravilnosti ustvarjene kode.
Model lahko napiše funkcijo, ki je slogovno urejena in je na prvi pogled smiselna, vendar vsebuje napačno predpostavko o podatkih. Takšna napaka se lahko pokaže šele v produkciji, ko aplikacija prejme nepopoln odgovor API-ja, drugačno obliko podatkov ali nepredviden uporabniški vnos.
Tu postane TypeScript pomemben. Statično tipiziranje lahko še pred zagonom programa opozori na več razredov napak, med drugim:
– funkcija prejme objekt, ki mu manjka obvezno polje;
– vrednost je lahko `null` ali `undefined`, koda pa to spregleda;
– API spremeni strukturo odgovora, aplikacija pa še vedno pričakuje star format;
– komponenta uporablja podatke na način, ki ni združljiv z definicijo sistema.
Tipiziranje ni nadomestilo za testiranje, varnostni pregled ali izkušenega razvijalca. Je pa učinkovita prva obrambna plast, zlasti kadar ekipa hitro sprejema večje količine kode, ki so jo deloma ustvarila orodja umetne inteligence.
## Ozko grlo ni več vedno pisanje kode
Največja sprememba se morda ne skriva v tem, koliko kode lahko ekipa ustvari, temveč koliko je lahko odgovorno pregleda. Programske agente je mogoče vključiti hitro, dodatne licence ali zmogljivejši modeli pa lahko povečajo količino ustvarjene kode skoraj čez noč. Preverjanje pa ostaja omejeno s številom ljudi, ki poznajo arhitekturo, poslovna pravila, varnostne zahteve in posledice sprememb v produkciji.
Zato se vrednost razvijalca premika od hitrega pisanja sintaktično pravilne kode k presoji. Pomembnejša postajajo vprašanja: Ali rešitev res obravnava poslovni problem? Ali je varna? Ali bo delovala pri večji obremenitvi? Ali spoštuje zasebnost, pravice uporabnikov in pravila dostopa? Ali jo bo ekipa razumela in vzdrževala tudi čez dve leti?
To vpliva tudi na zaposlovanje. Tehnični razgovori, ki preverjajo predvsem sposobnost hitrega reševanja izoliranega programskega problema, lahko pokažejo manj kot prej. Podjetja bodo vse pogosteje potrebovala razvijalce, ki znajo prebrati in kritično ovrednotiti kodo, ki je niso napisali sami – vključno s kodo, ki jo je ustvaril model.
## Kaj to pomeni za Slovenijo?
Za slovenska podjetja in razvojne ekipe to ni poziv k nekritični standardizaciji na en sam jezik. Je pa razlog, da izbiro tehnološkega sklada obravnavajo širše kot doslej.
Pri odločitvi ni več pomembno samo, ali je določeno ogrodje hitro ali elegantno. Pomembni so tudi razpoložljivost kadrov, kakovost dokumentacije, zrelost odprtokodne skupnosti, varnostni mehanizmi, sposobnost testiranja in podpora orodij umetne inteligence.
Slovenske izobraževalne ustanove in podjetja bi zato ob programskih jezikih morale poudarjati še arhitekturo programske opreme, testiranje, varnost, delo z API-ji, razumevanje podatkovnih struktur ter kritično uporabo generativne umetne inteligence. Razvijalec prihodnosti ne bo manj pomemben zato, ker model zna napisati funkcijo. Pomembnejši bo zato, ker bo moral znati presoditi, ali funkcija sploh sodi v produkt.
Umetna inteligenca torej ne izbira programskega jezika namesto podjetij. Vpliva pa na to, katere tehnologije postajajo lažje dostopne, hitrejše za uporabo in cenejše za vzdrževanje. Najuspešnejše ekipe ne bodo tiste, ki bodo ustvarile največ kode, temveč tiste, ki bodo znale najhitreje prepoznati, katera koda je vredna zaupanja.
## Viri
– GitHub, **Octoverse 2024**: https://github.blog/news-insights/octoverse/octoverse-2024/
– Stack Overflow, **2024 Developer Survey**: https://survey.stackoverflow.co/2024/
– GitHub, informacije o **GitHub Copilotu in odgovorni uporabi**: https://docs.github.com/en/copilot/responsible-use-of-github-copilot-features
– TypeScript Handbook, Microsoft: https://www.typescriptlang.org/docs/

