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.

Nessun commento:

Posta un commento