Din culisele vietii de programator- interviu cu Alex Tuca

Share This Post

Cine este Alex Tuca si care este rolul lui in echipa KodingTech? (oportunitate de a vorbi depre tine la persoanala a III-a). 

Alex e un dev care face cate putin din tot ce tine de tehnologie, este curios despre orice si din punctul unora de vedere: hipster. Mi-ar placea sa am o colectie mare de viniluri, deci inteleg de ce. Rolul sau principal consta in implementarea filosofiei KodingTech si la nivel tehnic, prin idei de arhitectura, limbaje, si tool-uri. Este un tip mai ciudatel uneori, dar am auzit ca e ok (si ca ii place foarte tare sa vorbeasca despre el la persoana a III-a). 

Atunci cand vine vorba despre programare, pentru oamenii din exterior lucrurile par misterioase. In cateva cuvinte ce inseamna sa fii programator? Ce calitati trebuie sa ai, care sunt skill-urile care pot / nu pot fi invatate.     

Din punctul meu de vedere, a fi programator este doar un mod specific de a spune “solution seeker”. Multi spun ca trebuie sa fii expert la matematica, sau sa ai gandire analitica bine-dezvoltata (a se citi “emisfera stanga a creierului”) ca si cum ar fi aptitudini singulare care puse la un loc fac un programator. Eu cred ca programarea nu reprezinta atat de mult analiza, pe cat reprezinta creativitate. Pentru a face o analogie, tehnica in sine te invata sa folosesti creionul, insa creativitatea iti spune cum sa il pui pe foaie (sau cursorul pe editorul de cod). De asemenea, consider ca gandirea analitica si creativitatea sunt ambele instrumente care se dezvolta – nu cred ca este nevoie de “talent” pentru programare, ci de exercitiu. In ultima vreme, exista multe persoane care vor sa invete programare si incep sa invete direct cum sa faca o aplicatie sau un joc, insa eu consider ca oricine vrea sa se numeasca programator trebuie sa treaca prin problemele clasice de algoritmica (genul de probleme pe care le gasesti in culegerile de liceu). Nu te vor invata sa faci ceva util de sine statator, insa sunt esentiale pentru a intelege cum sa “vorbesti” cu un calculator (in aceeasi maniera in care atunci cand te muti intr-o alta tara te poti descurca daca inveti limba, insa pentru a intra cu adevărat in lumea lor trebuie sa inveti despre cultura lor). Creativitatea se antreneaza si ea, iar o resursa buna pe tema asta mi se pare cartea “Creativitatea serioasa”, de Edward do Bono.         

 Cum a evoluat in ultimii 5 ani mediul si filozofia dev, tools, etc (Bunnyshell)?

Dev-ul evolueaza la un pas extrem de rapid, asadar 5 ani sunt aproape o eternitate. Cuvantul care mi se pare ca a cucerit domeniul in ultimii 5 ani este “colaborare”, cu adiacentul “open-source”. Tendinta in industrie este sa mergem spre un ecosistem mai deschis, unde folosim unelte scrise de altii si scriem si noi la randul nostru pentru altii. Acum aproximativ 5 ani a fost un moment rasunator care a demonstrat asta: Microsoft; marele, colosalul Microsoft, a făcut stack-ul .NET (care conține limbajele de programare folosite pe Windows, precum C#) open-source. In paralel, tot pe atunci, au inceput sa apara miscari pentru a usura procesul de dev, eliminand partile adiacente care ingreunau experienta programatorilor. De exemplu, au aparut framework-uri precum React Native (https://reactnative.dev) sau Flutter (https://flutter.dev), care le permit programatorilor sa scrie o aplicatie pentru mai multe platforme, astfel incat focusul sa fie pe dezvoltarea unei experiente super pentru end-user, nu pe a aduce la zi implementari de Android si iOS. Si partea “din spate” a fost imbunatatita foarte tare, astfel incat exista unelte precum Bunnyshell, care se ocupa automat de partile complicate din administrarea unui server. Mai sunt unelte Platform As A Service precum Azure App Service sau Firebase, care abstractizeaza cu totul prezenta unui server. Filosofia se concentreaza pe cum facem sa livram o experienta mai faina pentru mai multe persoane, rapid.           

Care sunt limbajele hot in momentul de fata?      

De bine, de rau, cel mai popular limbaj de departe este JavaScript. (Mai) toata lumea programatorilor il stie, fiind foarte usor de invatat si fiind cam singura optiune pentru web, deci multi sar direct la el. Eu unul nu sunt fan JS (desi il folosesc) si consider ca exista doua categorii de limbaje hot la momentul de fata. Prima dintre ele o reprezinta limbajele cu suport nativ de multithreading (pe romaneste, limbajele unde e foarte usor sa te folosesti in paralel de mai multe core-uri ale procesorului), deoarece oricine a fost nevoit sa implementeze suport de threading pe limbaje precum Java sau PHP (care au fost concepute cu mult inaintea acestei nevoi, astfel incat implementarile lor sunt extrem de greoaie) cunoaste durerea sufleteasca. Cele mai “in voga” exemple acum sunt Go si Rust, fiind extrem de usor sa te folosesti cu adevarat de resursele pe care le ai la dispozitie datorita lor. A doua categorie o reprezinta limbajele care rezolva problema de un miliard de dolari. Aproape toate limbajele de programare au conceptul de “null” care inseamna “nimic, ceva ce nu exista”. In limbajele tradiționale, trebuie sa iti amintesti de unul singur sa te ocupi de prezenta acestui “null” peste tot in codul tau, iar acesta este de departe cel mai mare oversight din codul scris de foarte multi (o cautare de tipul “NullPointerException” pe Google returneaza 3,6 milioane de rezultate, in consecinta). In acest context dureros au aparut limbaje “null-safe”, care te obliga sa verifici daca o variabila poate fi null sau nu de cand scrii codul prima data si evita astfel FOARTE multe dureri de cap. Doua exemple de astfel de limbaje faine sunt Kotlin (limbajul de programare folosit la aplicatiile recente de Android) si Swift (limbajul de programare folosit la aplicatiile recente de iOS).          

 Frontend vs backend vs full stack 

Nu exista minte fara corp, cum nu exista nici corp fara minte (desi uneori suntem tentati sa contrazicem asta). In aceeasi maniera, un produs este compus la fel de tare din backend cat este din frontend, iar ambele vin cu provocari specifice. Cand lumea se gandeste la “frontend”, primul lucru care vine in minte este “el scrie cum arata aplicatia”, lucru care mi se pare ca ii subestimeaza grav. “Cum arata aplicatia” include a fi intuitiva, a avea butoane mari, contrast ok, fonturi care se potrivesc unele cu altele, culori complementare, dar si lucruri mai putin evidente, precum experienta celor care utilizeaza solutii de tip screen reader (trebuie sa retinem ca exista aproximativ un miliard de persoane cu dizabilitati care cer astfel de solutii! De asemenea, combinatiile aproape infinite de ecrane pe care apar aplicatiile lor le dau o provocare in plus (pe langa cele mai…elementare, precum centrarea elementelor). Cand vine vorba de backend, este esential sa te gandesti la toate posibilitatile – daca faci un magazin online si omul iti trece la “Numar card” numarul sau de card e ok, dar daca iti scrie cele trei volume din Morometii in intreg, ce te faci? Tu transpui business-ul efectiv in cod si esti ultima linie de aparare pentru acesta, deci ai face bine sa stii ce faci.         

Framework, productivitate? – cum se lucreaza eficient?

 Daca e sa vorbim despre programare in sine, un trend care mie unul imi place enorm este cel al framework-urilor. Alti oameni au facut pentru tine treaba migaloasa, astfel incat tu sa te concentrezi pe partile care te fac pe tine unic. Domeniul de dev pe care ma specializez eu este de aplicatii mobile, iar gratie uneltelor precum Flutter sau React Native, nu am mai scris cod nativ de Android si iOS de aproximativ 4 ani. In traducere, in loc sa scriu aceeasi logica de business de doua ori, am timp de functionalitate noua de care sa profite userul (si la urma urmei si noi). Bineinteles, si aici exista cealalta extrema, unde sarim direct si le folosim pentru orice, lucru care iarasi nu e bun. Daca faci o aplicatie pentru o tara “de lumea a treia” unde internetul este limitat, ai face bine sa nu folosești un framework (care vine implicit cu un cost sub forma marimii mai mari a aplicatiei). Daca este sa vorbim de un framework de lucru, “iterate and fail fast” este tot ce pot spune. Traiasca Scrum.           

Cum ar trebui abordata construirea unei aplicatii? Master view sau fiecare programator cu bucatica lui?

  Mi se pare esetțial ca toata lumea din echipa sa aiba macar o idee despre ce ar trebui sa reprezinte in final acel produs. Daca ramai blocat in bula ta, vei crea o experienta care incepe si se termina cu aceasta, si nimeni nu vrea asta. De asemenea, daca stii cum ar trebui sa arate produsul final ai determinarea in plus de a contribui spre ceva mai mare decat tine – relaxant pe plan spiritual.       

 Spune-ne o tehnologie/limbaj care te enerveaza. 

 PHP. De cand am inceput sa scriu cod si pana acum, raspunsul a ramas acelasi, si sunt sanse mici sa se schimbe vreodata. Un limbaj facut acum mai bine de 20 de ani, pentru nevoi de acum mai bine de 20 ani, care a primit bucata peste bucata de banda izolatoare pe el de-a lungul timpului ca sa poata ramane la curent cu schimbarile. Needless to say, este oribil. Bafta sa folosesti PHP fara un framework precum Laravel sau Symfony. Pacat doar ca este cel mai folosit limbaj de programare pentru backend. E frumos sa fii batran.        

 Care crezi ca este viitorul programarii? 

 Daca e sa vorbim de trenduri in viitorul apropiat, din punctul meu de vedere vor lua amploare experientele convergente. Avem din ce in ce mai multe device-uri, iar urmatorul pas este de a avea o experienta ce incepe pe telefon, continua pe ceas si sfarseste pe frigider: aici exemplul Samsung. Bineinteles, alaturi de realitatea augmentata, posibilitatile sunt nesfarsite. Sunt atat de multe flow-uri care ar beneficia in contextul asta (de exemplu, ce ar fi sa vezi mobila pe care o vrei pentru apartamentul tau direct in camera, si cand apesi pe “Cumpara” sa se faca automat masuratorile necesare pentru ca tamplarul sa o ajusteze?), iar mintile luminate vor profita de posibilitate. Poate la mult timp dupa aceste inovatii se va putea face programare online pentru buletin la Sectorul 6. Speranta moare ultima…          Mac, Windows sau Linux? De ce?      Toate. Mi se pare stupid sa militezi pentru un sistem de parca ar fi bun la toate – fiecare are plusurile si minusurile sale. Windows este zeu cand vine vorba de productivitate (a se vedea toate combinatiile de taste si Aero Snap, care e de departe superior solutiilor celorlalte platforme), pe Mac este cel mai usor sa fii creativ (Sketch, Garageband, lista continua), iar Linux este un paradis pentru programatori (oricine a incercat sa folosească Docker pe Windows stie despre ce vorbesc). In acelasi timp, BSOD-urile sunt mai frecvente pe Windows decat ne-am dori, si bafta sa folosesti combinatii neconventionale de mai multe monitoare pe Mac si pe Linux. E vorba de echilibru. Use what suits you best.          

 Exista sezonalitate in programare? Dar trenduri? Ne dai cateva exemple?    

Nu mi se pare că există sezonalitate în sine, cât că programatorii se plictisesc repede. Azi există programarea orientată pe obiect cu plusurile și minusurile sale, mâine apare programarea reactivă, care are alte plusuri și minusuri. Asta, bineînțeles, se transformă într-o cursă în care programarea reactivă trebuie să rezolve minusurile sale care coincid cu plusurile celei orientate pe obiect, însă până să se întâmple asta apare următorul trend, iar ciclul se repetă. Cel puțin pe plan major. Este fascinant să privești mișcările mai mici, care totuși nu mor niciodată; a se vedea toți cei care fac jocuri pentru calculatoare de acum mai bine de 25 de ani. Vezi aici Planet X2 for the Commodore 64, The Making Of.           

Intrebare norocoasa: aici tu alegi intrebarea si raspunzi in consecinta.     

Care este numărul tău preferat?     1000000000000066600000000000001. Este cel mai mare număr prim care este și palindrom – se citește la fel de la cap la coadă și de la coadă la cap. De asemenea, are o natură “demonică” (are 13 de o pe fiecare parte – 13, număr cu ghinion, pe lângă evidentul 666 de la mijloc), lucru ce face aluzie către coincidențele din matematică foarte interesante, care complică mult dezbaterea dacă matematica este inventată de către noi sau exista dinaintea noastră.      

More To Explore