Trabalhar como desenvolvedor de software pode ser um pouco frustrante, as vezes por estar preso a um projeto, as vezes por causa da linguagem que é usada, mas principalmente quando você está em um lugar que não tem nada a ver com você.
Nessa palestra eu vou falar sobre a minha experiência saindo de uma grande empresa tradicional para uma empresa ágil e como essa mudança me mostrou que algumas coisas que muitas empresas negligênciam são na verdade, extremamente importantes. Coisas como testes, continuous integration, pair programming, code review, open-source, como adaptar metodologias ágeis a sua realidade, python (é claro) e django, um framework que faz o desenvolvimento de uma aplicação web parecer simples
3. Como Python pode ajudar no
desenvolvimento ágil de software
Rebeca Sarai
4. Quem sou eu
● Rebeca Sarai
○ Recife
○ Estudante de Engenharia da Computação - UPE
○ Torcedora do melhor time de Pernambuco Náutico
○ Organizadora do Django Girls Recife
○ 1 ano como desenvolvedora
@rsarai007
github.com/rsarai
5.
6. Outras palestras da Vinta
● Hoje 16:50 - Django's Club: Como NÃO fazer seu
sistema de assinatura - Victor
● Amanhã 11:10 - Python e tipagem estática - Carlos
● Amanhã 11:50 - Contribuir com o Django Framework é
mais fácil do que você imagina! - Anderson
8. Que se movimenta com excesso de facilidade; que se move de
maneira rápida; veloz.
Que se comporta ou trabalha de maneira eficaz e rápida;
diligente, expedito e trabalhador.
Habilidade de criar e responder a mudanças em um ambiente
incerto e turbulento, com o objetivo de obter sucesso.
O que é Ágil?
11. Desenvolvimento Ágil de Software
É um termo genérico para um conjunto de
métodos e práticas baseadas nos valores e
princípios expressos no Manifesto Ágil.
13. História
1970 - Metodologias tradicionais
1990 - Métodos leves (Lightweight Methods) começaram
a chamar atenção
2001 - 17 desenvolvedores se reuniram para discutir
abordagens de desenvolvimento de software
Vários conceitos presentes na metodologias ágeis foram
refinados e incorporados pela comunidade.
14. Valores
Indivíduos e interações 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
…e 12 princípios correspondentes
18. Indivíduos e interações
❏ Princípios
➢Princípio 6 - O Método mais eficiente e eficaz de transmitir
informações para, e por dentro de um time de desenvolvimento, é
através de uma conversa cara a cara.
➢Princípio 5 - Construir projetos ao redor de indivíduos motivados.
Dando a eles o ambiente e suporte necessário, e confiar que farão
seu trabalho.
❏ Práticas Ágeis
Pair Programming
Daily meeting
Code Review
21. ❏ Syntax limpa e simples
❏ Tipos de dados de alto nível incorporados
Strings, Lists, Tuples, Dictionaries
❏ The Zen of Python
Simples é melhor que complexo
Explícito é melhor que implícito.
Python promove simplicidade
22. PYTHON
numeros = [1, 2, 3, 4, 5]
# é bom
dobrar_chances = []
for n in numeros:
if n % 2 == 1:
dobrar_chances.append(n
* 2)
# é melhor
dobrar_chances = [n * 2 for n
in numeros if n % 2 == 1]
List Comprehension
JAVA
23. Se caminha como um pato, nada como um pato e grasna como um pato,
provavelmente é um pato.
Duck Typing
class Pato:
def quack(self):
print("Quack, quack!")
def fly(self):
print("Flap, Flap!")
class Pessoa:
def quack(self):
print("I'm Quackin'!")
def fly(self):
print("I'm Flyin'!")
def na_floresta(mallard):
mallard.quack()
mallard.fly()
def main():
na_floresta(Pato())
na_floresta(Pessoa(
))
>>> main()
>>> Quack, quack!
>>> Flap, Flap!
>>> Quackin'!
>>> Flyin'!
25. Python promove comunicação
❏ Idiomas poderosos e simples que permitem aos
desenvolvedores comunicarem claramente suas
intenções através do código
❏ Estilo de codificação padrão -- PEP8
❏ A sessão interativa do shell fornece feedback
instantâneo
❏ Python deixa você programar e não entra no seu
caminho
28. Software em funcionamento
❏ Princípios
➢ Princípio 3 - Entregar software funcionando com
freqüencia, na escala de semanas até meses, com
preferência em períodos mais curtos.
❏ Práticas Ágeis
Desenvolvimento iterativo
Desenvolvimento incremental
Sprints
Integração contínua
29. Integração contínua
A Integração Contínua (CI) é uma prática
de desenvolvimento que exige que os
desenvolvedores integrem código em um
repositório compartilhado várias vezes ao
dia. Cada check-in é verificado por uma
compilação automatizada.
34. Integração contínua em Python
❏ Buildbots
Conjunto de máquinas dedicadas (ou build slaves)
usadas para a integração contínua. Eles abrangem
uma série de combinações de hardware / sistema
operacional.
❏ Python Developer’s Guide
❏ The Zen of Python
Erros nunca devem passar silenciosamente.
36. Colaboração com o cliente
❏ Princípios
➢ Princípio 1 - Nossa maior prioridade é satisfazer o cliente,
através da entrega adiantada e contínua de software de valor.
➢ Princípio 2 - Aceitar mudanças de requisitos, mesmo no fim do
desenvolvimento. Processos ágeis se adequam a mudanças,
para que o cliente possa tirar vantagens competitivas.
➢ Princípio 7 - Software funcional é a medida primária de
progresso.
❏ Práticas Ágeis
User Stories
TDD
37. TDD
Desenvolvimento orientado a teste é um estilo de
programação em que três atividades estão estreitamente
interligadas: codificação, teste (na forma de unit tests) e
design (sob a forma de refatoração).
38. TDD
Escreva um teste de unidade "único" descrevendo um aspecto do programa
Executar o teste, que deve falhar porque o programa não tem esse recurso
Escreva o código "apenas o suficiente", o mais simples possível, para fazer
passar o teste
"Refatorar" o código até que esteja em conformidade com os critérios
de simplicidade
Repetir, "acumulando" os testes unitários ao longo do tempo
41. Python promove TDD
❏ Vários frameworks de testes (unittest, doctest, py.test) estão
disponíveis para feedback
❏ The Zen of Python
Casos especiais não são especiais o bastante para quebrar as regras.
Diante da ambiguidade, recuse a tentação de adivinhar.
Deve haver um — e preferencialmente só um — modo óbvio para fazer
algo.
43. Python promove produtividade
Não significa velocidade
O recurso mais caro de uma empresa é agora o tempo do seu empregado
Horas para escrever um aplicativo de processamento de sequência de
caracteres em várias linguagens
45. Responder a mudanças
❏ Princípios
Princípio 9 - Contínua atenção à excelência técnica e
bom design, aumenta a agilidade.
Princípio 10 - Simplicidade: a arte de maximizar a
quantidade de trabalho que não precisou ser feito.
❏ Práticas Ágeis
Refatoração
Python e o desenvolvimento ágil: um casamento de sucesso
Desenvolvimento ágil com Python
Como Python pode ajudar no desenvolvimento ágil de software
Ágil pode ser confundido com velocidade como nas duas primeiras definições.
Estamos vivendo uma tendência para o desenvolvimento ágil de aplicações devido ao ritmo acelerado de mudanças na tecnologia da informação, pressões por constantes inovações, concorrência acirrada e grande dinamismo no ambiente de negócios.
Por conseguinte, desenvolvedores passaram a entender a metodologia ágil como algo que tudo se pode, ou seja, podemos desenvolver sem documentação, sem padrão e sem cuidado. Isto não é verdade, as metodologias ágeis podem trazer sucesso ao projeto, e são utilizadas inclusive na indústria.
1- Pensou, não é XGH.
XGH não pensa, faz a primeira coisa que vem à mente. Não existe segunda opção, a única opção é a mais rápida.
2- Existem 3 formas de se resolver um problema, a correta, a errada e a XGH, que é igual à errada, só que mais rápida.
XGH é mais rápido que qualquer metodologia de desenvolvimento de software que você conhece (Vide Axioma 14).
O desenvolvimento ágil é um fruto da constatação feita, de forma independente, por diversos profissionais renomados na área de engenharia de software, de que, apesar de terem aprendido segundo a cartilha tradicional, só conseguiam minimizar os riscos associados ao desenvolvimento de software, pensando e agindo de forma muito diferente do que tradicionalmente está nos livros.
Embora cada envolvido tivesse suas próprias práticas e teorias preferidas, todos concordavam que, em suas experiências prévias, os projetos de sucesso tinham em comum um pequeno conjunto de princípios.
https://martinfowler.com/articles/newMethodology.html#FromNothingToMonumentalToAgile
A typical iteration process flow can be visualized as follows:
Requirements - Define the requirements for the iteration based on the product backlog, sprint backlog, customer and stakeholder feedback
Development - Design and develop software based on defined requirements
Testing - QA (Quality Assurance) testing, internal and external training, documentation development
Delivery - Integrate and deliver the working iteration into production
Feedback - Accept customer and stakeholder feedback and work it into the requirements of the next iteration
Explicar conceitos ágeis, meeting, daily, review, e como tu faz isso no teu dia a dia
Code review:
- Falar que todo projeto tem ao menos 2 developers.
- PR;
Iremos ver como Python facilita o processo de desenvolvimento ágil a partir dos 4 valores do manifesto ágil
Tornam possível juntar muitas funcionalidades em poucas linhas de código, sem sacrificar a legibilidade. Ele abstrai tantas coisas para você, ajudando você a se concentrar no que você realmente está tentando codificar, sem ficar preso nas ervas daninhas das pequenas coisas, como se você deve usar um vetor ou uma matriz.
Comparação de tipos de dados de python com outras linguagens: http://www.programcreek.com/2012/09/java-vs-python-data-types/
Não dá pra dizer ao certo, mas segundo uma pesquisa sobre o que o GitHub tem a nos dizer sobre os estereótipos entre programadores
https://tecnoblog.net/198814/github-estereotipos-programadores/
geralmente cada pessoa integra pelo menos diariamente - levando a múltiplas integrações por dia. Cada integração é verificada por uma compilação automatizada (incluindo teste) para detectar erros de integração o mais rápido possível. Permitindo que as equipes detectem problemas com antecedência.
Diga adeus às integrações longas e tensas
Aumentar a visibilidade permitindo maior comunicação
Pegue problemas antecipadamente e aperte-os
Gaste menos depuração no tempo e mais tempo adicionando recursos
Construir uma base sólida
Pare de aguardar para descobrir se seu código vai funcionar
Reduzir os problemas de integração permitindo que você entregue o software mais rapidamente
Manter um Repositório de Origem Única
Automatizar a compilação
Fazer a compilação “testável”
Todos commitam em master todos os dias
Cada Commit deve compilação gerar um teste
Every Commit Should Build the Mainline on an Integration Machine
Corrigir as compilações quebradas imediatamente
Mantenha a compilação rápida
Testar em um clone do ambiente de produção
Tornar fácil para qualquer um obter o executável mais recente
Todos podem ver o que está acontecendo
Automatizar o Deploy
Iremos ver como Python facilita o processo de desenvolvimento ágil a partir dos 4 valores do manifesto ágil
The Python development team builds and tests on many machines, architectures and configurations. These variations are divided into two categories: stable and unstable. The stable versions are the primary platforms that should always have all tests passing.
This guide is a comprehensive resource for contributing to Python
Experiência
User stories - garantir que o time entendeu a requisição do cliente
TDD - garantir que depois das mudanças o que tinha antes ainda vai estar funcionando
experiencia
Iremos ver como Python facilita o processo de desenvolvimento ágil a partir dos 4 valores do manifesto ágil
Produtividade é a expressão de eficiência de qualquer negócio.
Python abstrai tantas coisas, que te ajuda a focar no que realmente importa, ao invés de te prender no dilema de ter que usar um vetor ou um array
Arrow is a Python library that offers a sensible, human-friendly approach to creating, manipulating, formatting and converting dates, times, and timestamps. It implements and updates the datetime type, plugging gaps in functionality, and provides an intelligent module API that supports many common creation scenarios. Simply put, it helps you work with dates and times with fewer imports and a lot less code.
Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently. It can use GPUs and perform efficient symbolic differentiation.