aboutsummaryrefslogtreecommitdiff
path: root/aulas/metodologias.rst
blob: 2e00657fc237b4c060af0b212b34580f3bdcaca6 (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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
1. Metodologias e técnicas de produtividade
===========================================

1.1 - O que são boas práticas em desenvolvimento?
-------------------------------------------------

1.1 - Apresentação do professor e do curso
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Silvio Rhatto, desenvolvedor autodidata.
- Curso dividido em aulas independentes umas das outras.
- O curso completo é acompanhado pelo desenvolvimento de uma pequena aplicação.

1.1 - O que são boas práticas de desenvolvimento?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Trata-se de *organização* no trabalho para que ele flua.
- Não há um único caminho: existem inúmeras metodologias e técnicas.
- Vou ensinar as mais *simples* e que tendem a resistir ao tempo.
- Foco em Software Livre e Aberto (FOSS).
- Experimente diversas metodologias, técnicas e ferramentas e monte seu próprio kit!

Imagens:

* https://upload.wikimedia.org/wikipedia/commons/7/7c/Yin_and_Yang.svg
* https://www.gnu.org/graphics/meditate.en.html

Link:

* https://www.youtube.com/watch?v=2FQU0WeGSEM

1.1 - O problema fundamental
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* O processo criativo não é linear e difícil de colocá-lo numa metodologia de trabalho.
* Muitos métodos tentam dominar e formatar o fluxo natural de atividades.
* Queremos técnicas e ferramentas que reduzam o ruído no trabalho, mas que não acarretem na perda de liberdade criativa.
* Dificuldades essenciais e acidentais (Aristóteles).

1.2 - Metodologias pessoais
---------------------------

Queremos evitar:

- Cabeça cheia de ruído.
- Ansiedade.
- Procrastinação.
- Empacamento.

Queremos:

- Simplicidade sem perda de qualidade (KISS).
- Excelência (melhoria incremental) ao invés de perfeccionismo obsessivo.

1.2 - Metodologias pessoais - Básico
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Fundamental: fazer fluir a criatividade.
- Evitar distrações e preocupações.
- Foco na missão: uma tarefa por vez.
- Básico: agenda, lista de tarefas e log (registro).
- Fazer o essencial e ter autocrítica sobre isso.
- Método não é lei, é sugestão de caminho. Você descobriu que é multi-tarefas e funciona melhor assim? Ok! :)
- Mude seus hábitos aos poucos!

1.2 - Metodologias pessoais - Pomodoro
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

É uma técnica simples para execução de tarefas:

- Material: alarme e lista de tarefas.
- Escolha uma tarefa e anote na sua lista.
- Ajuste o cronômetro (25 minutos tradicionalmente).
- Trabalhe na tarefa até o cronômetro disparar. Marque um X na lista ao lado da tarefa.
- Pare por um tempo curto (5 minutos, por exemplo).
- Depois de 4 pomodoros, faça uma pausa mais longa (15 a 30 minutos).

Imagem:

* `Cronômetro do pomodoro <https://en.wikipedia.org/wiki/Pomodoro_Technique#/media/File:Il_pomodoro.jpg>`_.

1.3 - Get Things Done (GTD)
---------------------------

É uma técnica para organização de tarefas / vida.

- Colete: apareceu na sua frente? Coloque para fora da cabeça!
- Processe.
- Organize.
- Planeje.
- Faça!
- Workflow: https://en.wikipedia.org/wiki/Getting_Things_Done#/media/File:GTDcanonical.png

1.4 - Zen to Done (ZTD)
-----------------------

ZTD é um GTD simplificado e mais estruturado:

- Tenha uma rotina.
- Reduza as suas tarefas ao essencial.
- Comece o dia realizando as tarefas importantes. Não se perca.
- Sugestão do chef: ZTD com Pomodoro!

1.5 - Metodologias em equipe
----------------------------

1.5 - A Catedral e o Bazar
~~~~~~~~~~~~~~~~~~~~~~~~~~

- Eficiência do código aberto.
- Agile: conjunto de princípios.

1.5 - Agile
~~~~~~~~~~~

Mesmo havendo valor nos itens à direita, os itens à esquerda são mais
valorizados:

- Indivíduos e interação entre eles mais que processos e ferramentas
- Software em funcionamento mais que documentação abrangente
- Colaboração com o cliente mais que negociação de contratos
- Responder a mudanças mais que seguir um plano

Link: http://www.manifestoagil.com.br

1.5 - Metodologias populares
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Scrum: metodologia de gerenciamento de projetos.
- XP: metodologia de engenharia de software.
- Kanban: controle coletivo de tarefas.
- Híbridação: Scrumban + XP :D

1.6 - Kanban
------------

O Kanban é uma metodologia de trabalho baseada em três princípios:

1. Visualizar o fluxo de trabalho, o que é feito tipicamente usando um
   quadro físico, afixado numa parede, ou virtual, usando um gestor
   de software.

2. Limitar o trabalho em andamento, determinando quantos itens
   podem se encontrar em cada etapa.

3. Acompanhar o tempo de execução de cada tarefa, ou templo de ciclo,
   para que você possa otimizar o trabalho futuro e prever melhor
   a duração média de cada tarefa e calibrar o limite de tarefas
   que podem estar em cada etapa do fluxo, descobrindo assim
   quais são os gargalos da equipe.

1.6 - Kanban: fluxo de trabalho
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

É fundamental no Kanban usar um quadro dividido em colunas, cada
uma delas representando uma etapa do fluxo de trabalho (itens a fazer,
em desenvolvimento, em teste, entregue, etc). Você também pode dividir
o quadro em linhas para delimitar cada componente do seu produto,
mas isso não é sempre necessário.

Em seguida, escolha o limite inicial de tarefas que podem se encontrar em
cada etapa. Lembre-se que o Kanban é empírico!

Por fim, divida então o trabalho em tarefas menores, escreva cada uma delas
num cartão e afixe-as no quadro Kanban.

Conforme as tarefas passam de etapa, os respectivos cartões são movidos ao
longo do quadro Kanban.

1.7 - Scrum
-----------

O scrum prevê uma equipe pequena, muito coesa e que queira atingir objetivos
bem definidos em períodos de tempo pequenos, tipicamente de 2 a 4 semanas.

A cada ciclo de trabalho, ou sprint, é estabelecida uma entrega comum para todo
o time. Isso vai pautar a equipe numa série de tarefas que contribuam para esse
objetivo seja atingido.

O scrum define alguns papéis de facilitação do processo para ajudar a resolver
problemas e impedimentos do processo de trabalho.

1.7 - Scrum: fluxo de trabalho
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. No início do sprint, a equipe realiza uma reunião de planejamento,
   estabelecendo quais tarefas serão realizadas de acordo com prioridade,
   esforço necessário, etc.

2. Diariamente, o time faz uma reunião rápida de avaliação do dia anterior
   e onde cada integrante da equipe informa no que trabalhará no dia atual
   e quais dificuldades está enfrentando.

3. Ao final do sprint, o time realiza duas reuniões: uma para apresentar
   o trabalho realizado e outra para avaliar quais mudanças no processo
   de trabalho precisam ser realizadas.

1.8 - XP
--------

O Extreme Programming, ou XP, é útil em projetos com escopo pouco
definido ou que mudam com muita frequência.

Ele assume uma equipe pequena e um desenvolvimento incremental, onde uma versão
simples do projeto é implementada logo de início e é melhorada a cada iteração.

1.8 - XP: fluxo de trabalho
~~~~~~~~~~~~~~~~~~~~~~~~~~~

O Extreme Programming parte de uma ideia simples: se uma boa prática é boa
mesmo, ela pode ser levada ao extremo.

Por exemplo: se a revisão do código é uma boa prática, por que não fazê-la
continuamente através da programação em pares, isto é, com duas pessoas
sentadas na mesma estação de trabalho fazendo o código juntas? A qualidade
do código resultante é bem alta.

Outras ideias do XP incluem a integração contínua com testes frequentes
do código, desenvolvimento orientado a testes, refatoração do código
sempre que necessário, a padronização do código, design simples, releases
frequentes e interatividade com o cliente.

1.9 - Começando um projeto
--------------------------

1.9 - Etapas
~~~~~~~~~~~~

- Etapa 0: descoberta, brainstorm e levantamento de escopo!

    - Qual ou quais problemas a serem atacados?
    - Como definir o projeto e seu escopo? O que é e o que não é?
    - Quais soluções possíveis? Qual a escolhida?
    - A ser realizado em conjunto pela equipe de desenvolvimento e quaisquer partes envolvidas (clientes, por exemplo).
    - Descrição em alto nível.

- Etapa 1: pesquisa do que já existe: quais soluções abarcam os problemas formulados? No que deixam a desejar?
- Etapa 2: planejamento inicial: escolha inicial de metodologias, bootstrap, provas de conceito, etc.
- Etapa 3: aplicar um conjunto de metodologias mas principalmente *realizar* o projeto.

Imagens:

* Diagramas jocosos de problema/solução.

1.9 - Projeto de exemplo
~~~~~~~~~~~~~~~~~~~~~~~~

0. Descoberta:
 
  * Problema: garantir que o aluno, ao concluir este curso, possua um blog simples para relatar suas descobertas em desenvolvimento de software (knowledge base / bagagem de conhecimento pessoal).
  * Escopo:

    * O blog deve ser construido de acordo com as ferramentas abordadas neste curso.
    * Quanto mais simples, melhor: fácil de construir e confortável para manter e consultar (afinal, não queremos gastar tempo no futuro mantendo esse projeto).
    * Que dificilmente se torne tecnologicamente obsoleto: sem base de dados, com o mínimo de programação e formato de edição simples.
    * Que dependa o mínimo de bibliotecas e aplicações externas.
    * Que seja fácil de hospedar em qualquer local, fácil de fazer backup e que possa facilmente ser transformado noutros formatos (livro).
  * Soluções:

    * Criar um blog em qualquer lugar e fazer backups na unha? Pouco elegante e não atende a todos os requisitos.
    * Criar um blog em HTML simples e subir manualmente para um servidor? Não, queremos algo entre a web 1.0 e a web contemporânea.
    * Que tal criarmos um blog gerado estaticamente, isto é, um conjunto de arquivos simples de editar e que são compilados para o formato de site que possa ser facilmente enviado para um servidor como qualquer outra aplicação web?

1. Pesquisa: pesquise pesquise pesquise! O que você encontrou?
2. Bootstrap:

   * Precisamos de um nome. Curiosamente, nomear um projeto é a etapa mais difícil, mas hoje estamos criativos e chamaremos de "blogático", gerador de sítio estático :)
   * A metodologia utilizada será o desenvolvimento incremental ao longo deste curso.
   * Design inicial: o blogático varre uma pasta com arquivos de texto e gera o conteúdo no formato de website numa outra pasta.
   * Plano inicial para a dominação mundial:

    * Criar o repositório do projeto.
    * Script básico para geração do site.
    * Conteúdo inicial para testes.
    * Documentação.
    * Lançamento!

3. Realização: quer ver como o projeto pode ser realizado? Continue com o curso! :P

1.10 - Atividades
-----------------

#. Adote a técnica Pomodoro numa tarefa grande e importante do seu dia. Você pode usar qualquer cronômetro disponível -- do seu computador, do telefone, do relógio de pulso ou mesmo um timer de cozinha. Permaneça apenas realizando a tarefa importante em cada bloco de 25 minutos. Avalie a eficácia do método: ele te ajudou?

#. Para este curso, definimos o nosso projeto de exemplo como sendo um website/blog bem simples. Você pode fazer o mesmo ou então escolher qualquer projeto que queira fazer usando qualquer linguagem de programação e adaptar as atividades propostas nas aulas seguintes de acordo com o seu caso. Sugerimos apenas que você escolhe um nome para o seu projeto, mesmo que temporário! Mas lembre-se: nomes tem poder! :)

#. Bônus: esboce um documento simples de escopo para o seu projeto. Ele pode ser um importante guia nas fases iniciais.

1.11 - Referências
------------------

- Imagens usadas nos vídeos?
- `Best coding practices - Wikipedia, the free encyclopedia <https://en.wikipedia.org/wiki/Best_coding_practices>`_.
- `Best practices for software development projects <http://www.ibm.com/developerworks/websphere/library/techarticles/0306_perks/perks2.html>`_.
- `Boas práticas de engenharia de software \| Guia da Startup e da Gestão de Produtos de Software <http://www.guiadastartup.com.br/boas-praticas-de-engenharia-de-software/>`_.
- `Boas Práticas de Desenvolvimento – melhorando o seu dia-a-dia <http://blog.matheusbodo.com/boas-praticas-de-desenvolvimento-melhorando-o-seu-dia-a-dia/>`_.
- `Melhores Práticas para Desenvolvimento de Sistemas e Software <http://www.ibm.com/developerworks/br/rational/library/systems-software-lifecycle-development/>`_.
- `Arquitetura, padrões, projetos e boas práticas sobre desenvolvimento de software - georgemendonca <http://softwarelivre.org/georgemendonca/blog/arquitetura-padroes-projetos-e-boas-praticas-sobre-desenvolvimento-de-software>`_.
- `HOME -The Pomodoro Technique® <http://pomodorotechnique.com/>`_.
- `Técnica de Pomodoro: Melhorar a Produtividade \| Freelancer e Produtividade <http://www.escolafreelancer.com/tecnica-de-pomodoro-melhorar-produtividade/>`_
- `Técnica pomodoro – Wikipédia, a enciclopédia livre <https://pt.wikipedia.org/wiki/T%C3%A9cnica_pomodoro>`_.
- `Zen to Done - ZTD - Lucas Teixeira <http://lucasteixeira.com/ztd/>`_.
- `Zen To Done (ZTD): The Simple Productivity System : zen habits <http://zenhabits.net/zen-to-done-ztd-the-ultimate-simple-productivity-system/>`_.
- `Time management - Wikipedia, the free encyclopedia <https://en.wikipedia.org/wiki/Time_management>`_.
- `Princípios por trás do Manifesto Ágil <http://www.agilemanifesto.org/iso/ptbr/principles.html>`_.
- `Manifesto para o desenvolvimento ágil de software <http://www.manifestoagil.com.br/>`_.
- https://www.mountaingoatsoftware.com/blog/differences-between-scrum-and-extreme-programming
- http://manifesto.co.uk/kanban-vs-scrum-vs-xp-an-agile-comparison/
- `Zen e a Arte de Manutenção de Motocicletas <https://pedropeixotoferreira.files.wordpress.com/2014/03/robert-pirsig-zen-e-a-arte-da-manutenc3a7c3a3o-de-motocicletas.pdf>`_.
- `O Tao da programação <http://www.geocities.ws/worgtal/2002/tao.pdf>`_.
- `Top Open-Source Static Site Generators - StaticGen <https://www.staticgen.com/>`_.
- `principles - IndieWebCamp <https://indiewebcamp.com/Principles>`_.
- `Aprenda sobre Desenvolvimento Ágil de Software | DesenvolvimentoAgil.com.br <http://www.desenvolvimentoagil.com.br/>`_.
- `A Catedral e o Bazar - Wikisource <https://pt.wikisource.org/wiki/A_Catedral_e_o_Bazar>`_.
- `agilelion/Open-Kanban · GitHub <https://github.com/agilelion/Open-Kanban>`_.
- `Open Kanban - An Open Source, Ultra Light, Agile & Lean Method | AgileLion <http://agilelion.com/agile-kanban-cafe/open-kanban>`_.
- `Open Kanban Presentation - Discover the Power of Kanban | AgileLion <http://agilelion.com/agile-kanban-cafe/open-kanban-presentation>`_.
- `(Engenharia de Software - Edi\347\343o 45.pdf) - A6 - 45-6- Kanbam.pdf <http://www.garcia.pro.br/EngenhariadeSW/artigosMA/A6%20-%2045-6-%20Kanbam.pdf>`_.
- `Extreme Programming, XP metodologia desenvolvimento ágil | XP | DesenvolvimentoAgil.com.br <http://www.desenvolvimentoagil.com.br/xp/>`_.
- `Scrum: metodologia ágil para gestão e planejamento de projetos | Scrum | DesenvolvimentoAgil.com.br <http://www.desenvolvimentoagil.com.br/scrum/>`_.
- `Kanban e scrum: obtendo o melhor de ambos <http://jkolb.com.br/wp-content/uploads/2013/09/Kanban-e-Scrum.pdf>`_.
- `Extreme Programming: Aprenda como encantar seus usuários desenvolvendo software com agilidade e alta qualidade: Capítulo 1 <http://novatec.com.br/livros/extreme/capitulo8575220470.pdf>`_.