Boas Práticas em Desenvolvimento ================================ Ementa ------ * Título do curso: Boas Práticas em Desenvolvimento de Software. * Professores: Silvio Rhatto. * Tempo estimado de dedicação do aluno e agenda de comprometimento sugerida: 40 horas. * Público alvo e Pré-requisitos: o curso é orientado a desenvolvedores(as) de software que já possuem ao menos um conhecimento básico em programação e que necessitam melhorar sua produtividade ou mesmo trabalhar em time de maneira fluida. * Dificuldade do curso: intermediário. ### Currículo do professor Silvio Rhatto é bacharel em meteorologia, técnico em eletrônica e autodidata em computação. Desenvolve software livre há mais de 10 anos e já realizou diversos cursos na área de tecnologia, especialmente em segurança da informação e privacidade. ### Descrição do curso Este curso introduz diversas metedologias, ferramentas e conceitos de desenvolvimento de software que aumentam a produtividade e facilitam o compartilhamento de código. A ideia é preencher a lacuna dos cursos específicos de programação que dificilmente abordam questões práticas e cotidianas como controle de versão, manutenção de um ambiente de desenvolvimento, licenciamento, segurança, etc. Apesar dos softwares serem produtos definidos, reprodutíveis e na maioria das vezes determinísticos, o seu desenvolvimento implica na canalização da criatividade, na capacidade de trabalhar colaborativamente e enfrentar desafios como a integração de elementos já disponíveis. Para que isso seja possível e agradável, é fundamental que o(a) programador(a) entenda o processo de desenvolvimento que vai além de simplesmente codificar seu raciocínio numa linguagem de programação. Serão apresentados problemas essenciais e acidentais da programação e diferentes maneiras de abordá-los, indo desde a ansiedade de programar até os modernos ambientes de teste contínuo. Ao concluir o curso, o(a) aluno(a) terá condições de: * Analisar criticamente as técnicas e ferramentas apresentadas. * Escolher quais delas mais se adequam à sua realidade. * Pesquisar o tema por conta própria. ### Estrutura do curso O curso será dividido em 8 aulas, sendo cada aula organizada nos seguintes capítulos: 1. O que são boas práticas em desenvolvimento? 2. Metodologias e técnicas de produtividade. 3. Ambientes de desenvolvimento eficientes. 4. Licenças de software. 5. Controle de versão e social coding. 6. DevOps: desenvolvendo e orquestrando. 7. Segurança e privacidade. 8. Quando (não) reinventar a roda. Os capítulos serão organizados na forma de: * Vídeo aulas. * Testes e atividades online. * Exercícios individuais de aplicação. * Leitura de material didático de apoio. ###Dificuldade do curso: Intermediário ###Relação do curso com o PRONATEC Eixo Tecnológico: Informação e Comunicação ( é um curso transversal, aderente á todos os demais cursos que envolvem linguagens de programação e / ou desenvolvimento de software ) ###Aplicação do conhecimento: Como e onde ele vai usar usar isso ? Por que que ele será um profissional melhor aplicando este conhecimento ? ###Material Didático: Sugestão de Bibliografia Plano de aulas -------------- 1. Metodologias e técnicas de produtividade. * Apresentação do professor e do curso * Produto "funcional" desde o dia 0. * Mitos (pessoa-mês, métricas). * A catedral e o bazar: Lei de Linus. * Metodologias pessoais. * Pomodoro. * GTD. * ZTD. * Metodologias em equipe. * Agile. * Scrum. 2. Ambientes de desenvolvimento eficientes. * A guerra dos editores de texto. * Teclas de atalho, backups e ferramentaria. * Ambiente de desenvolvimento eficiente e confortável. * Criando seus templates de desenvolvimento. * Mantendo um diário de bordo e uma base de conhecimento. 3. Licenças de software. * GPL. * BSD. * Apache. * Creative Commons. * Domínio Público. 4. Controle de versão e social coding. * O que é? Pra que serve? * Quais sistemas existem? * Focando no git e no git-flow. * Versionando desde o dia 0. * Social coding (gitlab, github, etc). 5. DevOps: desenvolvendo e orquestrando. * Sysadmin básico: * Permissões. * SSH e rsync. * Vagrant, docker, KVM e afins. * Ambientes reprodutíveis. * Integração contínua. 6. Segurança e privacidade. * Segurança começa no desenvolvimento. * Use bibliotecas consolidadass! * Princípio das permissões mínimas. * Criptografia básica: * Assinaturas digitais. * Comunicação cifrada. * Certificados x509 para SSL/TLS/HTTPS. 7. Quando (não) reinventar a roda. * Antipatterns. * Inferno de dependências. * Documentação: lendo e escrevendo. 8. Apendice: para os profissionais autônomos / freelancers. * Como fazer / Apresentar uma proposta comercial para um cliente? * Items essenciais de uma proposta. * Como cobrar (por hora / projeto).