Não era essa a idéia inicial do post, mas conforme fui juntando as idéias na cabeça, precisei admitir a realidade. Eu sou o John Snow… Eu não sei nada.
Estava pensando em escrever um post sobre como escolher a melhor ferramenta para um trabalho. Mais especificamente uma linguagem de programação para o problema em mãos. Uma rápida pesquisada aqui no blog e vi que comecei a mexer com Python em 2008. São 8 anos de experiência com a linguagem. Em muito lugar dá pra conseguir uma vaga de programador sênior com esse tempo todo.
Dois empregos atrás fiz um bocado de coisa em Python. Coisas tão simples como parsers e automação de tarefas e algumas mais complexas como auditoria anti-fraude e até webapps em Django. E eu estava me sentido confiante nas minhas habilidades em Python.
Ai mudei para outra empresa, no emprego imediatamente anterior ao atual. E eles tinham desenvolvido in-house um middleware para facilitar algumas atividades. E eu abri o código. E chorei. Mas de felicidade. Que código bonito e claro, tudo bem dividido e as classes e métodos todos fazendo muito mais sentido do que as coisas que eu já havia feito eu mesmo. E pela primeira vez eu ia ter outras pessoas (2) que também conheciam Python e eu ia poder trocar idéias.
Depois de uns 6 meses de casa eu fui encarregado de fazer a versão “2.0” da ferramenta e cheguei a conclusão que agora sim eu estava manjando bem de Python. Com muito mais horas por semana desenvolvendo a ferramenta do que fazendo ops, consultando um code base bonito e lendo muita documentação eu estava feliz com a minha performance.
Vale citar que eu estava trabalhando sozinho no projeto.
Avançando para o emprego atual, depois de uns meses de casa, resolvo fuçar no bugtracker e pegar uma coisinha para mexer. Uma coisa simples. Vou lá, modifico e rodo meus testes – como sempre fiz – executando contra um servidor no laboratório. Tudo funciona. Eu sorrio e fico orgulhoso de mim mesmo. Estou a ponto de enviar minha primeira contribuição.
A diferença é que na empresa atual eles realmente sabem o que estão fazendo. E todo código precisa ser submetido via uma ferramenta e precisa de peer-review.
Assim que submeto o código já tomo pancada da ferramenta. Não estou seguindo o style-guide corretamente. OK, corrigido depois de apanhar um pouco. Tento de novo. Rejeitado de novo. Uma pancada de unittest falhando. Unit test? Que ser isso? Tipo… já ouvi falar. Sei que existe, mas nunca fomos oficialmente apresentados.
Mas agora praticamente todos os meus colegas são experts em Python e uns dois ou três me introduzem o conceito e as ferramentas. Bato cabeça umas duas semanas mas consigo fazer os testes funcionarem. A ferramenta finalmente aceita meu código e submete para review. São só umas 20 linhas, todas seguindo o style guide e passando nos testes. Vai ser uma mamata.
O reviewer manda o código de volta, com umas 10 observações pedindo mudança.
Desde nome de variável até a lógica dos meus “if then else”. Se você pensar que de umas 20 linhas veio 10 comentários de volta dá pra imaginar que praticamente tive que reescrever tudo.
Muitos outros vai-e-volta depois meu reviewer aprova o código. Mas uma coisa que eu não sabia na época é que se o reviewer não for “dono” do projeto ainda precisa de mais um nível de review por um dos donos.
E adivinha? Rejeitado de novo.
Deve ter sido mais de um mês até que finalmente pude submeter o código. E foi ótimo.
Eu achava que conhecia Python razoavelmente bem, mas meus reviewers foram verdadeiros mentores e me mostraram coisas na linguagem que eu não conhecia. Meu código melhorou de simplesmente “funcionando” para algo muito mais idiomático e “pythonico”.
Pesquisei esses dias e descobri que desde então já submeti mais de 2300 linhas de código. Puxando de cabeça, acho que foram uns 30 ou mais commits nesse total. E desses todos exatamente duas vezes eu tive meu código aprovado de primeira pelo meu reviewer. Uma dessas vezes eu submeti uma mudança de 1 linha, corrigindo ortografia de uma palavra no docstrings. 😛
Cada vez mais eu escrevo meu código com mais cuidado e atenção e raramente tomo chamada por causa de estilo, mas vira e mexe ainda tomo pancada por causa de nome de variável. Aparentemente eu ainda não sei distinguir de quando usar **timeout **ou time_out, por exemplo.
O fato é que cada semana que passa mais eu percebo que eu não manjo nada de Python. Trabalhei num código por quase um mês, mandei pra revisão e tomei pancada. Meu revisor sugere que eu tente outra abordagem. Largo meu código original e reescrevo seguindo a idéia dele. Está tudo funcionando em dois dias, com muito menos linhas e complexidade, e passa pelos dois níveis de review. :-O
O que eu entendi disso tudo é que nós avaliamos nosso conhecimento e capacidade baseados em quem nos cerca. E infelizmente se estamos sozinhos ou apenas com uma ou duas pessoas ao nosso redor é fácil super-valorizar nosso conhecimento e deixar nosso ego se encher.
Agora eu estou cercado dos melhores profissionais com quem já trabalhei e percebi que minha barra está muito abaixo da média lá na empresa. Às vezes nem sei como entrei, pra dizer a verdade, mas estou aproveitando ao máximo meus reviewers e mentores porque eu reconheço que dos meus “8 anos de experiência” eu não sei nada.