Visualizzazione post con etichetta programmatori. Mostra tutti i post
Visualizzazione post con etichetta programmatori. Mostra tutti i post

mercoledì 8 aprile 2015

Agile dal punto di vista della psicologia e della sociologia

Lo sviluppo agile del software propone un modo di gestire le fasi dello sviluppo del software e le persone coinvolte. Sulla gestione strettamente tecnica ci sono diversi ottimi libri. Ciò che mi interessa maggiormente è la parte riguardante l'organizzazione del lavoro delle persone e vedere se tale parte è coerente con le teorie sul lavoro che sono state elaborate dai psicologi e dai sociologi.
Da un punto di vista psicologico, si può dire che l'agile sia una work design theory, un tipo di teoria delle quali esistono diversi esempi.

Agile e l'organizzazione del lavoro

Agile incoraggia la comunicazione stretta dei membri del team di lavoro ed il coinvolgimento del cliente in molte fasi della progettazione e dello sviluppo.
Inoltre, avere dei cicli di sviluppo brevi permette di conoscere a scadenze fissate l'esito delle attività intraprese. Si ha anche un principio di auto-organizzazione dei gruppi di sviluppo, che permette a chi fa parte dei gruppi di avere un'alta autonomia.

Teoria delle caratteristiche del lavoro

Nel 1976, Richard Hackman e Greg Oldham hanno proposto un modello secondo il quale, se il lavoratore ha delle capacità ampie e fa cose diverse, ha dei compiti assegnati unicamente a lui dei quali conosce l'importanza, può svolgerli in autonomia e conoscerne l'esito; allora il lavoratore sarà più motivato e soddisfatto, farà un lavoro di maggiore qualità e tenderà ad essere meno assente ed a dimettersi di meno.
Schema riassuntivo della teoria

Nel 2007 è stata prodotta una forma più elaborata di questa teoria, però per semplicità è meglio usare la versione classica.

Cosa dice la teoria sull'agile?

Analizziamo punto per punto:
  • varietà delle abilità: questa caratteristica viene migliorata con l'agile e con il principio secondo il quale tutti devono essere in grado di fare tutto;
  • identificazione con i compiti: dipende dai responsabili, in alcuni casi è possibile con l'agile, in altri no;
  • conoscenza del significato dei compiti: il principio della comunicazione stretta e del coinvolgimento del cliente favoriscono questa conoscenza;
  • retroazione: avere dei cicli di sviluppo di breve durata permette di sapere come stanno andando le cose, quali funzionano e quali no.
Quindi, se si opera anche per garantire l'identificazione tra il lavoratore ed il compito, cosa su cui l'agile non si pronuncia, l'agile favorisce la motivazione dei lavoratori.

Il circolo vizioso e la comunità di pratica

Gabriele Lana ha descritto un circolo vizioso all'interno del quale i programmatori rimangono:
  1. i programmatori occupano la posizione più bassa all'interno della piramide aziendale;
  2. per tale motivo, il loro lavoro costa poco e non c'è una significativa differenza tra le qualità professionali di un programmatore e quelle di un altro;
  3. per un programmatore, provare a migliorare le proprie capacità è inutile, in quanto anche migliorando le proprie conoscenze la situazione non cambia;
  4. ciò porta ad una situazione nella quale le capacità dei programmatori sono mediocri.
Secondo il creatore dello schema, la soluzione sarebbe a partire dall'etica. Ogni programmatore dovrebbe decidere di migliorare le proprie conoscenze e competenze lavorative non per un premio economico, ma perché si sente la responsabilità di ciò che fa.
Probabilmente il tipo di comunità che ha in mente Gabriele Lana è la comunità di pratica, cioè quel tipo di comunità nelle quali si collabora, si condivide la conoscenza e si ha come obiettivo il miglioramento del sapere collettivo.
Come è possibile che ci sia un circolo vizioso di questo tipo quando si sa come fare in modo che i programmatori svolgano un lavoro di alta qualità?
Si può migliorare l'approccio agile in modo che contribuisca alla creazione di una comunità di pratica all'interno delle aziende?

La teoria del processo lavorativo

Nel 1974 Harry Braverman ha pubblicato un libro nel quale effettua una analisi del peggioramento della condizione dei lavoratori. Stava accadendo che i lavoratori specializzati venivano costretti a svolgere compiti che richiedevano sempre meno abilità, creando di fatto un demansionamento ed costringendo i lavoratori ad accettare uno stipendio più basso di quello che avevano avuto finora. Tale processo viene anche descritto come deskilling.
La teoria originata da questo libro prende il nome di Labour Process Theory.
Vi ricorda qualcosa?
A me sembra che la stessa cosa sia avvenuta con i programmatori negli ultimi 20 anni.

Conclusioni

Abbiamo visto le teorie psicologiche e sociologiche sono in grado di spiegare come l'agile possa rendere più motivati e produttivi i lavoratori. Il problema è che questi lavoratori motivati e produttivi potrebbero chiedere degli stipendi più alti. La soluzione che viene adottata è piuttosto quella di far svolgere ai lavoratori delle attività molto più semplici di quelle che loro sono in grado di svolgere, per pagarli di meno.

sabato 3 maggio 2014

Riuso delle idee, programmazione ed etica


Che cosa intendo per riuso delle idee? Beh, è una specie di riuso del codice! Il riuso del codice è un concetto molto importante della programmazione modulare, perché ci permette di non riscrivere lo stesso codice più di una volta e di testare con maggiore enfasi le parti di codice che vengono richiamate più spesso. In modo analogo, il riuso delle idee ci dà la possibilità di usare nuovamente delle idee che sono state proposte e discusse anche secoli fa. Ma come fanno delle idee così antiche ad essere rilevanti oggi, vi chiederete. Continuate a leggere e lo scoprirete.
All'Agile Day 2011 Gabriele Lana ha fatto una presentazione molto interessante per diversi motivi. 



La professione dello sviluppatore - Gabriele Lana - Agile Day 2011 Roma from GrUSP on Vimeo.





All'inizio parla del fatto che i programmatori si vergognano di ammettere di essere programmatori.
Prosegue dicendo che l'agile funziona se le persone presenti all'interno del team sono etiche e tecnicamente abili, ma non se la squadra non è composta da persone competenti.
Poi ha cominciato a parlare degli anni 1990 come il medio evo dello sviluppo software in quanto è stata creata una industria formata da aziende di tipo piramidale nelle quali la condizione più bassa e svantaggiata, quella che veniva ricoperta dai servi della gleba, viene occupata dai programmatori.
Successivamente viene introdotto un modello degenerativo auto-alimentante, fatto in quattro passi:
  1. l'attività svolta dal programmatore deve essere una commodity, che secondo la definizione Treccani è una «Sostanza ottenuta industrialmente in grande quantità (prodotto di massa), e in genere a basso costo, che costituisce la base per la produzione di molte altre sostanze.»
  2. da ciò consegue il fatto che l'attività del programmatore debba essere di qualità mediocre, cosa che è sbagliata, perché i mediocri dovrebbero essere i computer
  3. di conseguenza, per una persona che svolge il mestiere del programmatore, sarà inutile cercare di migliorare le proprie capacità
  4. e quindi il lavoro di questa classe sociale sarà sempre a basso prezzo e sostituibile
Ora cercherò di fare il primo riuso di idee. Nella teoria marxiana del valore:

Marx nota inoltre come il lavoro alienato dai lavoratori possa essere reso sociale solo annullandone le particolarità concrete ed utili e riducendolo a lavoro generico, qualitativamente identico, i cui prodotti sono proprio per questo equivalenti e quantitativamente comparabili. Nella società capitalista, in cui il dominio degli sfruttatori sugli sfruttati non avviene in virtù di arbitrio o prescrizioni legislative, morali o religiose, i rapporti sociali tra gli individui assumono così l’apparenza di rapporti tra cose poiché mediati dai rapporti di scambio, cioè da un meccanismo impersonale dominato dai prodotti del lavoro. Tali prodotti, vere e proprie "cristallizzazioni" di lavoro astratto, realizzano il proprio prezzo scambiandosi contro denaro.
A mio avviso, questo estratto da Wikipedia, che riassume parte del pensiero di Karl Marx scritto ne Il Capitale nell'anno 1870, è simile a quello che Gabriele Lana ci ha raccontato nel 2011. Perché questa somiglianza dovrebbe essere significativa, se nel 1870 non esistevano né computer né tantomeno i programmatori? Perché il pensiero di Marx è l'equivalente di codice che sta in produzione da 140 anni: diversi filosofi l'hanno analizzato e ne hanno evidenziato i punti di forza e di debolezza. Da sottolineare che sia Marx che Lana si rendono conto che la situazione attuale sia dovuta alla mancanza di etica e di morale.

Nella sua presentazione, Lana spiega un concetto da lui formulato con questa tautologia: «Software developers are needed for software development … no one else is … ». Con questo vuole dire che lo sviluppatore software è l'unica figura assolutamente indispensabile nel processo di realizzazione dei Understanding the professional programmer di Gerald M Weimberg:
programmi. Cita un passo dell'opera:

Programming a computer does require intelligence. Indeed, it requires so much intelligence that nobody really does it very well. Sure, some programmers are better than others, but we all bump and crash around like overgrown infants. Why? Because programming is by far the hardest intellectual task that human beings have tried to do. Ever.
Il passo citato sembra affermare che l'attività del programmatore sia il compito intellettuale più complicato che possa essere fatto.

La soluzione che Lana propone è quella di aderire ad una etica professionale. Vengono esposti i principi seguenti:
  • prendersi la responsabilità di ciò che si sta facendo, in particolare del codice che viene scritto
  • essere orgogliosi del proprio lavoro
  • continuare a migliorare le proprie competenze, attraverso la pratica, a prescindere dal fatto che nel modello degenerativo di cui sopra
  • imparare a comunicare in modo efficace
  • essere maestro di qualcuno
  • essere allievo di qualcuno
  • partecipare alle comunità di programmatori
  • non partecipare ad attività che sono contrarie alle proprie convinzioni etiche
  • prendersi buona cura del proprio corpo

A proposito di etica, uno dei filosofi che l'ha analizzata maggiormente è :
Immanuel Kant. Secondo Tale filosofo ogni persona deve essere contemporaneamente legislatore e giudice di sé. Questo implica che un individuo può scegliere degli imperativi categorici per il proprio comportamento, ma li può applicare solamente a sé stesso, non ad una terza persona.
Kant distingue fra massime e imperativi. Le massime sono prescrizioni di carattere puramente soggettivo (es. vendicarsi delle offese subite), invece gli imperativi sono prescrizioni di carattere oggettivo. Gli imperativi a loro volta si suddividono in imperativi ipotetici e in imperativi categorici. I primi si presentano nella forma "se... allora": possono essere regole dell'abilità (se vuoi essere un bravo medico devi...) o consigli della prudenza (se vuoi raggiungere il benessere devi...).
A me sembra che i principi proposti da Lana siano degli imperativi categorici. Egli ha scelto quei principi etici per se stesso e ha chiarito il fatto che lui non ama né i comitati etici, né il dover dire a qualcun altro il modo in cui questo si debba comportare.

Un altro modo che Lana presenta per modificare il modello degenerativo è quello di non essere un eroe. Non essere un eroe nel senso di non essere la persona che fa sforzi disumani per tenere insieme una attività che altrimenti fallirebbe, rischiando di compromettere la propria salute. In cambio di questi sforzi enormi lo sviluppatore riceve il riconoscimento sociale e l'ammirazione dei suoi pari. Perché questo sistema funziona? Ce lo spiega Elton George Mayo:
  • L’uomo è fondamentalmente motivato da bisogni di natura sociale, ed ottiene dal rapporto con gli altri il suo senso di identità
  • In conseguenza della rivoluzione industriale e dell’organizzazione scientifica del lavoro, il lavoro stesso è privo di significato intrinseco, il quale va ricercato nei rapporti sociali che si formano sul lavoro
  • Il lavoratore è più influenzato dalla forza sociale del gruppo che da incentivi e controlli della Direzione
  • Il lavoratore risponde alla Direzione nella misura in cui essa ne rispetta i bisogni sociali.

A me questa situazione, più che gli eroi, ricorda la leggenda di Sisifo, ritenuto
essere fondatore e primo re di Corinto. Sisifo rivela al dio fluviale Asopo il fatto che Zeus avesse rapito la sua figlia. In cambio Asopo creò una sorgente perenne d'acqua a Corinto che prima aveva problemi a reperirne. Zeus mandò Tanato, l'impersonificazione stessa della morte a catturare Sisifo, ma egli riuscì a far ubriacare e a legare Tanato. Da ciò conseguì il fatto che la morte scomparve dalla Terra e nelle battaglie nessuno moriva.
Per punire Sisifo Zeus decise che Sisifo avrebbe dovuto spingere un masso dalla base alla cima di un monte. Tuttavia, ogni volta che Sisifo raggiungeva la cima, il masso rotolava nuovamente alla base del monte. Ogni volta, e per l'eternità, Sisifo avrebbe dovuto ricominciare da capo la sua scalata senza mai riuscirci.

Io penso che diversi programmatori siano consapevoli del proprio valore, ma sfruttano il proprio valore, e quindi anche il proprio potere contrattuale per lavorare il meno possibile e non fare tutte quelle attività che sono difficili e rischiose. E quindi ciò che avviene è che le attività più potenzialmente problematiche vengono assegnate alle persone che potenzialmente hanno la minore capacità di risolverle, perché queste persone hanno meno potere contrattuale.

Penso anche che se gli operai sono riusciti attraverso gli scioperi ad ottenere maggiori diritti, possano riuscirci anche gli sviluppatori, ma prima di arrivare a ciò è necessario che i programmatori più esperti si sacrifichino per i meno esperti, organizzando manifestazioni, scioperi, occupazioni. Ciò è il contrario della situazione attuale, nella quale i programmatori più esperti approfittano dei propri vantaggi per far fare la maggior parte del lavoro ai meno esperti.