
Letras coloridas em uma tela de LCD
Introdução: Primeiro contato
Você se lembra da primeira vez que entrou em contato com o mundo da programação? Talvez você tenha se sentido fascinado pelos números e palavras coloridas na tela, ou ficou impressionado com a velocidade que o hacker daquele filme maneiro digitava para invadir a NASA. Talvez você tenha visto o Neo lutando pela sobrevivência na Matrix ou lido sobre a saga de Case no mundo de Neuromancer. Talvez você tenha apenas visto que essa área pode dar algum dinheiro e decidiu fazer aquele curso do YouTube. Todo mundo tem seu primeiro contato, o meu foi pouco convencional. Com pouco mais de 6 anos, eu estava em um passeio pela metalúrgica onde meu pai trabalhou por toda a vida (a minha vida, não a dele), impressionado com os braços mecânicos da Yaskawa, quando meu pai colocou na minha mão um controle grande, cheio de botões, nada parecido com o controle do meu Super Nintendo amarelado.
Aquele controle com tela embutida era uma interface para programação de robôs da Yaskawa, com uma linguagem tão primitiva quanto Assembly e tão confusa para uma criança de 6 anos que meu cérebro mal conseguia processar o que estava acontecendo. Eu adorei. Não foi o momento em que decidi que seria um programador, mas foi quando percebi que existiam outras coisas no mundo além de jogar Mario e assistir Pokemon. Havia um mundo onde pessoas digitavam palavras estranhas em um teclado e coisas aconteciam.

O segundo, terceiro e provavelmente quarto... contatos
Meu segundo contato com a programação aconteceu 4 anos depois, quando eu tentava fazer scripts para jogos no RPG Maker 2003. O terceiro, 2 anos depois, tentando rodar a Unity Engine no Intel Celeron da minha irmã. E o quarto contato, um ano depois, escrevendo meu primeiro "Hello World" em C, para nunca mais tentar outra linha de código. Isso é claro, até a faculdade. Lá eu não tinha opção.
O que me assustou naquele contato com a linguagem C não foram as palavras em uma língua que eu não dominava ou a preguiça de tentar adquirir conhecimento num verão de 40 graus. O que me assustou foi o quão tedioso aquilo parecia. Não havia mais um robô se movendo, um guerreiro lutando contra um dragão ou um cilindro 3D andando numa floresta renderizada a 10 frames por segundo. Era só um console de texto, e mais texto, e mais texto... Foi aí que percebi que eu era um cara visual.
Minha primeira tentativa de quebrar o ciclo do tédio foi na faculdade com um RPG de texto que batizei de "F0ReST", uma aventura onde você entrava no papel de um camponês da idade média que enfrentava diversos desafios. No fim das contas, a única coisa sólida que o projeto ganhou foi um combate contra um urso e uma tela-título escrita em ASCII, mas cara... aquilo foi divertido. O projeto foi assassinado pelas provas de Cálculo I, mas a ideia de que eu podia me divertir fazendo código nunca mais morreu.
Durante meu curso, tive acesso ao livro Linguagens de Programação [Robert W. Sebesta], e entre tópicos de ortogonalidade e programação funcional, comecei a perceber que eu realmente estava curtindo aquilo. Os mesmos int
s e float
s da linguagem C, que eu achava um tédio, agora eu olhava com outros olhos. Até Assembly virou uma coisa interessante. Eu não queria mais estudar; eu queria codar e conhecer outras linguagens. Eram trabalhos de pessoas geniais, e eu queria entender mais sobre isso.
Compiladores e seus dragões malditos
O livro Compiladores: Princípios e técnicas [Alfred A.] é um monstro, a capa descreve um cavaleiro que enfrenta um dragão, uma metáfora para a dificuldade que é construir um compilador para uma linguagem de programação. Honestamente acho que a metafora seria mais fiel se o cavaleiro estivesse só de cueca e lutando com um graveto na mão, o livro não era um passeio no parque e de certo modo me trouxe de volta aquele passeio na metalurgica, segurando o controlador da Yaskawa, tudo de novo, letras coloridas numa tela. Daquele livro consegui três coisas: Uma aprovação na matéria de compiladores, um projeto de lexer e parser usando Lex e YACC, e um fascinio genuíno pela arte de se construir uma linguagem de programação.
Linguagens exotéricas
Em algum momento, depois de entender o básico de várias linguagens "sérias", comecei a me interessar por aquelas que não fazem o menor sentido, as Esolangs, linguagens criadas para explorar um conceito ou apenas por diversão e que, justamente por isso, são fascinantes. A mais popular delas provavelmente sendo a Brainf*ck [Urban Müller], uma linguagem tão minimalista que parece uma piada interna da comunidade de programadores. E, de certa forma, é.
Brainf*ck é o que acontece quando alguém olha para a programação e pensa: "E se tudo fosse completamente tenebroso e não humano?". O programa clássico de "Hello World" em Brainf*ck parece um gato andando no teclado (um teclado de só 8 teclas), mas existe uma beleza na ideia de fazer o máximo com o mínimo absoluto, quase uma máquina de Turing:
>++++++++[<+++++++++>-]<.>++++[<+++++++>-]<+.+++++++..+++.>>++++++[<+++++++>-]<+
+.------------.>++++++[<+++++++++>-]<+.<.+++.------.--------.>>>++++[<++++++++>-
]<+.
Já Piet de David Morgan-Mar, uma lenda da comunidade de esolangs é uma linguagem baseada em stack onde você literalmente programa desenhando uma imagem. Não, não é uma metáfora. Cada bloco de cor em uma imagem BMP representa uma operação diferente, e o fluxo do programa é decidido pela direção em que um "ponteiro" virtual se move pela arte. Codificar em Piet é tipo tentar pintar uma tela do Wassilyevich Kandinsky, boa sorte com isso.

Os Fantasy consoles
No meio dessas explorações malucas, descobri um universo que parecia feito sob medida para o meu tipo de cérebro. Tudo começou com o CHIP-8, que nem é exatamente um console de jogos, mas uma linguagem/interpreter de sistemas antigos dos anos 70. Simples, limitado, assembly. Um microambiente perfeito pra quem quer entender como jogos antigos funcionavam debaixo dos panos.
Me empolguei tanto que comecei a escrever minha própria implementação do CHIP-8... e, bom, não terminei até hoje. Às vezes eu abro a pasta do projeto, olho com carinho para ela, prometo que vou terminar... e fecho a IDE. Mas só de ter começado, já sinto que valeu a pena.

E então veio o PICO-8. A joia dos fantasy consoles. Um ambiente retrô de desenvolvimento de jogos que já pariu projetos que foram parar até no Steam. PICO-8 tem sua própria estética, suas próprias limitações (e seus próprios caprichos). Escrever um jogo no PICO-8 é como pintar uma aquarela: as limitações viram parte da criatividade. E, diferente do CHIP-8, não cheguei a desenvolver, mas com certeza joguei muita coisa desenvolvida nele.

Conclusão: Além do primeiro contato
Pouco mais de 19 anos após meu primeiro contato com a programação, tenho uma rotina fixa, faço minhas refeições, implemento features no meu trabalho, leio alguma coisa, vejo filmes e me exercito. O primeiro contato com a programação foi aquele momento em que eu descobri que existia um mundo novo por trás da tela do Super Nintendo. Mas o essencial foi entender que o que mantém minha paixão viva até hoje são os recontatos: cada livro estranho, cada projeto maluco, cada linguagem bizarra que descubro.
Eu não virei um gênio da NASA, nem o Neo, nem o Case do Neuromancer. Mas virei alguém que tem interesse no que faz, e que se diverte descobrindo coisas novas em cada byte.
E no final das contas, acho que isso já vale muito.