Algoritma i igara!

3 min

Niklas Wirth 1976. objavljuje knjigu: “Algorithms + Data Structures = Programs”. Švajcarac je dizajnirao nekoliko programskih jezika pre i nakon knjige, uključujući i Paskal.

Smatramo da je algoritmika neophodna za razvoj softvera. Učimo je od prvih dana (iako su strukture podataka osnovnije); jednačina iz imena knjige postaje aksioma koju usvajamo i tetoviramo u svest.

A opet, razvoj softvera kakav je danas je ponajmanje pisanje nekakvih složenih algoritama.

Suština algoritama je da problem podeli u korake, pretvori u proceduru; da bi rešenje moglo da se stabilno sprovodi iznova.

Tako gledano, programer mora da poznaje algoritmiku. Tačnije, mora da bude upoznat sa načinom kako se problem razlaže - raščlanjuje - na korake kojima ga rešava. Softverski razvoj podrazumeva da računar sprovodi korake. (Vežba za razmišljanje: kako bi algoritam izgledao ako bi ga sprovodila ne-računarska ili ne-turingova mašina)?

Dalje, algoritmika nema nikakve veze sa stepenom složenosti problema. U tom grmu leži zec. Negde smo u glavama prespojili da složenost problema iziskuje dobru algoritmiku. Te jednakost tranzitivno pretpostavlja dobrog programera, poznavaoca dobre algoritmike.

Ne. Rešavanje problema se prvo svodi na logičko razrešenje, a tek potom na raščlanavanje u algoritamske korake. Jednostavniji problemi su trivijalni u prvom koraku, te nam izmiče prilikom obučavanja. Logičko rešavanje zahteva poznavanje drugih domenskih znanja: matematike, statistike itd. koja nisu algoritmika.

Upravo je to jedan od razloga zašto tkzv. “coding interviews” imaju pogrešan fokus. Umesto da se bavimo algoritmikom (i mnogo čime drugim), kandidata merimo kroz rešavanje nekakvih akademskih problema. Stop Coding Interviews, što bi rekao Džobs.

Učestvovao sam u kratkoj razmeni mišljenja, tokom koje se potegla ideja da bi profesionalan programer trebalo da “oštri svoju oštricu” znanja povremenim rešavanjem algoritamskih zadataka, kojih je pun internet. Deo mene je odmah dečački radosno poskočio, poslao svima invite na repo u kojem se bavim takvim problemima i podelio poslednju glavolomku - da, volim da rešavam algoritamske probleme. Ipak, lupio sam sebe po prstima. Upitao sam kada je poslednji put da smo se bavili nekim soft-skil problemom? Ili vežbanjem apstrakcije (vežba za razmišljanje: kako bi vežbali apstrakciju)? Ili pronalaženjem obrazaca (vežba sa razmišljanje: kako bi vežbali prepoznavanje obrazaca)? Ili komunikacijom? Ili, da ne mudrujem previše, samo čitanjem legacy koda? Sve to su veštine koje inženjer podjednako poseduje i vrednije su od pukog pisanja koda.

Štos je što je rešavanje algoritamskih zadataka jednostavno zabavno. Pisanje koda je zabavno. Nema ničega lošeg u tome, šta više. Sve je to oket, dok god znamo da se igramo.

Niklas se bavio programskim jezicima, te je jasno otkuda je tako naslovio knjigu. Da je danas matori developer, naslov bi sigurno bio drugačiji:

Programiranje != Razvoj softvera == nemamo pojma šta je, samo nam se ponekad omakne.

🧧
Nisam definisan svojim stavovima. Stavove usvajamo, menjamo, nadograđujemo, ali oni ne čine nas same. Manje je važno da li se slažemo, koliko da se razumemo.