Iniciativa open source social que visa espalhar programação para escolas públicas, ONGs, CEUs e qualquer lugar onde pudermos chegar para estimular pessoas periféricas a aprender programação.
Qualquer pessoa pode implementar este projeto em qualquer lugar que achar possível.
Aqui temos um template para ensinarmos programação em qualquer lugar.
Este documento contempla: estrutura do programa perifaCode, cronograma e materiais necessários para ensino.
Se você tem vontade de ensinar programação na sua quebrada, mas não tem ideia de como fazer isso, aqui temos tudo o que precisamos para tirar esse desejo do papel.
Como um modelo para ensinar programação para pessoas de regiões periféricas. Os projetos práticos desenvolvidos são focados em valorizarmos a periferia, como fazer os participantes pensarem sobre igualdade, justiça social, calcular o IMC de crianças para confirmar se elas precisam de acompanhamento médico do SUS, cadastro de animais da região para acompanhamento de zoonoses, lista de coisas maneiras que temos na nossa região para movimentarmos a economia local, etc.
Sinta-se à vontade para enviar pull requests de melhorias neste documento, abrir issues para tirar suas dúvidas.
- Sumário
- Missão
- Dinâmica dos encontros
- Objetivos
- Público alvo
- Habilidades desenvolvidas
- Competências desenvolvidas
- Conteúdo programático
- Método de ensino
- Tempo estimado
- Recursos necessários
- Método de avaliação
- Módulos
- Crônograma
- Carga horária total
- Como implementar na minha quebrada
Ensinar desenvolvimento de software para pessoas com pouco ou nenhum acesso a educação formal para aprender programação (como cursos, livros, faculdade, eventos e afins), visando capacitá-las para o mercado de trabalho ou criar seu próprio negócio, produto, serviço.
Se às pessoas saírem com boa compreensão e influenciadas ao uso de software livre e desenvolvimento open source será um excelente plus à nossa missão.
No final do acompanhamento as pessoas saírem querendo ensinar o que aprenderam e estarem politizadas quanto a necessidade de elas se moverem a favor dos grupos sub-representados em nossa sociedade.
Se surgir uma iniciativa social a partir das pessoas que participam do grupo, será um sucesso ainda maior.
Fazemos encontros presenciais, semanais, para estudar programação e/ou programar algo juntos.
Utilizamos conceitos de agilidade (manifesto ágil) e processos de desenvolvimento de software o tempo todo, para que os/as participantes tenham contato com a realidade de um dia como pessoa desenvolvedora de software.
Também utilizamos jogos e dinâmicas para estimular o trabalho em grupo, a comunicação e a união do time.
Durante o curso temos alguns agentes: organizador(a), mentor(a), alunos(as).
Pessoa que trata de toda a parte organizacional dos encontros, como: encontrar um local para estudarmos, manter a comunicação ativa entre todos os participantes, desenrolar burocracias.
Pessoa que irá ensinar programação para os alunos, mentorar suas carreiras e lhes guiar nos exercícios práticos.
Pessoas que irão ajudar os mentores e mentoras revisando código de exercícios práticos dos alunos e alunas.
Pessoas que estão ali para aprender.
- ensinar programação
- ensinar boas práticas de desenvolvimento de software
- ensinar a debugar código
- ensinar a planejar soluções
- ensinar versionamento de código
- ensinar sobre testes de software
- ensinar ética em desenvolvimento de software
- preparar as pessoas para entrarem em um emprego como desenvolvedoras de software
Pessoas de baixa renda.
Essas pessoas não precisam ter tido contato prévio com programação.
Não é necessário conhecimento em inglês.
- Lógica de programação
- Linguagens de programação
- Analisar código fonte de projetos (fuçar código/debug)
- Encontrar bons recursos para continuar aprendendo
- Criar algo do zero
- Resolver problemas reais (resolvendo problemas matemáticos com input e output, criar um jogo de aventura pela linha de comando, um programa que lê de um arquivo de textos e exporta na linha de comando, um chatbot, etc.)
- Aprender a pensar em arquitetura de uma aplicação
- Perder o medo de explorar/experimentar mais
- Aprender testes de software para garantir a qualidade das suas entregas
- Aprender a diferença entre features de linguagens e libs/frameworks
Utilizar Git e GitHub, conhecer o mercado de programação, criar CRUDs, conseguir identificar erros em código fonte, se candidatar a vagas de emprego como programadores(as), criar aplicações, serviços e aplicativos e/ou serem capazes de criar seus próprios produtos.
Introdução a linha de comando > introdução a versionamento de código e Git > introdução a sistemas operacionais > desenvolvimento server e client-side > introdução a infraestrutura e bancos de dados > qualidade de software > modularização e modelagem de sistemas > testes de software > orientação a objetos > programação funcional.
- Aulas presenciais, vídeos aulas, aulas de reforço online exercícios práticos sobre cada aula
- Projetos práticos para colocar no GitHub
Utilizamos o material encontrado aqui para ensinar presencialmente, mas também compartilhamos conteúdo que achamos relevante, como vídeo aulas, artigos, podcasts, etc. Caso alguém esteja passando por dificuldades em acompanhar a aula, podemos fazer reforço online ou podemos fazer aulas de revisão online para quem não conseguiu comparecer por algum motivo.
Os exercícios práticos não são obrigatórios para a conclusão do curso. A pessoa pode participar como ouvinte e ir até o final, mesmo sem executar a prática, porém ela não vai aprender a programar de fato, só aprenderá teoria. Os exercícios práticos também existem para a criação do portfólio online destas pessoas, por isso é extremamente recomendável que elas o façam.
5 ou 6 meses.
- espaço presencial com computadores com um sistema operacional Linux (de preferência Linux Mint ou Ubuntu) com usuários com permissões administrativas para instalarmos nossas ferramentas e acesso a internet
- mentores que puxam o grupo e ministram as aulas
- voluntários que ajudam os mentores a revisar código e monitorar as aulas
Projeto de conclusão de curso (desenvolvimento de uma web app simples) ou entrega de todos os projetos de andamento de aulas (projetos semanais que acontecem depois de cada aula).
Este projeto pode ser planejado junto aos alunos e alunas, para resolver algum problema pessoal deles.
- Introdução a programação
- Testes de software
- Orientação a Objetos
- Tecnologias server side
- Tecnologias client side
Semana | Atividade | Prática (opcional) | Carga horária |
---|---|---|---|
Semana 00 | Dinâmica de reconhecimento de ambiente; apresentação para os participantes; estimular os alunos a colocar em seu LinkedIn que estão estudando através do perifaCode. | Criar uma conta no GitHub. | 4 |
Semana 01 | Introdução ao terminal; configuração do ambiente de desenvolvimento (instalação do interpretador da linguagem de programação, editor de código e Git). | Subir um repositório de estudos sobre terminal no GitHub com as anotações em um arquivo de texto ou Markdown. | 4 |
Semana 02 | Introdução a programação: como funciona um programa de computador (plataformas (web, mobile, server, hardware), linguagens (alto e baixo nível)), sistemas operacionais, lógica de programação, sintaxe básica da linguagem (a estrutura de um programa), arquivos, debug, nosso primeiro programa em linha de comando (hello world). | Criar uma calculadora via terminal e subir no GitHub (calculadora simples, que só faz uma função e temos que alterar o código se quisermos fazer outra operação). | 4 |
Semana 03 | Introdução a programação: manipulação de valores, identificadores, tipos de dados, operadores matemáticos, operadores condicionais, operadores lógicos, laços de repetição, funções e módulos. | Criar um utilitário de linha de comando onde inserimos dados financeiros de um grupo social e ele retorna se a igualdade está boa ou ruim. Refatorar a calculadora para que cada funcionalidade dela seja uma função separada em um módulo diferente. | 10 |
Semana 04 | Introdução a programação: bibliotecas e frameworks. | Refatorar os utilitários de linha de comando para receberem valores via linha de comando, não sendo mais necessário reescrever código e sendo necessário manipulação de processos do sistema operacional (sys args). Criar um jogo de Jokenpo via linha de comando e subir no GitHub. | 4 |
Semana 05 | Testes de software: introdução a testes de software, qualidade de código, ética no desenvolvimento de software, conhecendo o utilitário de testes | Criar uma calculadora via terminal que verifica se o peso de uma criança está dentro do IMC aceitável ou se ela precisa de acompanhamento, implementar testes, subir no GitHub | 6 |
Semana 06 | Orientação a Objetos: introdução a programação orientada a objetos, namespaces, classes, objetos, atributos, métodos, construtores, herança, encapsulamento, abstração, polimorfismo | Criar um cadastro de animais do bairro para o controle de zoonoses utilizando orientação a objetos, testes de software e subir no GitHub. | 13 |
Semana 07 | Tecnologias server side: introdução a web, como funciona a internet, utilizando um framework para criar APIs. | Criar uma API que retorna nosso currículo utilizando orientação a objetos, testes de software e subir no GitHub. | 6 |
Semana 08 | Tecnologias server side: introdução a infraestrutura, subindo nossa API em uma hospedagem gratuita | Disponibilizar nossa API de currículo em uma hospedagem gratuita. | 4 |
Semana 09 | Tecnologias server side: armazenando dados (arquivos e banco de dados), CRUD | Criar um CRUD para cadastrarmos nossos alunos, listar estes alunos, atualizar os dados e deletar em um arquivo de textos (txt ou csv) utilizando orientação a objetos, testes de software e subir no GitHub. | 10 |
Semana 10 | Tecnologias server side: banco de dados, ORM | Criar um CRUD para cadastrarmos produtos, listar estes produtos, atualizar os dados e deletar utilizando orientação a objetos, testes de software e subir no GitHub. | 18 |
Semana 11 | Tecnologias client side: introdução a HTML, CSS, semântica e acessibilidade | Criar uma página em HTML para listar os lugares mais legais do nosso bairro e colocar no GitHub. O código precisa ser semântico e passar nos testes de acessibilidade | 6 |
Semana 12 | Tecnologias client side: JavaScript no navegador | Criar uma lâmpada com HTML e CSS e manipular ela com JavaScript. Ela deve acender e apagar. Devemos ter a lâmpada e um interruptor na tela. Devemos subir isso no GitHub. | 7 |
Semana 13 | Tecnologias client side: DOM e APIs do navegador, diagramação com CSS | Criar uma página HTML de homenagem a alguém que gostamos muito, com layout corretamente renderizado, código semântico e subir no GitHub. | 4 |
Semana 15 | Tecnologias client side: frameworks JS e CSS, SPAs | Criar uma SPA que lista nossos repositórios do GitHub, fazendo nosso portfólio bem diagramado (podendo utilizar algum framework para CSS também) e subir no GitHub. O código precisa ser bem estruturado, modular e testado. | 18 |
Semana 16 | Tecnologias client side: infraestrutura e hospedagem | Subir nosso portfólio em uma hospedagem gratuita. | 2 |
120 horas.
Você precisa encontrar um local com os recursos necessários e se planejar para que tenha o tempo disponível (estimativa) para executar o plano de estudos.
Recomendo que você procure pelos CEUs da sua região ou pela escola pública mais próxima da sua região.
É importante que o espaço não seja longe para quem vai participar, nem para você e nem para os estudantes, pois isso vai reduzir a taxa de abandono do curso.