Ideias, Regras, Simulação: Motivação
Créditos para a imagem: Imagem criada pelo autor usando o programa Inkscape; ícones de Font Awesome.
Versão em Vídeo
Uma versão em vídeo deste conteúdo está disponível no YouTube (áudio em Português; legendas em Português e Inglês). Caso queira compartilhar o conteúdo, você pode usar as hashtags #IdeiasRegrasSimulação e #FrancoGarciaCom.
A versão em texto desta página é mais completa e abrangente.
Nota do autor: comumente não respeito o acordo ortográfico, então é provável que Ideia apareça como Idéia em parte do conteúdo.
Aprenda Programação Criando Simulações e Jogos Digitais
O material introdutório de Aprenda Programação é completo e detalhado. Assim, ele é uma boa referência para consulta. Por outro lado, ele pode ser um material pesado e complexo em certas partes. De fato, alguns exemplos e conceitos podem ser novidades mesmo para programadores e programadores experientes. Por exemplo, muitos profissionais nunca criaram imagens ou sons programaticamente, especialmente sem bibliotecas, como feito em Arquivos e Serialização (Marshalling).
Embora eu esteja satisfeito com o detalhamento do material, a interatividade dos exemplos poderia ser maior. A partir de Bibliotecas, alguns (poucos) exemplos incorporaram bibliotecas gráficas. Em Entrada em Linha de Comando, também usou-se ncurses para criar interfaces interativas para o console ou terminal. Além disso, o motor Godot Engine provê recursos nativos para programação de simulações e jogos digitais sem a necessidade de bibliotecas externas. Contudo, ele ainda não foi explorado para tal.
Programar requer o aprendizado de conceitos e técnicas, assim como a prática. Se este é seu primeiro acesso a este website, você potencialmente é uma pessoa iniciante em programação. O aprendizado de conceitos e fundamentos é importante para iniciantes. Assim, ensiná-los foi o objetivo de Aprenda Programação. Se você não conhece o material, ele é grátis.
Se você acompanhou o material de Aprenda Programação, você aprendeu fundamentos e conceitos essenciais para programação que podem ser usados em quaisquer linguagens de programação. Caso você tenha alcançando Arquivos e Serialização (Marshalling), você não é mais uma pessoa iniciante; de fato, você possui conhecimento adequado. Você possui a base e fundamentos para a programação de sistemas complexos, mas precisa de experiência.
A experiência provém da prática; não há outra forma. Portanto, é hora de programar para praticar. Você pode continuar a usar um console ou terminal. No entanto, talvez você queira explorar novos recursos computacionais.
Que tal criar aplicativos interativos, como jogos digitais e simulações?
Desafios de Programar com Conteúdo Interativo e Multimídia
Como comentado na introdução de Aprenda Programação, muitas pessoas querem aprender a programar para criarem sistemas dinâmicos e interativos para seus dispositivos. Seja o dispositivo um computador, um navegador de Internet, ou dispositivo móvel (como telefone / smartphone ou tablet), a criação de aplicativos multimídia (com imagens, vídeos e sons) é um desejo comum para iniciantes.
Aprender a programar é algo difícil. Tentar criar uma simulação ou jogo digital sem saber programar é ainda mais difícil. Mesmo simulações simples podem ser complexas para pessoas iniciantes, sobretudo quando se deseja incluir gráficos, sons e animações. Existem ferramentas que auxiliam a criar sistemas específicos, como jogos em alguns gêneros, ou aplicativos simples para diapositivos móveis. De fato, existe uma área de pesquisa chamada End-User Programming (também conhecida como End-User Development) que investiga como empoderar usuárias e usuários finais a criarem ou modificarem sistemas, mesmo que não tenham experiência em programação. Por sinal, esta foi uma das áreas do doutorado do autor.
Contudo, a criação de uma simulação ou jogo sem uma ferramenta, isto é, usando uma linguagem de programação, tende a ser complexo por diversos motivos. Por exemplo:
- Muitas linguagens de programação requerem o uso de bibliotecas externas para apresentação de conteúdo multimídia;
- O conhecimento necessário para usar as bibliotecas e os recursos multimídia é significativamente maior que de usar uma subrotina como
print()
; - Pessoas iniciantes não possuem experiência para estimar a complexidade de um projeto. É bastante comum que elas queiram criar um sistema que seja incompatível com as habilidades de programação atuais, ou um projeto cujo escopo seja muito grande (e, portanto, demande muito tempo, mesmo com experiência suficiente).
Assim, um resultado típico é que iniciantes deparem-se com as dificuldades, sintam-se desmotivados, e desistam. O problema não é falta de capacidade. Para começar a programar e criar sistemas, basta possuir dedicação, curiosidade, disciplina e perseverança. Na realidade, uma razão comum é a incompatibilidade entre as habilidades e o conhecimento atual da pessoa, frente à complexidade da implementação.
Falta, pois, um planejamento que equilibre as habilidades atuais com o conhecimento necessário para a implementação. Um mapa, um roteiro, ou um plano, se preferir. No caso de uma figura humana, um guia ou tutor.
Este website pode servir como o mapa; o autor, como guia. Logo, é hora de iniciar a próxima série deste website: Ideias, Regras, Simulação.
Possíveis Caminhos para Criar Simulações e Jogos Digitais
Para começar a criar simulações, existem dois caminhos em potencial:
- Criar um projeto maior e mais complexo aos poucos. Um projeto em um longo intervalo de tempo;
- Criar projetos de pequeno porte, mais simples e com escopos menores. Vários projetos, cada um com intervalos menores de tempo.
Pessoas iniciantes em programação tendem a optar pela primeira opção. O projeto escolhido (praticamente) inevitavelmente possui escopo e complexidade maiores que as habilidades e o conhecimento de programação atual da pessoa. Conseqüentemente, o projeto raramente termina.
Do ponto de vista didático, a primeira opção também possui algumas limitações. Embora um único (grande) projeto seja conveniente para o autor, ele demanda maior tempo e dedicação da/do aprendiz para compreensão. Decisões de design e arquitetura do sistema requerem experiência para aplicação e entendimento. Da mesma forma, as funcionalidades criadas podem ser muito complexas para iniciantes. Embora seguir um tutorial ou copiar código pode gerar satisfação imediata, o aprendizado pode ser limitado.
Para o aprendizado, é mais interessante observar, compreender, aplicar e criar a própria solução. Usar uma solução existente é simples. Modificá-la é mais difícil. Criar uma solução parecida é ainda mais difícil. Criar um novo projeto inovador é muito mais difícil.
Contudo, a dificuldade é incremental. Para aprender, é mais interessante entender o processo como uma jornada -- ou uma escada. Cada parte é um nível ou um passo. Pular do primeiro para o último pode ser impossível, mas progredir rumo ao topo ao longo do tempo é mais suave.
Assim, minha intenção não é fazer com que você copie código-fonte e iluda-se. Minha intenção é ajudar você a aprender e tornar-se capaz de criar suas próprias tecnologias inovadoras. Um passo de cada vez, com progresso gradual, iterativo, e contínuo. Um jornada, de fato.
Portanto, embora a segunda opção seja muito mais trabalhosa para mim, ela (muito provavelmente) será melhor para você.
Linguagens de Programação para a Série
Neste website, optaremos, portanto, pelo segundo caminho. Pequenos projetos com escopos menores, com a introdução de conceitos e complexidade ao longo do tempo. Ou seja, um aprendizado contínuo e incremental, no qual suas habilidades de programação e resolução de problemas melhorarão a cada projeto.
Minha intenção é explorar JavaScript, Python, Lua e GDScript como linguagens de programação para as simulações. Das quatro linguagens, GDScript é a mais simples para começar, pois depende apenas da instalação de Godot Engine. JavaScript é a segunda, devido ao canvas embutido e suporte para áudio em navegadores modernos. Python e Lua dependem de configuração adicional.
Para a versão em texto, uma página por tópico (como feito em Aprenda Programação) pode funcionar bem. Entretanto, acredito que a versão em vídeo ficaria desnecessariamente longa para pessoas que tenham interesse em aprender uma única linguagem (algo válido e interessante para iniciantes).
Possíveis alternativas para vídeos mais curtos incluem:
- Criar playlists separadas por linguagem de programação. Eu poderia reusar o conteúdo comum em todos os vídeos;
- Escolher uma única linguagem para o conteúdo em vídeo, adotada como a oficial para a série em vídeos. As demais linguagens teriam entrada em texto;
- Alternar entre linguagens de programação entre vídeos. Afinal, linguagens de programação são ferramentas. Do ponto de vista profissional, essa seria a melhor opção: escolher a linguagem mais adequada para cada projeto. De fato, ela seria a opção que eu pessoalmente usaria caso os projetos fossem privados. Contudo, do ponto de vista didático, ela seria a mais difícil para iniciantes. Na prática, você precisaria aprender a usar todas as linguagens, bibliotecas, interpretadores / compiladores / IDEs.
A priori, eu tentarei a primeira. Caso o conteúdo em vídeo de uma linguagem de programação seja significativamente mais popular que para as demais, talvez eu alterne para a segunda alternativa.
Além disso, acredito ser a hora de começar a escrever todos os exemplos de código-fonte em Inglês. Em Aprenda Programação, a versão em Português utiliza nomes de variáveis, tipos de dados, e subrotinas em Português. A versão em Inglês usa nomes de variáveis, tipos de dados, e subrotinas em Inglês.
Como o objetivo de Ideias, Regras, Simulação é permitir que você "suba de nível" em programação, o ideal é começar a usar termos em Inglês no código-fonte. Assim, ao longo do tempo, o material também ajudará você a aprender termos técnicos básicos da língua Inglesa usados em programação.
Evidentemente, todos os termos usados serão traduzidos para o Português em explicações. Afinal, um dos objetivos deste website é fornecer material de alta qualidade em português sobre programação.
Pré-Requisitos
O material de Ideias, Regras, Simulação promove aprendizado baseado em projetos (simulações interativas e jogos digitais) com recursos multimídia. Assim, ele é complementar ao material de Aprenda Programação, que introduz fundamentos e técnicas básicas de programação, com exemplos para JavaScript, Python, Lua e GDScript (para Godot Engine).
Para Ideias, Regras, Simulação, você precisará de um ambiente de desenvolvimento configurado para uma das linguagens anteriores:
- GDScript (Godot Engine);
- JavaScript. Em JavaScript, é preciso criar uma página HTML com um canvas;
- Python. Em Python, é necessário instalar PyGame. Instruções em texto estão disponíveis em Bibliotecas: Interface Gráfica com Thonny. Instruções em vídeo estão disponíveis em Python em linha de comando e usando o IDE Thonny, hospedado no YouTube;
- Lua. Em Lua, é necessário instalar LÖVE (Love2D). Instruções em vídeo estão disponíveis em Lua em linha de comando e usando o IDE ZeroBrane Studio, hospedado no YouTube.
JavaScript (para navegadores) e GDScript fornecem suporte para conteúdo multimídia.
Também estou considerando melhorar os editores online para programação dentro do website, em um estilo de curso interativo. Atualmente, a página de ferramentas fornece opções para:
Os editores possuem suporte para imagens em navegador.
Contudo, Python e Lua utilizam a sintaxe para JavaScript com canvas
.
Caso eu criasse uma abstração e adicionasse suporte para áudio, eles tornar-se-iam opções válidas (ao menos para primeiras atividades).
Contudo, convém configurar um Ambiente Integrado de Desenvolvimento (em inglês, Integrated Development Environment ou IDE), ou a combinação de editor de texto com interpretador assim que possível para programar em sua máquina com maior eficiência. Ambientes online são práticos, mas ambientes locais são mais potencialmente mais completos, eficientes, rápidos e personalizáveis. Caso queira tornar-se profissional, você precisará de um ambiente de desenvolvimento configurado. Quanto antes o fizer, melhor.
Próximos Passos
Pronta ou pronto para começar?
Desta vez, eu não fornecerei uma lista completa de tópicos futuros. Eu adicionarei algumas possíveis próximas entradas, baseadas no conteúdo atual. O primeiro motivo é que a lista não tem um fim definido. O segundo motivo é a ementa será mais flexível, por permitir modificar a seqüência de tópicos de acordo com desafios e dificuldades identificadas ao longo da série. Não minhas; suas.
Durante o mestrado e o doutorado, eu co-orientei alunas e alunos de iniciação científica em atividades de programação de jogos digitais. Por exemplo, já organizei e ministrei workshops para ensinar programação de jogos digitais para estudantes. Contudo, todas as pessoas eram estudantes de Ciência ou Engenharia de Computação. Assim, embora eu conheça algumas das dificuldades enfrentadas por iniciantes, eu certamente não conheço (nem posso antecipar) todas.
Em particular, talvez você, leitora ou leitora, nunca tenha programado antes ou esteja começando agora. Em outras palavras, suas dificuldades provavelmente serão diferentes das minhas e das pessoas que co-orientei. Assim, suas opiniões sobre a série serão fundamentais para que eu possa tornar o material mais acessível e simples para mais pessoas.
Caso queira entrar em contato ou tenha alguma dúvida, você pode conversar comigo das seguintes maneiras:
- E-mail: francogarcia@protonmail.com
- GitHub: francogarcia
- GitLab: francogarcia
- Bitbucket: francogarcia
- YouTube: canal UCxbFFDZ4BmnT-Mhm8z1JsOA
- Instagram: @francogarciacom
- Twitter: @francogarciacom
Contatos e redes sociais também estão no rodapé das páginas.
Caso queira compartilhar o conteúdo, você pode usar as hashtags #IdeiasRegrasSimulação e #FrancoGarciaCom.
Assim, eis a lista atual de tópicos. Ela será atualizada de acordo com novas entradas.
Ideias, Regras, Simulação
- Motivação;
- Introdução: Janela e Olá Mundo;
- Pixels e primitivas gráficas (pontos, linhas, e arcos);
- Aleatoriedade e ruído;
- Moedas e dados, retângulos e quadrados;
- Desenhando com primitivas gráficas (contornos e preenchimento para círculos, elipses e polígonos);
- Salvando e carregando arquivos de imagens;
- ...
A escrita do material está em progresso; portanto, se você chegou muito cedo e os itens anteriores não possuem links, por favor, retorne a esta página para conferir as atualizações.
Até breve!