Curso de programação não te ensina a programar, a prática sim

Dentre vários motivos, os médicos fazem residência para adquirir prática, serem assistidos e auxiliados em cenários reais.
Longe de comparar desenvolvedores com médicos, o objetivo aqui é entendermos que não é simples fazer cursos e treinamentos e esperar que o mundo real seja igual ao cenário perfeito que é apresentado em um curso.



O cenário dos cursos

Quando estamos estudando através de cursos, seguimos um roteiro, usamos um ambiente configurado para o perfeito funcionamento da solução que estamos desenvolvendo, além de, geralmente, as melhores técnicas e boas práticas serem utilizadas ao longo do curso.

O mundo real

Quando entramos em algum projeto já em andamento, principalmente em empresas mais tradicionais, é comum encontrarmos projetos com código ruim, complexo e de funcionamento duvidoso e é nesse momento que (no início de nossa carreira), sentimos um certo desespero por acreditar que não seremos capazes de atender as expectativas da empresa.
Com o passar dos meses/anos, ao adquirirmos senioridade (sim, não tem como ser sênior sem colocar a mão em problemas, código ruim, complexo, acoplado, de funcionamento duvidoso e/ou com cara de teto de vidro e resolver), compreendemos os cenários e não sentimos mais esse sentimento de insegurança, começamos a encarar esses problemas apenas como código que precisamos refatorar.

Mas e ai, o que fazer se estou iniciando?

Existem algumas possibilidades e essas geralmente são as situações que os desenvolvedores buscam evitar:
  • Atuar em sustentação/incidentes
  • Analisar e refatorar códigos de terceiros
  • Colaborar constantemente com revisão de PR
  • Ajustar e refatorar sistemas legados

Atuar em sustentação/incidentes

Atuar em frentes de sustentação ou atendimento de incidentes é geralmente a melhor forma de adquirir senioridade. Cada problema que cai em nossa mão, é uma oportunidade de resolver o problema na causa raiz e de refatorar aquele código estranho, além de que, para conseguir resolver o problema, você terá de fazer (toda as vezes) o mais complicado: Ler e entender o que foi feito no legado.

Analisar e refatorar códigos de terceiros

O GitHub é um mar de oportunidades, além de projetos interessantes, tem diversos que são apenas POCs ou projetos que foram iniciados e não finalizados e ler código é uma forma de compreender como outras pessoas resolveram determinado problema com a linguagem. Dificilmente encontraremos a mesmo solução para um mesmo problema e é por isso que ler código nos da "bagagem" para compreender o que o amiguinho pensou quando escreveu aquele "código duvidoso". 

Colaborar constantemente com revisão de PR

Os times que fazem uso de processos de de code review sabem a dor que é você pedir uma revisão e ser ignorado até falar ter de solicitar 10x. Mas analisar PR, não é bom apenas para garantir a qualidade do que está sendo entregue e validar a implementação, mas é uma forma extremamente rica do time "normalizar" os padrões utilizados durante o desenvolvimento e isso possibilita que um aprenda com o outro, gerando discussões e aumentando a "bagagem" de todos que participam da revisão. Então, fica ai com essa dica: valorize o PR do coleguinha, ele vai ajudar a desenvolver sua senioridade.

Ajustar e refatorar sistemas legados

Falar de legado é sempre interessante, pois o "legado" na percepção de uns, é muito menos "legado" na percepção de outros. Enquanto alguns olham para uma API nodejs com express que não está bem organizada, que roda em uma instancia de VM na cloud e possui uns 3 anos de idade de chamam de legado, outros lembram daquele projeto em delphi, "macarrônico", com hadouken de IFsque roda naquele onpremise capenga que semanalmente precisa de um restart pois existem problemas graves quanto ao uso de hardware. Tem também aqueles sistemas baseado em procedures de bancos de dados, com processos complexos com mais 10 mil linhas dentro do banco de dados.
Enfim, cada um tem o legado que merece, mas você certamente vai amadurecer e ganhar senioridade quando estiver nesse tipo de situação.

Por fim, gostaria de concluir reforçando que é extremamente importante lidar com essas situações, são elas que farão de você um profissional mais sênior e com casca para resolver problemas complexo. Então fica ai a dica, se você pensa que não deveria mexer em código