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:
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.»
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
di conseguenza, per una persona
che svolge il mestiere del programmatore, sarà inutile cercare di
migliorare le proprie capacità
e quindi il lavoro di questa
classe sociale sarà sempre a basso prezzo e sostituibile
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
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.