HelloWorld logo
25.11.2025. ·
5 min

Softverski inženjering & AI

Mita Čokić Mita Čokić

Razvoj softvera prolazi kroz fundamentalne promene koje će značajno uticati na način na koji se softver pravi. Ovo nije prvi put da se industrija suočava sa takvom promenom, koje su još i sve brže. Istorijski gledano, slične promene su zahtevale prilagođavanje velikog broja inženjera, na primer:

  • Mašinski jezik → Asembler
  • Asembler → Viši programski jezici
  • Proceduralno programiranje → Objektno-orijentisano programiranje
  • Desktop aplikacije → Web aplikacije
  • Tradicionalne aplikacije → Cloud aplikacije
  • Najnovije: Tradicionalno kodiranje → Razvoj uz pomoć veštačke inteligencije

Svaka od ovih promena nailazila je na određeni otpor. Sećam se perioda kada je .NET postajao popularan, oko 2006. godine. Jedna od glavnih briga među inženjerima, uključujući i mene, bila je: „Zašto ne mogu sam da upravljam memorijom?“ Vreme pokazuje koje promene ostaju dugoročne, a koje su samo kratkoročni trend.

Tokom karijere sam se često bavio optimizacijama na različitim nivoima. Jedan primer koji mi je ostao u sećanju je studija slučaja o inženjeru koji je optimizovao vreme čitanja podataka sa HDD-a – tradicionalnih rotacionih magnetnih diskova.

Za one koji nisu upoznati, ti diskovi su funkcionisali slično gramofonu: podaci su bili smešteni na rotirajućim pločama, a glava za čitanje se pomerala kako bi pristupila različitim sektorima. Optimizacija je podrazumevala smanjenje rastojanja između sektora koje treba čitati, kako bi se kompenzovala relativno spora rotacija ploča.

Još 2010. ovakav nivo optimizacija je postao nepostojeći na aplikativnom sloju zbog brzog razvoja tehnologija skladištenja. Decenijama se ovakve optimizacije obavljaju unutar drajvera za disk.

U ovom tekstu je fokus na velikim jezičkim AI modelima, Large Language Models (LLM).

Zadaci sa kojima se AI dobro snalazi

Da bismo razumeli kako AI oblikuje posao inženjera softvera, kao kod bilo kog alata, moramo razumeti kakve probleme rešava uspešno a kakve ne. AI se fantastično snalazi u sledećim slučajevima:

  • Pisanje šablonskog i repetitivnog koda

Pisanje standardnog ili templatizovanog koda postaje manje vredna veština. AI asistenti briljiraju u generisanju generičkog (boilerplate) koda, pisanju osnovnih funkcija i razvoju jednostavnih web aplikacija. Ovo dovodi do ubrzanog uvođenja low-code/no-code rešenja.

  • Pamćenje sintakse

Pamćenje sintakse programskih jezika već dugo nije ključno, a LLM-ovi su to dodatno olakšali. Konceptualno razumevanje algoritama i struktura podataka i dalje ostaje presudno. AI olakšava prelazak sa jednog na drugi programski jezik (npr. .NET -> Golang) odnosno podešavanje okruženja i sintaksu. Ipak, za performantni kod, potrebno je još uvek razumeti kako funkcioniše GC, strukture podataka i algoritme. Ovi jezici se uspešno snalaze kod automatskog prevođenja iz jednog u drugi programski jezik (code transpile).

  • Pisanje unit testova i dokumentacije

Često dosadan posao koji se može značajno delegirati AI asistentima.

  • Code review

Meni se lično pokazalo kao najkorisnija primena do sada. Ovi modeli su obučavani na velikim repozitorijumima i dobro prepoznaju sledeće situacije:

  • Pronalaženje uobičajenih bugova
  • Saveti za pisanje čitljivog koda
  • Prepoznavanje (anti)pattern-a
  • Bezbednosni problemi (npr. Copilot mi je otkrio da logovanje nije GDPR usklađeno, što bi mi možda promaklo)

Ljudski CR ostaje nezamenljiv, ali može biti fokusiran na konceptualni nivo i pronalaženje suptilnih grešaka.

  • Objašnjavanje koda i strukture repozitorijuma

Različiti kopiloti i asistenti mogu dosta dobro objasniti kako određen deo koda funkcioniše, koje su glavne klase i organizacija projekata.

Zadaci sa kojima se AI (još uvek) ne snalazi

Kako smo prošli kroz poslove koje AI može uspešno da uradi, možemo izdvojiti poslove koje još uvek AI ne može da zameni. Automatizacija rutinskih aspekata kodiranja podiže vrednost izrazito ljudskih sposobnosti:

  • Sistematsko i analitičko razmišljanje

Ovo je inherentno ljudska osobina. Prava inovacija kao što je osmišljavanje novih proizvoda, funkcionalnosti ili rešenja ostaje jedinstvena ljudska snaga. AI je odličan u optimizaciji postojećih obrazaca, ali ne stvara revolucionarne ideje.

  • Razlaganje složenih problema

Pre nego što AI može da generiše rešenje, ljudi moraju da protumače nejasne poslovne potrebe, razlože ih na logične, rešive komponente i definišu jasne zahteve i ograničenja. Prevođenje namere u preciznu tehničku specifikaciju ostaje i dalje temelj inženjeringa.

  • Dizajn sistema

Inženjeri moraju da procene kompromise između performansi, troškova, bezbednosti i dugoročne fleksibilnosti, odluke koje i dalje zahtevaju čoveka u najmanju ruku zbog odgovornosti.

  • Nadzor nad veštačkom inteligencijom uključenim u proces razvoja
  • Etička procena i upravljanje

Inženjeri snose odgovornost za razumevanje i rešavanje etičkih implikacija sistema koje grade.

Kako se prilagoditi?

S obzirom na to da smo svesni ovih trendova, postavlja se pitanje kako da se pripremimo za evoluciju u razvoju softvera. Ono šta trebamo imati na umu je:

  • Proširiti znanje na Data Science-a:

Interakcija sa jezičkim modelima nije više ograničena na data naučnike – to je alat koji svaki inženjer treba da nauči da koristi.

  • Razumevanje osnova jezičkih modela:

Naučiti kako funkcionišu veliki jezički modeli i gde se uklapaju u razvoj softvera.

  • Savladati različite tehnike interakcije sa modelima što podrazumeva prompting i korišćenje API
  • Eksperimentisanje naprednim slučajevima upotrebe

Početi sa jednostavnim zadacima kao što su generisanje koda ili dokumentacije. Iskusniji koriscnici mogu da isprobaju koncepte poput automatskog AI pregleda koda.

  • Upoznavanje ključnih alata: ovi alati čine osnovu modernih razvojnih okruženja:
    • LangChain – za razvoj aplikacija baziranih na naprednim jezičkim modelima
    • pandas – za manipulaciju podacima
    • MLflow – za praćenje eksperimenata
    • PyTorch – za razvoj modela
    • JupyterLab – za interaktivno kodiranje

U svakom slučaju, trebamo voditi računa o sledećim:

  • Biti na oprezu jer jezički modeli greše ili „lažu“.
  • Ako je naš posao uobičajen i postoji dataset, biće automatizovan i izvodljiv sa manje ljudi, i u nekom trenutku možemo preći na druge, izazovnije teme. Na to treba da budemo spremni.
  • Da li verujemo provajderu LLM-a? Hoće li doći do curenja podataka? Hoće li provajder koristiti naše podatke za treniranje modela? Ako nas to brine i enterprise rešenja nisu prihvatljiva, postoje neki manje sposobni modeli koje je moguće koristiti lokalno.
  • Na kraju dana, neko mora da debaguje kod, identifikuje suptilne bagove koje je AI uveo i predvidi nove bezbednosne ranjivosti. Jedno od glavnih ograničenja današnjeg AI-ja je pouzdanost.
  • To što je određeni procenat koda napisao AI ne znači da inženjer nije potreban, već da inženjer može da se fokusira na izazovniji posao.

Za sada izgleda da AI neće zameniti softverske inženjere, već da će inženjere zameniti oni koji koriste AI.

 

Napiši komentar
Mita Čokić Mita Čokić

Senior Principal Software Architect, Schneider Electric

Iz ove kategorije