O codificador limpo
Tio Bob nos mostra o que devemos fazer para nos tornar programadores profissionais, ele faz diversas comparações com profissionais de outros ramos: Médicos, Advogados, Dentistas… Livro nos trás vivências técnicas, mas foca em testes de código, métodos e softskills que vão te levar ao próximo nível como programador. Excelente livro para nortear os comportamentos desejados de um programador profissional, e digo que podem ser expandidos para demais profissionais.
1 - Profissionalismo
Bob define pontos do profissionalismo no desenvolvimento de software: Assumir responsabilidade, Garanta o funcionamento, Utilize testes, Mantenha a estrutura de Software de maneira saudável. Ética de trabalho,Aprendizado contínuo, Pratique, Colaboração, Entenda seu domínio (além do código), Identifique-se com seu empregador/cliente, Humildade.
2 - Dizendo Não
“Fazer ou não fazer. Não existe tentativa” - Yoda Direto ao ponto, um profissional não engana os outros. Passa um prazo realista, mantém sua melhor previsão e negocia a melhor entrega mantendo a qualidade.
3 - Dizendo Sim
“Não se espera que profissionais digam sim para tudo o que se pede a eles. Entretanto, eles precisam trabalhar firme para encontrar formas criativas de tornar o “sim”possível. Quando profissionais dizem sim, eles usam a linguagem do comprometimento de forma que não exista dúvida daquilo que prometeram.”
4 - Codificando
Devemos nos concentrar para programar. O código deve funcionar, deve resolver o problema proposto pelo cliente, precisa se enquadrar bem no sistema que já existe e precisa ser inteligível para outros programadores. O Tio Bob cita programação em par, TDD, inputs criativos, pedir ajuda e ensino como meios de codificar melhor.
5 - Desenvolvimento Guiado Por Teste (TDD)
Técnica fundamental para manter seu código confiável e dar coragem para os desenvolvedores o melhorarem.
1- Você não pode escrever nenhum código de produção até que tenha escrito antes um teste de unidade que detecte uma falha
2 - Você não pode escrever mais de um teste de unidade do que o suficiente para à falha - e não compilar é não ter efeito.
3- Você não pode escrever mais códigos de produção que sejam suficientes para passar pelo atual teste de unidade.
6 - Prática
Coding Dojo - Demonstrações de codificações que visam o aprimoramento das técnicas de desenvolvimento de código. Algumas atividades do Dojo:
- Kata: Demonstração de codificação de problemas conhecidos para praticar e aprimorar a técnica de codificação.
- Wasa: Dois parceiros escolhe um kata ou um problema simples. Um programador escreve um teste de unidade, então o outro o faz rodar. Depois eles trocam os papeis.
- Randori: Com uma tela projetada e várias pessoas, uma pessoa escreve o teste e outro faz com que o teste passe e assim por diante com as pessoas que estão participando.
“De uma forma ou de outra, todos os profissionais praticam. Eles o fazem porque se importam com a concretização do melhor trabalho possível. E mais: Eles praticam em seu próprio tempo porque perceberam que é responsabilidade deles, não de seus empregadores, manter suas habilidades em dia. Praticar é aquilo que você faz quando não está sendo pago. Você o faz pra ser pago e bem pago.”
7 - Teste de Aceitação
“A comunicação sobre detalhes é difícil. Isso é especialmente verdadeiro para programadores e stakeholders que se comunicam sobre detalhes do aplicativo. A unica forma que conheço para eliminar com eficiência os erros de comunicação entre programadores e stakeholders é escrever testes de aceitação automatizados.” Estes testes são a documentação do funcionamento do software.
8 - Estratégias de Teste
“TDD é uma disciplina poderosa e testes de aceitação são formas valiosas de expressar e reforçar seus requerimentos. Mas eles são apenas parte da estratégia completa. Para atingir a meta de que “o QA não poderá encontrar nada”, as equipes do desenvolvimento precisam trabalhar lado a lado com o QA a fim dose criar uma hierarquia de testes de unidades, componentes, integração sistema e testes exploratórios. Esses testes devem ser rodados com o máximo de frequência possível para dar feedback e garantir que o sistema permaneça continuamente limpo.“
9 - Gerenciamento de Tempo
“Profissionais de software são cuidadosos no gerenciamento de seu tempo e foco. Eles entendem as tentações da inversão de prioridades e lutam contra elas como se fosse uma questão de honra. Mantêm suas opções em aberto ao deixar a mente aberta para soluções alternativas. Nunca investem tanto em uma solução ao ponto de não conseguirem abandoná-la. Estão sempre alertas para bagunças recentes e as limpam assim que são reconhecidas. Não há visão mais triste do que uma equipe de desenvolvedores de software trabalhando em vão para se afundar em um atoleiro cada vez mais profundo.”
10 - Estimativa
“Quando profissionais assumem compromissos, eles fornecem números concretos e cumprem com esses números. Entretanto, na maior parte dos casos, profissionais não assumem tais compromissos. Em vez disso, eles fornecem estatísticas com probabilidades que descrevem o tempo esperado e a variação provável”.
11 - Pressão
“O truque para lidar com a pressão é evitá-la sempre que puder e fluir com ela quando não puder fugir dela. Você a evita gerenciando seus compromissos, seguindo suas disciplinas e mantendo-se limpo. Fique calmo, comunique-se e peça ajuda.”
12 - Colaboração
“Talvez não tenhamos entrado na área de programação para trabalhar com pessoas. Azar o nosso. Programação tem tudo a ver com trabalhar com pessoas. Temos que trabalhar com nossos empregadores e uns com os outros.“
13 - Projetos e Equipes
“Equipes são mais difíceis de serem criadas do que projetos. Portanto, é melhor formar equipes persistentes que se movam juntas de projeto para projeto e possam assumir mais de um projeto por vez. A meta ao formar uma equipe é dar a ela tempo suficiente para se tornar sólida e então mantenha-la unida como um motor a fim de conseguir que mais projetos sejam feitos”.
14 - Ensino, Aprendizagem e Habilidade
“A escola pode ensinar a teoria da programação de computadores. Mas ela não pode ensinar (e não ensina) a disciplina, prática e habilidade de ser um artesão. Essas são coisas adquiridas ao longo dos anos de ensino e supervisão pessoais. Chegou a hora de nós (que fazemos parte da indústria de software) encararmos o fato de que orientar o proximo lote de desenvolvedores para a maturidade reagirá sobre nós, e não sobre as universidades. É hora de adotarmos um programa de ensino, internato e orientação a longo prazo.”
Apêndice - Uso de Ferramentas
Tio Bob trás ferramentas que ele usa para facilitar a vida dele como programador profissional.