Eu já estou a cerca de 17 anos trabalhando profissionalmente na área de desenvolvimento de software com equipes que criaram produtos que são utilizados por milhões de pessoas nos dias atuais. Estas dicas que eu vou explicar eu vi outras pessoas fazendo e utilizei ao longo da minha para crescer.

O interessante é que elas são válidas em qualquer nível que você estiver e sinceramente, quando eu vejo alguém fazendo isso de forma consciente ou não, todos passam a respeitar mais a pessoa fazendo com que sua importância aumente dentro do time.

Aliás, agora eu estou fazendo estes artigos na versão em vídeo no YouTube. Assim você poderá visualizar eles em 2x, curtir e compartilhar e entender todo esse artigo na metade do tempo! :-)

Humildade

O que diferencia um excelente desenvolvedor de outros medianos é a sua capacidade e força de vontade para conseguir absorver várias informações e contribuir com o time utilizando elas. A forma como você foca a sua energia é muito mais importante do que a inteligência que você tem.

Quanto mais você aprende sobre programação, mais você entende o quão pouco sabe, e a humildade é importante para que você entenda que vai passar o resto da vida estudando e aprendendo… Então não existe essa de “sou sênior e já sei de tudo” todo mundo está aprendendo o tempo todo.

Por exemplo, durante o processo de revisão de código, é importante ter humildade de ouvir alguém analisando o seu código e fazendo alguma crítica nele. E sempre que isso acontece você tem duas opções, a primeira é simplesmente entrar na defensiva e ficar se justificando do motivo de ter feito a cagada e a segunda é escutar atentamente a crítica e ver quais pontos pode melhorar. Inclusive pedindo ajuda da pessoa que está fazendo a crítica em si.

Bons programadores que eu conheço gastam um tempo enorme ouvindo e dando sugestões sobre como algo pode ser melhorado, não necessariamente programando. Eles gastam tempo ajudando o time como um todo… Inclusive ensinando os estagiários!

E por falar nisso, já vi alguns estagiários fazer code review de gente velha de casa e dar um show. Apontando o que pode ser melhorado, negando issue e poraí vai… Mas o mais legal é que quando se tem humildade a análise dos argumentos da crítica fica muito mais fácil e não se gasta energia atacando diretamente a pessoa que está dizendo eles… E todo mundo sai ganhando na experiência.

E cara, uma das características que eu sempre me preocupei muito, apesar de nem sempre conseguir, é criar um código simples. Criar algo complexo não te faz mais inteligente… Aliás, veja as interfaces de softwares criadas pelas grandes empresas… elas tendem a ser muito simples e entregar esta simplicidade não é fácil, diferentes pontos de vista são muito importantes para chegar neste nível… enfim, são gastos muitos cérebros pra fazer isso.

Use sua inteligência com humildade focado no valor entregue e não no seu ego, isso fará com que você melhore não apenas com o usuário final, mas também na sua produtividade e do seu time.

Curiosidade

Construa a consciência sobre o processo de desenvolvimento

Quanto mais você sabe e entende sobre o processo que o seu time usa para construir algo, mais capaz você estará de entender as mudanças e ajudar nas melhorias para tornar ele mais produtivo.

Se você entender como o todo funciona você será capaz de propor soluções e eliminar gargalos com muito mais facilidade.

Por exemplo, uma vez estávamos com dificuldades de simular alguns bugs que só aconteciam durante o processo de integração de vários módulos do produto e depois de um bom tempo de execução. Era quase impossível fazer Unit Tests nestas situações. Minha proposta, foi criar um pequeno framework que era capaz de simular muito a troca de mensagens entre eles, aumentando o número de testes e claro melhorando a qualidade do produto como um todo.

Isso fez com que o produto tivesse um novo salto de qualidade e eu só fui capaz de visualizar isso porque estava olhando o ciclo de desenvolvimento como um todo e não apenas alguns pedaços dele.

Então, estar na trincheira é bom em alguns momentos. Mas subir na montanha pra visualizar o todo pode trazer um ganho enorme com várias colaborações e oportunidades de crescimento!

Faça experimentos constantemente

Uma forma muito boa de aprender a programar é através de experimentos, ou seja, é programando mesmo. Se você está aprendendo uma nova técnica, framework ou até mesmo funcionalidade da linguagem, faz um pequeno programinha que usa esta parte e veja o que acontece.

É muito melhor você fazer isso só com um código bem pequeno do que com um baita software gigante que você não entende muito bem como funciona internamente.

E se você ver que alguma coisa não funciona do jeito que você gostaria? Excelente! É melhor fazer isso em um programinha experimentando e identificando o que funciona e o que não funciona, do que fazer uma mega alteração em um software grande que o cliente está esperando só pra ter que jogar tudo fora depois.

A grande sacada é que cometer um erro não é um pecado, mas não aprender com ele é que é. Fazer experimentos é uma forma de reduzir o impacto dos seus erros e maximizar os seus aprendizados.

O conhecimento está na causa raiz dos problemas

Uma vez estávamos com um problema em nossos builds, algo bastante simples, mas estava atrasando algumas coisas internamente no time. Durante a análise, um dos desenvolvedores disse: “Temos que reiniciar o micro de build…”

Eu não via nenhuma relação do motivo de ele estar dizendo aquilo, quando eu questionei o porque daquela sugestão, ele disse que provavelmente isso resolveria. Mas era obvio que o problema não seria resolvido daquela forma e aquela opção iria até interromper outros builds que estavam rodando naquela máquina…

Ele simplesmente pensou em uma das primeiras opções e já estava querendo agir logo, isso no lugar de analisar uma possível causa raiz e resolver ela de forma mais eficaz e definitiva.

No fim, nós investigamos melhor e vimos que o processo de limpeza de um diretório estava falhando, nada demais… Simplesmente resolvemos isso atuando diretamente na causa raiz e tudo passou a funcionar normalmente sem nada externo ser afetado.

Agir de forma impulsiva, muitas vezes pode não resolver o problema, pode causar outro ou até dar a impressão que o problema foi resolvido, mas ele está escondido embaixo do tapete pra quebrar na sexta-feira as 5 horas da tarde.

Seja sempre curioso sobre qual a causa raiz dos problemas, o que realmente levou vocês para esta situação e o que pode ser feito para tornar impossível deste erro acontecer novamente. Esta é a melhor curiosidade, aquela que faz com que a gente aprenda não apenas com os acertos, mas também com todos os erros que cometemos.

Comunicação e cooperação

Excelentes programadores aprendem como trabalhar bem com outros do time. Escrever um código fácil de ler, é uma boa parte de ser um bom team player.

Um bom conselho para você seguir quando está criando o seu código é entender que ele deve ser feito primeiro para outros desenvolvedores e depois para ser lido pelo computador.

Na verdade, computadores são excelentes em ler código, já outras pessoas do seu time, terão grande dificuldade se você fizer tudo zoneado.

Então fique atento, comunicação é importante, não apenas nos e-mails que escreve, a forma que fala, mas também o código que produz.

Use a sua disciplina para alavancar a criatividade

Definir os padrões, utilizar as ferramentas certas, ler a documentação são características que fazem com que o programador seja capaz de criar cada vez mais!

Por exemplo, você pode achar que está sendo criativo mudando o nome das variáveis do jeito que quer ou usando um padrão de projeto que aprendeu na semana. Quando na verdade, tudo o que está fazendo é se ocupando e investindo em coisas que não trazem nenhum valor ao seu usuário final e também para o seu time, que provavelmente vai ter que refazer tudo depois.

Quando os padrões estão definidos e o modelo de trabalho está bem redondo e logicamente as pessoas são disciplinadas seguindo estes padrões. A criatividade flui, pois o número de microdecisões sobre tab vs espaço, nome de variável, comentários e outras coisas não são mais necessárias… agora o foco passa a ser em coisas que realmente importam entregando cada vez mais valor para o cliente.

Sem preguiça!

Ou seja preguiçoso da forma certa...

Sempre existem aquelas coisas chatas que devem ser feitas… E para cada coisa chata que um desenvolvedor deve fazer, ele pode tomar 3 ações diferentes:

Adiar a tarefa chata

Esta primeira opção, com certeza não é a mais inteligente. Conforme o desenvolvedor vai adiando as coisas ao longo do tempo e “dando um jeitinho” a tendência é que tudo exploda na cara dele no final...

Resolver a tarefa no menor tempo possível

Esta é a forma mais comum de evitar a procrastinação e resolver logo o que deve ser feito. Provavelmente este tipo de tarefa pode aparecer no futuro, mas fazer o que né? Ela tem que ser feita...

Criar uma ferramenta para realizar esta tarefa de forma automatizada no futuro

Esta é sem sombra de dúvidas a melhor saída para este tipo de coisa. Além de melhorar seus skills como desenvolvedor, você acaba “se livrando” deste tipo de tarefa chata e repetitiva que, apesar de muitas vezes entregar valor, não leva a lugar algum.

Por exemplo, a muito tempo atrás, eu tinha que executar um processo de assinatura digital de alguns arquivos importantes que eram disponibilizados para outros times. Uma tarefa bastante rápida (não levava mais do que 5 min pra fazer), mas era chata e repetitiva. Além disso, ela era crítica, ou seja, assim que alguém solicitava, isso precisava ser feito rapidamente. Não tinha nem como enrolar.

Uma vez, eu estava voltando para casa e o meu celular toca, era alguém implorando para eu agilizar a assinatura do arquivo para ser entregue ao cliente ainda naquele dia. Eu fiquei irritado, era fora de hora, em uma sexta-feira e não fazia sentido algum aquela tarefa naquele momento. Fiquei tão irritado que pensei: “Vou automatizar essa porcaria…”

E foi o que fiz, analisei o padrão da solicitação que era feito no Jira, com os anexos do arquivo a ser assinado e coloquei um pequeno robô que baixa o arquivo, envia para o servidor de assinatura e coloca a resposta lá dentro da issue. Perfeito… Não avisei ninguém além do meu time sobre a novidade e deixei rolando.

Pronto, o robô funciona até hoje… Ninguém me incomoda mais com isso e tem um tempo de resposta de até 5 minutos o que é mais do aceitável para eles e eu nunca mais tenho que fazer esta tarefa chata.

Caso você se veja em uma situação em que vive ocupado com tarefas chatas, este é um grande sinal de que você não está usando suas habilidades da forma correta e está se mantendo ocupado e não progredindo.

Hábitos

Bons hábitos importam bastante porque boa parte do que você faz como programador ao longo do tempo, você acaba fazendo de forma inconsciente. Por exemplo, a forma como você formata o seu código é cada vez mais automática, você não precisa mais pensar em alguns nomes de variáveis, onde comentar o código, quando criar uma classe ou função.

Além disso, decisões mais críticas como quando você deve ou não criar um determinado tipo de teste são definidas pelo seu modo automatico de pensar. Um bom hábito é criar testes, simples e concisos que são fáceis e rápidos de serem executados, um péssimo hábito é não criar testes para nada.

Entender o poder do hábito para um desenvolvedor é crucial, pois quanto mais bons hábitos você tem, maior será a sua produtividade e menos tempo ele gastará com coisas que não agregam valor ao usuário ou ao seu time.

Quando você estiver aprendendo, aprenda da forma certa. Busque as boas práticas, leia a documentação e veja o que os outros estão fazendo, aprenda os padrões corretos. Desta forma, com o passar do tempo, quando fizer várias vezes a coisa certa e isso se tornar um hábito naturalmente você se tornará um desenvolvedor muito mais capaz e produtivo.

Bons hábitos fazem toda a diferença ao longo da sua carreira e trabalhar para construí-los logo cedo é um fator bastante decisivo para avançar muito mais rápido.

Então é isso, espero que tenha gostado de todos os pontos que eu enumerei e se houver alguma coisa pra complementar, coloque aqui nos comentários. Eu vou ficar muito feliz em saber o que você acha sobre este assunto.

Se souber de alguém que está afim de dar aquela turbinada na carreira e entender que este texto é para ele, não esquece de dar aquela compartilhada! :-)