Bem-vindos
https://cleber.solutions
https://www.getrevue.co/profile/devthedev
Pare de codar
Quem sou eu
- Cléber Zavadniak
- Ciência da Computação, UFPR
- 17 anos desenvolvendo software
- "Curso de Linguagem C": 1998
- Dev, Tech Lead, CTO, Arquiteto
https://cleber.solutions
https://www.getrevue.co/profile/devthedev
Navy SEALs
BUD/S
- Basic Underwater Demolition/SEAL
- É um treinamento muito árduo
- Poucos entram
- Poucos ficam até o fim
- Leva você a conhecer os próprios limites
Codar = BUD/S
- Basic Underwater Demolition/SEAL
- É incrível!
- E todo SEAL fez, então ninguém dá bola.
- Codar é incrível!
- E todo mundo faz, então ninguém dá bola.
-
Codar é a estaca zero.
- E às vezes até atrapalha!
Habilidades essenciais
- Comunicação
- Processos
- Trabalho em equipe
- Visão sistêmica
- Ortogonalidade
- Propriedade
"Soft" skills?
- Não!
- São parte integral do que se espera de você.
Minha situação atual
Eu gostaria que meus colegas passassem
menos tempo
escrevendo código.
Só codar é geralmente PÉSSIMO
-
Média: 70 bugs a cada 1.000 linhas
- Média: 15 chegam até o usuário
- Corrigir um bug custa 30 vezes mais
- Média: 75% do tempo corrigindo bugs
- Média: 115 bilhões de dólares gastos anualmente encontrando e corrigindo bugs
bugs = 75% do tempo
- 1.000 horas
- 250 horas = código
- 750 horas = bugs
- Bugs nem sempre são de design
- Especificação ruim
- Entendimento ruim
- Arquitetura ruim
-
1 hora salva dos bugs = +3 horas para codar
- 2 horas garantindo que não haverá bugs
- = +1 hora para codar
- 2 horas garantindo que não haverá bugs
- Ou seja: sejamos melhores que a média!
Comunicação
Para o líder da equipe
- Visibilidade > Habilidade
- Comunicar que não sabe é mais importante do que saber
- Ideal imaginário: "ele sabe de tudo!"
- Ideal real: "se ele não souber ou tiver dúvidas, posso contar que ele vai me dizer!"
(e para o restante da equipe)
Um dia depois da reunião...
- Você entendeu?
- É, na verdade fiquei com algumas dúvidas
- Então por que não perguntou???
Comunicar O QUE você não sabe
- Para aprender, é necessário fazer as perguntas certas
- Ou, no mínimo, saber fazer perguntas
- O aprendizado é uma via de mão dupla
- Quem ensina precisa de feedback
- Quem aprende precisa ser capaz de dar feedback
Comunicar o que você entendeu
- Importante para confirmar que todos estão na mesma página
- Saber escrever User Stories é uma habilidade magnífica (ajuda o time muitão)
- "Se não fosse a documentação, a gente tava na roça"
Exercícios
-
Escrever!
- Descrição inicial de funcionalidades
- User Stories
- Desenhar
- Diagramas Entidade/Relacionamento
- Diagramas de sequencia
- Isso tudo te obriga a estruturar suas ideias.
- Abstrato → Concreto
Diagrama E/R
Diagrama de Sequência
Estando tudo claro...
- agora é a hora de começar a codar.
Processos
Sem processo, não rola
- "Vai codando aí que mês que vem a gente vê no que deu"
- Se você está num lugar assim: fuja!
Processos iterativos
- Prioridade: você saber o que está fazendo.
- Porque temos a tendência natural de nos perder.
- Por isso "batemos o bumbo" todo dia.
O processo permeia tudo
- Abrir novo galho (branch) no repositório
- Qual será o nome?
- Abrir MR (merge request)
- Vou explicar como?
- "Passei o dia fazendo code review"
- Absolutamente okay!
- "Tá pronto, só não testei"
- Isso não existe.
Trabalho em Equipe
Não existe "a minha entrega"
- Ajudar o colega a entregar é bom para todos
- "Passei o dia revisando código" = ok!
- Você também vai precisar da ajuda dos outros
Não existe "meu código"
- Código não pode ter dono
- Todos devem ser substituíveis
- Código é escrito para ser lido por humanos
- Escreva código banana, não código manga.
Visão Sistêmica
Olhar além do design
- Não perca a floresta olhando para a árvore
- Arquitetura
- Como os componentes estão dispostos
- Como a informação flui
- Como meu código se insere nessa arquitetura
- Negócio
- Quem é o cliente
- Qual é a necessidade do cliente
- Qual a melhor forma de atendermos essa necessidade
Entenda o todo
- Ou sua parte não se encaixará!
Choose your destiny
- "Vou só fazer o que me mandam"
- "Vou olhar além do código"
Motivação
- Maestria
- Autonomia
- Propósito
Mas não pule passos
- Se design é difícil, primeiro fique bom nisso!
- (Só não trate como se isso fosse tudo.)
Não precisa resolver TODOS os problemas do universo!
- A maioria já está resolvida.
- Use serviços externos.
- Infra
- E-mails/SMS/WhatsApp
- Chat
- Filas
- Push notifications
- Et cetera...
- Use bibliotecas de terceiros.
- Algoritmos em geral
- Use serviços externos.
Ortogonalidade
Desenvolvimento de Software é um vetor de N posições
- Arquitetura
- Design do código
- Ferramentas
- Design da interface
- User experience
- Negócio
- Marketing
- Tendências
- Processos
- Financeiro
- Pessoas
- Expectativas
- Comunicação
Propriedade
Sentir-se dono
- Te faz trabalhar bem
- Ajuda a enxergar propósito
- Todos saem ganhando
- Ajuda a tomar as melhores decisões
Dogmas?
- Algumas vezes é necessário tomar decisões difíceis
- Entregar 3 funcionalidades sem testes
- ou entregar 1 com testes?
- Corrigir o bug
- ou terminar a tarefa atual?
- Criar uma biblioteca do zero
- ou usar outra linguagem de programação?
Decisões
- Quais os efeitos de curto, médio e longo-prazo?
- E os custos?
- Quais as vantagens?
- E os riscos?
- Perco um cliente agora para ganhar mais depois?
- Ou não tem como pagar os salários sem ele?
Não tem como dizer
"eu não tenho nada com isso"!
Contra-exemplo
- O cara que criou sua própria fila
- Request → Response + mensagem
- Já resistiu na questão da assincronia
- NIH syndrome
- (not invented here)
- Fez direto no banco de dados
- Opções:
- AWS SQS
- RabbitMQ
- NATS
- Kafka
Macetes rápidos
Código é Comunicação
O segredo dos seniores
- "Conceitos muito avançados" - NOPE!
- Sempre busca-se a abstração mais simples
- estruturas de dados simples
- classes
- módulos
- metaprogramação | DSL | Actor model
- múltiplos serviços
- Sempre busca-se o código mais simples
- Menos linhas é sempre melhor
- Sempre busca-se a abstração mais simples
Bom código
- É estupidamente claro.
- É mais simples do que você pensava originalmente
- Se o problema é complexo, apresenta uma solução razoável
UX
- Todo código é uma API
- Procure fazer APIs elegantes
- Use técnicas de UI/UX
- Seja coerente
- Evite surpresas
- Seja simples
- Mesmo sem ser simplista
Fim
- Essencial:
- Comunicação
- Processos
- Trabalho em equipe
- Visão sistêmica
- Ortogonalidade
- Propriedade
contato@cleber.solutions
https://cleber.solutions
https://www.getrevue.co/profile/devthedev
Pare de codar
By Cléber Zavadniak
Pare de codar
- 196