aboutsummaryrefslogtreecommitdiff
path: root/README.rst
blob: 44b7512d605cf43dc758bb5ac60f300842e07ff0 (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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
.. Boas Práticas em Desenvolvimento documentation master file, created by
   sphinx-quickstart on Sat Oct 31 19:44:44 2015.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

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 <aulas/metodologia.html>`_.
2. `Ambientes de desenvolvimento eficientes <aulas/ambientes.html>`_.
3. `Licenças de software <aulas/licencas.html>`_.
4. `Controle de versão e social coding <aulas/versionamento.html>`_.
5. `DevOps: desenvolvendo e orquestrando <aulas/devops.html>`_.
6. `Segurança e privacidade <aulas/seguranca.html>`_.
7. `Quando (não) reinventar a roda <aulas/reinventando.html>`_.
8. `Lidando com os clientes <aulas/clientes.html>`_.

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).