p0001344

O naluca a vremurilor noastre – partea II-a

Nu demult, povesteam despre cum vad eu educatia formala a unui inginer de sistem si spuneam ca in afara de aceasta (de educatia formala), un bun inginer de sistem mai are nevoie de cateva calitati:

Curiozitatea, definita ca “acea particularitate interactivă a unei ființe prin care își explorează spontan ambiența și caută schimbări în structura sau dinamica acesteia“, este acel motor care indeamna o persoana sa mearga dincolo de “cortina” si sa afle ce (si cum) face cortina sa se miste. Curiozitatea va face ca un inginer de sistem sa descopere si sa exploreze proactiv lucruri care ii vor fi de folos mai tarziu, inclusiv in domenii conexe (networking, programming, etc)

Perseverenta, sau “continuarea realizarii unei actiuni in pofida obstacolelor intampinate“, este un alt element definitoriu al unui bun inginer de sistem, care il face pe acesta sa nu renunte atunci cand toate sansele par a fi impotriva lui. Perseverenta in rezolvarea unei probleme, duce un inginer de sistem in zone noi pe care e posibil sa nu le fi explorat niciodata si ii deschide calea spre noi competente, chiar daca initial ele vor fi la nivelul unui incepator (programare in limbaje noi, protocoale noi, utilitare noi, paradigme noi [cloud], etc).

Creativitatea, acel motor interior care face un inginer de sistem sa gaseasca solutii surprinzatoare, functionale, ce rezolva o problema data intr-un timp rezonabil. Un om creativ si curios, va fi un inginer de sistem cel putin surprinzator, capabil sa ofere solutii creative in situatii conventionale.

Pragmatism, sau capacitatea de a lasa la o parte preferintele proprii pentru indeplinirea unor scopuri mai tangibile. Un inginer de sistem pragmatic va folosi Bash pentru script-uri uzuale, Perl pentru procesare de fisiere text, Ruby pentru cine stie ce API-uri si Python pentru programare folosind thread-uri, in conditiile in care limbajul sau preferat este C++.

Coloana vertebrala. Un bun inginer de sistem nu va ascunde faptul ca anumite tehnologii, limbaje sau tehnici nu ii sunt cunoscute deloc. Dimpotriva, va recunoaste cu prima ocazie acest lucru, si va folosi orice timp liber are la dispozitie pentru a invata cat mai multe.

IMHO, acestea sunt printre cele mai importante calitati ce pot face diferenta intre inginerii de sistem.

p0001344

O naluca a vremurilor noastre

In cei 15+ ani de cand sunt in IT, unele din cele mai dificile discutii (la bere sau pur si simplu aiurea) au fost purtate in jurul unei naluci a vremurilor noastre: inginerul de sistem. Cunoscut ca sysadm, sysadmin, system engineer sau varul mai indepartat, BOFH, inginerul de sistem este o prezenta rara in majoritatea mediilor de lucru (chiar si cel academic ;). Este greu sa gasesti pe cineva care sa aiba rol de inginer de sistem, mult mai greu sa gasesti pe cineva care chiar sa fi lucrat ca inginer de sistem si extrem de greu sa gasesti pe cineva care fie un inginer de sistem bun sau foarte bun.

La o prima “strigare” as spune ca una din cauze este faptul ca rolul de inginer de sistem nu este reglementat in nici o institutie de invatamant din Romania si ca nu exista un master sau curs in urma caruia cineva sa poata spune ca este inginer de sistem. O cauza a lipsei reglementarii este faptul ca rolul unui inginer de sistem este destul de greu de definit in detaliu, in literatura de specialitate el fiind regasit astfel: “Systems Engineering is an interdisciplinary approach and means to enable the realization of successful systems“. Intr-un alt loc am gasit o definite ceva mai simpla si mai pragmatica: “A systems engineer is a person who fixes specific system problems“.

In opinia mea, ambele au dreptate. Un inginer de sistem trebuie sa “viseze” operatiile uzuale (managementul sistemului de operare, servicii web,  baze de date, servicii de email, etc), sa stapaneasca concepte generale indiferent de modul in care sunt acestea implementate la nivel de sistem de operare (system init, package management, configuration management, mass provisioning, fail over, backup, etc) si sa inteleaga restul tehnologiilor (AAA, networking, CDN, cloud, security, etc) la un nivel care sa ii permita o viziune pertinenta si de ansamblu asupra unui sistem, viziune care sa ii permita sa poata folosi usor toate cunostinele sale pentru a putea gasi rapid solutia la probleme specifice.

Cred ca nivelul unui inginer de sistem este dat de suma cunostintelor sale tehnice raportate la diversitatea problemelor cu care a fost confruntat in raport cu dificultatea mediuliu la care a fost expus.

De exemplu, unei persoane care timp de 10 ani a mentinut servere web care gazduiau site-uri web cu trafic foarte mic ce necesitau doar PHP si MySQL, ii va fi destul de greu sa candideze pe un rol de inginer de sistem la o companie din automotive pentru ca suma cunostinelor sale din domeniul de systems engineering este aproape irelevanta in noul context. De asemenea, un inginer de sistem care timp de doar un 1 an a intretinut (nu construit) sisteme de AAA, servere de mail, site-uri web, clustere, HPC, cloud si a facut si network management va avea dificultati in a proba in adancime tehnologiile mentionate. Dificil si intr-un caz si in altul.

IMHO, formarea ca inginer de sistem ar trebui sa includa cel putin:

  1. acumularea cunostintelor teoretice:
    1. studii tehnice de specialitate in I.T. (FII sau Automatica si Calculatoare)
    2. un master in Inginerie de Sistem, care nu exista in momentul de fata dar care ar trebui sa puna accent pe intelegerea si configurarea tehnologiilor existente la momentul masterului (ar trebui actualizate in fiecare an) intr-un context mai mare. De exemplu:  cum integrezi un OpenLDAP cu sistemele existente de AAA la nivel de networking sau cum construiesti un sistem de monitorizare.
  2. aplicarea cunostintelor teoretice in viata reala:
    1. angajare/voluntariat intr-o institutie de stat, fundatie, asociatie, sau chiar la departamentul IT al institutiei de invatamant pentru cel putin 1-2 ani
    2. internship intr-o companie cu profil comercial pentru 6 luni – 1 an

Scoala trebuie sa construiasca bazele teoretice si sa ofere timpul necesar experimentarii si explorarii, in timp ce lucrul efectiv permite adaptarea cunostintelor teoretice la lumea reala. Este insa suficient ? Eu cred ca mai trebuie ceva, ceva despre care voi povesti in urmatorul articol 😉