Tranzitie de la Java EE la C++

Salut, lucrez de aproximativ 5 ani ca developer, in mare ma ocup cu proiecte scrise pe stackul de Java enterprise + AWS pe backend si jsp sau (mai nou) angular pe interfata. Am ajuns in punctul in care mi se pare efectiv plictisitoare munca, mai mult in sensul de joaca si de asamblat cod. As vrea sa fac ceva mai challenging, nu am lucrat niciodata pe proiecte de big data cu frameworkuri cool precum Hadoop/Spark sau Cassandra (am mentionat pentru ca multi ar putea spune ca tranzitia pe un proiect/echipa de genul asta ar putea fi de asemenea mai challenging si nu cred ca ar fi o schimbare de ecosistem atat de mare). Astfel ca nu iau neaparat in calcul mutatul pe o pozitie mai interesanta in lumea Java. Asa ca oricat de ciudat ar fi ma gandeam la o tranzitie pe alt ecosistem, C++, asta fiind si dorinta intiala, dar acum 5 ani nu gasisem o pozitie interesanta, doar chestii embedded (care nu ma atrageau).

In teorie, limbajul este o unealta, in practica lumea cauta sa angajeze Java/NodeJS/Go developeri. Ma gandeam sa imi fac niste proiecte inainte sau sa caut vreun proiect opensource mai popular dezvoltat in parteneriat cu vreo firma sa imi fac o idee de cum m-as descurca si ce ar presupune un ecosistem de genul asta.

Stiu ca depinde de la firma la firma, dar cat de deschisi credeti ca ar fi oamenii din Romania la o astfel de schimabare, va fi oare nevoie si de un downgrade? A mai facut cineva ceva similar?

Realist un switch la C++ nu prea are legatura cu lucratul in “big data”, ci chiar te indeparteaza de asta. Pe la noi, mult pe partea de C/C++ e pe embedded, OS-level work, networking, infrastructure work (pe la Amazon de exemplu), gamedev, etc. Pe

In “big data” in general se foloseste Scala, Java, Python, R, si ocazional Matlab/Octave/Matematica, etc. Toate sistemele pe care le-ai listat mai sus - Hadoop, Spark, Cassandra - dar si multe altele din ecosistem sunt scrise in Java sau Scala, de exemplu.

Genul de pozitie pe care ai cauta-o se chema “data engineer” sau “big data engineer”. Dar e destul de greu de intrat fara experienta anterioara. Asadar ar trebui sa faci o miscare diagonala spre o pozitie in care lucrezi si in zona asta, dupa care pe masura ce castigi experienta, te reprofilezi pe “data engineering”. Sau vezi ca nu-i asa grozava pentru tine, si cauti altceva.

Gasitul de astfel de pozitii hiride in schimb e mai tricky. Trebuie sa cauti munca la companii sau echipe care au de-a face cu multe date, si carora o sa le trebuiasca uneltele astea in munca de zi cu zi, dar din postura de “user ocazional”. Am studiat la un moment asta si stiu ca la Adobe, FitBit, HootSuite, au astfel de echipe. Ditto la Bolt avem astfel de roluri dar e si shameless plug pe partea mea.

1 Like

M-am exprimat gresit, am inclus big data in ecuatie pentru ca poate fi ceva challenging pe zona de java ce ar putea fi candidat unei tranzitii la alt ecosistem. Adica am expus de ce nu ma gandeam la ceva mai interesant pe java si ma gandeam la alt ecosistem.

Poti sa incerci ceva si pe la BitDefender. Angajeaza pe C++ in zona de security parca. Si Finastra folosesc c++ pt chestii financiare.

Mai challenging mi se pare sa treci pe o pozitie de team lead decat o tehnologie anume, sa vezi atunci chaleng-uri cand trebuie sa lucrezi cu oameni, si sa explici de ce proiectul e in urma si de ce unele chestii nu pot fi facute, de ce apar bug-uri etc.

Eu lucrez cu predilectie in C++ (dar nu ma limitez doar la el, de exemplu in perioada asta lucrez si la un proiect in C# & .net).

De-a lungul timpului am gasit tot felul de chestii suficient de diferentiate, de la ‘low level’ pana la chestii de genul Computer Vision. De la lucru cu device-uri cu memorie foarte limitata si putere de procesare jalnica pana la procesoare serioase cu lucru multithreaded la greu + cuda.
E adevarat ca o gramada de lucru se gaseste pe

Pe astea pot sa zic ca le-am atins pe toate, dar n-au fost numai de-astea.

Din cand in cand mai dai chiar peste chestii surprinzatoare. Recent am primit o oferta pe ceva legat de fizica + C++ (dar am ratat-o pentru ca nu le puteam oferi decat jumatate de norma, si ei doreau sa lucrezi full fime, si mai aveau si pretentie de franceza, pe care o cunosc doar la nivel de incepator - cel putin la vorbit). Salarizarea oferita: 120000 euro / an. Pe bune. Bine, afara era vopsit gardul si inauntru era leopardul, in sensul ca aveai de lucru o luna si apoi trebuia sa stai la dispozitia lor pentru cand iti mai dadeau de lucru, sporadic, dar asta era oferta pusa pe stackoverflow.

1 Like

Din experienta proprie + tentative de mentorat, pot spune cu certitudine ca:

  • C++ -> Java/JS/C#/Python/insert-mainstream-language-here merge foarte smoothly, in special daca ipoteza este respectata (adica daca chiar vii cu experienta si skill in C++)
  • the other way around… it depends

Daca vrei sa faci asta strict din dorinta de a experimenta/stapani un limbaj mai challenging (C++ e un amalgam de features care mai de care mai complexe/puternice dar si (pe alocuri) subrede [in acelasi timp], cu un milion de reguli si un milion de exceptii de la acele reguli), atunci sigur, go for it, probabil te vei ‘distra’ si pe langa faptul ca te face un inginer mai bun overall, vei invata lucruri noi (adancimea si latimea intelegerii tale se vor expanda) si iti vei indeplini scopul, daca asta e scopul tau.

Daca in schimb vrei s-o faci doar pentru a face lucruri mai challenging (caci te-ai plictisit facand CRUD-uri pe stackul JEE), atunci as spune sa nu faci tranzitia; si nu neaparat din cauza ca C++ nu ar fi challenging (oh, man, it is!), ci ca exista variante la fel de (sau mai) challenging unde iti poti folosi experienta curenta si avansa in cariera/compensatie/etc.

1 Like

Eu tocmai am început în proiect nou în C++/Qt, o aplicaţie desktop de tip CRM. Nu văd de ce aş alege alt limbaj, că nu mă încurcă cu nimic dacă e C++. Plus că app-ul iese şi mai sprinten şi consum mai puţin RAM.

1 Like

Care ar fi variantele mai challenging care nu necesita tranziție?