Atualizando o livro mais influente da era BASIC

"Capas de duas edições do livro BASIC Computer Games

BASIC Computer Games é considerado um dos livros mais influentes da sua época. Foi o primeiro livro de programação a vender mais de 1 milhão de cópias e houve uma época em que havia mais cópias do livro distribuídos em bibliotecas do que computadores capazes de rodar BASIC.

Nas décadas de 1970 e 1980, revistas de programação traziam uma série de programas impressos, que precisavam então ser digitados num computador para rodar. Era um conceito bem interessante DIY gaming.

Página 101, escaneada do BASIC Computer Games, contendo o programa LIFE
Figura 1. Página do livro BASIC Computer Games, com o jogo Life

O Projeto

Os jogos do livro estão agora sendo atualizados para linguagens de programação modernas, de modo a preservar uma parte da história da computação e torná-los mais acessíveis. Isso está sendo feito através de um projeto open source organizado pelo Jeff Atwood, co-fundador do StackOverflow, e apresentado em detalhes no post Updating The Single Most Influential Book of the BASIC Era.

O artigo é super interessante, e traz um contexto histórico muito rico para o projeto. Como é um projeto open source, você também pode contribuir.

Como contribuir

Os jogos estão sendo atualizados para as linguagens no topo do índice TIOBE Fevereiro 2021 que são consideradas memory safe e de script de propósito geral:

  • Java

  • Python

  • C#

  • VB.NET

  • JavaScript

  • Ruby

  • Delphi / Object Pascal

  • Perl

Se você conhece alguma dessas linguagens, pode contribuir também. Imagino que algumas outras linguagens podem ser aceitas, mas teria que perguntar (é um projeto de código aberto, afinal).

Escolhendo um jogo para portar

A primeira coisa que você precisa fazer (depois de ler o artigo, é claro) é acessar o repositório e identificar algum jogo que não tenha sido portado para uma linguagem que você domina.

No meu caso, escolhi portar para C# o jogo 55 da lista, Life.

Por sorte, não vai ser necessário transcrever o código em BASIC a partir da revista, pois isso já foi feito. Aliás, o conteúdo do livro pode ser encontrado no site Atari Archives, e o livro pode ser baixado na íntegra aqui.

A próxima etapa é preparar o ambiente local.

Preparando o ambiente BASIC

Por volta de 2009, Lyle Kopnicky normalizou todo o código para o Vintage BASIC. Isso facilita nossa vida, pois a ferramenta é fácil de instalar e rodar no Windows, Linux e MacOS.

O Vintage BASIC é um interpretador de BASIC implementado em Haskell e apresenta comportamento semelhante ao BASIC do Commodore 64.

No site do projeto, há um Guia de Usuário bem completo, e que pode ser lido em cerca de uma hora.

Uma vez instalado, você pode rodar um programa em BASIC no seu terminal desta forma: vintbas myprogram.bas.

Fork do projeto

Para contribuir com o projeto, você terá primeiro que bifurcar (criar um fork) o repositório do projeto no GitHub.

Se você é novo no mundo dos projetos open source, a documentação do GitHub mostra em detalhes como bifurcar um repositório.

Convertendo para outra linguagem

Essa é a parte divertida, e é com você. É importante lembrar no entanto que se trata de um porte, e não simplesmente de uma nova versão. Então é importante buscar reproduzir com grande fidelidade o comportamento do original.

Para testar o seu porte, você pode abrir dois terminais: no primeiro, você roda o jogo original usando o Vintage BASIC; no segundo o seu. Se estiver tudo certinho, o resultado deveria ser o mesmo.

Pull Request

Quando você estiver satisfeito com o porte, basta abrir um Pull Request para o repositório original. Eu acabei abrindo dois, porque encontrei alguns bugs na primeira implementação.

Minha contribuição: Life em C#

Escolhi o jogo 55 do livro, chamado LIFE, e decidi portá-lo para C#. Dediquei aproximadamente um dia e meio das minhas férias para o porte. Isso incluiu estudar BASIC, entender o programa original, escrever meu porte e corrigir um monte de bugs.

Por que escolhi Life para portar

Escolhi especificamente Life pois já admirava. Conhecido como Conway’s Game of Life, trata-se de uma simulação com autômatos celulares criada por John Conway em 1970. A partir de um conjunto de regras simples, comportamentos complexos emergem. Mais tarde, Stephen Wolfram estudou mais a fundo os autômatos celulares, publicando uma série de artigos que culminaram na escrita do livro A New Kind of Science, publicado em 2002.

Mais recentemente, Stephen Wolfram tem trabalhado num modelo unificado da física que tem suas raízes nesses mesmos conceitos. A teoria propõe um modelo computacional do universo, e você pode ver mais sobre ela aqui.

Sumário visual do Wolfram Physics Project, apresentando o conceito das Ruliads
Figura 2. Sumário visual do Wolfram Physics Project

Caso tenha batido a curiosidade e o seu inglês estiver bom, pode conhecer mais sobre o projeto no podcast do Lex Fridman:

O processo de portar o jogo para C#

Portar Life para C# foi mais divertido do que eu esperava. A maior dificuldade do projeto foi tornar a simulação do porte fiel à do original.

Como BASIC é uma linguagem cujos arrays são indexados em 1, ao invés de 0, como Java ou C#, o programa original tinha vários valores hard-coded que complicaram a conversão. Alguns erros ao ajustar os índices levaram a diferenças sutis na simulação após algumas dezenas de iterações.

Devido à alterações que tive que fazer na indexação, a primeira implementação funcionava, mas só até alguma célula atingir as bordas da simulação. A partir daí, a simulação do porte evoluía de forma complementamente diferente da original.

Depois de algumas horas de testes, consegui finalmente corrigir e chegar a um resultado satisfatório:

O código você encontra aqui.

Outras opções para compartilhar:
comments powered by Disqus