Lecții învățate ca inginer software de nivel de intrare
Publicat: 2022-08-30Dacă m-ai întreba acum un an ce a făcut un inginer de software, aș fi spus ceva de genul „rezolvarea problemelor prin cod”. Este un răspuns simplu care arată cum este evaluată munca pe care o producem. Pentru inginerii din echipe bazate pe produs, aceste probleme ar putea include modul de implementare a unei noi funcții pe care clienții au solicitat-o sau cum să îmbunătățească performanța caracteristicilor existente.
Dacă mi-ați pune aceeași întrebare astăzi, aș da un răspuns ușor diferit. Inginerii de software sunt însărcinați să rezolve problemele potrivite prin cod și, atunci când sunt rezolvate eficient, ating obiectivele de afaceri. Identificarea problemelor de rezolvat și a modului de rezolvare a acestora este cea mai importantă parte a devenirii unui dezvoltator, detaliile actuale de implementare fiind secundare.
Calea mea către inginerie software
Am devenit interesat de programare după ce am urmat un curs la Upperline Code în vara dinaintea anului în primul an de facultate. Am primit această oportunitate printr-un program de pregătire pentru facultate și carieră din care am făcut parte, numit The Opportunity Network.
Upperline Code a fost prima mea introducere în programare și mi-am dat seama rapid că eram interesat să învăț să codific. Mai târziu în acea vară, am primit pachetul meu de înscriere la Notre Dame și am trecut de la Colegiul de Arte și Litere la Colegiul de Inginerie, astfel încât să mă pot specializa în Informatică (CS).
Unele dintre cursurile mele preferate de CS au fost Design/Analiza algoritmilor, Cloud Computing și Provocări de programare. Problemele au fost interesante, iar profesorii au fost grozavi în a prezenta idei noi și a explica concepte.
Pe parcursul licenței, am știut că vreau să lucrez ca inginer software și să folosesc abilitățile tehnice pe care le-am dobândit. Din fericire, în vara de dinaintea anului superior, am avut ocazia să fac stagiar ca inginer software la Kantata și să fac împerechere cu alți ingineri pentru a ajuta la furnizarea de funcții.
Experiența mea de stagiu, împreună cu discuțiile motivaționale de la profesorii mei, mi-au dat încrederea să nu mă mulțumesc cu niciun alt rol atunci când am început să aplic pentru locuri de muncă. După mult timp petrecut în orele de birou, am absolvit în 2021 cu o diplomă CS și am acceptat o ofertă de a fi inginer software asociat aici la Sprout Social.
Instalarea în Sprout Social
O parte din a fi nou în acest rol și nou în companie a fost nevoia de a dezvolta atât abilități generale de inginerie software, cât și cunoștințe specifice domeniului Sprout. Am descoperit că sarcinile care necesită cunoștințe generale de programare pentru a le înțelege erau cel mai ușor de rezolvat pentru mine. Cu toate acestea, sarcinile care necesitau cunoștințe despre arhitectura lui Sprout mi-au luat timp să le abordez și a trebuit să mă bazez pe echipa mea pentru ajutor. Deși există unele probleme pe care le puteți rezolva citind documentația online, nu puteți găsi întotdeauna informații relevante pentru munca pe care o desfășurați – este esențial să puteți solicita îndrumare altora.
Unul dintre primele lucruri care m-au remarcat când m-am alăturat lui Sprout a fost cât de colaborativ este procesul de dezvoltare. Știam că este nevoie de echipe întregi pentru a dezvolta funcții, dar nu știam cum arată asta în practică. Mi-am dat seama repede că lansarea unei funcții de succes a necesitat mulți oameni în diferite roluri să lucreze împreună – de la managerii de produs care definesc cerințele proiectului, până la designeri care creează machete și ingineri care implementează caracteristici. Colaborarea nu a fost ceva opțional, ci o necesitate în realizarea obiectivelor echipei noastre.
A învăța cum să navighezi prin diferitele baze de cod și a construi un model mental al modului în care diferitele servicii au interacționat între ele a fost o curbă de învățare abruptă. Întrucât afacerea de bază a lui Sprout este software-ul, arhitectura sa este puternic modelată de cerințele sale de afaceri. Pe măsură ce creșteam, trebuia să fiu conștient de problemele de afaceri pe care dezvoltatorii încercau să le rezolve și de ce au fost luate deciziile arhitecturale anterioare.
Inițial, am fost puțin intimidat că solicitările de extragere necesită recenzii înainte de a putea fi îmbinate în baza de cod. Înțelegerea faptului că scopul principal al revizuirii codului este partajarea cunoștințelor și menținerea standardelor de cod a ajutat la schimbarea perspectivei mele.
Parcurgerea recenziilor de cod mi-a ajutat să îmi perfecționez abilitățile tehnice și să îmbunătățesc calitatea solicitărilor mele de extragere. A fost de mare ajutor faptul că colegii îmi oferă sfaturi despre ce să schimb, să mă prezinte noi modele și să mă îndrume către zonele relevante ale bazei de cod. Citirea solicitărilor de atragere ale altor ingineri mi-a oferit și o vizibilitate valoroasă asupra altor servicii la care nu lucrez direct.
Experiențele tale anterioare contează
Există o idee predominantă că, pe măsură ce intri în noi etape în viață, experiențele tale anterioare nu mai contează. Odată ce intri la facultate, experiențele tale de liceu nu mai contează. Odată ce intri în forța de muncă, experiențele tale la facultate nu mai contează.
Dar ceva ce este adesea trecut cu vederea este că experiențele, cunoștințele și obiceiurile noastre au un efect de agravare. De obicei, suntem capabili să realizăm lucruri noi doar datorită muncii pe care am făcut-o înainte. Cunoștințele și abilitățile pe care le-am dobândit anterior au influențat foarte mult modul în care abordez noile provocări ca inginer software la nivel de intrare.
Cursurile din timpul licenței care au avut cel mai direct impact asupra muncii mele de zi cu zi la Sprout au fost Provocări de programare și Concepte de baze de date. Primul m-a învățat cum să despart problemele mari în bucăți mai mici pentru a le rezolva mai eficient. M-a ajutat să devin mai intenționat cu privire la modul în care mi-am structurat codul și am îmbunătățit lizibilitatea codului meu.
Conceptele bazelor de date m-au învățat concepte fundamentale ale bazelor de date relaționale și au acoperit subiecte precum proiectarea schemei bazei de date și SQL. Am învățat cum să scriu interogări, ceea ce a fost extrem de util, deoarece am adesea nevoie să interog bazele noastre de date pentru a rezolva probleme sau a răspunde la întrebări.
Oportunitățile pe care le-am avut în afara clasei au fost la fel de valoroase. Java nu era un limbaj care a fost acoperit în majoritatea cursurilor mele, totuși am avut ocazia să lucrez la el pentru un proiect de afaceri pe care unul dintre profesorii mei îl conducea. Am câștigat experiență practică în scrierea Java, lucrul cu baze de date MySQL și crearea de imagini Docker. Învățarea Java a fost deosebit de utilă, deoarece majoritatea serviciilor lui Sprout sunt scrise în el.
Există o mulțime de alte abilități pe care le-am dobândit de-a lungul perioadei de licență pe care le consider de la sine înțeles, cum ar fi navigarea în linia de comandă și înțelegerea conceptelor de bază de programare. Este o concepție greșită comună că, deoarece majoritatea subiectelor abordate la licență sunt de natură teoretică, ele nu vă vor pregăti pentru cariere în inginerie software. Cu toate acestea, cred că este adevărat opusul – abilitățile pe care le învățați la licență contează, chiar dacă nu sunt direct aplicabile muncii dvs. de zi cu zi.
Informatica este un domeniu extrem de larg
CS acoperă o varietate de specializări, cum ar fi inteligența artificială, învățarea automată și știința datelor. Experiența pe care o dobândești la licență servește drept cunoștințe fundamentale care te pot fi de folos într-o varietate de roluri de nivel de intrare, care nu sunt exclusiv ingineriei software. Trecerea de la licență la o poziție cu normă întreagă oferă o oportunitate de a explora ce fel de rol și specialitate este potrivit pentru tine.
Dacă doriți să începeți o carieră în inginerie software, Sprout este un loc minunat pentru a începe.