Come ha ben sottolineato John Maeda, l’utilizzo del computer come mero surrogato di strumenti fisici (foglio, penna ecc.) pone grossi limiti alle sue potenzialità. È necessario utilizzare dunque il calcolatore in maniera consona alla sua natura: scrivendo software, progettando il processo che porterà al risultato finale.
Sembra dato per scontato che questo risultato finale (un manifesto, un libro, un qualsiasi artefatto) possa avere anche una valenza artistica.
Ma il lavoro di un designer consiste nello sviluppare processi e sistemi, e sempre più spesso la sua progettazione lo porta a scrivere del software.
Anche questo software ha una sua valenza artistica, poiché in esso possiamo riconoscere il segno, le idee e la filosofia di progetto unici di che lo ha scritto.
Programmare è un’arte. Al pari dell’architettura, si tratta di costruire un edificio che dovrà fornire soluzioni a dei problemi, molti dei quali ancora da scoprire.
La storia, ed ancor più il presente, dei linguaggi di programmazione, è identica alle storie della pittura, della scultura e dell’architettura: è un continuo sviluppo di punti di vista, approcci e soluzioni; la loro critica, ed il conseguente sviluppo di ulteriori punti di vista, approcci e soluzioni. Un ciclo che si ripete, critica dopo critica, iterazione dopo iterazione.
Dalla critica nascono le scelte operate da ogni linguaggio di programmazione, che ne definiscono le modalità d’espressione dei concetti, ovvero la sua Estetica.
Se ci pensiamo, è stato sempre così: gli impressionisti con gli accademici, gli espressionisti con gli impressionisti, e così via.
Breve storia semplicistica
I primi linguaggi di programmazione (1950-60: Fortran, LiSP, Cobol, Basic) formano la base da cui hanno origine quelli oggi più diffusi. La generazione successiva (1960-70: Pascal, C, Simula e più tardi SmallTalk), introdusse i paradigmi fondamentali della programmazione (programmazione ad oggetti, funzionale, ecc.); dai dibattiti su di essi nascono tutte quelle differenze che sono alla base degli oltre 2500 linguaggi odierni.
Decisioni, decisioni, decisioni
Gli astrattisti scelsero di rifiutare il figurativismo, e le loro opere, le loro tecniche e la loro Estetica sono frutto di questa scelta.
Come le Arti, anche i linguaggi si differenziano per tecnica e per estetica.
Come le correnti artistiche, ogni linguaggio di programmazione ha reagito ai suoi predecessori e contemporanei, rifiutando ciò che di volta in volta ritenesse sbagliato ed ingiusto.
Tecnica ed estetica, peculiari per ogni linguaggio, derivano dalle scelte che l’autore (o gli autori) del linguaggio operano al momento della progettazione: scelte motivate non solo da cosa viene apprezzato o disprezzato in altri linguaggi, ma anche da quali valori vengono considerati prioritari: comodità e velocità d’uso? oppure massime performance durante l’esecuzione? leggibilità del codice sorgente? coerenza del linguaggio? sicurezza? purismo formale?
A titolo esemplificativo, possiamo confrontare due linguaggi radicalmente diversi, come il C e Python
In C, l’enfasi è posta sulle prestazioni (in termini di velocità di calcolo) del programma. Per questo motivo, ogni variabile va dichiarata prima di poterle assegnare un valore, indicandone esplicitamente il tipo (intero, stringa, ecc) , sacrificandone in parte comodità e facilità d’uso del linguaggio.
Al contrario, in Python la leggibilità del codice sorgente è considerata prioritaria rispetto all’esecuzione, pertanto è possibile assegnare immediamente un valore alla variabile, che assumerà implicitamente il tipo del valore assegnatole. L’allocazione delle variabili e la gestione della loro memoria viene demandata al compilatore, a scapito della velocità.
Ciò che alcuni considerano un pregio, per altri può essere in difetto: per questo non esistono linguaggi migliori di altri. Ognuno ha i suoi punti deboli, che derivano appunto dalle opinioni e dalle decisioni prese sulla base di esse.
Estetica
Dalle scelte e dai valori di riferimento di un particolare linguaggio ne conseguono le sue peculiari caratteristiche. Attraverso esse, il programmatore è incentivato (ed in alcuni casi volutamente costretto) ad utilizzare particolari strutture piuttosto che altre.
Riprendendo il confronto tra C e Python, uno stesso costrutto FOR appare visivamente molto differente:
in Python:
for i in range(100):
do_something()
in C:
int i;
for (i=0;i<100;i++)
{
doSomething();
}
Questo contribuisce a creare l'estetica tipica di ogni linguaggio, che lo contraddistingue dagli altri. Ad esempio, è diffusa l'opinione che Java implichi uno stile 'barocco', mentre Perl sia 'ermetico'.
// Hello World in Java
import java.io.*;
class HelloWorld {
static public void main( String args[] ) {
System.out.println( "Hello World!" );
}
}
È infatti anche piuttosto comune l'uso di aggettivi come 'Pythonic', 'Javaesque' o 'Perlish', per indicare un certo stile ad una data porzione di codice.
Il segno è così costituito dal codice stesso.
Ad un livello più basso, possiamo riconoscere dei pattern visivi negli a capi, nei rientri, nei costrutti utilizzati, nei caratteri di fine riga.
# Hello world in perl
print "Hello World!\n";
# Hello World in Python
print "Hello World"
<?php
// Hello World in PHP
echo 'Hello World!';
?>
Questi, formando funzioni, classi, moduli e convenzioni, creano la struttura generale del codice, che ne eredita il segno elevandolo ad un'evidente estetica:
import math
class MyClass(float):
def __init__(self, value):
self.value = value
def get_cube(self):
return math.pow(self.value,2)
a = MyClass(3)
return MyClass.get_cube() == 9:
<?php
require("mylibraries.inc")
class MyClass
{
function SetValue($value) {
$this->
Questo contribuisce a creare l’estetica tipica di ogni linguaggio, che lo contraddistingue dagli altri. Ad esempio, è diffusa l’opinione che Java implichi uno stile ‘barocco’, mentre Perl sia ‘ermetico’.
// Hello World in Java
import java.io.*;
class HelloWorld {
static public void main( String args[] ) {
System.out.println( "Hello World!" );
}
}
È infatti anche piuttosto comune l’uso di aggettivi come ‘Pythonic’, ‘Javaesque’ o ‘Perlish’, per indicare un certo stile ad una data porzione di codice.
Il segno è così costituito dal codice stesso.
Ad un livello più basso, possiamo riconoscere dei pattern visivi negli a capi, nei rientri, nei costrutti utilizzati, nei caratteri di fine riga.
# Hello world in perl
print "Hello World!\n";
# Hello World in Python
print "Hello World"
<?php
// Hello World in PHP
echo 'Hello World!';
?>
Questi, formando funzioni, classi, moduli e convenzioni, creano la struttura generale del codice, che ne eredita il segno elevandolo ad un’evidente estetica:
import math
class MyClass(float):
def __init__(self, value):
self.value = value
def get_cube(self):
return math.pow(self.value,2)
a = MyClass(3)
return MyClass.get_cube() == 9:
<?php
require("mylibraries.inc")
class MyClass
{
function SetValue($value) {
$this->value = $value;
}
function GetCube() {
return pow($this->value, 2);
}
}
$a = new MyClass;
$a->SetValue(3);
return ($a->GetCube() == 9);
?>
Bibliografia
http://en.wikipedia.org/wiki/History_of_programming_languages