Asist de mulţi ani la o controversă
legată de meseria de programator, strâns legată de o alta privind de
învăţământul de specialitate. Într-un fel, cele două
chestiuni sunt greu de separat şi provin de fapt dintr-o situaţie
fără precedent: o anumită ramură a tehnologiei -- în cazul
nostru informatica -- a ajuns la un ritm atât de alert de dezvoltare încât
sistemul educaţional nu mai poate să ţină pasul. Se pot
aduce multe (şi adesea justificate) acuze la adresa şcolii -- care
este un sistem instituţional enorm şi, în consecinţă, cu o
inerţie ce stă la baza unor răspunsuri întârziate sau chiar
inadecvate.
Problema celor care se pregătesc pentru o carieră
în industria informatică este stringentă şi se leagă de
piaţa muncii. Acum şi aici se caută specialişti în
domeniile x şi y, în vreme ce şcoala vrea să
mă înveţe cu totul altceva. Rezultatul imediat este creşterea
numărului de autodidacţi şi, mai cu seamă, specializarea
excesivă în detrimentul fundamentelor. Este adevărat că şi
industria contribuie adesea la această tendinţă, cerinţele
fiind adesea exprimate în termeni imperativi şi punctuali: vreau
specialişti în domeniile x şi y. Acum!
Aşadar, ce i-aş putea răspunde unui
tânăr care spune pe un forum web că vrea să se facă
programator şi întreabă nonşalant ce ar trebui să
înveţe? Păi... întâi ceva algoritmică, ceva sisteme de operare,
ceva reţelistică, ceva baze de date... Ah, nu, n-ai înţeles: ce
limbaj şi ce mediu de dezvoltare -- asta era de fapt întrebarea. Ok, dar ce
garanţie ai că mâine tot ce ai învăţat azi nu va fi desuet
şi cu totul altele vor fi cerinţele? O astfel de discuţie nu
poate conduce niciodată la un rezultat. Experienţa mea este că
însă că -- din păcate, sau din fericire -- în această meserie
lucrurile se schimbă adesea peste noapte şi nimic nu te
protejează mai bine decât fundamentele. Acele cunoştinţe care au
şansa să dureze şi care îţi vor oferi mereu punctul de
sprijin ca să o iei de la început, în altă direcţie.
Poate că traseul meu prin lumea informatică are o
oarecare valoare ilustrativă. Am început în medii extrem de centralizate,
am cunoscut şocul descentralizării odată cu răspândirea
PC-urilor şi durerile re-centralizării odată cu impunerea reţelelor
şi apoi a internetului. Practic, singura tehnologie relativ stabilă
în tot acest interval a fost cea a bazelor de date relaţionale, dar
şi aici au apărut mutaţii. N-aş mai putea număra
limbajele, mediile de dezvoltare, framework-urile şi paradigmele pe care
le-am schimbat pe tot parcursul. În ultimii ani am dezvoltat aplicaţii în
regim de intranet, care implicau baze de date centrale, un strat intermediar de
logică aplicativă şi un server HTTP care să transforme
browser-ul în interfaţa universală pentru clienţi. Chiar
dacă mă încântă acest tip de abordare, ea implică un
număr mare de tehnologii şi cel puţin cinci limbaje de
programare de diverse facturi, plus câteva de marcare, câteva protocoale
şi diverse alte fineţuri. Şi totuşi, această abordare
are unele limitări inerente, deoarece natura întrebare/răspuns a
protocolului http impune mereu recompunerea şi reîncărcarea paginii
HTML. Situaţiile tipice sunt două: când în funcţie de o alegere
a utilizatorului natura restului formularului se schimbă sau când pe parcursul
completării unui formular este necesară o selecţie din baza de
date. Ambele situaţii impun complicaţii severe pentru a asigura
utilizatorului un confort cât de cât acceptabil.
Parte interesantă însă se leagă de JavaScript
-- o tehnologie pentru care trebuie să admit că aveam o oarecare
adversitate. În prima instanţă am folosit-o pentru nişte
validări formale, dar apoi s-a dovedit utilă în mai multe
situaţii. Însă cei câţiva ani de jurnalism mi-au dezvoltat un
anume fler pentru tendinţe şi astfel am devenit atent la o nouă
tehnologie care a fost botezată Ajax -- adică Asynchronous
JavaScript and XML. Posibilitatea de a accesa în background serverul
(şi, implicit, baza de date) era cu adevărat tentantă, aşa
că într-un week-end am investigat posibilităţile şi am
reuşit să rezolv ambele deficienţe. Însă...
posibilităţile care se deschid prin această tehnică sunt
atât de largi încât totul se schimbă şi totul trebuie abordat altfel.
Revenind: ce ar trebui să înveţe aspirantul la
meseria de programator? Păi... întâi ceva algoritmică, ceva sisteme
de operare, ceva reţelistică, ceva baze de date...