No post da semana passada eu falei sobre aproveitarmos as oportunidades que aparecem diante dos revezes da vida. O Coronavírus é uma realidade e, via de regra, estamos trancados dentro de nossas casas, então, vamos aproveitar o tempo ocioso para afiar o machado!

Hoje pela manhã, estava ouvindo o episódio extra do sempre ótimo Primocast e um dos convidados, o Alfredo Soares, soltou uma pérola. Foi algo mais ou menos como “Em tempos de crise devemos investir 70% do nosso esforço para sobrevivermos e 30% se preparando para o futuro.”

Assino embaixo! Portanto, recomendo fortemente que você invista grande parte do seu tempo pensando em como sobreviver, seja no sentido figurado, ou até mesmo no sentido literal. Como estão as contas? Como estão os suprimentos? O que pode acontecer? Invista tempo para resolver todos estes problemas.

Neste post pretendo te ajudar com o resto do tempo que será investido se preparando para o futuro. Hoje vou falar sobre as três características que todo programador de qualidade deve ter e que a faculdade não te ensina.

Por que é importante?

Se você me acompanha há algum tempo, sabe que eu produzo conteúdo aqui e também lá no podcast DevPro, junto com o Renzo. Por lá a gente quase sempre bate na mesma tecla: A faculdade não te prepara para o mercado de trabalho. Deixa eu te explicar o porquê.

A grosso modo, o objetivo da faculdade é te formar com embasamento teórico suficiente para que você consiga enfrentar os diversos desafios do dia a dia de desenvolvimento de software, mas focando apenas no lado técnico.

Porém, o que grande parte das faculdades brasileiras ignoram é que, para desenvolver software, você precisa saber executar, mas também precisa saber gerenciar a sua execução.

O ato de desenvolver um software é, antes de tudo, o planejamento e a execução de um projeto. Existem objetivos a serem cumpridos, prazos a serem respeitados e recursos limitados. Diante deste cenário, é preciso que os nossos recursos (basicamente tempo), sejam utilizados da melhor maneira possível. É preciso avançar rumo ao objetivo final.

Para seguirmos avançando de forma constante, é essencial que o trabalho entregue hoje não se torne um problema amanhã. Para que isso ocorra, é preciso qualidade e organização. Por isso, é necessário conhecimento não só da parte técnica, mas de metodologias e ferramentas que garantam a qualidade e  a organização da forma mais eficaz possível.

O que aprender?

Se eu pudesse indicar apenas dois tópicos para quem está começando, eu indicaria aprender sobre versionamento de código e desenvolvimento orientado a testes.

Sabendo versionar o desenvolvimento do seu código você minimiza o risco de desperdício de trabalho e garante que o histórico se mantenha organizado. É o versionamento de código que possibilita você e seu colega mexerem no mesmo arquivo ao mesmo tempo e que nenhuma dessas alterações sejam perdidas.

Em outras palavras, o versionamento de código te ajuda a se manter organizado.

O software de versionamento de código mais utilizado hoje em dia é o git. Portanto, a minha dica é: aprenda git. 

Se você buscar por essa palavra no Youtube você vai encontrar diversos cursos grátis sobre o assunto. Só isso já vai te ajudar muito. Tem também uma outra alternativa, bem melhor e mais rápida, que eu vou falar no fim deste post.

Quanto aos testes, TDD é a sigla para Test Driven Development, ou, em português, Desenvolvimento Orientado a Testes. Se você já tem o mínimo de contato com programação, provavelmente já ouviu essa sigla.

A prática do TDD consiste, basicamente, em você começar o seu desenvolvimento pelo teste, e não pelo código em si. 

Por exemplo: Imagine que você precisa desenvolver uma função que some dois números. Com o TDD, a sua primeira tarefa seria escrever o código que testa se essa função retorna 4, caso você tenha passado 1 e 3 como parâmetro.

A primeira vista pode parecer mais trabalhoso, mas ao desenvolver dessa forma, você sempre terá uma série de testes automatizados que garantem que o seu código está funcionando como deveriam funcionar.

Imagine um software com mais de dois anos de idade e que continue em pleno desenvolvimento, com uma versão nova sendo entregue a cada semana. Então entra um novo membro na equipe. Como garantir que o código que ele escrever não vai quebrar as funcionalidades que foram escritas há 2 anos atrás? Sim, os testes automatizados garantem isso (desde que bem feitos).

Ou seja, desenvolver orientado a testes te ajuda a manter a qualidade.

Aprenda a desenvolver orientado a testes. Jogue no Youtube “TDD python” e com certeza você achará muito material. Aqui neste caso também tem uma outra alternativa melhor e mais rápida… lá no final do post falo mais.

O porquê de tudo isso…

Lembre-se: o seu objetivo sempre deve ser gerar valor. Estas duas técnicas são técnicas básicas que praticamente toda empresa séria utiliza. Sendo assim, conhecer minimamente as duas técnicas vai garantir que, em uma nova oportunidade, você comece a gerar valor o mais rápido possível.

E agora, para finalizar, vou te dar uma dica para você aprender muito mais rápido a versionar código e desenvolver orientado a testes. 

O Renzo tem um curso MUITO BOM chamado PyTools. Lá ele ensina tudo isso de forma simples, rápida e profunda, mas também de forma muito objetiva. 

Além disso, você também vai aprender a utilizar o Pipenv, que é o melhor gerenciador de pacotes do Python e que também é utilizado em quase todas as empresas que desenvolvem softwares em Python.

Eu, com 10 anos de programação, volta e meia recorro as aulas deste curso para relembrar alguns conceitos. 

Recomendo fortemente!