Exista multe culegeri de probleme de informatica ce permit invatarea si perfectionarea in
programare. Prin aceasta culegere am incercat nu doar sa sporim aceasta multime cu inca una ci sa
oferim un punct de vedere nou, original si incitant. Originalitatea nu este data de enunturile
problemelor sau de rezolvarile oferite, ci de ideile si sfaturile cu caracter mobilizator pe care le oferim,
precum si de faptul ca am introdus citeva capitole cu continut mai putin obisnuit intr-o culegere de
probleme de programare.
Ni s-a parut mai important ca in aceste vremuri, caracterizate prin cuvintele "ma simt intr-o
permanenta criza de timp", sa oferim cit mai mult din experienta noastra directa, atit cea de
programator cit si cea de profesor de programare. Desi nu credem ca exista metode perfecte de predare
sau de invatare a programarii, totusi speram ca prin asimilarea informatiilor originale oferite eficienta
procesului de invatare a programarii in limbajele C si Pascal va creste. Este important ca informatiile
suplimentare sa fie asimilate gradat si numai in limita "suportabilitatii" fiecaruia. De aceea, in paginile
ce urmeaza veti gasi si o serie de informatii si sfaturi ce sintetizeaza experienta didactica acumulata ca
profesor de informatica si urmindu-le va asiguram ca veti obtine succesul in programare.
In primele capitole a fost pus un accent important pe motivarea initiala a celor ce doresc sa
invete programare. In capitolul "Ce sanse am sa devin un bun programator" sint chiar prezentate cu
sinceritate inzestrarile necesare unui bun programator.
Tot astfel se explica motivul introducerii unui capitol ce contine probleme de judecata.
Rezolvarea acestora pot fi considerate nu doar ca un excelent antrenament al mintii ci si ca o buna
ocazie de a aprinde pasiunea pentru informatica si de a intari motivatia programatorilor incepatori.
Asta nu inseamna ca aceasta culegere nu le este utila si celor care au dobindit deja suficiente
cunostinte de programare. Am introdus in ea citeva capitole ce contin informatii mai putin cunoscute.
Unul cuprinde o lista de probleme deosebite, unele foarte dificile, altele carora nu li se cunoaste inca o
solutie si altele pentru care exista demonstratie riguroasa ca nu pot fi rezolvate cu ajutorul
calculatorului. Alt capitol cuprinde exemple de programare a PC-urilor: lucrul cu tastatura, mouse-ul,
accesul direct la memoria ecran, etc. Iar unele capitole ca Notiuni aprofundate de programare,
Probleme cu solutie surprinzatoare sau Curiozitati si trucuri de programare le sint in intregime
destinate celor care au depasit stadiul de incepator. Probabil ca aceste informatii constituie o provocare
destul de substantiala chiar si pentru cei avansati in ale programarii.
In concluzie, scopul acestei culegeri nu este doar de a contribui la formarea si specializarea
programatorilor sau pentru aprofundarea tehnicilor de programare, cit mai ales de a le oferi o baza, o
motivatie si o initiere celor care doresc sa faca primii pasi in domeniul programarii. Iar acelor
impatimiti ai programarii care se simt deja plictisiti, satui sau plafonati le promitem ca parcurgind
aceasta culegere vor aprofunda cunostintele pe care si le-au insusit deja si, daca vor avea curajul de "a
se lua de piept" cu unele din problemele nesolutionate inca, li se va reaprinde cu siguranta focul
pasiunii pentru programare.
Incepatorilor le uram Bun venit in programare si tuturor Mult succes !
2
Ce sanse am sa devin un bun programator ?
Aceasta intrebare apare deseori in discutiile sincere dintre profesori si studentii lor descurajati
de intirzierea aparitiei unor rezultate care sa certifice buna lor calitate ca programatori. Vom incerca in
rindurile ce urmeaza sa raspundem cit mai clar la aceasta intrebare oferind, in plus, o perspectiva
prospatata asupra acestui subiect, prin luarea in considerare a unei serii de factori mai putin utilizati in
procesul didactic contemporan.
Mai intii sa vedem ce s-ar putea intelege prin sigtagma "bun programator", insisitind in
continuare doar pe aprofundarea adjectivului bun, fara a mai defini sau detalia ce se intelege printr-un
programator. Vom cita cuvintele recente ale lui Timoty Budd ( profesor la Oregon State University )
care da urmatoarea definitie: "Un bun programator trebuie sa fie inzestrat cu tehnica, experienta,
capacitate de abstractizare, logica, inteligenta, creativitate si talent". Intru-totul de acord cu aceasta
definitie vom trece in cele ce urmeaza la explicitarea fiecarei calitati.
Inainte vom deduce urmatoarea consecinta imediata - deosebit de importanta - ce rezulta din
definitia de mai sus: cele sapte calitati trebuie sa fie prezente toate pentru a se obtine calificativul de
bun programator. Deci, prin lipsa sau prin prezenta "atrofiata" a uneia , sau a mai multe din
"ingredientele retetei" de mai sus, acest calificativ nu mai poate fi atins.
1. Tehnica - este desigur o calitate ce poate fi, si este, dobindita doar prin aplicarea asidua (conform
proverbului: "exercitiul il face pe maestru") in activitatea concreta de programare a tehnicilor de
programare invatate si asimilate de catre programator in timpul formarii sale profesionale. Nu este
exclusa aici posibilitatea obtinerii tehnicii de programare inafara unui cadru specializat (intr-o
facultate de profil ), ci chiar exista posibilitatea obtinerii ei prin studiu individual si formatie
proprie (autodidact ).
2. Experienta - este perechea geamana a calitatii de mai inainte, fara insa a se exclude una pe
cealalta. Nu vom mai repeta cum si in ce conditii poate fi ea obtinuta ci vom deduce urmatoarea
consecinta imediata : nici un programator incepator nu poate fi numit bun programator intrucit
el nu a avut cind (adica timpul necesar ) sa dobindeasca ambele calitati. Este binecunoscut faptul
ca o rubrica importanta ce se cere completata la angajare sau la schimbarea locului de munca este
experienta de programare in ani. Se considera in general ca experienta apare abia dupa minimum
doi ani de programare. Acest fapt nu trebuie privit ca o descurajare pentru cei mai tineri
programatori ci mai degraba ca pe un motiv de ambitionare si ca o invitatie la rapida
autoperfectionare.
3. Abstractizarea - este o trasatura a intelectului uman si constituie un dat al oricarui om normal, dar
din pacate(!) este o insusire prea putin dezvoltata si prea putin folosita de oamenii obisnuiti. Ea
consta din capacitatea de a extrage din context, de a vedea dincolo de suprafata imediata si de a
putea sesiza structura - scheletul ce sustine intreaga retea de detalii ale unei probleme generale.
Pentru a fi un bun programator acesta calitate trebuie sa fie net amplificata fata de "normal"
intrucit sta la baza oricarui proces de analiza si modelare a problemelor, cit si la baza procesului de
proiectare a solutiilor generale. Absenta sau mai exact atrofierea acestei capacitati se constata
practic la studenti prin incapacitatea de a intelege sau de a asimila explicatii, demonstratii sau
modele abstracte ( simplu spus, o acuta si permanenta "lipsa de chef" atunci cind sint atinse
anumite subiecte ce nu mai au contact direct cu realitatea concreta, imediata - adica subiecte
abstracte ). Metoda pentru a recapata sau a amplifica aceasta capacitate este de a face cit mai des
uz de ea, adica de a o exersa mereu (conform zicalei "functia creeaza organul") intr-un domeniu
particular, sustinut de o motivatie personala puternica. Altfel spus, capacitatea noastra de
abstractizare se va amplifica daca vom incerca gasirea de solutii la problemele dintr-unul din
domeniile noastre preferate, pentru ca rezolvarea acestora va fi automotivata, facuta "cu chef" si
va prezenta o doza sporita de atractivitate.
4. Logica - este o alta calitate intrinseca a oricarui intelect sanatos. Ea este absolut necesara atit
pentru a putea folosi mecanismele mentale de deductie si inductie logica, cit si pentru a putea
intelege usor, dar in acelasi timp corect, cursul - firul rosu al unei demonstratii sau al unui
rationament intins pe mai multe pagini. Asemenea tuturor calitatilor intrinseci existente in stare
potentiala, antrenarea si amplificarea acesteia se face prin exercitiu repetat, prin folosirea ei in mod
curent.Din pacate, doar prin rezolvarea de integrame nu se ajunge la amplificarea logicii...
5. Inteligenta - este una din cele mai de pret calitati intrinseci ale intelectului uman. In citeva cuvinte,
fara a avea pretentia de a da prin acestea o definitie, prin inteligenta intelegem capacitatea de a
face (de a stabili) conexiuni sau legaturi noi si folositoare (din latinescul inter-legere) intre idei,
3
cunostinte sau informatii "aparent fara legatura". Fata de logica, pe care o consideram ca fiind o
calitate bazala, inteligenta este o calitate ce se "intinde pe verticala" intelectului si are in plus
www-groups.dcs.st-and.ac.uk/~history/ - contine multe pagini interesante despre istoria
descoperirilor in matematica, utile celor care doresc sa afle cum se face cu adevarat descoperiri in
matematica si cum s-a ajuns la necesitatea aparitiei calculatoarelor
- www.mathpages.com/KsBrown/ - contine o colectie impresionanta de informatii, idei si
descoperiri de ultima ora din matematica si informatica
- www.mathsoft.com/asolve/ - contine o lista substantiala de probleme de matematica (si nu numai)
care isi asteapta inca rezolvarea, multe dintre ele putind fi abordate cu ajutorul calculatorului
- www.ee.Surrey.ac.uk/Personal/R.Knott/Fibonacci/fib.html - este o "portita" de intrare in domeniul
fascinant al numerelor lui Fibonacci, cu multiple corelatii matematice si informatice
- mans.cee.hw.ac.uk/ctl.html Computer Teaching and Learning Resources - numele site-ului spune
totul
- www.k12tlc.net/Penrose/ K-12 Teaching & Learning Center - noi am ales pagina care prezinta
biografia lui Sir Roger Penrose, dar aveti inca multe altele la dispozitie
- www.ioccc.org The International Obfuscated C Code Contest (IOCCC) - Concursul international
de programare C ofuscata (incilcita si intentionat confuza)
Suplimentar, tot pentru cei foarte pasionati de matematica, informatica, de legatura dintre ele
si nu numai, oferim o selectie minimala de carti si articole care au constituit, direct sau indirect, o sursa
de inspiratie in scrierea acestei culegeri:
- Turbo Pascal 6.0. Ghid de utilizare, Microinformatica, Cluj-Napoca, 1992
- Balanescu T. ..., Limbajul Turbo Pascal, Editura tehnica, Bucuresti, 1992
- Grigore Albeanu, Programarea in Pascal si Turbo Pascal. Culegere de probleme, Editura tehnica,
Bucuresti, 1994
- Tudor Sorin, Tehnici de programare, Editura L&S Infomat, Bucuresti, 1998
- Manual de programare C, (dupa Kernigham si Ritchie) Microinformatica, Cluj-Napoca, 1986
- Muslea I., Programarea in C, Microinformatica, Cluj-Napoca, 1992
- Roger Penrose, Mintea noastra...cea de toate zilele, (titlul original: Emperor's mind), Editura
tehnica, Bucuresti, 2001
- Roger Penrose, Incertitudinile ratiunii. Umbrele mintii, (titlul original: Shadows of the mind),
Editura tehnica, Bucuresti, 2000
- Keith Devlin, Virsta de aur a matematicii, (titlul original: Matemathics: The New Golden Age),
Editura Thetha, Bucuresti, 2000
- Solomon Marcus, Gindirea algoritmica, Editura tehnica, Bucuresti, 1982
- L. Livovschi, H. Georgescu, Bazele informaticii, Editura didactica si pedagogica, Bucuresti, 1981
95
Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.