Come pensare come uno sviluppatore di software

Una mentalità di produttività che puoi applicare a quasi tutto

Foto di Max Nelson su Unsplash
Cambiare il gioco è una mentalità.
- Robert Rodriguez

Come sviluppatore di software, mi chiedo costantemente: cosa distingue uno sviluppatore eccezionale da uno mediocre? Dalla mia osservazione, ha ben poco a che fare con l'istruzione formale, l'età, il genere e persino l'esperienza del settore. Ha molto a che fare con la mentalità.

Lo sviluppo di software è molto simile alla cottura. Tutti i leggendari chef devono prima cogliere i fondamenti comuni della preparazione degli alimenti e dei processi di cucina. Solo con questi fondamenti allora possono brillare i loro tratti di personalità unici. I grandi sviluppatori sono creativamente diversi quanto arrivano, eppure condividono una mentalità stranamente comune, su cui costruiscono il loro mestiere.

Non riesco a considerarmi tra i ranghi di grandi sviluppatori di software. Faccio tuttavia il punto di studiare continuamente le mentalità efficaci di sviluppatori di software eccezionali al fine di emularle.

Perché dovresti preoccuparti di come pensa uno sviluppatore di software? Non sono un sacco di secchioni che toccano la tastiera? Bene sì, ma la mentalità dello sviluppatore di software può essere applicata a molte aree della tua vita, ad esempio nella tua attività, nel tuo trambusto laterale, negli investimenti, negli hobby, nello sport o nell'apprendimento di una nuova abilità.

Analizziamo i concetti fondamentali di come pensa uno sviluppatore di software. Usando il tuo pensiero astratto, puoi usarli come schemi mentali per coinvolgere le tue imprese quotidiane.

Scopri come imparare

Se dovessi scegliere una sola abilità che è assolutamente essenziale per uno sviluppatore di software, sarebbe la capacità di autoapprendimento.

Gli sviluppatori si insegnano leggendo libri, consumando blog, lavorando attraverso tutorial, frequentando corsi di formazione e facendo mini progetti.

Di fronte a problemi di programmazione, gli sviluppatori combinano forum come StackTranslate.it per suggerimenti e soluzioni. Più spesso, la soluzione è stata probabilmente trovata da qualcun altro.

Sì, è possibile sopravvivere come sviluppatore di software senza apprendere nulla di nuovo. Il prezzo elevato da pagare per farlo è quello di essere incentrato sul ruolo del prodotto fisso o della tecnologia.

Imparare qualcosa di nuovo è una danza delicata tra il consumo di informazioni e il provare cose per te stesso. Se fai affidamento sul consumo di informazioni, non sarai in grado di produrre autonomamente soluzioni. Se impari solo tramite prove ed errori, perderai di sfruttare le informazioni prontamente disponibili. Ad esempio, leggere della scrittura ti rende uno scrittore migliore, ma solo se ti dedichi al tempo a scrivere.

Sviluppa una passione per l'apprendimento. Se lo fai, non smetterai mai di crescere.
- Anthony J. D'Angelo

Con alcune eccezioni come il campo legale o medico, la capacità di insegnare a noi stessi nuove competenze trionfa sull'educazione formale. Proprio come uno sviluppatore di software, dovremmo insegnarci incessantemente nuove abilità per mantenere la nostra rilevanza competitiva.

La sfida è quella di bilanciare entrambe le strade dell'autoeducazione: consumo attivo di informazioni e apprendimento attraverso prove ed errori.

Non reinventare la ruota

Durante lo sviluppo di software, non devi quasi mai ricominciare da capo. Puoi scegliere tra una miriade di linguaggi di programmazione, framework, infrastrutture e strumenti.

La sindrome di Not Invented Here (NIH) nell'industria del software descrive la tendenza a reinventare la ruota, nonostante la disponibilità di strumenti e software esistenti di altri fornitori. È molto facile cadere in questa trappola perché la creazione di software è relativamente più economica della creazione di componenti in altri settori.

Ci sono buoni motivi per reinventare la tua ruota. Un motivo molto valido è se le soluzioni esistenti là fuori non soddisfano i tuoi requisiti. Anche se così fosse, alcune soluzioni open source ti consentono di estenderle o modificarle.

D'altra parte, ci sono terribili ragioni per reinventare la ruota, incluso ma non limitato a:

  • illuso dall'ego nel presumere che una soluzione fatta in casa sia sempre migliore
  • troppo pigro per capire quali soluzioni ci sono là fuori

Riutilizzare il software esistente ha gli ovvi vantaggi di risparmiare tempo e fatica. A lungo termine, beneficerai delle correzioni di bug e delle nuove funzionalità fornite dallo sviluppatore del software.

Quando si intraprende un'impresa, è prudente guardarsi intorno se possiamo appropriarsi delle soluzioni esistenti. Possiamo porci domande come:

  • quali idee pertinenti sono già disponibili?
  • qualcun altro ha capito un sistema o un processo?
  • ci sono soluzioni esistenti su cui possiamo basarci?
  • ci sono strumenti disponibili?
  • ci sono dei servizi disponibili che possiamo usare?

Piccole iterazioni

Il processo di sviluppo del software è un processo iterativo. Il pensiero iterativo può essere visto su più livelli, dalle attività di programmazione quotidiane alle versioni dei prodotti che durano settimane o mesi.

L'idea di base di un'iterazione è pianificare, eseguire, testare e apprendere.

Illustrazione di Bruce Flow

Più brevi sono le iterazioni, più veloce è la possibilità di incorporare il feedback nel successivo ciclo di sviluppo. Prima degli anni '90, era tipico avere cicli di sviluppo del prodotto più lunghi che si estendevano fino a 6 mesi prima che una soluzione raggiungesse il cliente. L'approccio attuale è quello di avere iterazioni molto più brevi. Alcune società di software distribuiscono persino soluzioni a sistemi produttivi più volte al giorno.

Avere un approccio iterativo ci dà il permesso di essere meno severi con noi stessi quando ci troviamo di fronte a quei momenti "avrebbe potuto, avrebbe dovuto, fatto meglio le cose". Questo perché se abbiamo perso qualcosa di buono in questa iterazione, possiamo risolverlo nella prossima iterazione.

È rilassante sapere che non dobbiamo essere perfetti, dobbiamo solo migliorare continuamente.

L'altro vantaggio principale di lavorare nelle iterazioni è che siamo alleggeriti dall'onere mentale di capire tutto dall'inizio. Senza ignorare il quadro generale, abbiamo solo bisogno di piani e decisioni sufficienti per l'attuale iterazione. Le decisioni delle iterazioni future possono essere tralasciate per il momento, poiché dipenderanno anche dagli apprendimenti dell'iterazione corrente.

La mentalità iterativa può essere applicata a quasi tutte le imprese basate su progetti. L'approccio è sistematico, efficace, pratico e facile da implementare.

Test, test, test

Una parte integrante del lavoro di uno sviluppatore di software è il test. Nonostante il codice sia solitamente scritto secondo le migliori intenzioni, ci saranno ancora errori. Gli errori causati da errori involontari o ipotesi errate.

Un buon sviluppatore di software non ha mai l'illusione che un software sia privo di bug. L'intero settore del software accetta che gli errori siano solo una parte integrante del processo. Questo è il motivo per cui sono stati creati così tanti strumenti, framework e metodologie per rilevare errori.

L'obiettivo del test è quello di catturare quei fastidiosi bug il più presto possibile. I bug precedenti vengono rilevati, più sono economici da correggere. Un errore che richiede 5 minuti per essere risolto sulla macchina dello sviluppatore può costare milioni di danni legali se lasciato per raggiungere il lato del cliente.

In qualsiasi impresa che intraprendiamo, commetteremo inevitabilmente errori. Proprio come con il software, prima li rileviamo, meglio è. È saggio verificare le nostre ipotesi prima di impegnare ulteriori risorse per una determinata causa.

Un modo efficace per testare è provare qualcosa su una scala più piccola. Ad esempio, se assumiamo che possiamo imparare a vivere come fotografo a tempo pieno, sarebbe una buona idea provarlo come un trambusto prima di lasciare il nostro lavoro a tempo pieno.

È anche molto probabile che abbiamo ipotesi errate su noi stessi. Gli errori tipici sono ipotesi sui nostri interessi. Con i media moderni, è facile avere una visione romantica del successo senza vedere lo sforzo investito da coloro che li hanno raggiunti. Tali opinioni distorte potrebbero indurci ad assumere falsi interessi in determinati settori. L'unico modo per capire se ci potrebbe piacere qualcosa è testare le acque prima di andare all-in.

Fino a quando non li controlliamo, le ipotesi non sono altro che pensieri non dimostrati che turbinano nelle nostre teste. Il test è un buon modo per distillare i presupposti in verità verificate. La chiave per il test è impegnare meno risorse possibili prima di trovare gli errori il prima possibile.

Applica schemi appresi

I modelli di progettazione nell'ingegneria del software sono soluzioni generalizzate e riutilizzabili a un problema ricorrente. Non è un pezzo di codice, ma piuttosto un modello di idea che può essere applicato quando si scrive il proprio codice.

Prendiamo il modello di facciata come esempio concreto di un modello di progettazione.

Un sistema software può consistere in un disordine complesso di più sottosistemi. Se non stiamo attenti nella progettazione, ci sarà una comunicazione confusa tra i componenti dei sottosistemi. Il modello di facciata ci dice di usare una "facciata" per nascondere la complessità di un sottosistema. Altri sottosistemi parlano solo con questa facciata anziché con i singoli componenti di quel particolare sottosistema.

Il modello di facciata non è un nuovo modello. È stato descritto per la prima volta nel libro "Design Patterns: Elements of Reusable Object-Oriented Software", pubblicato nel 1994. Tuttavia, è ancora oggi molto rilevante.

I grandi sviluppatori di software studiano i modelli di progettazione nel software. Capiscono che i modelli di progettazione possono fornire un approccio strutturato per risolvere i problemi che hanno. Ancora più importante, sanno quando applicare quale modello.

Studiare i generosi contributi che ci vengono prima ci risparmierà il dolore di scoprire le stesse idee con errori. Applicare schemi per risolvere i problemi è come risolvere un cubo di Rubik. Quando conosci i passaggi che devi compiere, il problema diventa improvvisamente facile da risolvere.

Foto di Olav Ahrens Røtne su Unsplash

Esistono modi ovvi per apprendere schemi come guide pratiche o sessioni di formazione in classe. Tuttavia, i modelli possono essere visti ovunque, a volte nascondendosi in bella vista. Uno dei miei modi preferiti di apprendere gli schemi è leggere biografie di persone che hanno successo nei rispettivi campi.

I modelli non sono mai soluzioni di cookie cutter che possono essere applicate universalmente. Sono come strumenti nella tettoia. L'esperienza e il discernimento ci diranno che non tutti i compiti possono essere risolti con un martello.

Non innamorarti del tuo lavoro

I grandi sviluppatori di software praticano una distinzione molto importante: amano ciò che fanno ma non si innamorano del lavoro che producono.

Per essere onesti in tutto, incluso lo sviluppo del software, è necessaria una certa soglia di passione. Abbiamo bisogno del fuoco dell'entusiasmo per spingerci oltre le impegnative gobbe degli altopiani mondani.

Nonostante abbiano passione, i grandi sviluppatori non sono attaccati al lavoro che producono. Questo distacco simile allo zen offre molteplici benedizioni, soprattutto quando il nostro lavoro ci richiede di essere innovativi:

  • più aperto al feedback costruttivo da parte di altri
  • più obiettivo nella valutazione di soluzioni alternative
  • maggiori possibilità di provare un approccio radicalmente diverso nella prossima versione o iterazione
  • più disposti a provare idee drastiche, pur sapendo che esiste un rischio elevato di essere scartate

Per esperienza personale, devo ammettere che allontanarmi emotivamente dal lavoro che produco non è facile. Mi fa male scartare i prototipi dopo aver lavorato giorni o settimane su di essi.

L'attaccamento al nostro lavoro può essere spiegato dall'errore di costo sommerso. Implica che più investiamo in qualcosa, più è difficile abbandonarla.

L'idea di essere distaccati da ciò che abbiamo costruito può essere utile in tutte le aree della vita. Il distacco ci impedisce di trattenere qualcosa per troppo tempo, specialmente quando non serve più alla nostra causa attuale.

Forse ci stiamo aggrappando a quel trambusto laterale mezzo morto a basso profitto che ci sta prosciugando il tempo. O forse è tempo di rivalutare il nostro intero portafoglio di investimenti.

L'attaccamento al nostro lavoro è simile a stare in una foresta, tenendoci stretti a un burattino di legno che una volta abbiamo scavato in passato. Ci sono infinite opportunità per creare marionette più belle. Il primo passo per crearne di nuovi è quello di mettere giù quello vecchio.

Fai provare lo sviluppatore

Se sei uno sviluppatore di software, prova ad applicare ciò che stai già facendo professionalmente ad altri aspetti della tua vita. Potresti essere sorpreso dalla ricchezza di strumenti di produttività che già possiedi.

Se non sei uno sviluppatore di software, dai la possibilità di pensare come un secchione una possibilità! Abbatti quei concetti e riutilizzali per raggiungere i tuoi obiettivi.

Questa storia è pubblicata su The Startup, la più grande pubblicazione sull'imprenditoria di Medium seguita da 6.714 persone.

Iscriviti per ricevere le nostre storie migliori qui.