Sve češća upotreba alata kao što su GitHub Copilot i Claude Code pretvara programere u “autocomplete” izvršioce. Kod izgleda savršeno, prolazi testove, ali često nema ljudsku logiku i iskustvo neophodno za održavanje složenih sistema.
Sve više inženjera priznaje da im AI alati pišu značajne delove koda. Na prvi pogled rezultat je besprekoran: elegantne asinhrone funkcije, uredni DTO-ovi i pravilne promise sekvence. Međutim, ispod površine često izostaje “zašto”, odnosno ljudska namera iza svake arhitektonske odluke. Posledice su ozbiljne: pogrešan izbor izvršnih niti, izostanak timeout-a, loše rukovanje greškama i nepoštovanje timskih konvencija koje čine kod čitljivim i održivim.
AI kod nije svestan konteksta projekta
Na jednom code review-u otkriveno je da je AI napisao čitavu ključnu funkciju u Java mikroservisu. Kod je koristio CompletableFuture i delovao besprekoran, ali je ignorisao praksu tima da I/O operacije izvršava preko virtual-thread executora. Time je stvoren skriveni problem skalabilnosti jer je blokirao ForkJoinPool namenjen CPU-bound zadacima.
Slični problemi pojavili su se kod nedostatka timeout-a za mrežne pozive i neadekvatne obrade grešaka. AI-jev generički pristup doveo je do rizičnih tačaka koje iskusni inženjer nikada ne bi propustio. Još jedan simptom je kršenje ustaljenih obrazaca izgradnje DTO objekata, što otežava održavanje i unosi zabunu u timski rad.
Ovakav kod prolazi testove i funkcionalno radi, ali nema ljudske otiske jer nedostaje znanje o specifičnim ograničenjima sistema, istoriji projekta i arhitektonskim kompromisima.
Phantom bugovi i lažna sigurnost
Problem nije ograničen na Java servise. U jednom incidentu u JavaScript aplikaciji, AI je generisao konkurentnu logiku pomoću Promise.all. Kod je bio ispravan na papiru, ali je zanemario interakcije eksternih API-ja i implicitne pretpostavke o redosledu izvršavanja. Rezultat je bio “phantom bug”, povremena korupcija podataka koju je bilo gotovo nemoguće dijagnostikovati jer dizajnerske odluke nisu bile dokumentovane niti shvaćene od strane tima.
Takvi bagovi nisu greške u sintaksi već posledica nedostatka ljudskog promišljanja u arhitekturi.
Kako povratiti ljudsku ulogu u razvoju
AI može da ubrza implementaciju, ali ne sme da vodi razvoj. Ključna pravila za vraćanje kontrole nad kodom uključuju:
- Arhitektura pre tastature: rešenje prvo treba osmisliti na tabli ili u dijagramu, tek potom uključiti AI da ubrza implementaciju.
- Kontekst je ključ: AI-u uvek treba dati jasan opis postojećih konvencija, primere dobrog koda i stil obrade grešaka kako bi sugestije bile prilagođene projektu.
- AI kao partner za pitanja: koristiti ga za analizu uzroka problema, ne samo za automatske popravke.
- Završni “craftsmanship pass”: dodati komentare koji objašnjavaju motive odluka, preimenovati generičke promenljive i prilagoditi kod standardima tima.
AI neće zameniti odlične programere, ali može da ugrozi one koji pristanu da budu samo operateri za automatski generisan kod. Budućnost softverskog zanata leži u sposobnosti inženjera da vode alatke, a ne da budu vođeni njima.