Lezioni apprese come ingegnere del software entry-level

Pubblicato: 2022-08-30

Se un anno fa mi avessi chiesto cosa faceva un ingegnere del software, avrei detto qualcosa sulla falsariga di "risolvere i problemi attraverso il codice". È una risposta semplice che indica come viene valutato il lavoro che produciamo. Per gli ingegneri dei team basati sul prodotto, questi problemi potrebbero includere come implementare una nuova funzionalità richiesta dai clienti o come migliorare le prestazioni delle funzionalità esistenti.

Se mi fai la stessa domanda oggi, darei una risposta leggermente diversa. Gli ingegneri del software hanno il compito di risolvere i problemi giusti attraverso il codice e, una volta risolti in modo efficace, raggiungono gli obiettivi aziendali. Capire quali problemi risolvere e come risolverli è la parte più importante dell'essere uno sviluppatore, con i dettagli di implementazione effettivi che sono secondari.

Il mio percorso verso l'ingegneria del software

Mi sono interessato alla programmazione dopo aver frequentato un corso all'Upperline Code l'estate prima del mio primo anno di college. Ho avuto questa opportunità attraverso un programma di preparazione al college e alla carriera di cui facevo parte chiamato The Opportunity Network.

Upperline Code è stata la mia prima introduzione alla programmazione e ho subito capito che ero interessato a imparare a programmare. Più tardi quell'estate, ho ricevuto il mio pacchetto di iscrizione a Notre Dame e sono passato dal College of Arts and Letters al College of Engineering in modo da potermi laureare in Informatica (CS).

Alcuni dei miei corsi CS preferiti erano Progettazione/Analisi di algoritmi, Cloud Computing e Sfide di programmazione. I problemi erano interessanti ei professori erano bravi a presentare nuove idee e spiegare concetti.

Durante il corso di laurea, sapevo che volevo lavorare come ingegnere del software e utilizzare le competenze tecniche che avevo acquisito. Per fortuna, l'estate prima del mio ultimo anno, ho avuto l'opportunità di fare uno stage come ingegnere del software presso Kantata e di collaborare con altri ingegneri per aiutare a fornire funzionalità.

La mia esperienza di tirocinio, insieme ai discorsi di incoraggiamento dei miei professori, mi ha dato la sicurezza di non accontentarmi di nessun altro ruolo quando ho iniziato a fare domanda per un lavoro. Dopo un sacco di tempo trascorso in orario d'ufficio, mi sono laureato nel 2021 con una laurea in CS e ho accettato un'offerta per diventare un Ingegnere Software Associato qui a Sprout Social.

Julius Boateng e un gruppo di colleghi di Sprout Social

Stabilirsi in Sprout Social

Parte dell'essere nuovi al ruolo e nuovi per l'azienda consisteva nel dover sviluppare sia competenze generali di ingegneria del software che conoscenze di dominio specifiche di Sprout. Ho scoperto che le attività che richiedevano una conoscenza generale della programmazione per essere comprese erano le più facili da risolvere per me. Tuttavia, i compiti che richiedevano la conoscenza dell'architettura di Sprout richiedevano tempo per me da affrontare e ho dovuto fare affidamento sul mio team per l'aiuto. Sebbene ci siano alcuni problemi che puoi risolvere leggendo la documentazione online, non sempre puoi trovare informazioni rilevanti per il lavoro che stai facendo: essere in grado di chiedere aiuto ad altri è fondamentale.

Una delle prime cose che mi ha colpito quando sono entrato in Sprout è stata la collaborazione del processo di sviluppo. Sapevo che ci volevano interi team per sviluppare funzionalità, ma non sapevo che aspetto avesse in pratica. Mi sono subito reso conto che il rilascio di una funzionalità di successo richiedeva la collaborazione di molte persone con ruoli diversi, dai product manager che definivano i requisiti del progetto, ai designer che creavano modelli e agli ingegneri che implementavano le funzionalità. La collaborazione non era qualcosa di facoltativo, ma una necessità per raggiungere gli obiettivi del nostro team.

Foto dei colleghi di Julius Boating e Sprout fuori dalla statua del fenicottero di Calder nel centro di Chicago

Imparare a navigare attraverso le varie basi di codice e costruire un modello mentale di come i diversi servizi interagiscono tra loro è stata una curva di apprendimento ripida. Poiché il core business di Sprout è il software, la sua architettura è fortemente modellata dai suoi requisiti aziendali. Mentre stavo aumentando, dovevo essere consapevole dei problemi di business che gli sviluppatori stavano cercando di risolvere e del motivo per cui erano state prese precedenti decisioni sull'architettura.

Inizialmente, ero un po' intimidito dal fatto che le richieste pull richiedessero revisioni prima che potessero essere unite nella base di codice. Capire che lo scopo principale delle revisioni del codice è la condivisione delle conoscenze e il mantenimento degli standard del codice ha aiutato a cambiare la mia prospettiva.

L'esame del codice ha aiutato ad affinare le mie competenze tecniche e a migliorare la qualità delle mie richieste pull. Avere colleghi che mi danno consigli su cosa cambiare, mi introduce a nuovi modelli e mi indica aree rilevanti della base di codice è stato davvero utile. Leggere le richieste di pull di altri ingegneri mi ha anche dato una preziosa visibilità su altri servizi su cui non sto lavorando direttamente.

Le tue precedenti esperienze contano

C'è un'idea prevalente che quando entri in nuove fasi della vita, le tue esperienze precedenti non contano più. Una volta che entri al college, le tue esperienze al liceo non contano più. Una volta che entri nel mondo del lavoro, le tue esperienze universitarie non contano più.

Ma qualcosa che viene spesso trascurato è che le nostre esperienze, conoscenze e abitudini hanno un effetto combinato. Di solito siamo in grado di ottenere cose nuove solo grazie al lavoro che abbiamo fatto prima. Le conoscenze e le abilità che ho acquisito in precedenza hanno influenzato notevolmente il modo in cui affronto le nuove sfide come ingegnere del software entry-level.

Le lezioni durante la laurea che hanno avuto l'impatto più diretto sul mio lavoro quotidiano a Sprout sono state le sfide di programmazione e i concetti di database. Il primo mi ha insegnato come dividere grandi problemi in pezzi più piccoli per risolverli in modo più efficiente. Mi ha aiutato a diventare più intenzionale su come ho strutturato il mio codice e ha migliorato la leggibilità del mio codice.

Database Concepts mi ha insegnato i concetti fondamentali del database relazionale e ha trattato argomenti come la progettazione di schemi di database e SQL. Ho imparato a scrivere query, il che è stato estremamente utile poiché ho spesso bisogno di interrogare i nostri database per risolvere problemi o rispondere a domande.

Gif animata di un kit robot TurtleBot.

Le opportunità che ho avuto al di fuori della classe sono state altrettanto preziose. Java non era una lingua trattata nella maggior parte dei miei corsi, tuttavia ho avuto l'opportunità di lavorarci su per un progetto imprenditoriale che uno dei miei professori stava conducendo. Ho acquisito esperienza pratica scrivendo Java, lavorando con database MySQL e creando immagini Docker. Imparare Java è stato particolarmente utile poiché la maggior parte dei servizi di Sprout sono scritti in esso.

Ci sono molte altre abilità che ho acquisito durante il periodo universitario che do per scontate, come navigare nella riga di comando e comprendere i concetti di base della programmazione. È un malinteso comune che, poiché la maggior parte degli argomenti trattati negli studi universitari sono di natura teorica, non ti preparino per le carriere di ingegneria del software. Tuttavia, credo che sia vero il contrario: le abilità che impari negli studi universitari contano, anche se non sono direttamente applicabili al tuo lavoro quotidiano.

L'informatica è un campo estremamente vasto

CS copre una varietà di specializzazioni come l'intelligenza artificiale, l'apprendimento automatico e la scienza dei dati. L'esperienza acquisita durante la laurea serve come conoscenza di base che può servirti bene in una varietà di ruoli di livello base non esclusivi dell'ingegneria del software. Fare il salto da una laurea a una posizione a tempo pieno offre l'opportunità di esplorare quale tipo di ruolo e specialità è più adatto a te.

Se stai cercando di iniziare una carriera nell'ingegneria del software, Sprout è un ottimo punto di partenza.