Termenul internship derivă de la cuvântul "intern" care, poate surprinzător pentru unii, a apărut inițial în domeniul medical. Un doctor cu o diplomă medicală dar fără licență era practic internul de dinainte de Primul Război Mondial.
Azi, internshipurile sunt mai populare decât multe poziții entry-level, internii fiind liceeni, studenți sau absolvenți. Dobândirea de "experiență" este motivul pentru care se caută internship-urile, deși de multe ori acest lucru de fapt înseamnă a face cafea și a te preface că lucrezi la calculator. Noi ne-am dorit un internship care, în primul rând, să fie benefic internului, astfel încât acesta să dobândească cunoștințe și experiență profesională, nu doar încă un rând de pus în CV.
Majoritatea internshipurilor anterioare au fost experiențe deosebite atât pentru trainerii cât și pentru internii noștri, mulți rămânând în companie pentru perioade lungi de timp. Au trecut câțiva ani de când nu am mai avut programe interne de internship, iar compania a trecut între timp prin schimbări structurale și de viziune. Am profitat de această oportunitate pentru a regândi programul de internship cu noi obiective, punând împreună idei anterioare pe care nu am avut timp să le implementăm și inițiative proaspete și moderne.
Orice internship trebuie să aibă un element central: calitatea. Adică să selecteze pe cei mai sclipitori candidați, să-i angajaze pe cei mai buni și în număr cât mai mare, să promoveze brandul de angajator și așa mai departe. Luând în considerare experiența noastră de până acum, am decis să organizăm un internship concentrat pe interni și pe modul în care aceștia ar putea beneficia cel mai mult de pe urma unui astfel de program. Investiția în oameni este o investiție cu o putere de multiplicare uimitoare, iar impactul îndrumării potrivite la vârsta potrivită este semnificativă pentru modelarea personalității și carierei unui om. Pentru a atinge acest obiectiv, nu este suficient doar să ne dorim acest lucru sau să folosim termeni ce fac senzație. Trebuie să punem acest obiectiv în centrul programului și să îl integrăm cu adevărat. Internii trebuie să știe acest lucru de la bun început pentru a ști la ce să se aștepte.
Majoritatea programelor de internship din IT se axează pe o tehnologie specifică (backend, frontend, dispozitive embedded etc.), dar puține au o abordare holistică. Am preferat să mergem pe o abordare modernă, diversificată, ce le oferă internilor posibilitatea de a interacționa cu tehnologii backend, frontend, dispozitive embedded și servicii cloud. Marele avantaj al acestei abordări este că internilor le sunt introduse o multitudine de concepte și tipare de design ce le oferă o viziune mai largă asupra dezvoltării software și asupra diverselor provocări pe care le implică fiecare tip de tehnologie. Mai mult, internii trebuie să decidă singuri dacă doresc să continue pe un domeniu specializat sau dacă doresc să meargă pe varianta full stack.
Un vechi proverb spune "Dă omului un pește și îl hrănești o zi. Învață un om să pescuiască și se va hrăni o viață." În loc să realizăm un internship cu instrucțiuni pas cu pas pentru toate taskurile, am decis să plecăm de la proiecte cu cerințe specifice la nivel de cod și doar apoi să ajungem la taskuri ce descriu funcționalități de nivel înalt. Am încurajat brainstormingul în identificarea unei soluții și solicitarea ajutorului când e chiar nevoie. Mai mult, pe baza principiilor deja consacrate ale cercului siguranței în sala de curs, am adaptat contextul internshipului, iar beneficiile au fost impresionante. În primul rând, creditând internul că va putea găsi o soluție bună în faza de explorare, am transmis mesajul că avem încredere în acel intern. Astfel, internii au fost încurajați să exploreze soluțiile liber, încrezători și conștienți că au la cine apela dacă nu găsesc singuri o rezolvare sau dacă eșuează. Pe lângă dezvoltarea unei relații de încredere între traineri și interni, internii au fost responsabilizați să își asume responsabilitatea pentru soluțiile și abordările lor. Așa cum era de așteptat, feedbackul din sondaje sau din interviuri a arătat că tehnica de predare a fost foarte bine primită, fiind eficientă și benefică.
Pentru a livra funcționalitate nouă în proiecte software, într-un fel sau altul, trebuie scris cod. Totuși, aceasta este doar o mică parte a procesului de dezvoltare software. Primul pas nu este scrierea de cod. Gândește înainte și abia pe urmă începe să scrii cod- este unul dintre principiile pe care le-am încurajat în cadrul internshipului. Am dorit să încurajăm analiza și rezolvarea de probleme la nivel conceptual, înainte de a trece la implementarea propriu-zisă. Mai mult, a avea o bună implementare nu este suficient. Prin urmare, am abordat și aspecte precum testarea, documentarea, lansarea aplicației și managementul bazelor de date.
Provocările zilnice ale programatorilor sunt din ce în ce mai variate și mai sofisticate. Un pas important în rezolvarea unei probleme este înțelegerea acesteia foarte bine. Doar așa putem ajunge la o soluție bună. Procesul necesită gândire critică și abilități analitice. Fără o astfel de abordare, oricine poate emite soluții aleatoriu în speranța că se vor potrivi. Chiar de la început, le-am explicat internilor că dorim să le dezvoltăm gândirea critică și abilitățile analitice cu scopul ca acestea să fie aplicate în dezvoltarea software.
Munca în echipă face ca visurile să devină realitate, nu-i așa? Munca în echipă a fost menționată atât de des și în atât de multe contexte încât a devenit un clișeu. Totuși, aceasta nu înseamnă că nu e adevărat. Credem în munca în echipă și în faptul că întregul este mai mult decât suma părților sale. În prima fază a internshipului, activitățile au fost individuale, toți având șansa de a învăța în ritm propriu pentru a fi pregătiți să lucreze ca echipă și să se ajute reciproc în a doua parte a internshipului cu scopul de a obține un nivel de performanță și o calitate mai mare decât ar fi obținut dacă nu și-ar fi unit eforturile spre un obiectiv comun.
Obiectivul nostru a fost de a structura echipa încât aceasta să fie sustenabilă, iar internii să primească ajutor în mod eficient. Formatorii au avut cunoștințe și experiență din domenii tehnice diverse împreună cu abilități bune de predare. Analizând programele de internship anterioare, am ajuns la concluzia că o bună parte a succesului programelor s-a datorat profesionalismului și atitudinii formatorilor. Studenții își dau seama imediat, dacă un profesor sau un formator își face meseria cu pasiune și considerație sau dacă doar vrea să bifeze încă un curs pe care trebuie să îl livreze. Studenții acordă o importanță mare acestui aspect esențial în conturarea opiniei lor despre companie. Pentru a putea acoperi gama largă de nevoi ale unui internship holistic, am apelat și la șase specialiști invitați care s-au axat pe domenii precum Sysadmin, Devops sau practici și metodologii SCRUM. Am avut o echipă de șase interni, un număr optim având în vedere natura part-time a internshipului, numărul de formatori și subiectele abordate. Retroactiv, a fost un mix bun și pentru interni și pentru companie.
Singura cerință tehnică a internshipului a fost un nivel bun de Java. Deoarece ne-am propus să acoperim un combo extins de tehnologii, am structurat internshipul în două părți. Prima parte a fost un ramp-up tehnic, formatorii prezentând fiecare tehnologie independent, astfel încât internii să asimileze conceptele noi pe rând, în ritm propriu.
Când am restructurat internshipul, am apelat la experiențele noastre anterioare pe care le-am completat cu note moderne de predare. Conceptele au fost prezentate tuturor internilor în cadrul prezentărilor organizate, unde am inclus mici teste menite să valideze înțelegerea și atenția cu care au asimilat materialul. Răspunsul la întrebări se trimitea individual într-un interval de timp limitat. Dacă toate răspunsurile erau corecte, acesta era un semn bun că putem merge mai departe. Dacă unele răspunsuri erau greșite, clarificam subiectul ca să ne asigurăm că nu există lacune. Pentru că la fiecare curs am avut destul de mult conținut de acoperit, am fost mereu deschiși la întrebări din partea cursanților. Pentru a consolida cunoștințele cursanților, pasul final a fost reprezentat de exerciții practice prin care exersau tehnologia sau conceptele nou învățate.
Recapitularea elementelor tehnice a avut scopul de a aduce la nivel cursanții și de a le oferi instrumentele potrivite pentru a fi productivi. În a doua parte a internshipului, ne-am axat pe dezvoltarea efectivă a unei aplicații folosind cunoștințele acumulate și respectând principiile metodologiei Agile. Obiectivul nostru a fost dezvoltarea unei aplicații numite SelectPard, pentru monitorizarea pubelelor folosite pentru colectarea selectivă. Principalele funcționalități ale aplicației au fost:
Gestionarea pubelelor;
Monitorizarea statusului pubelei;
Suport pentru o multitudine de tipuri de pubele;
Adresă + geolocație;
Integrarea cu Google Maps;
Integrarea dispozitivelor în cloud;
Am inițiat dezvoltarea aplicației cu două workshopuri despre arhitectură și despre modelul datelor, cursanții fiind implicați într-un exercițiu de tip brainstorming nu doar pentru a ajunge la o abordare corectă, ci și pentru a înțelege procesul din spatele luării de decizii. A fost un exercițiu nou pentru cursanți care i-a încurajat să aibă o perspectivă mai largă și o mai bună înțelegere a componentelor și a legăturii dintre acestea.
Pentru a simplifica procesul, am abordat arhitectura precum în diagrama de mai jos. Aplicația a fost gândită cu o componentă frontend și cu una backend, aceasta din urmă fiind compusă din trei microservicii pentru evenimente, pubele și pentru managementul dispozitivelor. Componentele frontend și backend au fost lansate împreună pe aceeași mașină virtuală din cadrul infrastructurii folosite. Mai mult, componenta backend a folosit două baze de date, una relațională și una NoSQL. Pe partea IoT, datele de la senzori au provenit de la senzorul IR conectat la un Raspberry Pi, care a trimis datele mai departe spre Azure IoT Hub (un serviciu cloud oferit de Azure). Datele de la senzori erau, în cele din urmă, consumate de microserviciul responsabil cu evenimentele.
Arhitectura SelectPard
Mergând mai departe pe partea tehnică, am folosit Javascript pentru SPA(Single-Page-Application), Java 8 pentru implementarea microserviciilor și Javascript combinat cu Python pentru componenta embedded. Am folosit React pentru frontend, mai multe proiecte Spring pentru componenta backend și Node.js pentru codul de pe dispozitive și conexiunea la Azure. Am folosit SQL Server pentru baza de date relațională și MongoDB pentru componenta NoSQL. Am folosit Raspberry Pi 3 Model B+ care a fost conectat la un senzor Sharp IR și la un LCD 20x4 pentru afișarea datelor. Componenta frontend a fost folosită pentru monitorizarea pubelelor și pentru partea de management și configurare. În ceea ce privește datele, datele brute au venit de la senzorul infrarosu conectat la un convertor Analog-Digital. Raspberry Pi a preluat datele digitale, a convertit datele brute în cm folosind o aproximare de ordinul întâi. Prin intermediul SDK-urilor din Azure IoT Hub, datele legate de distanța până la primul obiect au fost transmise entităților logice definite în cloud care corespund dispozitivelor reale. În secțiunea backend, microserviciul responsabil cu evenimentele, ce a folosit SDK-uri Azure, a consumat datele și le-a stocat în MongoDb, bază de date folosită ulterior pentru calcularea statusului pubelei. Microserviciile și-au expus funcționalitatea via api-uri REST consumate de componenta frontend, agregând datele de la mai multe microservicii și generând o experiență de utilizare relevantă pentru utilizator. Pagina principală a conținut o listă cu toate pubelele din sistem cu opțiuni precum editare, ștergere sau activarea/dezactivarea sincronizării de date. Mai mult, notificările prin e-mail erau configurabile. Practic, dacă notificările și sincronizarea erau activate, când o pubelă depășea un anumit nivel, o notificare era trimisă pe e-mail cu recomandarea de a goli pubela. Am folosit Java Mail API pentru a implementa această funcționalitate.
Dezvoltarea aplicației s-a derulat pe parcursul a două sprinturi de trei săptămâni fiecare. Primul sprint a fost plin de provocări, deoarece trebuiau implementate multe funcționalități noi, iar noi am început de la zero. Acesta este un lucru des întâlnit la toate sprinturile inițiale. Internii au avut nevoie de timp pentru a se obișnui cu abordarea de tip Agile. După primul sprint, echipa a prins viteză, iar în al doilea sprint echipa a livrat mai mult decât era planificat, ceea ce demonstrează că munca împreună și acomodarea cu stilul de muncă și cu principiile Agile duc la o îmbunătățire notabilă și imediată a performanței.
Harta SelectPard
Perspectiva pe Niveluri SelectPard
Am pornit de la ideea de a regândi programul de internship folosind experiența noastră anterioară, dar integrând conținut, principii și tehnici de actualitate. Deoarece conținutul era preponderent nou, fiind pentru prima oară când am încercat abordarea revizuită, am dorit să măsurăm impactul demersului nostru și să vedem cum ne putem îmbunătăți ulterior. Feedbackul pozitiv al internilor noștri ne-a încurajat foarte mult, validând faptul că prezentările noastre au fost relevante și cu informații bine explicate. Dorința noastră de a avea un internship axat pe interni a însemnat să ne concentrăm pe cât de mult pot internii să acumuleze și nu pe cât de multă informație le putem prezenta. Feedbackul pozitiv primit a venit și ca o confirmare a a unei abordări adecvate, care a căutat să inițieze internii în modul nostru de a gândi și de a dezvolta software. Prin urmare, avem toate argumentele care să ne determine să repetăm această experiență cât de curând.
Obiectivele internshipului sunt aliniate ADN-ului companiei, fiind strâns legate de cultura organizației noastre și de modul în care echipele și proiectele sunt organizate intern. De aceea, a fost important pentru noi să înțelegem dacă am atins aceste obiective sau nu. Pe baza rezultatelor chestionarului post-internship, toate obiectivele au fost îndeplinite în proporție foarte mare. Conform acelorași rezultate, a reieșit un consens puternic că internii ar recomanda compania altora după experiența internshipului.
Feedback - Internship 2019-2020
Pe parcursul internshipului, am realizat o serie de interviuri cu internii noștri. Feedbackul lor a fost încurajator pentru noi, motiv pentru care dorim să împărtășim cu voi părți din acesta.
Care au fost așteptările voastre înainte de internship și cu ce impresii ați rămas după acesta?
Intern: "Da. Inițial, mă gândeam că o să fim așa, un fel de șoricei... O să ni se dea un mentor și toți o să stăm ca șoriceii lângă el și învățăm de-acolo. N-am știut că vom fi puși împreună și că vom coopera așa mult. Munca asta de echipă a fost chiar foarte faină: tot timpul vorbeam, ne ajutam unii pe alții. A fost fain să vedem că fiecare facem câte un pic și la final iese ceva mare. Vorba aia: unde-s doi puterea crește, și unde-s șase… !!!"
Ce v-a surprins la acest internship?
Intern: "Implicarea mentorilor, gradul de implicare! Pe mine m-a surprins foarte mult. Nu mă așteptam să fie oameni care să se dedice atât de mult și să își dorească să ne învețe cu adevărat. Chiar a fost o surpriză foarte plăcută!"
Intern: "Și cât de bine explicau... Eram ca la un curs pentru 10000 de oameni în sală, și eram doar noi 6."
Ați face ceva diferit dacă ați relua internshipul?
Intern: "Probabil nu m-aș stresa, pentru că la început am fost destul de stresată…"
Intern: "Mie mi-a plăcut că chiar puneau accent pe chestia asta: să greșești, să spui ce gândești ca să poată să-și dea seama ce ar trebui schimbat. Aceasta mi s-a părut foarte important."
De fiecare dată când se pregătește și organizează un program de internship, acesta trebuie să se axeze pe activități și obiective specifice. Nu este doar o manieră bună de a atrage talentele, ci și o șansă foarte bună de a împărtăși din experiența acumulată următoarei generații de interni. Este primul lor pas în carieră, iar un bun început poate face cu adevărat o diferență.
Am pornit de la ideea restructurării programului de internship. Pentru aceasta: am adus cursurile la zi, am proiectat o nouă structură de curs, am propus o nouă aplicație, am utilizat metodologia Agile în procesul de dezvoltare, am mers pe abordarea full platform pornind de la frontend și backend până la dispozitive embedded și cloud și am realizat o serie de prezentări non-tehnice împreună cu un demo la nivel de companie. Am făcut toate aceste lucruri și nu numai în cadrul aceluiași program de internship. Cel mai important obiectiv a fost să avem un internship cu o atenție specială orientată către interni, un internship de care să poată profita la maxim. Investiți în oameni, faceți-o cu bunătate, iar succesul va fi garantat!
de Mihai Hulea , Bogdan Bustan