Alegerea limbajului de programare e cea mai importantă decizie de carieră
Am zis să scriu despre un subiect căruia văd că lumea nu prea îi acordă importanța: cum alegi limbajul de programare pe care să îți construiești cariera?
De cele mai multe ori, pentru cei care ies de pe băncile facultăților și intră pe piața muncii de IT, "disputa" dintre limbajele de programare se rezumă la limbajul propriu zis și proprietățile sale:
- cât de rapid e?
- cât de faină e sintaxa?
- ce librării sau framework-uri faine există?
- ce fel de aplicație poți să faci cu ele?
Foarte mulți programatori la început de drum cumva lasă la mâna sorții (sau pieței) să decidă pentru ei limbajul de programare pe care se specializează, și din cauza asta practic lasă la voia întâmplării și cum va arăta cariera lor.
Limbajul de programare, deși e un tool, va dicta practic cum va arăta cariera ta în IT. Bineînțeles că nu e garantat că un limbaj te duce într-o direcție anume, dar te va împinge către o anumită parte a pieței de tehnologie. Și dacă nu alegi ceva compatibil cu persoana ta, cariera ta va avea mult de suferit.
Limbajul de programare, în primul rând, dictează tipul de companie unde te poți angaja pe viitor (unele limbaje de programare au căutare mai mare în anumite tipuri de companii și industrii) dar și cât de ușor îți va fi să avansezi în carieră (popularitatea limbajului, sau cererea sa pe piața e un alt factor de luat în considerare).
Voi lua câteva din limbajele populare cât de cât de pe piață și vă voi spune care am observat că sunt tendințele vis-a-vis de ele.
Java
Cu Java, te vei duce spre backend (partea de server) și îți va fi mult mai ușor să îți găsești locul într-un mediu corporate, mai ales spre domeniul bancar. Dar mediul ăsta corporate vine și cu bune, și cu rele, și trebuie să te hotărăști dacă e pentru tine: e mai slow paced, cu multe procese si birocrație, dar cu mulți oameni și multe interacțiuni.
E o carieră ceva mai rigidă, dar e destul de predictibilă și bătută în cuie. Poți să "urci pe scara corporate" (climbing the corporate ladder) și să ții direcția aia bine cunscută cu măririle anuale și un eventual switch la management sau arhitectură software dupa 10ish ani.
Era un timp când Java era relevant și pentru Android development, dar în ultimii ani s-a trecut pe alte tehnologii gen React Native sau Kotlin. Dar sunt sigur că încă mai sunt companii care fac un Android în Java, pe versiuni mai vechi sau mentenanța, dar job-urile alea sunt pe care de dispariție.
C# / .NET
Cam aceeași situație ca la Java, cu mențiunea că ecosistemul e preponderent axat pe tehnologii Microsoft, care te restricționează ca și tooling. În ultimii ani si Microsoft a început să fie mai deschis către alte ecosisteme, dar înca mai au de recuperat. Avantajul aici ar fi că fiind ceva mai specific combinat cu mediul corporate, cererea de programatori capabili pe zona asta e ceva mai mare decat pe Java.
Python
Python e special că te va împinge mai mult spre zona de startups și firme de produs mai mici în general. Dacă apare prin vreun proiect într-o companie de outsourcing, clienții probabil sunt un startup.
Viața de startup e faină dar nu e pentru toată lumea. E mai agilă, mai fast paced, nu există birocrație multă, dar și riscul e mai mare. De exemplu riscul de a te trezi fără job dacă startup-ul dă chix. Dar pentru toată impredictabilitatea asta, vei învăța multe lucruri într-un ritm mai accelerat, și acele lucruri pe care le vei învăța sunt mai valoroase decât codul și partea tehnică, și anume partea de business. Și pe perioadă mai lungă, asta îți va accelera cariera considerabil. E o situație high risk high reward.
Din primele zile de când am venit la Vuuh am fost expus la tot ce ține de partea de business, de la discuții despre modul cum lucrează clienții la prioritizarea și planificarea feature-urilor. Învățând tot acel business domain pe partea de e-commerce combinat cu expertiza tehnică acumulată la job-urile anterioare dar mai ales în proiecte personale m-au ajutat să ajung CTO la Vuuh într-un timp relativ scurt.
Avantajul e că dacă preferi totuși zona de corporate, poți opta pentru Python pentru a te duce pe zona de date. Dar trebuie să îți placă tabelele, numerele, graficele, probabilitățile și statistica.
C/C++
În zilele astea, job-urile pentru limbaje low level sunt destul de puține, și cele care există totuși, sunt pe zone unde performanța este critică. Și mai precis, pe zona embedded sau automotive. Poți ajunge să lucrezi la un startup dacă mergi pe zona de embedded unde sunt diverse startup-uri care fac device-uri fizice, dar e mai probabil să ajungi pe zona corporate pe automotive sau iarăși, embedded.
Acolo, codul merge mai greu, e mult de muncă minuțioasă și va trebui să fii foarte atent la detalii. Un pointer nealocat corect îți poate mânca foarte mult timp. Aici, testarea e "the name of the game" și vei simți că lucrezi mult dar rezultatele puține. Asta pentru că lucrând pe zone critice, testarea va ocupa foarte mult timp și va fi mult mai minuțioasă decât în alte industrii.
JavaScript / TypeScript
Un limbaj foarte versatil, care își are locul preponderent în zona de startups, dar care îți oferă multe posibilități să devii full-stack. Numai că pentru a ajunge acolo ai nevoie de experiență pe domeniile pe care le targhetezi.
Vei putea alege din mai multe:
- backend: va fi posibil cu node, și de obicei asta te împinge către zona de startups
- frontend: cu React sau Angular, deja ajungi să te specializezi pe frontend și tot ce ține de el. Va trebui combinat totuși cu celelalte tehnologii required de frontend cum ar fi CSS (cu un preprocesor cum ar fi SASS sau SCSS) și HTML.
- mobile: mai nou (de fapt nu chiar așa nou că e pe piață de ceva ani) poți folosi JavaScript pentru partea de mobile apelând la ReactNative, sau pur și simplu facând design-uri foarte mobile friendly care apoi să fie servite într-un WebView.
Din punctul meu de vedere, cu JavaScript nu poți da greș ca limbaj, dar e un ecosistem foarte întortocheat și e foarte posibil să ajungi să îți urăști viața dacă toată cariera ta va sta doar în asta dacă ești descurajat de complexitate și nu stăpânești cum trebuie teoria și practica sistemelor de operare. Și când zic "complexitate", mă refer la complexitate din aia nașpa, neproductivă, când pierzi zile făcând update la o librărie care mergea acum 3 zile si azi deodată nu mai merge fără să îi faci nimic.
Go
Am zis să includ golang, fiind un limbaj cu multe avantaje, dar e foarte nișat. E folosit în principal de startup-uri sau în anumite ecosisteme foarte specifice cu care probabil nu vei avea contact în primii ani de carieră. Cel mai bile evită-l în primii ani și după îl poți învăța pe cont propriu.
E genul ăla de limbaj pe care nu îți poți face o carieră, dar care dacă îl ai în "toolbelt" te poate ajuta în moduri neașteptate.
Rust
Don't. Nu există piață. Poate ca hobby și dacă reușești să fraierești câțiva coechipieri să integrați asta pe undeva. Sau aștepți câțiva ani, devii tech lead sau ajungi pe o poziție unde să ai puterea de decizie asupra limbajului unui proiect greefield, impui Rust și după câteva luni pleci că a failat proiectul.
Concluzie
Alegerea limbajului de programare e poate cea mai importantă decizie pe care o poate lua un programator la început de drum, dar de cele mai multe ori studenții aruncă CV-ul la cât mai multe job description-uri și merg cu varianta care pică prima.
Așa ajung să "primească" cariera de la HR-ul care e cel mai rapid. Dar e mai mult de atât pentru că limbajul poate dicta "partea" de stack unde vei profesa și tipul de companie (startup sau corporație).
Va dicta chiar și industria, chestie de care nimănui nu pare să îi pese, dar de care depinde aliniamentul personal cu industria în care lucrezi. Și asta are un impact destul de pare asupra satisfacției la locul de muncă si evitarea burnout-ului.