De multe ori, in facultate sau in lumea olimpicilor la informatica apare intrebarea daca folosesc la ceva cursurile avansate de algoritmi si structuri de date de la facultate, sau daca premiile la olimpiada au vreo valoare. Recent vorbeam cu Cosmin despre asta, iar mai demult vorbeam cu Calin Fusu despre daca intr-adevar este nevoie ca, la nivel de dezvoltator/programator, sa ai oameni ultra calificati sau este ok si cu programatori medii, scrie Octavian Mihai Costache pe blogul sau.

La vremea respectiva nu am reusit sa ii raspund convingator lui Calin insa, intre timp, am ajuns la niste concluzii organizate si ceva mai argumentate.

Programatorii rezolva probleme. Cel mai bun exemplu recent de probleme vizibile sunt problemele de scalabilitate pe care le-a avut trilulilu.ro. Cum nu stiu care au fost cauzele, as imparti problemele lor in mai multe categorii posibile.

1. Limitare de resurse fizice. Spatiu pe disc, banda de internet, timp de acces la disc.

Daca ai ramas fara spatiu pe disc (exemplu simplist) nici un algoritm nu te poate ajuta (cel mai probabil), asa ca un programator foarte algoritmic nu se va diferentia probabil semnificativ de un programator mai putin olimpic. Singura solutie este cumpararea de mai multe resurse.

2. Limitare de putere de procesare. Query-uri care dureaza prea mult, procesoare care stau la 100% sau RAM insuficient.

Puterea de procesare si memoria sunt consumate de cod, cod care este scris de programatori. De obicei exista tentatia subestimarii pragului de complexitate unde cunoasterea algoritmilor face diferenta, asa ca simt nevoia sa dau un exemplu pe care l-am dat recent la o intalnire FlashCodersNY: determinarea duplicatelor intr-o lista de elemente.

Sa zicem de exemplu ca, in cazul trilulilu, vor ca dintr-o lista de clipuri sa determine titlurile duplicate. Un ne-olimpic cel mai probabil va ordona lista si va vedea daca titlurile de pe pozitii consecutive sunt egale. Un olimpic iti va spune ca asta se poate face mult mai rapid cu un hash. Diferenta intre cei doi algoritmi va fi probabil de cel putin cateva ordine de marime (sper sa nu deschid o cutie a pandorei cu ce stiu si ce nu stiu ne-olimpicii, exemplul este simplist, you get the point

Desigur, si in cazul asta ineficienta programatorului poate fi suplimentata prin cumparare de resurse. Pragmatic vorbind, costul unui programator care scrie cod (sa zicem) de doua ori mai ineficient decat ideal va fi salariul plus costul resurselor care trebuiesc cumparate pentru a suplimenta ineficienta codului. Daca programul ideal ar fi consumat resursele a 2 calculatoare, costul adaugat de dezvoltatorul slab va fi de 2 calculatoare. Daca ideal ar fi consumat 10, adaugi 10 calculatoare.

dezbate pe blogul lui luiOctavian Mihai Costache