If you're seeing this message, it means we're having trouble loading external resources on our website.

Se você está atrás de um filtro da Web, certifique-se que os domínios *.kastatic.org e *.kasandbox.org estão desbloqueados.

Conteúdo principal

Planejamento de um projeto de programação

Tornar-se um programador não se trata apenas de aprender a sintaxe e os conceitos de uma linguagem de programação: trata-se de descobrir como utilizar este conhecimento para fazer programas. Você fez um monte de programas neste curso, nos desafios e projetos, mas agora você deveria ter idéias sobre novos programas -ideias que você está animado de verdade - e tente transformá-las em programas de verdade.
Você provavelmente não vai saber tudo o que precisa para seu programa quando começar, e isso é totalmente okay -- você estará motivado a aprender coisas novas porque quer muito terminar o seu programa. Programadores estão constantemente aprendendo coisas novas para novos programas, e isso é parte do motivo pelo qual amamos tanto fazer isso.
Vamos ver o processo de planejamento de um projeto de programação:

1. O que você quer criar?

Quando eu comecei a programar, eu estava constantemente pensando em novos programas para fazer e escrevendo-os em uma lista. Eu estava viciado com o poder da criação, e não havia muito que o meu cérebro queria fazer. Se você está assim, então você provavelmente já tem uma ideia do que quer fazer, e talvez você tenha sua própria lista.
Se você ainda não tem uma ideia, apresentamos aqui algumas questões para ajudá-lo a pensar:
  • Qual é o seu jogo favorito - fliperama, jogo de tabuleiro, jogo de esportes? Você poderia fazer uma versão digital simplificada disso? Você poderia mexer um pouco, como dar-lhe um tema diferente ou outros personagens principais?
  • Quais são seus outros campos acadêmicos favoritos? Se você ama arte, você poderia fazer um programa que produz arte? Se você ama história, que tal uma linha do tempo interativa? Se você ama ciência, que tal uma simulação científica?
  • Qual é o seu filme ou programa de TV favorito? Você poderia fazer uma versão digital de uma cena ou personagem dele? Talvez fazer um jogo baseado nele?
  • Qual é o aparelho da vida real que você ama? Você poderia fazer uma simulação dele?
Quando você tiver escolhido uma ideia, você deve escrever uma descrição dela. Por exemplo, Se eu decidi fazer uma cópia de "Breakout", pois é o meu jogo antigo favorito, poderia escrever:
Breakout: Um jogo onde você controla uma palheta na parte inferior da tela, e a usa para acertar a bola pra cima em várias direções para quebrar os tijolos. O objetivo é quebrar todos os tijolos, e não deixar a bola cair no chão muitas vezes.
Você vai melhorar essa descrição depois, mas por enquanto ela lhe dá uma boa ideia para continuar com o processo de planejamento.

2. Qual tecnologia você vai usar?

Nessa etapa, você precisa considerar quais tecnologias (linguagens/bibliotecas/ambientes) você conhece ou pode aprender facilmente, e quais delas são mais úteis para o trabalho. Para muitos de vocês, essa lista pode ter apenas um item, "1. JS+ProcessingJS", e isso torna sua decisão fácil.
Nosso ambiente JS+ProcessingJS funciona muito bem para fazer animações, jogos, visualizações e simulações. Basta verificar os programas públicos para ver a vasta gama de programas que as pessoas fazem aqui.
Nosso ambiente não funciona para outras coisas como jogo multi-player, aplicativos móveis, aplicativos de processamento de dados. Se você conhece outras linguagens/ambientes (como JS+HTML, Python, SCRATCH, Swift, etc) e está pensando em fazer algo que não tenha muito sentido com ProcessingJS, então considere quais dessas tecnologias seria a melhor para seu programa. Se você quiser criar essas coisas mas não conhece outras tecnologias, você deve ter uma nova ideia para o seu programa. Você pode aprender uma nova tecnologia para um novo projeto, mas se você estiver aprendendo programação agora, é uma boa ideia saber muito bem sua primeira linguagem inicialmente.
Se decidi fazer um jogo como Breakout, escolheria JS+ProcessingJS, já que conheço essa tecnologia e ela funciona muito bem para jogos 2D como esse.

3. Quais recursos serão incluídos ?

É aqui que iniciamos o verdadeiro planejamento, e onde (eu acho) fica divertido. Seu objetivo nessa etapa é descobrir o que você realmente vai fazer- qual o visual do programa, quais recursos serão incluídos, quais não serão.
A primeira coisa que você pode fazer são as "maquetes"  - esboços que se parecem com o que você está fazendo, mas sem detalhes como cores ou tamanhos exatos. Você pode fazer maquetes, no papel ou com programas online.
Para te dar uma ideia de como uma maquete se parece, eu inclui abaixo as maquetes do meu jogo Breakout. Esbocei cada cena separadamente e desenhei setas entre eles para como uma cena leva a outra. Essas setas me ajudarão a entender qual lógica meu programa deve seguir de um estado para outro.
Maquetes de esboço para uma cópia de Breakout
Agora você pode usar essas maquetes para te ajudar a fazer a lista de recursos, onde você pensa em todos os recursos do seu programa, e faz uma lista deles.
Da minha cópia de Breakout, essa seria minha lista de recursos, dividida por cenas:
Cena do jogo
  • Paddle controlado pelo usuário
  • Múltiplos tijolos coloridos
  • Movimento angular da bola
  • Detecção de colisão
  • Mostrador de vidas
  • Mostrador de pontos
  • Efeitos sonoros
Cena Principal
  • Botão jogar
  • Botão ajuda
Cena de ajuda
  • Texto
  • Botão voltar
Cena de vitória
  • Título
  • Animação de fogos de artifício
Cena de derrota
  • Texto
  • Botão reiniciar

4.Mas quais recursos devem ser incluídos?

Se tivéssemos tempo infinito para criar todos os programas que temos na cabeça, então todos os recursos deveriam ser inclusos em nossa lista. Mas não temos, então nessa etapa, você deve decidir quais recursos são mais importantes e quais você fará se tiver tempo. Isso também te ajudará a saber em qual ordem os recursos devem ser implementados, do mais para o menos importante.
Para ajudá-lo a descobrir a importância de cada recurso, faça essas perguntas a si mesmo:
  • Se eu compartilhar esse programa com um amigo, quais recursos eu quero garantir que estejam funcionando?
  • Quais recursos eu estou mais animado para criar?
  • Quais recursos são os mais originais para o meu programa?
  • Com quais recursos eu vou aprender mais durante a implementação?
  • Há algum recurso que parece estar muito além das minhas habilidades atuais?
Em seguida, veja sua lista de recursos da etapa anterior, e ou ordene a lista ou adicione uma classificação para cada recurso.
Para minha lista de recursos da cópia de Breakout, coloquei "P1", "P2", e "P3" ao lado dos recursos, significando maior prioridade (P1), prioridade média (P2) e baixa prioridade (P3). decidi priorizar as mecânica do jogo em geral ao invés de recursos genéricos como cenas, pois é o que acho mais divertido desse projeto:
(P1) Cena do jogo
  • (P1) Paddle controlado pelo usuário
  • (P1) Múltiplos tijolos coloridos
  • (P1) Movimento angular da bola
  • (P1) Detecção de colisão
  • (P2) Mostrador de vidas
  • (P2) Mostrador de pontos
  • (P3) Efeitos sonoros
(P2) Cena Principal
  • (P2) Botão jogar
  • (P3) Botão ajuda
(P3) Cena de ajuda
  • (P3) Texto
  • (P3) Botão voltar
(P2) Cena de vitória
  • (P2) Título
  • (P3) Animação de fogos de artifício
(P2) Cena de derrota
  • (P2) Texto
  • (P3) Botão reiniciar
Como uma dica para vocês que estão fazendo jogos, aqui estão recursos que eu recomendaria não priorizar: menus, múltiplos níveis, gráficos 3D. Concentre-se no que é original e divertido em seu jogo, e só depois adicione esses elementos extras.
Você também pode tornar sua lista de prioridades em versões do projeto, para que você possa ver facilmente o que precisa implementar em cada versão, e você sempre pode parar em uma versão em particular e ser feliz com o que já foi feito.
Aqui estão como as versões seriam em minha cópia de Breakout:
V1
  • Paddle controlado pelo usuário
  • Múltiplos tijolos coloridos
  • Movimento angular da bola
  • Detecção de colisão
V2
  • Mostrador de vidas
  • Mostrador de pontos
  • Cena de início c/ botão jogar
  • Cena de vitória c/ título
V3
  • Efeitos sonoros
  • Botão ajuda
  • Fogos de artifício
  • Cena de derrota c/ botão reiniciar

5. Como você vai fazer a implementação?

Você sabe que tem uma ideia de quais recursos fará primeiro em seu programa - mas se você iniciar agora, iniciará um programa do zero sem nenhum código escrito e isso pode ser intimidador. Quais variáveis você deve escrever primeiro? Quais funções?
Uma forma de resolver isso é pensar sobre o "alto nível de arquitetura" do seu programa - separando-o em categorias como "objetos", "lógica", "interação do usuário", "dados do usuário", e "cenas" - e então pensar em como implementá-las, como tipos de orientação a objetos, funções ou variáveis.
Por exemplo, aqui está a arquitetura da minha cópia de Breakout:
Objetos
  • Tijolo (.eAtingido())
  • Paddle (.move())
  • Bola (.move())
Cenas
  • Início
    • Jogo
    • Final
Lógica
  • Colisão bola-tijolo (função, usar caixa delimitadora)
  • Angulação paddle-bola (função, inverter ângulo)
Interação do usuário
  • Movimento teclado-paddle (teclaPressionada)
  • Botões para mudanças de cena (mouseClicado)
Dados do usuário
  • Mortes da bola (array)
  • Batidas da bola (array)
Quando você tiver a arquitetura de alto nível, deve ficar mais claro o que você pode implementar primeiro.
Você pode decidir escrever todo seu program em pseudo-código primeiro, o qual falaremos a respeito depois. Basicamente, significaria escrever todo o programa em sua língua nativa dentro de um comentário e depois ir transformando-o em código de verdade.

6. Qual é o seu cronograma?

Quanto tempo você tem para desenvolver esse programa? Quantas semanas e quanto tempo por dia? Quais recursos você escreverá em cada semana? seu objetivo nessa etapa é saber o tempo máximo de seu programa - o que é muito importante se você tiver um prazo, mas também muito útil para saber quanto leva para escrever um programa.
Aqui está o cronograma da minha cópia de Breakout, assumindo 2-4 horas de trabalho por semana:
  • Semana 1: Design and pseudo-código
  • Semana 2: Visual rústico
  • Semana 3: movimento da bola/mecânicas de colisão
  • Semana 4: Mecanismos de pontuação
  • Semana 5: cenas (Início/vitória/derrota)
  • Semana 6: poliment, testes manuais (QA), Preparação da demo
Preparar um cronograma para projetos de programação é difícil. Algumas coisas que parecem fácil levam mais tempo do que você espera (como algum erro em que você passa horas depurando), algumas coisas que parecem difíceis levam menos tempo do que você espera. Como regra geral, assuma que vai levar mais tempo do que você pensa, e ajuste conforme você vai fazendo.

Você está pronto!?

Espero que isso te dê uma ideia do processo de planejamento de um projeto de programa e o inspire a fazer seu programa agora. Dependendo do que você quiser construir, você poderia primeiro decidir fazer outros cursos, como JS avançado: jogos & Visualizações ou JS avançado: Simulações naturais, para te dar mais ideias da construção de jogos e simulações.
O importante é que você comece a fazer seus programas sozinho em algum ponto, pois é ai que você aprenderá mais e também é onde você terá mais diversão programando, pois você estará tornando seus sonhos em realidade.

Quer participar da conversa?

Você entende inglês? Clique aqui para ver mais debates na versão em inglês do site da Khan Academy.