Da li je funckionalno programiranje paradigma budućnosti?

Infobip ❤️ Netokracijašta akvizicija znači za vas i za nas?

Da li je funkcionalno programiranje paradigma budućnosti? Razgovarali smo sa profesorom Matematičkog fakulteta

Dr Ivan Čukić, stručnjak iz oblasti funkcionalnog programiranja i docent na Matematičkom fakultetu, govorio je za Netokraciju o prednostima funkcionalne paradigme i njenoj implementaciji u objektno-orijentisane programske jezike.

Funkcionalno programiranje je paradigma koja postoji već šest decenija, ali do sada nije prevazišlo široko rasprostranjenu upotrebu objektno-orijentisanog programiranja.

Međutim, funkcionalno programiranje poslednjih godina postaje sve popularnije jer, zahvaljujući “čistim” funkcijama koje koristi, pokazuje impresivne rezultate u oblastima mašinskog učenja i analize podataka.

U skladu sa time, mnogi programski jezici (na primer, C++, Pyhton i Java) koji su ukorenjeni u objektno-orijentisanom programiranju implementirali su u sebe funkcionalne karakteristike.

Znači li ovo da se približavamo kraju objektno-orijentisanog programiranja i koje su sve prednosti funkcionalne paradigme, razgovarali smo sa dr Ivanom Čukićem, docentom na Matematičkom fakultetu Univerziteta u Beogradu čija doktorska disertacija nosi naziv “Funkcionalno i imperativno reaktivno programiranje zasnovano na generalizaciji monade nastavka u programskom jeziku C++”.

Za početak, ujedno ste i programer i predavač. U kojoj meri se ove dve instance podudaraju i kako utiču jedna na drugu? 

Ivan: Kada su u pitanju računarske teme, ove dve instance odlično idu zajedno. Mislim da je aktuelno iskustvo u privredi čak i neophodno za kvalitetnu nastavu i većinu kurseva u oblasti računarstva. Što se same nauke tiče, stvari dosta zavise od oblasti nauke kojima se ljudi bave. “Normalno programiranje” tu i nije toliko popularno kao neke druge oblasti poput mašinskog učenja, veštačke inteligencije ili numeričkih optimizacija.

U kojoj kompaniji ste zaposleni kao programer, čime se ona bavi i koja je vaša pozicija?

Ivan: Generalno radim kao “slobodnjak” (freelancer) – treninzi, radionice, savetovanje i razvoj softvera. Trenutno najviše sarađujem sa kompanijom KDAB koja većinom razvija softver za medicinske uređaje drugih kompanija, mada ima i drugih tipova projekata. Trenutno, moja primarna okupacija je vođenje projekta na kome razvijamo infrastrukturu za FAIR (Facility for Antiproton and Ion Research).

Kao docent na Matematičkom fakultetu, kako vidite trenutno stanje u obrazovnom sistemu? Da li je usklađen sa svetskim standardima?

Ivan: Ovo je dosta problematično pitanje, i pravi odgovor teško može da stane u nekoliko rečenica. Mislim da je kod nas visoko školstvo mnogo kvalitetnije nego što bi se očekivalo kad se uzme u obzir koliko se u njega ulaže.

Ono što mogu da kažem iz svoje perspektive je da se na Katedri za računarstvo i informatiku Matematičkog fakulteta trudimo da budemo aktuelni i da unapređujemo kvalitet studija iz godine u godinu. Da su ova unapređenja vidljiva dobijam potvrde sa vremena na vreme iz različitih IT kompanija u koje naši diplomci odu na intervjue za zaposlenje.

Za “svetske standarde” ne znam šta da kažem, a da ostanem politički korektan. Naravno da postoje stvari koje možemo da unapredimo, ali mislim da ne moramo nužno da kopiramo druge da bismo bili dobri.

Stručnjak ste iz oblasti funkcionalnog programiranja. Po čemu se ova paradigma razlikuje od proceduralnog i objektno-orijentisanog programiranja?

Ivan: Prvo bih napomenuo da programske paradigme nisu međusobno isključive. Ovo je nešto što ljudi često misle – ako koristim objektnu paradigmu, nemam šta da tražim u funkcionalnoj. I obrnuto.

Na ovo možemo da gledamo kao na muzičke žanrove – postoje bendovi koji su se učaurili u jednom žanru i iz godine u godinu izbacuju skoro iste pesme (koliko god da volim AC/DC…). Ali najbolji bendovi su uvek bili neka mešavina različitih muzičkih pravaca.

Kao što su muzički žanrovi mešani u zavisnosti od toga koji smisao kompozicija treba da ima, tako se i programske paradigme mogu mešati u zavisnosti od toga kakav problem rešavamo.

Ovo je i glavni razlog zbog kog mislim da nikad nećemo videti neki tradicionalni funkcionalni programski jezik na vrhu indeksa najpopularnijih programskih jezika Tiobe. Umesto da funkcionalni programski jezici postanu primarni, ostali jezici će dobiti sve korisne funkcionalne osobine.

Ljudi već sad često koriste funkcionalne koncepte, a da nisu toga ni svesni.

Ono što je mene privuklo funkcionalnom programiranju nisu ni “čiste” funkcije (funkcije koje nemaju nuspojave – koje ne menjaju nikakvo stanje programa, nego samo računaju rezultat na osnovu vrednosti koje su im prosleđene kroz argumente), ni imutabilne strukture podataka, nego sama moć apstrakcije koju ono pruža.

Sećam se kad je davno Java dobila petlju foreach, da je to reklamirano kao neverovatno unapređenje. Naravno, foreach jeste veoma korisna stvar, ali u funkcionalnim programskim jezicima ovo nije nešto što je moralo da se doda u sam kompajler. 

Čak i u programskom jeziku LISP, koji je najstariji funkcionalni programski jezik, bilo je moguće implementirati funkcionalnost poput petlje foreach u jednoj liniji bibliotečkog koda bez izmene samog jezika.

Dakle, umesto da programer mora da sačeka kompaniju ili organizaciju koja upravlja nekim programskim jezikom (za Javu je u to vreme ta kompanija bila Sun Microsystems) da odluči da je neka novina korisna, pa da je implementira i doda u taj programski jezik, najzad da se nova verzija jezika raširi dovoljno po svetu da bi ljudi mogli bez brige da koriste tu novinu, u funkcionalnom svetu je dodavanje ovako nečeg bilo pitanje minuta.

Da li funkcionalna paradigma u budućnosti preti da potisne onu objektno-orijentisanu?

Ivan: Svet programskih paradigmi nije toliko turbulentan koliko bi čovek pomislio kad vidi koliko se novih programskih jezika stvori svake godine.

Svi kukaju na objektno-orijentisanu paradigmu jer je veoma zastupljena. Da parafraziram Bjarna Strostrupa, postoje paradigme na koje se ljudi stalno žale i paradigme koje niko ne koristi (originalna izjava je bila za programske jezike, ne za paradigme).

Funkcionalna paradigma ima veliku stigmu da je previše akademska. Tom utisku umnogome doprinosi i činjenica da zajednica funkcionalnih programera obožava da jednostavnim konceptima daje kreativna imena poput “monada”, “aplikativ” i “prizma”.

Rekao bih da će funkcionalno programiranje postati veliki deo budućnosti, ali neprimetno. Funkcionalni koncepti će biti deo svakodnevice i programeri neće ni razmišljati o tome iz koje paradigme je nešto što koriste.

Koji alati su po vašem mišljenju must have kada je u pitanju funkcionalno programiranje?

Ivan: Ne znam da li je neki baš alat bitan, ali bih mogao da izdvojim jedan funkcionalni jezik koji jeste – Haskell.

Mislim da je korisno naučiti ga i implementirati u njega nekoliko programa srednje veličine (običnih konzolnih, ali i programa sa grafičkim okruženjem) jer je jezik dosta striktan i zahteva drugačiji pogled na svet da bi se koristio.

Taj drugačiji pogled ume kasnije da bude veoma koristan pri razvoju softvera u “uobičajenim” programskim jezicima.

Možete li nam ukratko objasniti kako korišćenje ‘čistih’ funkcija unapređuje C++ programe?

Ivan: Kao što sam maločas napomenuo, “čiste” funkcije nisu ono što bih izdvojio kao najbitniju karakteristiku funkcionalnih programskih jezika.

Funkcije višeg reda – funkcije koje kao argumente mogu da primaju druge funkcije, ili da vrate novu funkciju kao svoj rezultat – su ono što prema mom mišljenju daje moć funkcionalnim programskim jezicima jer su one te koje bezgranično povećavaju izražajnost programskog jezika.

“Čistoća” funkcija, sa druge strane, sužava izražajnost. U jezicima koji zahtevaju čistoću (poput Haskell-a) mnogi ispravni konstrukti koje bismo pisali u drugim jezicima postaju nevalidni. Ovo, naravno, ima svoje prednosti (čistoća je veoma korisna u višenitnim sistemima) ali nije zabavno.

Zabavnije je igrati se Lego kockama, nego nekom unapred sklopljenom igračkom koja može da radi samo jednu stvar. Barem meni.

U skladu sa prethodnim pitanjem, koje to funkcionalne karakteristike C++ ima implementirane u sebi?

Ivan: Sve.

Šalu na stranu, C++ od svoje prve standardizovane verzije iz 1998. godine ima funkcije višeg reda. Algoritmi koji su implementirani u standardnoj biblioteci poput std::sort, std::partition i std::count_if svi kao neki od argumenata primaju druge funkcije. Takođe, postoje i stvari u standardnoj biblioteci koje prave nove funkcije (std::bind, std::not_fn).

Jedan od poznatih kolega C++-aša, Džejson Tarner (Jason Turner), kad je čitao moju knjigu se našalio da ne zna šta je tu funkcionalno programiranje, da je ono što piše u knjizi samo “C++ best practices.

Ono što je bila ogromna mana C++-a u kontekstu funkcionalnog programiranja je sintaksa upotrebe ovih funkcija višeg reda.

Ovo je rešeno lambdama u C++11, a dodatno poboljšano intervalima (range) u C++20 i C++23 koji olakšavaju komponovanje algoritama i transformacija nad kolekcijama podataka.

Kada su u pitanju čiste funkcije, C++ ne proverava da li smo nešto implementirali kao čisto ili ne, ali postoje neke stvari poput ključne reči const koje olakšavaju pisanje čistog koda. Takođe, kad smo već kod čistoće, C++ nema ugrađene imutabilne strukture podataka, ali postoje eksterne biblioteke koje ih veoma efikasno implementiraju.

Od ostalih osobina koje ljudi često povezuju sa funkcionalnom paradigmom (prvenstveno jer su to osobine koje Haskell ima), kroz eksterne biblioteke je moguće koristiti i poklapanje oblika (pattern matching), lenjo izračunavanje, i mnoge druge.

Kakva je budućnost C++ i u kom pravcu se kreće razvoj ovog programskog jezika?

Ivan: Trenutno glavni problem C++-a je njegov imidž nebezbednog programskog jezika.

Dok je u C++-u relativno lako pisati korektan kod, mnogi ljudi imaju mentalitet “bolje ja znam od kompajlera” pa neke stvari koje bi mogle da se implementiraju na bolji način upotrebom viših konstrukata C++-a odluče da implementiraju ručno što često kao posledicu prouzrokuje sigurnosne propuste.

Kada se uzme u obzir činjenica da je infrastruktura na kojoj se vrti ceo svet implementirana u C++-u (web pregledači Firefox i Chromium, virtuelne mašine za Javu i .NET…), ovo predstavlja veliki problem zbog kog je C++ u nekim krugovima na lošem glasu.

Budućnost nije moguće predvideti, ali ne verujem da će C++ nestati dok ja odem u penziju, a ni posle toga. Koliko će biti zdrav tada zavisi od toga koliko C++ zajednica uspe da edukuje nove programere da pišu bezbedan kod.

Što se tiče razvoja samog jezika, ne odvija se preterano brzo, ali je značajno bolja situacija nego što je bila ranije. Sada se na svake tri godine javi novi standard koji uvek donese nešto lepo i korisno.


Želiš da podeliš svoje mišljenje o ovoj temi? Komentari su otvoreni na našoj Facebook i LinkedIn stranici!

Popularno

Upoznajte poslodavce

Zašto je Smallpdf uveo 16 nedelja plaćenog odsustva za novopočene tate?

Da li ste nekada čuli za termin 'paternity leave' i da li znate šta on tačno podrazumeva? Odgovor na ovo pitanje potražili smo u razgovoru sa Ivom Marinković iz kompanije Smallpdf koja je ovaj benefit nedavno omogućila svojim zaposlenima.

Analiza

Da li je krah FTX-a ‘smrtni udarac’ za kripto ekosistem?

Dok se Web2 bavi akvizicijom Twittera, sa druge stranice svedoci smo jedne od najvećih kriza koje su pogodile Web3. U velikoj analizi otkrivamo kako će se propast druge najveće kripto menjačnice odraziti na čitavu industriju.

Web 3.0

Prevara, laži i romansa na radnom mestu: Šta znamo o SBF i propasti FTX-a?

Kripto kriza se neumoljivo nastavlja, a mi vam donosimo najnovije vesti o FTX kolapsu i potencijalnim posledicama koje on može ostaviti na svetsku ekonomiju.

Propustili ste

Karijere

Microsoft i LinkedIn objavili online kurseve digitalnih veština za 10 miliona ljudi koji traže posao

Kompanija Microsoft ima plan da u saradnji s LinkedIn-om do 2025. godine obezbedi obuke i kurseve za 10 miliona ljudi i na taj način im omogući da steknu veštine i sertifikate koji će im pomoći u pronalaženju poslova.

Intervju

Razgovori sa seniorima: Kako je Tamara od studija psihologije došla do seniorske pozicije u ‘game dev’ industriji

Igranje modernih video igara uvek je u meni izazivalo dozu interesovanja o tome kako zapravo nastaju ovako veliki projekti. Do sada smo imali priliku da često pišemo o tome, pa i nastavljamo u tom smeru kroz razgovor sa Tamarom Perić koja je Lead Game Designer u regionalnoj kompaniji Mad Head Games.

Sponzorisano

Razvoj samouslužnih bankarskih alata kao odgovor na promene navika klijenata?

Korisnici bankarskih usluga sve više zahtevaju samostalnost u radu, bez obaveze odlaska u ekspozituru. Tendencije idu ka tome da će ekspozitura ostati dominantan kanal za nešto kompleksnije bankarske proizvode, kao i mesto gde će klijenti pretežno vršiti konsultacije sa bankarskim službenikom.

Office Talks Podcast

Kako od nule napraviti mobilnu aplikaciju za vaš proizvod? (Smallpdf)

U 120. epizodi Office Talks podkasta imali smo priliku da ugostimo Željka Ilića i Ivana Milisavljevića iz kompanije Smallpdf. Sa njima smo razgovarali o proizvodima, radu na mobilnim aplikacijama i kompanijskoj kulturi.

Tehnologija

DaFED #58: Kako na efikasan način podići performanse i optimizovati web sajt

Oslobodite vaše kalendare, jer je 58. DaFED događaj zakazan za četvrtak 8. decembra s početkokm od 18 časova, u Amfiteatru centralne zgrade Univerziteta u Novom Sadu.

Upoznajte poslodavce

Kako je Ananas postao startap unutar korporacije i okupio internacionalni tim sa iskustvom iz Amazona i Gugla?

Kako izgleda razvoj jednog od najambicioznijih e-commerce projekata u regionu? Koliko ljudi radi na developmentu i kako su oni organizovani? Odgovor na ovo pitanje potražili smo u razgovoru sa Belom Klašnjom, CTO kompanije Ananas koja stoji iza istoimene web prodavnice.