aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: b801f89a674a9dea957fbcb75ded4520a0912c2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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. Metodologias e técnicas de produtividade.
2. Ambientes de desenvolvimento eficientes.
3. Licenças de software.
4. Controle de versão e social coding.
5. DevOps: desenvolvendo e orquestrando.
6. Segurança e privacidade.
7. Quando (não) reinventar a roda.
8. Lidando com os clientes.

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ária.
 
### 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:

* O Mítico Homem-Mês.

Plano de aulas
--------------

1. Metodologias e técnicas de produtividade.
  * Apresentação do professor e do curso.
  * O que são boas práticas de desenvolvimento?
  * Mitos e verdades do desenvolvimento.
  * 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 e IDEs.
  * Ambiente de desenvolvimento eficiente e confortável.
  * Backups e ferramentaria.
  * 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.
  * Vagrant, docker, KVM e afins.
  * Ambientes reprodutíveis.
  * Integração contínua usando o [Travis CI](http://travis-ci.org/).
  * Fazendo o deploy:
    * SSH e rsync.
    * Permissões.
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. Lidando com os clientes.
  * Como fazer / Apresentar uma proposta comercial para um cliente?
  * Items essenciais de uma proposta.
  * Como cobrar (por hora ou por projeto).