Programação como Arte

Considero programar computadores uma forma de expressão artística. Existem muitas maneiras de resolver problemas do dia a dia da programação, deixando muito espaço para criatividade.

Exemplos Clássicos de Arte Generativa

E existem muitos exemplos interessantes de arte gerada por computador. Os meus favoritos são os “one-liners”, programas de apenas uma linha que fazem coisas interessantes, como o famoso 10 PRINT CHR$ (205.5 + RND (1)); : GOTO 10 que desenha um labirinto usando BASIC, e o equivalente mais moderno yes yes 'c=(╱ ╲);printf ${c[RANDOM%2]}'|bash criado usando Bash. Uma rápida procura na internet vai trazer várias implementações em linguagens diferentes.

Redescobrindo a Arte Generativa

Apesar de gostar do conceito, acabei deixando a arte generativa de lado por bastante tempo, focando mais no aspecto utilitário do meu código. Mas recentemente decidi dar uma nova chance para o trio HTML, CSS e JavaScript, e comecei a escrever algum código para tornar meu site um pouco menos árido.

JavaScript e a Evolução dos Navegadores

O resultado é que, em pouco tempo, criei vários códigos de brinquedo que geram efeitos visuais interessantes. A maioria estou usando para colocar algo nas laterais do site se a tela for larga demais. O que estou achando interessante é que o JavaScript e os navegadores evoluíram bastante. Não me entenda mal, JavaScript ainda é uma linguagem terrível, mas está virtualmente presente em todos os computadores modernos e, com alguns cuidados, dá para gerar um código mais ou menos decente com ela.

  • JavaScript é o novo BASIC: está presente em todos os computadores, é muito fácil de começar a programar e ninguém gosta (exceto as pessoas que só conhecem JavaScript).

Simplicidade e Independência de Código

Sempre tentei limitar meu código para evitar dependências externas como bibliotecas de terceiros ou ambientes muito complexos que eu não tenho controle. Claro que, muitas vezes, isso não é possível, mas é interessante manter em mente quando se está desenvolvendo. Manter as coisas simples torna sua vida mais fácil no futuro.

Mas, quando se trata de arte generativa, sou ainda mais radical: o código precisa ser pequeno, autocontido e não depender de nenhum recurso externo. Essas limitações têm vários propósitos, desde ser um código mais desafiador até fazer com que sua obra seja facilmente reproduzida e reutilizada.

Considerações sobre Performance

Também é necessário ter cuidado com o uso de recursos. Nos meus primeiros experimentos, o código que rodava perfeitamente na minha máquina, sofria para ser executado em máquinas mais modestas.

Para desenho contínuo, estou usando muito a função requestAnimationFrame, que tenta fazer 60 FPS, mas se o usuário for para outra aba, por exemplo, ela para de desenhar, dessa forma economizando muitos recursos. Também é importante tomar cuidado com a função chamada por requestAnimationFrame para ser leve e rápida. Por fim, se você for substituir a função de desenho, é muito importante remover a instância anterior usando cancelAnimationFrame, caso contrário, rapidamente a performance do seu código degradará.

Tentar manter o código eficiente e simples tem sido uma experiência interessante. Evitar processamento e realocação sempre me levou a aprender algumas técnicas novas. Por exemplo, no efeito das letras caindo estilo Matrix, para apagar as letras anteriores conforme novas letras são exibidas, é muito mais eficiente cobrir tudo com uma imagem semitransparente com a cor do fundo. Dessa forma, o alpha vai se acumulando e, lentamente, as letras vão sendo esmaecidas até desaparecerem. Isso é muito mais eficiente do que tentar manter o estado de cada letra e processar cada uma delas novamente e novamente.

Conclusão

Explorar a arte generativa tem sido uma jornada gratificante, permitindo combinar programação e criatividade. Apesar dos desafios, é empolgante ver o que é possível alcançar com código simples e eficiente.

Última modificação