Come ridurre il carico cognitivo dello sviluppatore?

Technical, User Experience

17 Set, 2019

Quando parliamo di carico cognitivo, pensiamo soprattutto al carico mentale generato dalla gestione familiare e dalle mansioni domestiche, che purtroppo colpisce ancora troppo spesso le donne (È il 2019, fate uno sforzo, signori uomini). A parte l’aspetto sociologico, questo principio si applica nel campo del problem solving: al centro del lavoro dello sviluppatore. Oltre all’onere intrinseco della complessità del compito da svolgere, rimane un cosiddetto onere estrinseco, che deriva dal contesto, dal modo in cui le informazioni sono presentate.

È questo secondo tipo di carico che ci interessa e che cercheremo di ridurre al minimo con diversi metodi.

La maggioranza del lavoro dello sviluppatore consiste nella raccolta di informazioni. Trascorriamo ore leggendo e immergendoci in centinaia di righe di codice per scrivere pochissime funzioni.

starckoverflow chargecognitive Come ridurre il carico cognitivo dello sviluppatore?

La teoria del carico cognitivo dice che la memoria di lavoro (o memoria a breve termine) può elaborare solo tre o quattro dati in parallelo. In altre parole, è tanto nel nostro interesse liberarci di ogni distrazione o elemento parassitario quanto lo è elaborare il codice nel modo più elegante e coerente possibile.


Comfort visivo

confortvisuel chargecognitive Come ridurre il carico cognitivo dello sviluppatore?

Spendiamo l’80% del nostro tempo lavorativo a scansionare lo schermo, quindi potremmo anche rendere l’esperienza confortevole. Il carattere, la dimensione e la spaziatura dei caratteri e la tavolozza dei colori sono tutte variabili che hanno un impatto importante su come le informazioni sono percepite, non solo sull’affaticamento degli occhi o sulla sensibilità estetica individuale.

Consideriamo anche come organizzare le informazioni:
bestpratice chargecognitive Come ridurre il carico cognitivo dello sviluppatore?

Ci sono decine di standard di codice: sarebbe inutile difendere l’uno piuttosto che l’altro, l’idea è quella di far capire l’importanza di adottarne uno e di attenersi ad esso. Gli sviluppatori non leggono l’intera pagina di codice, la ripercorriamo rapidamente alla ricerca delle informazioni che ci interessano. Da qui l’interesse di standardizzare il più possibile gli aspetti ripetitivi per dare spunti visivi: rientranze e interruzioni di riga hanno un ruolo cruciale nella rapida lettura del codice.

mauvaisaccolade chargecognitive Come ridurre il carico cognitivo dello sviluppatore?


Riutilizzabilità e durata nel tempo
Tutti gli sviluppatori almeno una volta si sono accigliati di fronte a un pezzo di codice senza avere alcuna memoria di ciò che stava succedendo nella loro mente quando l’hanno scritto qualche settimana prima.

productivité chargecognitive Come ridurre il carico cognitivo dello sviluppatore?

Sintassi e leggibilità a volte non sono sufficienti per trovare rapidamente la strada giusto quando si tratta di interpretare un codice che non ci è familiare. Per massimizzare la produttività, è necessario essere in grado di aggiungere funzionalità a un programma esistente senza dover cercare nelle fonti di diversi file sparsi per capire qualcosa.

La risposta ovvia a questo problema è la creazione di documentazione. La questione dei commenti nello sviluppo è sempre delicata e, con tutto il rispetto per alcuni, un codice scritto dovrebbe idealmente essere in grado di farne a meno.

Purtroppo, viviamo in un mondo imperfetto e avremo sempre bisogno di queste piccole righe di testo grigio per capire questi metodi un po’ criptici il cui ruolo non è immediatamente evidente. Per liberarci dal debito visivo che i commenti rappresentano (e quindi dal conseguente carico cognitivo), possiamo concentrarci sulla verbosità del codice stesso.

Un metodo dovrebbe avere un ruolo unico e dovrebbe avere un nome che gli corrisponda esattamente. Pertanto, non utilizzare nomi di variabili e funzioni troppo generici come “get”, “item”, “var1”, ecc.

Prendiamo i due esempi seguenti:
code chargecognitive Come ridurre il carico cognitivo dello sviluppatore?

La prima valutazione è più concisa, ma presenta diversi problemi. La definizione del metodo “get” è ambigua, non abbiamo idea in questa fase di cosa sia possibile o meno fare. Siamo quindi costretti a guardare la definizione della classe Pokedex per scoprirlo. Al contrario, la seconda notazione permette di capire immediatamente il ruolo del metodo “getPokemonByType” e della variabile “$waterPokemon” senza bisogno di commenti aggiuntivi.

È una ginnastica mentale che può sembrare controproducente, ma che offre un notevole risparmio di tempo a medio e lungo termine.


Ambiente e strumenti
Molti altri elementi sono fattori che aumentano o diminuiscono il carico cognitivo. L’odore rassicurante del caffè appena fatto, un IDE le cui scorciatoie sono letteralmente a portata di mano, uno spazio di lavoro confortevole con sufficiente luce sono vettori di rilassamento e che quindi facilitano la concentrazione. D’altra parte, le notifiche di Slack, un collega eccessivamente agitato, una rete wifi instabile, o qualsiasi parametro ambientale, possono generare una distrazione che sostituirà uno di questi tre o tutti e quattro i dati che il nostro cervello è in grado di elaborare allo stesso tempo.

notifications chargecognitive Come ridurre il carico cognitivo dello sviluppatore?


In poche parole
Un ambiente privo di distrazioni e un metodo ben applicato permettono alla mente di lavorare più efficacemente per risolvere i problemi nello stesso modo in cui aiuta a liberarsi dell’ansia della pagina bianca. Tuttavia, anche la ricerca dell’ambiente di lavoro perfetto non dovrebbe costituire un ostacolo alla produttività. Come per tutto il resto, bisogna sapere come utilizzare metodi collaudati e, soprattutto, avere il coraggio di mettersi al lavoro. L’azione genera riflessione.


Fonti:
emmaclit.com
stitcher.io
ocramius.github.io
wikipedia.org

 

Lascia un commento.