Além dos bits e bytes: desenvolvimento de carreira

Seja você um jovem estudante de programação, uma experiente executiva de engenharia, ou qualquer coisa nesse continuum, o assunto desenvolvimento de carreira certamente aparece em seu círculo de discussões com certa frequência.

Não é por menos. Em geral, temos uma tendência natural de não nos satisfazermos com o que temos no momento, mas estamos sempre pensando no próximo. Não, não estou me referindo ao nosso análogo humano, ao nosso semelhante. Estou me referindo ao próximo momento ⎼ onde está, potencialmente, a nossa próxima conquista, o nosso próximo patamar, etc. Por um lado, isso nos rouba da apreciação do momento, do saborear a recém conquista. Por outro lado, isso nos move para frente, para o ainda inalcançado. Progresso! ⎼ alguém gritou.

Todo progresso tem seu custo. Claro, tem muitos benefícios também. Óbvio. Um dos custos do progresso é que você precisa se desapegar do passado, se empenhar no presente e mirar no futuro. O que não significa descartar o passado. Muito pelo contrário, o progresso pressupõe um incremento sobre patamares anteriores. Digamos, depois de 4 anos de treino pesado para chegar às Olimpíadas, o que acontece no dia imediatamente após voltar para casa com a medalha de ouro? O início dos treinos para a próxima Olimpíada, porque a medalha de ouro desta Olimpíada não garante sequer um bronze na próxima. Só o trabalho duro, sobre as bases construídas até então, praticando frequentemente os fundamentos, corrigindo as deficiências, adquirindo novas habilidades, etc, é que se pode garantir “a chance” de repetir a conquista.

Sim, pois é, a chance. Porque assim como você, os outros competidores provavelmente farão o mesmo, especialmente motivados por não terem conquistado o ouro nesta Olimpíada. E pode ser que na próxima, um deles traga para casa o ouro e não você. Lide com isso. Porque nem sempre você voltará para casa com o ouro. Mas tudo bem. Porque o progresso não tem compromisso com os seus sentimentos. O progresso não te chama “meu floquinho de neve”, ou qualquer coisa bem mais tupiniquim do que isso.

O ponto aqui é: nós não controlamos todas as variáveis do Universo. Sorry. Nós controlamos umas poucas variáveis da nossa própria vida ⎼ e é nisso que precisamos nos concentrar, não importa o quão pequeno isso possa parecer à primeira vista. Na dúvida, lembre-se da metáfora do efeito borboleta.

Fonte: https://tyboyd.com/wp-content/uploads/2015/11/career_development.jpg

Tendo dito isso, gostaria de compartilhar, a seguir, o que tem sido para mim algumas das principais variáveis sob o meu controle, que tenho manipulado ao longo dos meus mais de 20 anos de carreira em engenharia de software, seja liderando ou executando.

DISCLAIMER: Altamente opinionated.

1. Motivação

Seja você mesmo sua própria motivação.

Há pessoas que precisam de motivações externas para progredirem em suas carreiras. Enquanto estão recebendo louros da sua líder, dos colegas de equipe, da comunidade de software, dos professores da faculdade, ou recebendo o salário que acham que merecem, ou o bônus, elas estão correndo atrás de conhecimento e de aperfeiçoamento técnico. Mas no momento que lhes falta essa motivação externa, elas estacionam, sentem-se desmotivadas a estudar, a aprender coisas novas, a refinar seus conhecimentos adquiridos até então.

Não me entenda mal, eu gosto de dinheiro e louros tanto quanto você. Mas uma coisa que aprendi muito cedo é que nem sempre vai haver quem me elogie ou me pague o quanto acho que mereço. Muitas vezes, isso vai me deixar chateado ⎼ e honestamente, já tive mais noites mal dormidas por isso do que gostaria de admitir ⎼, mas esse não é o meu drive de progresso técnico-intelectual. O meu drive de progresso está em meu próprio desejo de aprender, de saber mais, de descobrir coisas que ainda não sei. Aprender pelo fim de aprender é algo que me dá prazer. Então, o que aprendo, aprendo para mim mesmo.

Motivação externa vem e vai. Mas o que você aprende permanece. E o saber, por si só, sempre vai trazer consigo novas oportunidades, mais cedo ou mais tarde.

2. Leia

Uma das minhas principais formas de aprender é a leitura. Tem algo na palavra escrita que me fascina, que me envolve, que de algum modo encontra uma via expressa na minha massa cinzenta.

A leitura exercita a nossa mente de uma maneira singular. Bem, ao menos comigo é assim (N=1).

Livros, blog posts, artigos científicos, papers, qualquer coisa. Eu leio de tudo, todos os dias. Não apenas de programação, aliás.

Quando comecei a aprender programação, em 1997, eu passei muitas noites em claro lendo livros de programação de Clipper, Delphi, C++, Java, JavaScript, Perl, ASP, etc, e fuçando no computador, testando os exemplos, explorando os conceitos e tudo mais. Eu gastava boa parte do que ganhava na Tempo Real e Livraria Cultura; e foi assim por muitos anos.

As “pessoas técnicas” que mais admiro são pessoas dadas à leitura. As pessoas mais brilhantes e produtivas com quem já trabalhei são pessoas que cultivam este hábito.

Portanto, se você quer progredir em sua carreira de engenharia de software, seja liderando ou executando, arranje tempo para ler bons livros de programação, de arquitetura de software, de conceitos fundamentais de construção, teste e operação de sistemas de software, e não somente blogs de “how to”.

Blog posts, como os que publicamos aqui, são fantásticos para ter uma boa ideia sobre um assunto, mas para ir a fundo mesmo, você vai precisar recorrer aos livros. E como regra geral, prefira aqueles que são mais conceituais e menos “faça isso ou aquilo nesse framework da moda”.

Algumas recomendações:

3. Observe

O ser humano tem uma capacidade formidável de aprender observando ⎼ haja vista as crianças, em seus primeiros anos de vida. De algum modo, ao longo da vida, vamos nos afastando do aprendizado pela observação à medida que vamos dominando outros meios de aprendizado. Mas a observação é um meio poderoso de aprendizado.

Há desenvolvedores que ao entrarem em um novo projeto e começarem a lidar com uma nova base de código são incapazes de “observar” e “extrair padrões” de suas observações. Me frustra bastante quando tenho que explicar para alguém um padrão estabelecido na base de código, que poderia ser facilmente inferido a partir da observação cuidadosa do código existente. O mesmo acontece em relação a nomes de servidores, serviços e instâncias disso e daquilo.

Não me entenda mal, eu sou 100% a favor de guias de estilo e documentações, mas precisaríamos de muito menos formalização se gastássemos um pouco mais de tempo observando “com intenção” antes de sairmos codando.

Uma coisa que gosto muito de fazer quando estou aprendendo uma nova linguagem de programação, por exemplo, é observar um número de projetos open source escritos na tal linguagem, para tentar inferir padrões, tentar entender como as pessoas resolvem certos problemas comuns de programação e design de software naquela linguagem. Para mim, essa é uma ferramenta inestimável de aprendizado.

Isso evita, por exemplo, o famoso tentar “programar Java em Go” ou qualquer variação disso.

Já em um contexto totalmente diferente, nada a ver com códigos e servidores, a observação é super importante quando você está na liderança de um time.

No grande esquema das coisas, um programador é um programador; uma arquiteta de software é uma arquiteta de software. Mas quando você sai do campo da teoria e aterriza em um time de engenharia composto por pessoas, a realidade não é tão simétrica assim. As pessoas são diferentes umas das outras, naturalmente. Muito embora, elas compartilhem certos atributos e comportamentos, o ponto de partida e jornada de cada uma delas pode ser completamente diferente.

Por isso, você que é líder, é muito importante observar as pessoas do seu time. Observar como elas se comportam em reuniões diárias de alinhamento (que devem servir não como reuniões de status report, mas de estabelecimento de contexto, para que fiquem todos na mesma página), em reuniões de planejamento, em happy hours, em all hands, em 1–1, e quando estão sozinhas realizando suas atividades individuais, só para citar algumas situações. Isso é importante para você “sacar” como elas operam no dia a dia delas, como aprendem, como lidam com problemas, como se percebem valorizadas por você e pelos seus pares, e por aí vai. Isso vai lhe ajudar a lidar com essas pessoas, de modo a potencializar as virtudes delas e ajudá-las com seus demônios manifestos no trabalho.

Você já observou como as pessoas afetam o dia a dia umas das outras em seu time? A Maria gosta de trabalhar com o José? O José faz entregas que afetam positivamente o trabalho da Maria? A Maria contribui para o aprendizado do José? E a Joana, sua última contratação, se encaixou bem no time? Ela foi bem aceita e acolhida pelo time?

Como líder, o seu trabalho é ajudar as pessoas do seu time a exercerem seu papel de modo excepcional. Observar as pessoas do seu time como indivíduos é um bom ponto de partida.

Na minha carreira, observei muitas pessoas ao longo de todos esses anos. Observei colegas de trabalho, chefes, pessoas da comunidade de software, professores, etc. Observei como elas escreviam código, como elas debugavam um problema em produção, como elas priorizavam tarefas, como elas resolviam uma crise, como elas lideravam, como elas tratavam as pessoas que trabalhavam com elas e para elas. Vi muito absurdo, vi muita coisa inspiradora, aprendi alguma coisa com cada uma delas.

4. Reflita

Pare por um minuto e pense no que leu até agora. Faz sentido essa discussão? Há algum sentido no que você leu até aqui? Pense um pouco. Reflita sobre isso.

Muitas vezes na ânsia de realizar, realizar, realizar; fazer acontecer, voar, etc e tal ⎼ todos aqueles jargões típicos das redes sociais e do startupês ⎼, a gente se priva de uma das maiores dádivas de ser humano: a capacidade de refletir e ponderar sobre as coisas.

Em uma posição de liderança, você precisa tomar decisões que vão afetar não somente a sua vida e o seu trabalho, mas em especial, a vida e o trabalho de um número de pessoas as quais você lidera, e isso não é algo que se deva fazer sem a devida reflexão. Desde a qualidade do café que você oferece no escritório até a proficiência dos pares.

Se você “economiza” no café e oferece um café “ruim” para o seu time, como você acha que eles vão se perceber? Será que eles vão se sentir valorizados na empresa? Uma equipe se sente tão apreciada quanto o café que você oferece a elas.

Outra coisa: os pares. Reflita sobre isso. Ter colegas de trabalho igualmente proficientes, cada qual correspondendo ao nível de aptidão esperado para o trabalho à mão, é fundamental para criar um ambiente de alta performance, colaborativo, maduro, onde as pessoas se sentem motivadas a dar o seu melhor, dia após dia e a estimular umas às outras em direção ao progresso. Alguns dizem que ter colegas de trabalho medíocres é pior para a satisfação de um indivíduo no trabalho do que café ruim e salário defasado.

Mais uma última coisa: quando as pessoas com frequência realizam tarefas que estão aquém da proficiência delas, elas tendem a ficar desmotivadas. As pessoas no seu time estão realizando tarefas adequadas ao nível de proficiência delas? Elas se sentem desafiadas nas tarefas que realizam? Elas exercem algum tipo de autonomia para decidir como realizar essas tarefas? Pode ser que não haja espaço para elas fazerem o que gostariam de fazer e, neste caso, a melhor alternativa mesmo seria deixá-las ir. Mas pode ser que realmente exista espaço, só que você, líder, não libera, não dá autonomia às pessoas, microgerencia, e com isso, impede que elas cresçam em escopo e se sintam desafiadas. Observar e conversar com as pessoas ajuda muito nisso, mas se desprender é fundamental.

Fonte: https://victoria.mediaplanet.com/app/uploads/sites/143/2021/03/Cover-image-Upskilling-adn-career-growth.jpg

Já partindo para um território mais técnico, enquanto arquiteto de sistemas, engenheira de software, programador de aplicativos, nós frequentemente precisamos tomar decisões que vão afetar o prazo de entrega do produto que estamos desenvolvendo, sua qualidade, facilidade de manutenção e operação ao longo de seu tempo de vida em produção. Nossas decisões neste âmbito têm impacto direto no custo de construção e de manutenção da solução por anos a fio. Pense nisso por um minuto.

Quando nós consideramos usar aquela lib “maneirinha”, aquele framework “que tá tudo mundo usando”, aquela linguagem “que vai dominar o mercado”, em um projeto crítico, que tem prazo de entrega e budget apertado, nós estamos colocando muita coisa em jogo. Isso requer reflexão.

Em geral, a pergunta que me faço nessas horas é “o que o projeto ganha em NÃO usar este x-bacanudo em favor daquele feijão-com-arroz já bem estabelecido?”

Só tome cuidado para não ficar paralizado, pensando, pensando, pensando, sem sair do lugar. É importante que você desenvolva certa cadência “reflexão vs execução”, evitando tomar decisões agora, que poderiam ser tomadas daqui há 2 meses, priorizando decisões e abraçando a ideia de “bom o bastante” para o momento. Nada é tão bom que não possa ser revisado mais adiante.

5. Discuta

Isso passa muito pela questão “ter bons pares no trabalho”. Já houve ocasiões ao longo da minha carreira, que não tive ninguém no trabalho com quem trocar ideias mais profundas sobre design de software, arquitetura de sistemas, linguagens de programação, boas práticas de liderança e coisas desse universo. Maus tempos, eu diria.

Os períodos mais satisfatórios da minha carreira aconteceram, coincidentemente ou não, quando eu tinha alguns tantos pares que eram muito, mas muito, bons técnicos e excelentes líderes.

É muito importante você ter pessoas com quem trocar ideias. Pessoas com quem você possa argumentar em favor de uma ideia, para no final, ver o quanto ela era uma péssima ideia ⎼ ou não mínimo, não tão boa assim. Pessoas que nem sempre concordam com você, que desafiam sua visão de mundo e de solução de problemas complexos.

Recomendo muito que você tenha uma rede de pessoas brilhantes com quem possa trocar ideias.

Já no seu time, líder, dê espaço para as pessoas falarem. Converse com elas. Mas esteja genuinamente disposto a ouvir. Aliás, ouça mais do que você fala. E por favor, estimule a sinceridade. Deixe que sejam 100% francas com você. Alguém precisa dizer que o rei está nú.

Fonte: https://thecodersblog.com/uploads/2018/the-bike-shed-effect.jpg

Agora, não se engane: estimular a discussão, por vezes, pode acabar estimulando bikeshedding, porque as pessoas podem acabar confundindo a liberdade de discussão com a trivialidade atribuída às discussões. Quero dizer, não é porque há liberdade para se discutir qualquer coisa, que vamos gastar um amontoado de tempo discutindo coisas banais, ou que, ao menos no dado momento e fórum, não são importantes. Portanto, tenha isso em mente e tente priorizar as discussões, especialmente, quando se tratar de reuniões formais, que precisem conciliar agenda de muitas pessoas. O bom senso é sempre bem vindo.

Uma dica que eu dou, então, é ter pelo menos duas abordagens de discussão: uma bem objetiva, pautada, focada em resolver problemas priorizados e bem definidos; e a outra mais passiva, onde você faz perguntas “abertas” e permite que as pessoas falem livremente, se expressem de maneira franca, sem serem interrompidas, mesmo que, ao seu ver, elas estejam falando algum absurdo. Não tem problema, deixe que falem. Pode ser que só estejam falando besteira, ao seu ver, porque lhes falta de contexto. Dar a elas contexto é sua responsabilidade, líder.

Conclusão

Não controlamos todas as variáveis do Universo. Ainda bem, por que isso sim seria a verdadeira definição de caos! (LOL) Mas tudo bem, com as poucas variáveis que controlamos, já podemos fazer grandes mudanças em nossas próprias vidas e ajudar outros a manipularem suas próprias variáveis e serem suas próprias mudanças.

Pessoas que se auto motivam, que são dadas à leitura, que observam com intenção, que refletem sobre aquilo que leem, ouvem, veem e sentem, e que estão sempre prontas para discutir e trocar ideias, em geral, são pessoas que buscam seu próprio crescimento, que traçam seu próprio caminho profissional e não dependem de planos de carreira e baby sittings de onde trabalham.

Se você quer realmente desenvolver a sua carreira, recomendo muito que aprenda a fazer isso.

Curta a jornada!

Vai deixar saudade, Locaweb!

Pois é, depois de quase 3 anos trabalhando intensamente na Locaweb, segunda-feira passada tomei a decisão de sair e caçar o meu rumo por aí. Ainda não sei o que vou fazer, nem para aonde vou. Por enquanto, só vou gastar um tempo com descanso, para dar uma flush nas idéias, recompor as energias, e depois então volto ao batente, insanamente, como sempre.

Resumindo esse tempo que fiz parte do time da Locaweb:

  • Conheci um monte de gente bacana
  • Trabalhei lado a lado com muita gente incrível
  • Formei o melhor time com quem já trabalhei
  • Tive conquistas bem importantes
  • Aprendi um monte de coisas – tanto o que fazer, quanto o que não fazer
  • Vivi intensamente!

Então, o que dizer? Valeu a pena! E vai deixar saudade…

Aos meus amigos de Locaweb, meu eterno respeito e gratidão.

A gente se vê por aí. 😉

Enfim, me fui…

Depois de quase três anos bem divertidos na CVC Turismo, onde trabalhei como arquiteto de sistemas e incentivei bastante a adoção de práticas ágeis de desenvolvimento, resolvi partir para novos desafios e continuar a crescer.

Na semana que passou, parti da CVC Turismo — deixando muitos bons amigos e lembranças fantásticas — e me juntei à Locaweb, como gerente de desenvolvimento sistemas, no departamento de sistemas centrais, passando a liderar tecnicamente uma galera muito gente fina e tecnicamente ótima.

Fui muito bem recebido e minhas expectativas são enormes. Estou muito feliz mesmo.

Vejamos o que o futuro nos reserva…