Risolvere i problemi durante lo sviluppo: i cinque migliori metodi.

Luca Pagliaro
7 min readNov 3, 2020

--

Ogni sviluppatore sa benissimo cosa significa trovarsi davanti un problema e non avere idea di come poterlo superare.

Molte volte non riusciamo a trovare una soluzione ad un problema per via di una conoscenza limitata della materia, altre invece capita di trovarsi davanti ad un problema prettamente logico dovuto ad una cattiva strutturazione del codice. Questo genere di errori ci porta ad investigare su dove risiede l’errore che fa saltare tutta la nostra logica. Qui entra in gioco una vera e propria sfida con il noi del passato: qualche tempo fa abbiamo sbagliato a scrivere una parte del programma ed abbiamo fallito, oggi gareggeremo con noi stessi per capire se siamo riusciremo ad ottenere un risultato migliore.

Per rendere la sfida più semplice sono tecniche che possono aiutare uno sviluppatore a risolvere i problemi di ogni progetto.
Oggi ho cercato di riassumere le mie personali migliori cinque:

1 — Semina soluzioni, raccogli intuizioni

Un’idea tanto stravagante quanto interessante è quella che ipotizza l’esistenza di un Google interno. È come se dentro ognuno di noi sia presente un motore di ricerca che si attiva quando abbiamo bisogno di un’intuizione. Che sia il ritrovare il mazzo di chiavi o trovare un nome per la nostra nuova startup basta lasciar lavorare il nostro Google interiore per poi avere, quando meno ce l’aspettiamo, un flash con una soluzione geniale!

Il concetto di Google Interiore l’ho appreso da questo video di Robin Good in cui spiega come ha avuto l’intuizione geniale per il suo nome

Ovviamente il nostro G.I. ha bisogno di un combustibile che gli dia energia ed il modo migliore per fornirgliene di qualità è quello di leggere, lasciarsi contaminare e cercare di guardare il mondo da prospettive diverse.

Alimentare il nostro motore, e farlo in molti ambiti diversi, è come spargere nel campo della nostra mente semi di possibili soluzioni. Non tutto ciò che impareremo ci servirà nella vita, ma sempre meglio avere qualche cartuccia in più che ritrovarsi a corto di munizioni, non trovate?

Photo by Jed Owen on Unsplash

Consiglio a tutti di iniziare a prendere l’abitudine di leggere quotidianamente sugli argomenti del proprio lavoro.

Per esempio personalmente, ogni giorno, leggo decine di articoli su programmazione, miglioramento personale e sul fare impresa.
Sulla tematica programmazione mi piace leggere articoli su tematiche anche differenti dai linguaggi e framework che utilizzo giornalmente.
Imparare su tematiche non strettamente facenti parte della mia confort zone mi permette, oltre a tenermi costantemente aggiornato ed allenato, di conoscere altre tecnologie da poter approfondire o usare in un futuro in cui possa servire.

Così facendo fornirai alla mente spunti nuovi per creare collegamenti sia futuri che per soluzioni che sono rimaste “in attesa” di essere smistate dal motore interno.

2 — Rubber duck, il debugger

Si dice che il modo migliore per imparare qualcosa sia quella di doverla spiegare ad un’altra persona. Cosa succederebbe se si portasse questa teoria nel mondo della programmazione? Facile, otterremmo una papera di gomma!
Su questa tanto semplice ma geniale intuizione deve essere nato il metodo Rubber Duck.

Il metodo di debug funziona così: in qualche modo dobbiamo entrare in possesso di un’anatra di gomma e tenerla a portata di mano per le sessioni di debug. Alla prima occasione utile, quando avrai un problema, non servirà fare altro che spiegare all’anatra il problema da risolvere e come si è deciso di implementare la soluzione e successivamente spiegare l’implementazione mentre lo si legge riga per riga.

Provando a leggere il codice ad un certo punto ti renderai conto che quello che quello che ti serviva scrivere non coincide con il codice prodotto e l’errore verrà fuori per magia! L’anatra quindi potrà essere serena e felice nella consapevolezza di averti aiutato.

Ovviamente anche un collega potrebbe essere in grado di sostituire l’anatra, tuttavia questo non sempre è possibile. Inoltre si sa…le anatre son animali comprensivi e non riveleranno mai a nessuno il vostro errore ;)

3 — Prenditi una pausa

Risolvere un bug che abbiamo prodotto è come gareggiare con se stessi, risolvere un errore significa migliorare sia la codebase che la nostra capacità di scrittura del codice.

Non sempre però al contrario, se non dovessimo riuscire a risolvere un errore, deve significare che questo è troppo grande per noi. Semplicemente in quel momento potremmo essere stanchi, demotivati, o poco concentrati.

Stanchezza, stress e pensieri extra lavorativi sono sempre dietro l’angolo, e se non riusciamo a separarci da queste preoccupazioni forse è il caso di separarci dallo scrivere codice. Prenditi una pausa.

Se il problema è risolvibile, come una stanchezza momentanea dovuta al poco sonno è inutile continuare a sbattersi davanti ad un problema che ora dopo ora sembra diventare sempre più complesso da risolvere. Spegni semplicemente il pc e vai a riposare.

Al contrario se il problema ha una natura persistente nel tempo il miglior consiglio che posso darti è smettere di programmare per un po’.
Sappiamo tutti che scrivere codice che non compila o che è pieno di errori non fa altro che aumentare il livello di stress.

Personalmente mi è capitato in passato di perdere la voglia di sviluppare ed ho semplicemente smesso di farlo per circa 6 mesi. In quel periodo credo di aver fatto il miglior salto di qualità della mia vita. Certo ero giovane ed ancora la programmazione non era il mio lavoro, quindi potevo permettermelo, e so benissimo che non sempre questo sia possibile. Ma il lasso di tempo può essere sicuramente più breve. Quando si stacca per un po’ da un lavoro che non ci dà più stimoli o che ci stressa capiamo se veramente ci manca e se ci piace farlo.
Personalmente staccare in quell’occasione mi ha permesso di vedere il tutto da una prospettiva diversa, e così una pausa ha dato, paradossalmente, un’accelerata alla mia carriera.

4 — Concentrati!

Non sempre il contrario di una buona idea è una pessima idea.
Un esempio lo abbiamo nelle strategie adottate dai supermercati dove coesistono sia il principio di abbondanza che quello di scarsità.
Nel primo gli scaffali dei supermercati vengono riempiti di mille prodotti, e i ripiani pieni ci fanno capire quanto un negozio sia affidabile e ben tenuto.
La seconda strategia invece si basa sul principio inverso, ossia sul far percepire una mancanza sistemica di un prodotto che ci porta ad aumentarne il nostro valore percepito (lo abbiamo sperimentato di recente con la strategia di lancio dei Nutella Biscuits, ricordate?).

Quindi se prima parlavo di rilassarti e staccare, ora ti urlo: CONCENTRATI!

Nella vita odierna siamo bombardati da mille distrazioni, e queste possono essere una causa per il nostro cattivo rendimento. Quando lavoriamo infatti dovremmo cercare di limitare al minimo le distrazioni cercando di vivere a pieno l’attimo di produttività.

Photo by Immo Wegmann on Unsplash

Non è semplice e soprattutto all’inizio avremo bisogno di aiuto, qui cade a fagiolo la tecnica del pomodoro.

La tecnica del pomodoro è un metodo di gestione del tempo ideato alla fine degli anni ’80.
Il nome deriva da quei timer a forma di pomodoro, spesso utilizzati in cucina per tenere sott’occhio i tempi di cottura.

La tecnica consiste nell’impostare il proprio lavoro in slot da 25 minuti in cui lavorare senza sosta e senza distrazioni (posa quel cellulare!), per poi poter godere di 5 minuti di meritato riposo e distrazioni. Ogni quattro pomodori poi si fa una pausa più corposa di almeno 15–20 minuti.

Questo ci permette di non essere bombardati da mille problematiche ed aiuta a concentrarsi su un solo problema alla volta, combattendo il multitasking che tanto ci rende improduttivi.

5 — Outside the box

Certe volte possiamo anche provare a parlare con la nostra papera, riposarci o concentrarci ma non c’è modo di trovare la soluzione al problema che ci attanaglia. È facile in questi casi addossare la colpa ad agenti esterni (N.d.R. esiste un bias cognitivo per cui siamo portati a giustificare con la “sfortuna” errori nostri che negli altri avremmo affibbiato all’incompetenza) ma la verità è che se abbiamo un problema, soprattutto nella programmazione, è per un nostro limite.

Ricordati che non puoi risolvere un problema con lo stesso tipo di pensiero che hai usato per crearlo.

Per riuscire a dare una scossa alla situazione la cosa migliore che possiamo fare è quella di provare a guardare il problema da un’altra angolatura domandandosi per esempio: sarebbe più facile se cambiassi il pattern di sviluppo o se utilizzassi un’altra libreria invece di quella a cui sono abituato?

Le soluzioni più brillanti si trovano provando a pensare in modo desueto. Lì risiede il genio e la creatività che devono essere doti di spicco di un programmatore. Se ci abituassimo a pensare e progettare con una creatività dirompente riusciremmo a trovare sempre le migliori soluzioni per ogni enigma.

Un bell’esempio sul pensiero creativo (seppur totalmente di fantasia) potrebbe essere quello fornito dalla navetta spaziale usata dai protagonisti di Futurama per effettuare le consegne: la Planet Express.

Davanti alla necessità di avere un mezzo che sia il più rapido possibile il professore della serie ha un’idea fantasiosa e disruptive: dar vita ad un motore capace di mantenere il veicolo immobile e di spostare invece l’intero universo attorno ad esso.

E tu, ci avresti mai pensato? Provando a sforzarti, come potresti risolvere quel bug noto pensando fuori dagli schemi?

Una riflessione…

Rileggere il mio stesso codice è un’attività che mi appassiona parecchio perché mi aiuta a capire se sono migliorato o meno nel corso del tempo.

La passione per la programmazione esiste anche in virtù del fatto che ci si ritrova davanti a sfide sempre più grandi e per affrontare questa continua battaglia ci spingiamo in un ciclo iterativo incrementale di miglioramento personale.

Questo in un senso più ampio ci da uno stimolo per apprezzare e riempirci sempre di più la vita. Just Mick ha trattato questo argomento in suo recente video che ho molto apprezzato, ve lo lascio e nel mentre vi auguro buona vita e buon coding!

--

--