Pular para o conteúdo principal

Arte de programar

Parece idiota perguntar se um programa de computador pode ser uma obra de arte. Talvez se for um programa para uma instalação de arte moderna, parte de uma obra maior. Mas o nosso editor de texto ou sistema operativo não será. É uma máquina, tem uma função definida, executa-a. Não tem nada de artístico. Ou terá?

Tentei e desisti começar por definir o que é a arte. Não sou especialista na matéria. Raciocinemos por exemplos. Arquitectura é arte. Pintura é arte. Fotografia é arte. Literatura é arte. Aonde a Programação parece destoar destes exemplos é em ter uma função bem definida, ser uma técnica usada para resolver problemas concretos. Mas será que destoa? A Arquitectura deve ser funcional. A Fotografia é uma técnica para registar imagens.

Prefiro analisar a questão do ponto de vista do processo de criação. Se estiver a fazer uma qualquer tarefa mecânica, não acrescento arte ao processo. Sou eu próprio uma máquina. Mas embora os programas que escrevo sejam eles próprios máquinas, o processo que os produziu não é descrito por nenhuma acção mecânica repetitiva. Um quadro é "só" um conjunto de camadas de tinta sobrepostas de uma maneira qualquer. O processo que o criou é que não é algo mecânico e bem definido, é uma arte.

Diria que para que uma dada técnica possa ser usada para criar obras de arte tem de ser suficientemente expressiva para representar o estilo do artista. As engenharias tradicionais lidam com restrições físicas e têm esta capacidade expressiva limitada (mas não anulada). É possível argumentar que estas técnicas também podem produzir arte. O caso da programação é mais forte. As restrições físicas são consideravelmente menores, pelo que o número de maneiras para fazer uma dada coisa é muito maior. Aqui se abre o espaço para as soluções imaginativas e conceptualmente belas (tema para outro texto).

Talvez o argumento mais forte para mostrar que a programação é uma arte é o facto de ter público. Ler código escrito por outras pessoas é uma óptima forma de aprender novas técnicas de programação. Quando é mesmo bom é também um prazer.

Programação é arte, ou pode ser. Não tenho dúvidas disso. Sinal de que estou enganado?

by pedrocr


Comentários

Postagens mais visitadas deste blog

A gente e a alma

Falo uma língua tão antiga Que trago as mãos em calos Nascem letras para uma cantiga Nos enxertos dos teus bardos Amo-te mulher em todas as prosas Sou o maior dos perversos Não despedaço corações, nem faço mossas mas nascem-me espinhos nos versos Tua alma espreita-me na poda É mosto a fermentar os segredos vício de vinho que não sai de moda Por isso esmago com os pés os medos Por isso sou farinha nesta roda E o pão cresce no teu corpo de vinhedos

Exame 07/08 {Resolucao}

Enunciado aqui module Exame where data Tree a = Empty | Node a (Tree a) (Tree a) type Extracto = [Movimento] type Movimento = (Descricao, Tipo, Data, Montante) type Descricao = String data Tipo = Credito | Debito deriving (Eq,Show) type Ano = Int type Mes = Int type Dia = Int data Data = D Ano Mes Dia deriving (Eq,Ord,Show) type Montante = Double -- valor positivo -- Dados para teste movimento1=("Compra", Debito, (D 1999 12 01), 123.0) movimento2=("EuroMilhoes", Credito, (D 2009 08 23), 155.5) movimento3=("EDP", Debito, (D 2009 01 26), 32.0) extracto = [movimento1,movimento2,movimento3] ------------------------------- --pg1 menoresMaiores :: Float -> Tree Float -> ([Float],[Float]) menoresMaiores n Empty = ([],[]) menoresMaiores n arv = let l = toList arv in ((filter (n>) l),(filter (n String -> Bool ePrefixo [] r = True ePrefixo l [] = True ePrefixo (x:xs) (y:ys) | (x==y)= True && e...

Esperas não activas

Algumas definições e conceitos Variável Lock – diz se está alguém a executar o while. Garante que o wait() e o signal() são atômicos e que só está um processo de cada vez na zona critica. Wait(condiction_variable, lock) – põe o processo actual numa lista (FIFO) em espera e liberta o lock. Aguarda por um sinal do sistema operativo para poder pôr os processos guardados na FIFO da variável de condição prontos a executar. Signal(condiction_variable) – vai a lista de processos bloqueados (FIFO) faz pop da lista e põem o processo bloqueado na fila de processos prontos a executar pelo sistema operativo. Funcionamento do psedo-código Psedo-Código: Lock lock ; Condition vazio , cheio ; int a[N], nitems, ...; int tirar(){ acquire( lock ); //está alguem apartir desta linha? while (nitems == 0) wait( vazio , lock ); //  Não tenho nada para fazer. Espero! … {algoritmo que faz coisas} … signal( cheio ); //  Bem! Quem estava à espera do meu trabalho para con...