"S-ar putea insa sa devin si student, la Politehnica se fac cursuri pentru cei care au deja o facultate, doar doi ani si se recunoaste nivel licenta. Deci se poate obtine o a doua licenta.".
Dupa cate am vazut eu, si in Romania e cam ca si prin alte tari europene sau SUA, adica doar un numar destul de redus de firme cer sa ai neaparat o diploma. In primul rand conteaza sa sti ce trebuie sa faci.
Evident, nu ma refer la marile firme de software ca Google, Microsoft sau altele de genul asta, fiindca acolo se inghesuie multi asa ca ei trebuie sa gaseasca tot felul de metode de departajare, si studiile ar putea fi unul dintre ele.
"Am vazut cursurile si examenele la altcineva care a facut in cei doi ani trecuti si... nimic deosebit, PHP si Java.".
Pai cam asta este motivul pentru care cred ca nu merita studiile oficiale in sistemul nostru falimentar de invatamant, fiindca poti invata foarte bine pe cont propriu. Dar ma rog, asta nu este general valabil, fiindca fiecare persoana isi are propriul stil de invatare. Unii prefera sa invete o gramada de teorie inainte de a o aplica in practica, altii prefera sa testeze ei in practica incontinuu, altii prefera sa invete din exemple practice facute de altii, altii prefera sa le spuna cineva pas cu pas ce trebuie sa faca, altii sa studieze pe cont propriu etc.
In SUA unele universitati chiar isi promoveaza stilul de invatare care este aplicat in cadrul lor, asa ca studentii pot alege universitatea si in functie de acest aspect.
"Bine ca s-a ivit posibilitatea cu aceste cursuri, aici e programare aplicata, teoretic ceva mai bine decat Info unde e multa teorie, cel putin asa stiu eu. E si mai ieftin si ia mai putin timp.".
Eu nu am absolvit nici facultatea de mate-info de la Babes si nici pe cea de calculatoare de la Politehnica, asa ca nu pot spune ca stiu in cunostinta de cauza, insa exact asa am auzit de la multe persoane care au studiat in ambele locuri.
Mi s-a povestit si despre genii in domeniul programarii de la Babes care au ramas repetenti fiindca nu si-au luat un examen la matematica unde ar fi trebuit sa cunoasca o gramada de teorie, am avut si colegi de camera de la Babes care erau in ultimul an dar eu invatasem mai multa programare decat ei pe cont propriu in cateva luni.
"Stiu ca nivelul meu e inca departe de a fi foarte bun in ceea ce priveste programarea, si mai departe in ceea ce priveste teoria, dar... daca nu ai hartie, se pare ca nu te crede nimeni ca l-ai avea nici pe ala.".
Eu nu pot dovedi cu hartii nici ca stiu sa utilizez programul Notepad.
E drept, nici nu am fost interesat sa pot dovedi asa ceva, fiindca intotdeauna am crezut ca o firma de specialisti in iT care nu poate evalua singura daca sti ce trebuie sa faci, ci trebuie sa se bazeze doar pe verificarile de proasta calitate facute in sistemul de invatamant, este o firma de calitate proasta, de la care te poti astepta si la alte lucruri neplacute.
Pentru nevazatori insa este drept ca nu mai este la fel, fiindca cum noi suntem discriminati la greu, este o mare bucurie cand reusesti totusi sa convingi o firma ca esti bun la ceva, fara sa conteze prin ce mijloace, fie ele si cu diplome de calitatea celor ECDL.
"Ar fi si o multumire a mea sa am o licenta in domeniu.".
Pentru mine nu a fost niciodata o multumire sa am vre-un fel de dovezi atestate de sistemul de invatamant de proasta calitate din Romania. Ar fi fost o multumire sa fi fost vorba despre o diploma acordata de Harvard, Yale, Stanford, MIT...
De ce sa fiu multumit ca un profesor de doi lei care poate in anumite domenii nu se pricepe la programare cat mine sa isi puna el stampila si sa aprecieze cat de bine ma pricep eu la domeniul iT.
(Fiindca in domeniul iT, spre deosebire de multe alte domenii, profesorii sunt in general cei care ori prefera povestile si teoria in detrimentul practicii, ori nu au fost suficienti de buni in domeniul practic pentru a isi gasi de lucru.)
In legatura cu functia fibonacci, eu doar am copiat exemplul din documentatia modulului Memoize si am vazut ca se foloseste o metoda recursiva. Nu stiu la ce sunt utilizate sirurile fibonacci si nici care este metoda teoretica de calcul, insa ce e clar este ca acea functie da un rezultat foarte diferit de metoda iterativa pe care ai pus-o mai jos.
Acel exemplu este intr-adevar mult mai elegant si mai simplu:
sub fib {
my $n = shift;
return $n if $n < 2;
fib($n-1) + fib($n-2);
}
Am modificat functia pe care ai creat-o in Java si am testat-o si in Perl. Codul ei este:
sub fib {
my $k = shift;
my $x = 0; my $y = 1; my $z = 0;
for ( my $i = 1; $i <= $k; $i++ ) {
$z = $x;
$x = $y;
$y = $x + $z;
}
return $z;
}
Am adaugat si modulul Memoize in program astfel:
use Memoize;
memoize('fib');
Am rulat-o intr-un loop de 10000 de ori, iar cea mai buna viteza a fost de mai putin de 15 ms.
Ca sa testez mai bine fara sa rulez programul de zeci de ori, am creat o alta bucla pe care am executat-o de 1000 de ori, adica am facut 1000 de rulari ale programului, iar programul consta in rularea de 10000 de ori a functiei fib() cu parametrul 1000.
Dar oricum, de obicei nu se ia de buna cea mai scurta perioada de rulare, ci perioada care rezulta de cele mai multe ori, asa ca am pus vitezele intr-un hash si am sortat rezultatele, iar rezultatul arata ca de cele mai multe ori programul a terminat de rulat in mai putin de 31 ms.
Deci daca se foloseste modulul Memoize pentru optimizare in Perl, la fel cum Java face aceasta optimizare in mod implicit, programul in Perl ruleaza mai rapid decat cel in Java.
Am testat si viteza celeilalte functii fib() dar rezultatele au fost extrem de apropiate. Asta arata cat de putin important este acest test pentru determinarea vitezei unui limbaj, fiindca am vazut ca atunci cand nu se foloseste Memoize pentru optimizare, functia fib() recursiva este mult mai lenta decat functia fib() iterativa, dar cand programul este optimizat, ruleaza aproape la fel de repede.
Or un test de viteza nu ar trebui sa depinda de optimizarile facute implicit sau explicit, insa de fapt doar acele optimizari sunt cele care conteaza, fiindca altfel, daca un program in Perl ii da procesorului de lucru un milion de operatii, iar un alt program in Java ii da tot un milion de operatii, viteza de executie va fi evident la fel de mare, si atunci doar smecheriile care fac ca numarul de operatii necesare sa fie mai redus fac diferenta.
Diferenta cu adevarat nu consta in viteza de executie, fiindca rareori trebuie sa faci optimizari de viteza prin modificarea algoritmilor, asta daca nu lucrezi la proiecte foarte avansate, cum ar fi motoare de baze de date, motoare de cautare, driveri, dar atunci te intereseaza in primul rand viteza si atunci sigur alegi limbajul C sau chiar limbajul de asamblare si nu un limbaj de nivel inalt ca Java sau Perl.
Diferenta consta in usurinta de utilizare si resursele consumate. Daca vrei sa creezi un site web care sa ruleze pe un VPS cu 512 MB de memorie atunci nu prea iti vine sa alegi Java, chiar daca trebuie sa faci optimizari si ele trebuie facute manual, iar daca nu ai astfel de limitari atunci este posibil sa vrei sa nu iti mai bati capul macar cu optimizarile de baza pe care le face Java in mod implicit.
Iata rezultatele rularii programului de 1000 de ori:
0.0309999999999988 secunde de 231 ori
0.032 secunde de 211 ori
0.0310000000000006 secunde de 146 ori
0.0310000000000024 secunde de 86 ori
0.0309999999999997 secunde de 71 ori
0.016 secunde de 61 ori
0.0150000000000006 secunde de 52 ori
0.0310000000000001 secunde de 34 ori
0.0159999999999982 secunde de 29 ori
0.0160000000000018 secunde de 18 ori
0.031 secunde de 18 ori
0.0309999999999999 secunde de 17 ori
0.0149999999999997 secunde de 9 ori
0.0149999999999988 secunde de 8 ori
0.0150000000000001 secunde de 6 ori
0.0149999999999999 secunde de 2 ori
0.0319999999999999 secunde de 1 ori
0.015 secunde de 1 ori