Algoritmi + Strukture Podataka
![](https://heapspace.rs/wp-content/uploads/resized/2024/02/blog-algoritmi-strukture-podataka-1-768x0-c-default.jpg)
Jedna od prvih mantri koju čujete kada započinjete sa obučavanjem u programiranju je ujedno i ime knjige:
Algorithms + Data Structures = Programs
Niklaus Wirth, 1976
Čini se da je tako, zar ne? Algoritmi su nekakvi koraci po kojima se izvršava program, a strukture podataka definišu način kako se podaci čuvaju, što direktno utiče na to i kako se obrađuju (pomenutim algoritmima). Programi su, u krajnjoj liniji, konkretne formulacije apstraktnih algoritama zasnovani na posebnim reprezentacijama i strukturama podataka.
Ovo nagoveštava da je neophodno poznavati obe oblasti da bi uspešno pravili programe. Postoji nekakav broj algoritama A
i broj struktura podataka S
koji nam garantuje uspešnu izradu velike većine programa koji nas čekaju u karijeri. Koji je to broj? Koji su to fundamentalni algoritmi i strukture koje moraš naučiti pre pisanja bilo kakvog programa? Da li je ovakva knjiga dovoljna?
Programeri koji su proveli više godina baveći se razvojem softvera bi vam rekli da tokom karijere ne pišu ni A od algoritama; dok od struktura ne vide više od tri: lista, mapa i, ređe, drvo. (Stvari su drugačije na razgovorima za posao, ali je to druga tema.
Drugim rečima, čini se da programiranje 50-tak godina kasnije od vremena kada je napisana knjiga više nije isto. Danas je programiranje više „spajanje“ udaljenih servisa i presipanje podataka iz jednog u drugi oblik. Niko, zaista, neće pisati algoritam za sortiranje; koristiće umesto toga TimSort (očekivali ste QuickSort, zar ne? Vreme je da upotpunite vaše poznavanje algoritama😃.) Algoritmi će biti samo crne kutije koje imaju svoj ulaz i izlaz. Slično je i sa podacima: više je do toga šta ide sa čime zajedno i kako se obavlja transformacija podataka iz jednog oblika u drugi (na pr.: baza u/iz json-a.)
Zanimljivo je da će iste te iskusnije kolege da tvrde da je neophodno učenje algoritama i struktura podataka! Iako ih ne koriste svakodnevno, važi uverenje da bez njih nema programiranja – ili bar obučavanja za programera.
Kontradikcija nameće pitanje:
Šta danas znači poznavanje algoritama i struktura podataka? Da li je dovoljno samo znati uslove u kojima se neka koristi – na primer, ako ti treba slučajno čitanje iz nekakve uređene kolekcije, koristi to i to? Ili je ipak neophodno bolje poznavati kako zaista rade algoritmi, jer se to znanje nekako koristi dalje, u svakodnevnom radu? Da li ste u kodu koji ste danas napisali upotrebiti bilo šta od algoritama i načina strukturisanja podataka o kojima nas uče na početku karijere?
Da li ima nečega u veštini programiranja što je važnije od algoritama i struktura podataka?
Ovde smo, zapravo, na tragu suštinskog pitanja: šta je programiranje zaista (ili treba da bude)? Kada to ustanovimo: koji je efikasan i ispravan način obučavanja za ovu veštinu?
Sve ovo može da se završi zanimljiva diskutuja (ili debata) o kojoj bi Heapspace voleo da priča.