Abílio Azevedo.

O codificador limpo

Cover Image for O codificador limpo
Abílio Azevedo
Abílio Azevedo

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.

https://codingdojo.org

https://codekata.pragprog.com

http://butunclebob.com/

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

Did you like?

More posts

Cover Image for The 4-Hour Work Week

The 4-Hour Work Week

**The 4-Hour Work Week** is a groundbreaking guide to escaping the 9-5 grind, automating your income, and living life on your own terms. Bestselling author Tim Ferriss shares revolutionary strategies for outsourcing, remote work, lifestyle design, and building automated businesses that generate passive income. Learn how to join the 'New Rich' who leverage time and mobility instead of trading time for money. This influential book has transformed how millions approach work and life balance in the digital age.

Abílio Azevedo
Abílio Azevedo
Cover Image for The Phychology of Money

The Phychology of Money

Morgan Housel offers valuable insights on financial management and decision-making. The author emphasizes that financial success depends more on behavior than on intelligence or technical knowledge. Housel highlights the importance of long-term vision and resilience in the face of market volatility, encouraging us to focus on sustainability rather than short-term gains.

NewsLetter

I will send the content posted here. No Spam =)

Experienced Software Engineer with degree in Electrical Engineering with over 10 years of hands-on expertise in building robust and scalable mobile, web and backend applications across various projects mainly in the fintech sector. Mobile (React Native), Web (React and Next.JS) and Backend (Node.JS, PHP and DJANGO). My goal is to create products that add value to people. - © 2024, Abílio Azevedo