Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2007-06-30 10:32:56.
Revizia anterioară   Revizia următoare  

Ghid complet pentru concursurile de informatica

(Categoria Diverse, autor Mircea Pasoi)

Acest articol se adreseaza pasionatilor de informatica si celor care au de gand sa participe la concursurile si olimpiadele de informatica. Observatiile din cadrul acestui articol sunt, in mare parte, rezultatul experientei autorului.

1. Ce sunt concursurile?

Concursurile de informatica, ca la orice alta disciplina, vor sa fie o metoda de clasificare a participantilor in functie de abilitatile de programare si de cunostintele de algoritmica. In plus, exista unele concursuri in care cei mai buni concurenti sunt rasplatiti. Probabil cel mai important aspect, concursul include aparitia unui factor suplimentar care rastoarna multe din obisnuintele programarii "la domiciliu" sau "la locul de munca" (de obicei programatorii care lucreaza in firme au perioade mult mai lungi de timp pentru a-si duce la final sarcina): timpul. Autorul a avut la dispozitie mai mult de sapte ani ca sa descopere pe propria piele importanta foarte mare a acestui factor; si, mai mult decat durata de timp in sine a concursului, care este aceeasi pentru toti concurentii, conteaza capacitatea fiecaruia de a gestiona bine acest timp. Daca in fata calculatorului de acasa, cu o sticla de suc alaturi si cu muzica mergand, este intr-adevar un lucru laudabil sa justificam matematic fiecare pas al algoritmului, sa nu ne lasam inselati de intuitie si sa scriem programul fara sa ne grabim, alocandu-ne o mare parte din timp numai pentru depanarea lui, in schimb, in timp de concurs lucrurile stau tocmai invers: de demonstratii riguroase din punct de vedere matematic rar are timp cineva, intuitia fiind la mare pret si de nenumarate ori fiind criteriul care aduce victoria; iar timpul la un concurs serios este suficient doar pentru implementarea tuturor programelor, pentru depanare alocandu-se de obicei o perioada destul de mica.

In multe cazuri, cele doua etape principale ale programarii - conceperea si implementare algoritmului - incep sa se bata cap in cap. Exista situatii in care avem la dispozitie un algoritm foarte eficient, dar implementarea acestuia este extrem de dificila, alteori algoritmul ales nu va face fata volumului maxim de date de intrare, iar alteori ne dam seama ca am putea foarte usor sa scriem un program, dar nu suntem in stare sa demonstram ca el merge sigur pe orice set de date de intrare. Foarte des se renunta la implementarea algoritmilor de complexitate optima, care in multe cazuri constituie adevarate focare de "bug"-uri, preferandu-se un algoritm mai lent dar care sa se poate implementa mai rapid si fara dureri de cap. Multi concurenti pierd primii ani de concursuri descoperind aceste lucruri. Desigur, aceste lucruri variaza foarte mult in functie de viteza fiecaruia de a implementa in limbajul preferat (atentie, viteza mare de tastare a unui text normal nu garanteaza neaparat o viteza mare de tastare a unui program!), cat si de abilitatea de a te concentra la toate detaliile care apar in implementare (acest lucru depinde foarte mult de cat de antrenata este mintea fiecaruia). De fapt, concurentii care ies pe primele locuri de obicei, sunt cei care au reusit sa formeze un echilibru intre cele doua etape ale programarii: pot sa conceapa algoritmi eficienti, care sa se incadreze in limitele de timp si memorie, cat si sa implementeze acesti algoritmi intr-un timp acceptabil, depanand foarte putin.

O intrebare pe care cineva, care citeste aceste randuri, si-o poate pune este urmatoarea: De ce sa particip la astfel de concursuri? Principalele avantaje sunt formarea unei gandiri algoritmice, intelegerea metodelor de rezolvare pentru anumite probleme (care pot aparea si in cadrul dezvoltarii de aplicatii), dezvoltarea capacitatii de a reactiona rapid intr-un timp scurt. In timp, experienta acumulata in cadrul pregatirii si a concursurilor va conduce la eficienta mai mare in cadrul proiectelor de dezvoltare de software si, de ce nu, la obtinerea unor salarii mai mari la angajare. Exista multe companii care iau in considerare participarile la concursuri la interviurile pentru angajare, cat si multe facultati din strainatate care le considera un criteriu pentru primirea unei burse (asta nu inseamna ca o astfel de participare garanteaza neaparat o bursa!). Un alt avantaj ce nu este de neglijat este reprezentat de premiile puse in joc, atat cele materiale (calculatoare, diferite componente hardware, excursii in strainatate, carti, etc.), cat si intrarea fara examen la facultate, in cazut obtinerii unor rezultate bune la olimpiadele nationale sau internationale.

2. Care sunt concursurile?

O alta intrebare la care doresc sa afle raspunsul cei care vor sa participe la concursurile de informatica este: Care sunt cele mai importante concursuri de programare? Se pot clasifica doua mari tipuri de concursuri: cele pentru gimnaziu si liceeni si cele pentru studenti.

Concursuri pentru liceu

  • Olimpiada Locala de Informatica - Se desfasoara in fiecare judet de obicei la inceputul anului (lunile ianuarie-februarie) si, in general, nivelul de dificultate este foarte redus (exceptie facand poate Bucuresti si alte cateva judete), subiectele fiind propuse de profesorii din judetul respectiv