Programar é exprimir algo numa qualquer linguagem, escrita ou visual. A única diferença entre uma linguagem de programação e uma linguagem natural é que o seu objectivo é ser executada por uma máquina.
Para interpretar o que está escrito num romance é preciso um enorme contexto comum da nossa sociedade. Para interpretar um programa de computador é preciso interpretar o contexto da linguagem de programação. Este contexto, ao contrário do nosso contexto social, está completa e formalmente definido. É por isso que somos capazes de escrever uma máquina para executar um programa, mas ainda não conseguimos criar uma máquina que executa qualquer ordem escrita em linguagem natural.
Interpretar uma linguagem é descobrir o isomorfismo entre os símbolos da linguagem e os conceitos que nos vão dentro da cabeça. Por exemplo, para perceber fórmulas matemáticas temos de perceber que os '+' querem dizer somar dois números, os '-' subtrair, etc. Podemos a qualquer momento trocar o significado dos símbolos uns pelos outros ou inventar novos, continuando a ter uma linguagem para exprimir fórmulas matemáticas equivalente à anterior.
Para interpretar arte ou literatura também temos de começar por encontrar um isomorfismo entre os símbolos que estão no quadro ou as expressões do texto com os conceitos que nos vão na cabeça. No caso da arte abstracta será talvez perceber que este isomorfismo não existe e que o conteúdo, a existir, é a própria forma.
No caso da programação o isomorfismo não tem de ser descoberto, está definido. Pelo menos ao nível básico da gramática da linguagem. Isto quer dizer que conseguimos criar uma máquina para executar o programa mas isso não quer dizer que consigamos criar uma máquina para o compreender. Assim sendo, programar é tão livremente expressivo como qualquer outra linguagem. São todas igualmente difíceis de compreender, a programação só é mais fácil de executar automaticamente.
Já disse antes que a programação é uma arte. O que ainda não disse, e é bastante mais arrojado, é que a programação é a forma de arte mais expressiva de sempre. Digo isto num sentido potencial. O que já foi expresso pode ser mais ou menos do que as outras artes. Mas o que pode ser expresso é maior.
Mas o que é que podemos exprimir com um programa que não podemos com um texto? Algo não só interpretável mas também executável. Isto não aumenta o poder expressivo da linguagem em si mas antes do resultado. Como exemplo vejamos estas duas definições da sequência de Fibonacci:
Em linguagem natural: Os dois primeiros números da sequência de Fibonacci são 1. Qualquer um dos seguintes obtém-se somando os dois números anteriores da sequência.
Em linguagem de programação (em Ruby):
def fibonacci(num)
if num < 2
return 1
else
return fibonacci(num-1)+fibonacci(num-2)
end
end
Ambas estas definições explicam o que é a sequência de Fibonacci. Enquanto que a primeira necessita de compreensão para se conseguir calcular o terceiro número da sequência, a segunda só precisa de execução. Depois de definido isto podemos dizer à máquina para calcular o terceiro número e obtê-lo, sem que para isso tenhamos de compreender o programa. Nem nós nem a máquina, que não compreende o programa, só segue um conjunto de regras mecânicas para o executar.
Na definição em linguagem natural a sequência é um conceito abstracto. Passa a existir quando percebemos a sua regra de formação. Mas só existe como algo abstracto na nossa cabeça. O programa transforma-a em algo concreto. Podemos exprimir a sequência concreta, já que podemos escrever o programa que calcula e imprime numa folha os infinitos números da sequência. Programa esse que funcionará para sempre se o executarmos.
Neste caso o conceito abstracto será mais interessante que a sequência concreta, que é infinita, mas o programa exprime as duas coisas. Se o interpretarmos nós chegamos ao conceito abstracto, se o executarmos produzimos a sequência concreta. Por isso a expressividade não está na interpretação da linguagem mas no facto que uma pode ser executada e a outra não.
O que pode tornar esta diferença de expressividade fantástica é se se provar que a própria inteligência pode ser programada. Nesse caso, um programa poderá exprimir algo inteligente, não como comunicação mas como concretização. Se aprendermos a programar inteligência artificial podemos exprimir conceitos inteligentes não como uma comunicação entre duas entidades inteligentes (um quadro, um romance) mas como um objecto por si só inteligente.