Programador orientado a desafios

Sempre ouvimos falar sobre padrões de projetos, design patterns, questões sobre arquitetura entre outras abordagens no desenvolvimento de aplicações. Vale lembrar também que é esperado de nós que estejamos sempre atualizados com o que vem surgindo em tecnologias a cada dia. Por mais que seja quase impossível estar sempre 100% atualizado nesses aspectos é necessário ter em mente que você precisa estar disposto a aprender mais e lidar com mudanças sempre que necessário. Com mudanças eu quero dizer que nem sempre você poderá se manter na sua zona de conforto, algumas vezes terá desafios pela frente e sempre que concluir com sucesso algum desses desafios, você será um programador ou desenvolvedor mais bem preparado e mais resiliente. O “uncle Bob” no livro o codificador limpo cita que prática não é você fazer a mesma coisa todos os dias no seu trabalho, isso é rotina, isso é costume, isso é performance, prática de verdade é quando você, depois do horário de trabalho busca aprender algo novo para acrescentar à suas skills, ou aprender mais sobre algo que você já usa no seu dia a dia. A realidade é que devemos aprender a ser resilientes, vou contar dois casos que aconteceram comigo. Em 2019 comecei a estudar Flutter, eu no momento programava ainda em PHP e não usava padrões de projeto, ou clean code, orientação a objetos, nem ferramentas nesse sentido, eu diria até que programava no estilo extreme go horse de ser. Então quando decidi aprender Flutter tive que relembrar de muita coisa da POO que tinha estudado no ensino técnico, ao final de 2020 me senti preparado e comecei a aplicar a vagas de emprego na área. Quando finalmente fui chamado para um teste tive que desenvolver um app em Flutter usando um micro framework brasileiro chamado GetX. Aí estava o meu primeiro problema, até então eu só havia aprendido a usar o MobX como state manager. (Um parêntese bem rápido aqui, o state manager (ou gerenciador de estado) no Flutter é o cara que vai ficar responsável por trabalhar com a lógica de negócios do teu app, o Flutter não é por padrão já dividido em camadas como no MVC, então cabe ao programador escolher qual o melhor pacote para usar e qual vai se adaptar melhor à suas necessidades) A questão é que o MobX e o GetX têm abordagens diferentes, e a forma de trabalhar com eles não se parece em quase nada. Mas eu queria a vaga, eu precisava, então fui estudando o GetX conforme ia aparecendo a necessidade durante o desenvolvimento do app de testes solicitado, foi assim que aprendi (em três dias) a usar o GetX e a usar o Repository Pattern no Flutter. Um tempo depois fui chamado para outra empresa, aceitei, entrei e quando cheguei lá vi formas de trabalhar totalmente diferentes do que eu estava acostumado até então, testes, clean architecture, de volta ao uso do MobX, flavors e coisas desse tipo ainda me eram estranhas, mas era necessário nessa empresa nova. Foi assim que aprendi a trabalhar com essas novas ferramentas em pouco tempo também. A questão é que uma das habilidades que todo programador deve ter é a capacidade de se adaptar. Não sei se você é como eu que aprendo na pressão ou quando sei exatamente o que preciso estudar, mas eu aconselho a ficar sempre de olho no que ta surgindo e tentar se inteirar sobre o assunto, normalmente as empresas pedem aquilo que está em alta no momento, um código limpo (isso é requisito por padrão e nem precisava estar aqui), design patterns, agilidade, arquitetura limpa, e não podemos negar que isso é indispensável para qualquer profissional na área. Se pudéssemos listar aqui quais as habilidades que você deveria ter para ser um “bom programador”, você jamais ia ler algo sobre uma linguagem específica, seriam exemplos mais genéricos, vou tentar listar o que eu acho importante:

  1. Desenvolva resiliência
  2. Esteja sempre pronto a aprender
  3. Padrões foram feitos para serem usados
  4. Programe para os outros, alguém vai precisar dar manutenção em seu código (todo mundo faz um código que a máquina entenda, mas poucos fazem códigos que outras pessoas conseguem entender)
  5. Aprendizado nunca é demais e apenas a prática, leva a perfeição (ou quase)

Isso foi o que eu aprendi nesse período em que estou atuando como profissional da área, ainda vou aprender muita coisa e vocês ainda verão bastante conteúdo sobre isso por aqui. No mais, estar sempre pronto a encarar novos desafios é essencial e mudanças são inevitáveis, esteja pronto e mantenha o foco, os resultados serão claros quando aplicar essas práticas e você não vai querer voltar a trabalhar sem elas.