A poesia de programar

Em dezembro de 2002, Richard Gabriel, um grande nome da Computação e ex-engenheiro da Sun, falou sobre a semelhança entre programar computadores e escrever poesias. Como é possível que essas duas atividades, aparentemente pertencentes a áreas tão distintas, tenham coisas em comum?

O atividade de escrever software deve ser vista como uma atividade criativa. Afinal, software interessante de se fazer é software que nunca foi feito. Essa atividade não pode ser comparada à de criar pontes, por exemplo. Nós construímos pontes há mais de 2000 anos. O software mais antigo não deve ter mais de 50 anos! Mesmo utilizando boas ferramentas, um programador está quase sempre criando uma coisa nova. Se olharmos para o código de vários programadores, veremos o mesmo problema resolvido de várias maneiras diferentes. Existem programas bem e mal escritos. Por ser uma atividade totalmente criativa, programadores deveriam ser treinados como pessoas criativas, artistas e poetas.

E como os poetas são treinados? Eles estudam grandes obras e a vida de grandes poetas! Isso é feito com software? Olhamos para grandes pedaços de código? De maneira geral, a grande literatura de software não é consultada pelos engenheiros.

Para que um poema fique realmente bom, ele normalmente passa pela revisão de várias pessoas. Depois de escrito, normalmente alguém o revisa. O poeta faz então algumas alterações. Uma outra pessoa revisa. Depois vai para a editora. Nova revisão. Nós fazemos isso com software? Nas metodologias ágeis, o processo de criação de software se tornou muito mais interativo: cria-se uma parte do software; o cliente revisa; o software é melhorado; o cliente revisa novamente. É obvio que não podemos planejar todo o software antecipadamente. Se pudéssemos, não haveria a necessidade de lançarmos várias versões!

Dizem que você sabe reconhecer um grande poeta pelo tamanho de sua obra. Isso significa que quanto mais se escreve, mais experiência se obtém e melhores vão ficando os escritos. Quantos poemas possui um grande poeta? 1000? 2000? Quantos softwares você escreveu? 50? 100?

A idéia principal é que para escrever bom software precisamos:

  • Consultar uma boa literatura
  • Praticar muito
  • Ter pessoas criticando o que escrevemos

Se procurarmos na Amazon livros de “aprenda em 21 dias”, a maioria deles será sobre computação. Escrever software é uma arte! Leva-se no mínimo 10 anos para ficar bom nisso. As pessoas teimam em acreditar que programar é umas atividade fácil e complementar, quando na verdade é uma atividade central, difícil, humana e sociológica.

3 Comments A poesia de programar

  1. Harry Hataway

    Enxergar a programação como uma forma arte é uma ótima maneira de estimular a nossa evolução como desenvolvedores. Sempre houve uma fina linha separando programação e arte. Software é uma forma não-deterministica para expressão de idéias(no caso, soluções computacionais para problemas), logo(acredito eu…rs) , pode ser considerado como arte!

    Sem contar que grandes cientistas da computação como Donald Knuth(autor de “The Art of Computer Programming”) sempre incitaram o “fator artístico” implicito no ato de programação.

    “Computer programming is about looking for solutions to problems. So is acting. There is a science to comedy.” — Masi Oka (ex programador da Industrial Light and Magic que atualmente interpreta o personagem Hiro Nakamura na série Heroes)

  2. Adriano

    Endosso e reforço a recomendação dos ensaios do Paul Grahm. Mind the Gap é um outro ótimo texto, que, entretanto, nada tem a ver com a relação entre programação e arte.

    Dani, existem alguns livros que visam suprir a necessidade que você apontou no post, por exemplo Beautiful Code (http://www.oreilly.com/catalog/9780596510046/). Li alguns capítulos e gostei da maioria.

    Harry, software é quase sempre determinístico, ao contrário do que você parece crer. Há alguns algoritmos estocásticos, mas na prática esses usam geradores de número pseudo-aleatórios.

Leave a Reply

Your email address will not be published. Required fields are marked *