Un programma di computer è una sequenza finita di istruzioni che la macchina deve eseguire in modo da risolvere un problema di qualsiasi natura. Il programma trasforma i dati d’ingresso (input) nel risultato voluto (output). Le istruzioni devono essere selezionate all’interno di un gruppo di istruzioni possibili e devono essere specificate in modo tale che la macchina capisca di che istruzione si tratta e la sappia eseguire. I primi programmi erano strettamente legati alla struttura della macchina e ogni istruzione specificava tutti i passaggi dei dati attraverso i vari dispositivi. Questo era il linguaggio macchina, inizialmente l’unico possibile e l’abilità di un programmatore non poteva prescindere da una conoscenza approfondita dell’hardware e del funzionamento della macchina stessa.
Ma l’evoluzione dei computer è stata velocissima e l’architettura delle macchine è cambiata incessantemente spesso in modo radicale. Ben presto si è sentita la necessità di spostare la programmazione a un livello più alto in modo che fosse indipendente dalla struttura interna e dal funzionamento dello specifico computer e i programmi diventassero universali, cioè utilizzabili su ogni tipo di macchina. Ogni istruzione poteva essere definita in modo più astratto e un programma traduttore disponibile all’interno del computer avrebbe provveduto alla traduzione da linguaggio ad alto livello al proprio linguaggio macchina. Così ogni computer imparò le diverse lingue, cioè si dotò di programmi traduttori (compilatori o interpreti) dai più comuni linguaggi di programmazione al proprio linguaggio macchina. Una volta che i programmi traduttori erano memorizzati in un computer, i programmatori potevano più comodamente utilizzare i programmi a alto livello. Alla fine, il lavoro del programmatore si poté svincolare quasi del tutto dalla conoscenza del computer. Una volta risolto il problema di rendere la programmazione più “umana” attraverso l’utilizzo di linguaggi di programmazione ad alto livello e di corrispondenti compilatori e/o interpreti, l’attenzione fu posta sul concetto più astratto di paradigma di programmazione, che intuitivamente può essere interpretato come uno stile di programmazione tipicamente influenzato da un modello di programmazione soggiacente. Sebbene nel corso degli anni siano stati inventati diversi paradigmi di programmazione, quelli principali utilizzati ancora oggi sono stati introdotti e implementati nel corso degli anni Cinquanta e Sessanta del secolo scorso.
Esistono al mondo oltre trecento linguaggi di programmazione differenti e la domanda che potrebbe sorgere spontanea è per quale motivo si siano ideati e prodotti così tanti linguaggi. Una prima risposta potrebbe essere la stessa che daremmo se ci chiedessimo per quale motivo esistano quasi settemila linguaggi naturali al mondo: un linguaggio si sviluppa normalmente in conseguenza del contesto naturale, sociale ed economico. Il classico esempio di quest’affermazione è il fatto che nella lingua eschimese esistano molte più maniere di riferirsi alla “neve” rispetto ad altre lingue. Allo stesso modo, un linguaggio di programmazione può svilupparsi in conseguenza del contesto in cui il linguaggio stesso nasce, sia esso quello di matematici alla ricerca della “purezza” oppure quello di informatici che intendano sviluppare rapidamente le loro applicazioni. Nel caso dei linguaggi di programmazione possiamo anche rifarci a un altro paragone, ovvero a quello delle autovetture per le quali il tipo di veicolo prodotto è tipicamente conseguenza dell’uso che se ne vuole far fare. Per chi abita in città e desidera semplificarsi la vita relativamente al parcheggio, sono nate le macchine compatte (di cui la Cinquecento
è stata per noi italiani un vero e proprio status symbol) mentre, per chi lavora all’aperto e vuole essere
in grado di attraversare piccoli rivi d’acqua oppure di salire lungo strade impervie di montagna, sono nate le auto a trazione integrale. Lo stesso meccanismo si applica nell’ambito dei linguaggi di programmazione: in questo caso, ciascun linguaggio nasce o risorge in quanto sembra ben adattarsi a specifiche applicazioni. Il Pascal, per esempio, ha avuto il suo momento di gloria principalmente perché si prestava bene a essere utilizzato per insegnare la programmazione agli studenti dell’università mentre PHP e JavaScript sono due linguaggi che si sono affermati nel mondo dello sviluppo di siti web. Più recentemente, Python (nonostante la sua età “matura”) è divenuto estremamente popolare nell’ambito dell’elaborazione di grandi quantità di dati e nello sviluppo di applicazioni basate sull’apprendimento automatico. Come nel caso dei veicoli, il passa-parola fa poi sì che un linguaggio divenga e rimanga molto popolare nonostante esistano delle alternative migliori in termini di efficienza e di semplicità. E, come nel caso del COBOL, certi linguaggi fanno veramente fatica a scomparire per il semplice fatto che il numero di programmi e il grado di diffusione dei programmi stessi è così consistente da richiedere per la loro sostituzione con linguaggi più moderni un investimento economico significativo. Dobbiamo considerare, infine, che negli anni i computer si sono complicati notevolmente, passando dal calcolo regolato da un solo processore a calcoli eseguiti da gruppi di processori che lavorano in parallelo per arrivare più velocemente alla soluzione del problema. Dalla suddivisione classica di memoria principale (posta all’interno del computer) e memoria secondaria, ovvero dischi e nastri esterni, si è passati alla gerarchia di memorie che il computer può utilizzare e che vanno da vari livelli di memorie velocissime e costosissime di piccole dimensioni (cache), alla memoria interna, a quelle esterne e più in generale a tutte le memorie dei computer connessi in rete.
In questi processi, un ruolo di primissimo piano lo hanno avuto le donne, che fecero il loro ingresso nel mondo del computer fin dall’inizio. Il primo computer general purpose funzionante, l’ENIAC, fu progettato negli Stati Uniti alla fine della seconda guerra mondiale per calcolare le tabelle delle traiettorie (le cosiddette firing and bombing tables) per le nuovissime armi utilizzate dall’esercito statunitense. Prima, il lavoro veniva tradizionalmente svolto a mano da giovani matematici, in prevalenza donne, dette computer perché richiedeva caratteristiche di precisione e accuratezza ma non particolari slanci di intelligenza ed era molto ripetitivo. Per questo motivo, si pensava che fosse particolarmente adatto al genere femminile. Quando l’hardware dell’ENIAC fu pronto e funzionante, ci fu la necessità di scrivere il software per la compilazione delle famose tavole e il lavoro fu affidato a un gruppo di quattro giovani dette computer, tutte con laurea in matematica, ritenute le più capaci e intelligenti. Le ragazze assolsero con molto entusiasmo il loro compito, sviluppando i programmi per calcolare le traiettorie con un dispositivo di calcolo estremamente rudimentale in cui, oltre a descrivere nel linguaggio macchina tutte le operazioni, si procedeva a connettere fisicamente con cavi pesantissimi le unità coinvolte nel calcolo per ogni programma diverso.
Nel 1946, alla prima presentazione pubblica dell’ENIAC, a cui assistette anche von Neumann, si mostrò come il programma di calcolo della traiettoria fosse più veloce del tempo necessario a percorrerla! Al lavoro del team di programmatrici non venne data allora molta importanza. Gli allori del successo andarono agli ingegneri che avevano progettato l’hardware e la storia delle programmatrici venne dimenticata completamente fino a quando una programmatrice di Harvard negli anni Ottanta non la ricostruì completamente, intervistando le ragazze di allora. Il loro lavoro era stato importantissimo, paragonabile come innovatività e rilevanza a quello degli ingegneri, un vero e proprio lavoro di ricerca che aveva posto le basi dello sviluppo di tutta la programmazione successiva. Le ragazze continuarono a lavorare attivamente nel campo, collaborando alla progettazione e allo sviluppo del software di computer successivi, scrissero manuali e insegnarono a programmare. Posero inconsciamente le basi di una convinzione che si protrarrà negli anni: il lavoro di programmazione è un lavoro adatto alle donne. Una programmatrice è una sorta di super segretaria specializzata nella programmazione delle nuove macchine.
Continuando la tradizione dell’ENIAC, il valore attribuito a questo tipo di attività rimaneva basso e pagato non troppo bene. Ancora si riteneva erroneamente che, per farlo, bastasse eseguire con precisione certe mansioni ma che non richiedesse qualità superiori. Programmare era ritenuta un’attività ripetitiva e poco interessante che poteva essere lasciata alle donne. La convinzione si protrasse per tutti gli anni Cinquanta e Sessanta. In un articolo della rivista Cosmopolitan del 1967, dal titolo The Computer Girls si dice: “Ora sono arrivati i grandi computer abbaglianti e un nuovo tipo di lavoro per le donne: la programmazione”.
Tanto per citare un esempio importante, il responsabile del software del progetto Apollo che portò nel 1969 allo sbarco dell’Apollo 11 sulla Luna, fu Margaret Hamilton, ingegnere dell’MIT, poi dimenticata come tante altre programmatrici che contribuirono in modo determinante allo sviluppo dei computer. Negli anni immediatamente successivi le cose cambiarono. Si cominciò a inquadrare il ruolo fondamentale del software nello sviluppo rapidissimo dell’informatica a cui si stava assistendo. Il software aumentò rapidamente d’importanza e di complessità e a tutti fu chiaro che progettarlo richiedeva capacità notevoli e grande creatività. Insomma, acquistò valore. Inoltre, con l’enorme diffusione dei computer a partire dagli anni Settanta, la grande richiesta di programmatrici e programmatori esperti determinò un tale aumento degli stipendi da renderli appetibili anche al genere maschile. L’espansione del genere maschile nel software è quindi chiaramente comprensibile; lo è meno il progressivo allontanamento delle donne da questo tipo di attività che le ha viste protagoniste negli anni pionieristici. La percentuale di donne nel software, e più in generale nell’informatica, è costantemente diminuita, fino a anni recenti che hanno registrato il valore più basso di sempre a tutti i livelli di studio e di impiego. E la cosa curiosa è che il fenomeno non è solamente americano, ma si è registrato con percentuali molto simili anche nel resto del mondo. In Italia il record negativo è stato raggiunto nel 2008 con l’8%, quando negli anni Settanta la percentuale si aggirava sul 30% fino a risalire al 13,6% dopo che erano state intraprese iniziative mirate.
Tanti si sono posti la domande su questo calo di presenza femminile e le risposte sono state varie e non molto convincenti: si attribuisce la responsabilità ai media che raffigurano i moderni nerd, ragazzi un po’ sociopatici che passano la vita al computer, come persone di sesso maschile, spesso sovrappeso, che mangiano schifezze e bevono birra senza curarsi d’altro: certo, figure ben poco attraenti in cui la maggioranza delle ragazze non può riconoscersi. Ma la raffigurazione dei media può anche essere semplicemente lo specchio della realtà di questi ultimi anni. Come riporta un interessante articolo del New York Times, un’analisi più approfondita è stata condotta da Jane Margolis, una studiosa di scienze sociali che, per conto della statunitense Carnegie Mellon University, ha cercato di capire i motivi di questa progressiva defezione. Così nell’arco di cinque anni, con l’aiuto di altri colleghi, Margolis ha intervistato e seguito la storia di circa 100 studenti del dipartimento di informatica, nel periodo dal 1995 al 1999. Da questi studi è nato un libro, Unlocking the clubhouse: women in computing, che contiene una tesi decisamente più convincente.
Tutto è cominciato con i personal computer: quando i computer sono entrati nelle case, come quasi tutte le nuove tecnologie, hanno finito per appassionare più i padri e con loro i figli maschi. Era comune che i ragazzi imparassero velocemente anche a programmare e le ragazze restassero per la maggior parte al di fuori di questa attività. Arrivarono quindi a intraprendere gli studi in informatica molti ragazzi con già parecchia esperienza di esposizione al computer. Diversa era la situazione delle ragazze, che partivano da una situazione di insicurezza che proveniva dal fatto di essere completamente ignoranti. Vedere i loro compagni operativi sin dall’inizio ha trasmesso loro un senso di inadeguatezza che ha contribuito al loro progressivo allontanamento. A partire da anni recenti, si è cercato di porre rimedio a questa situazione: sono state promosse gare di programmazione al femminile, si è fatta molta pubblicità nelle scuole di ogni grado, per attrarre di nuovo le ragazze a questo tipo di studi, sono state raccontate le storie, spesso affascinanti, delle pioniere della programmazione e i risultati si sono visti. C’è stata un’inversione di tendenza e le percentuali femminili continuano a crescere, anche se ancora siamo molto lontani dagli anni d’oro.