La programmazione è arte?

Creatività e sviluppo del software

Scritto da Roberto Rossi il 10-2019

Oggi voglio cimentarmi un un'operazione particolarmente complessa.

In questo articolo cercherò di dimostrare che la programmazione può essere una forma di arte e il programmatore, in buona sostanza, non è altro che un artista... magari incompreso... ma sempre artista.

Cos'è l'arte?

Iniziamo definendo, con chiarezza, cosa si intende con il termine Arte, prendendo la definizione fornita da Wikipedia:

L’arte, nel suo significato più ampio, comprende ogni attività umana – svolta singolarmente o collettivamente che porta a forme creative di espressione estetica, poggiando su accorgimenti tecnici, abilità innate e norme comportamentali derivanti dallo studio e dall'esperienza. Nella sua accezione odierna, l'arte è strettamente connessa alla capacità di trasmettere emozioni e "messaggi" soggettivi.

Cos'è la programmazione?

Cerchiamo ora di spiegare, in modo semplice, e il più possibile comprensibile, cos'è la programmazione e qual'è il mestiere di un programmatore. Per rendere comprensibile la cosa al maggior numero di persone possibile dovrò, per forza, semplificare molto trasformando, alle volte, attività complesse in entità molto più semplici. In questo tentativo, sicuramente i tecnici potrebbero storcere il naso, ma poco importa.

Iniziamo chiarendo cos'è un programma per computer, per un qualsiasi sistema mobile o per qualsiasi sistema informatico dotato di software.

Quando, davanti al nostro PC, al nostro smartphone o al nostro tablet avviamo un'applicazione o eseguiamo qualsiasi funzione, nella realtà non facciamo altro che richiamare un programma o un pezzo di programma realizzato da qualcuno, da una persona.

Un programma non è altro che un insieme di istruzione che dicono al sistema(pc/smartphone/tablet) cosa fare in un dato momento.

Immaginiamo un programma "semplicissimo" come una calcolatrice dotata dei normali 10 numeri e delle 4 operazioni basilari. Quando lo avviamo, questo dirà al sistema di visualizzare i tasti dei numeri, quelli dei simboli, quelli per le operazioni e una casella nella quale visualizzare i dati inseriti, ottenendo così qualcosa simile a:

Calcolatrice

Immaginiamo ora di cliccare su un pulsante della nostra calcolatrice. In quel momento il programma memorizzerà il tasto premuto e visualizzerà nella casella l'eventuale dato inserito.

Infine, quando premeremo il tasto uguale, presi tutti i dati digitati, il software eseguirà le operazioni matematiche e mostrerà all'utente il risultato.

Un programma è, in sintesi, una serie di istruzioni che permettono all'utente di giungere ad un determinato risultato. Risultato che può essere banale, ma può anche essere infinitamente complesso.

Ovviamente, ad una parte prettamente algoritmica si affianca, spesso, un'opera grafica composta da quella che è l'interfaccia(ciò che compare a video) che l'utente andrà ad utilizzare direttamente.

Come si scrive un programma?

Un software si scrive utilizzando un linguaggio di programmazione. Ma cos'è un linguaggio di programmazione? Questo non altro che un metodo, semplice, che consente ad una persona di impartire comandi ad un sistema informatico.

Naturalmente esistono una moltitudine di operazioni che si possono far compiere ad un computer, piccolo o grande che sia. Operazioni di base come le operazioni matematiche, ma anche molto più complesse.

Per capire, per sommi capi, come si crea, o meglio come si scrive un software, utilizzeremo uno dei linguaggi di programmazione più diffusi nel mondo dell'informatica, il linguaggio C.

Il software che realizzeremo ha lo scopo, banale, di eseguire alcune operazioni matematiche su alcuni numeri, mostrando poi il risultato all'utente.

Ecco quello che il programmatore deve scrivere per realizzarlo (https://it.wikipedia.org/wiki/C_(linguaggio)): Codice sorgente

Tralasciando la maggior parte dei dettagli tecnici, diciamo che, una volta scritto il programma, questo viene trasformato in istruzioni comprensibili dalla macchina.

Al termine di questo processo il programma è pronto per l'utente.

Naturalmente questo esempio striminzito è qui solo per dare un'idea vaga di cosa significhi scrivere un software, operazione che va molto al di la delle poche righe viste sopra. Basti pensare che i software più popolari (es. Windows, LibreOffice, AutoCAD ecc...) sono composti da molti milioni di linee di codice.

Cosa serve per fare il programmatore?

Le tipologie di software che si possono realizzare sono tante, tantissime. Ad esempio, si va dai giochi, ai programmi di office automation, a quelli di disegno, alle pagine web, fino a software che controllano sistemi automatici come ad esempio i bancomat e una infinita moltitudine di sistemi robotici.

Per un singolo programmatore è praticamente impossibile padroneggiare tutte le tecnologie disponibili per la realizzazione di software.

Quindi? Cosa serve per fare il programmatore?

Prima di tutto occorre un bagaglio di conoscenze tecniche specifiche, adatte all'ambito nel quale si vuole operare.

Ora, in teoria, se la programmazione fosse solamente una questione tecnica e ingegneristica, non servirebbe molto altro. E nella realtà, molti programmatori non fanno altro che applicare conoscenze e procedure in modo ripetitivo, un po come operai alla catena di montaggio.

Ma, per il vero programmatore, lo sviluppo di software va oltre, ben oltre la semplice applicazione della tecnica...

Si perchè, fino ad ora, non abbiamo affrontato ciò che distingue un programmatore da un vero programmatore, cioè la creatività e la passione.

La passione. Come ci si può appassionare a una cosa come lo scrivere software? Semplice. Se vediamo il mondo del software come fosse un mondo virtuale, il programmatore è come un "dio". Colui che crea dal nulla qualsiasi cosa. Ed è esattamente questo che fa il programmatore. Crea dal nulla strumenti(virtuali), li inserisce in un sistema più ampio e può anche arrivare a creare dei veri e propri sistemi indipendenti, nei quali poi altri potranno inserire le loro realizzazioni.

Può sembrare una visione piuttosto estrema ma, in buona sostanza, è proprio cosi. Qualsiasi cosa, seppur virtuale, può essere creata dal programmatore.

E in questo mondo virtuale, non solo ci si sente "padroni", ma si può dare libero sfogo alle proprie fantasie creative, tentando di realizzare cose che, magari, nessuno ha mai realizzato prima, oppure ci si può confrontare con altri, anche se solo per vedere chi è più creativo o capace.

A questo poi, dobbiamo aggiungere l'utilità sociale della programmazione. Si perchè, lo sviluppatore ha la facoltà di aiutare, con il suo lavoro, una sterminata moltitudine di persone, e grazie ai moderni mezzi di comunicazione, le barriere che separavano lo sviluppatore degli utenti vanno, via via assottigliandosi, fino a sparire.

Ovviamente quest'ultimo aspetto è molto rilevante professionalmente, ma chi realizza software può anche farlo solo per il piacere di farlo, oppure per il piacere di aiutare gli altri, non per forza per trarne profitto.

Quindi, da un lato abbiamo la possibilità di essere "il creatore" e volendo, di potersi confrontare con il resto del mondo, e dall'altro abbiamo la possibilità di aiutare gli altri...

Da tutto questo deriva la passione.

E la creatività?

Quando si sviluppa un software, non si hanno vincoli, se non quelli imposti dallo scopo del progetto che si sta realizzando.

Le soluzioni non sono predeterminate, il modo di scrivere codice non è obbligato, il come deve funzionare ciò che realizziamo non ha, fondamentalmente, regole prefatte.

Quindi?

Quindi si può creare. Si può utilizzare la propria fantasia per andare oltre. Per superare i risultati raggiunti da altri, per trovare nuove soluzioni a vecchi problemi, per trovare soluzioni a problema ancora irrisolti.

Non solo. I migliori programmatori sono proprio quelli più creativi, quelli che scrivono codice più comprensibile, più "bello" da osservare, quelli in grado di fare le cose in tempi più rapidi, sviluppando i software più efficienti, più usabili e più utili per gli utenti, e chi più ne ha, più ne metta...

Spesso un'idea creativa può avere un impatto dirompente in un progetto software. Può far risparmiare tempo, soldi ed energie, può fare la differenza tra un prodotto fantastico e uno completamente fallimentare.

Tecnica si, ma soprattutto creatività e passione, senza dimenticarsi un po di pragmatismo!

Il codice sorgente, bellezza e poesia

Come abbiamo visto, scrivere un programma significa scrivere linee di testo utilizzando un linguaggio di programmazione. Può sembrare senza senso ma, il codice scritto può anche essere utilizzato per creare vere e proprie opere artistiche che superano il programma stesso.

Facciamo un esempio.

Immaginiamo di scrivere un programma, il cui codice sorgente una volta stampato abbia la forma di un cammello. Si si, proprio l'animale cammello, e che una volta eseguito disegni, a schermo, altri cammelli. Si, esiste, è opera di Erudil e si chiama Camelcode (http://www.perlmonks.org/index.pl?node_id=45213):

Camel Code

Ma si può anche andare oltre... arrivando alla poesia.

Scrivere codice sorgente che può essere letto come una vera e propria poesia... in questo caso gli esempi sono molti... basta dare un'occhiata a http://www.perlmonks.org/?node=Perl%20Poetry

Il pensiero di un musicista

Parlando sempre di programmazione e arte, ecco l'opinione di un musicista (http://siamogeek.com/2012/12/programmare-e-unarte/) quindi, un artista:

Da musicista mi sento di dare la mia opinione. Posso essere parzialmente d’accordo sulle motivazioni che spingono un artista o un programmatore a "mettersi all’opera": di fatto si parte da una necessità espressiva... Insomma, secondo me siete più artisti di quanto non si creda...

Il pensiero di una dei padri dell'informatica

E' arrivato il momento di leggere il pensiero di una delle persone più significative della storia dell'informatica.

Donald Knuth, uno dei padri dell’informatica, scrisse:

Programmare i computer è un’arte, perché applica al mondo la conoscenza accumulata, richiede capacità e ingegno e soprattutto produce oggetti di bellezza. Un programmatore che nel proprio subconscio si veda come un artista apprezzerà ciò che fa e lo farà meglio.

Conoscenza tecnica, ingegno, creatività, bellezza estetica, utilità, passione.

Si può definire la programmazione, un'arte?

Riferimenti

Grazie per aver letto questo articolo.

Chiunque volesse esprimere il proprio parere può farlo scrivendomi attraverso i collegamenti/link presenti in tutte le pagine.