Não é uma brincadeira, não suportaria que isto acontecesse uma quarta vez, está a afectar-me mentalmente.
Esta linha é importante, porque mostra que se sente que é altura de mudar. Mostra que você reconhece isto como um padrão e gostaria que o padrão parasse. Esse desejo é provavelmente a parte mais importante da solução. Resolver este tipo de situações implica muitas vezes mudar a forma como você, você mesmo, pensa. É impossível para alguém fazer isso por si, por isso o seu desejo de mudar será a única coisa que fará a mudança acontecer.
Para alguns antecedentes, já estive em situações semelhantes “demasiado bom a codificar para o meu trabalho”, embora nunca na medida que você descreve. Eu poderia curar o cancro com meta-programação de modelos em C++, mas muitos com quem trabalho mal são versados no básico do Design Orientado a Objectos. Eu escrevi código que abusava SFINAE e que se contrapunha ao texto exacto das especificações do C++, quando muitos projectos em que trabalhei ainda usavam versões antiquadas e buggy do gcc. A minha abordagem foi simplesmente mostrar-lhes como estas ferramentas são espantosas, e todos os problemas que poderiam resolver. Adorei explicar pequenas dicas de programação às pessoas, e elas gostaram muito.
Isso soa familiar?
“Sim, mas deve-se ter um bom nível para entender [o código Mik] porque os componentes são inteligentemente desacoplados”
Considerem esta afirmação de uma perspectiva baseada no risco. O seu chefe precisa de manter as coisas a funcionar, não importa o que aconteça. Se você sair para ir atrás de alguma oportunidade de trabalho fantástica, o seu chefe ainda tem de se certificar de que o código é mantido. O que o seu colega de trabalho acabou de dizer foi que, se tiverem de o substituir, precisam_ de encontrar um programador muito competente, porque quem não for assim tão bom não será capaz de o manter. Isto é um risco. E se não conseguirem encontrar um programador suficientemente bom, ou não conseguirem pagar-lhes o suficiente?
Pode ter produzido aquilo a que chamaria “bom código”, mas a definição de “bom código” é muito muito dependente do contexto. O que é “bom código” no Google, com as suas formas de pensar vanguardistas, pode ser um código muito mau para alguém que trabalha na FAA, que está predominantemente preocupado com a fiabilidade em vez de se manter a par da vanguarda. A definição de “bom código” do seu chefe inclui a capacidade de o manter em todo o tipo de situações, inclusive sem si. Se os seus colegas de trabalho não se sentem à vontade para manter o seu código, então você é subitamente uma fiabilidade para a empresa, porque você produz um produto que eles não podem manter se você decidir ir para outro lugar.
Nesta perspectiva, pode-se argumentar que você está a forçá-los a aceitar a sua definição de “bom código”. Instintivamente, isto pode parecer uma coisa boa, mas está cheio de dificuldades, tal como esta forma de pensar baseada no risco que pode não ter pensado.
Temos uma frase, “pôr o carro à frente dos bois”. Um dos muitos significados associados a ela é colocar o conteúdo que mais lhe interessa (ser capaz de usar as suas técnicas avançadas) sobre as forças que deveriam estar a puxá-la para a frente (a compreensão que o seu colega de trabalho tem destas técnicas). Você escreveu o código neste estilo avançado, e depois encorajou os outros programadores a “apanhar” este estilo. Isto pode ser eficaz, mas se alguma coisa lhe acontecer antes de eles “recuperarem o atraso”, a empresa fica subitamente em risco porque ninguém consegue manter o código.
Como posso evitar isto no futuro?
A correcção disto pode ser uma coisa terrivelmente difícil de fazer porque envolve abordar o problema de uma forma diferente da que normalmente lhe é confortável. Em vez de primeiro escrever o código neste estilo avançado, e depois ensinar os seus colegas de trabalho a pensar dessa forma, deve virá-lo ao contrário. Ensine os seus colegas de trabalho a gostar desse estilo de codificação, e depois comece a escrever código nesse estilo. Pode parecer ao contrário, mas é muito mais estável. Do ponto de vista do patrão, há pouco ou nenhum risco de a equipa aprender a codificar melhor. Uma vez codificado melhor, o estilo em que se quer desenvolver é subitamente menos arriscado.
Entretanto, terá de escrever um código que, pelos seus padrões, é “menos bom”, mas não faz mal. O seu código não é o seu único produto aqui. O seu outro produto está a ajudar a ensinar os outros programadores, e o valor disso pode facilmente exceder o valor de escrever “código perfeito”.
Claro que pode ser difícil dizer quando é seguro escrever código no estilo em que quer escrever. Se fosse fácil de dizer, já o teria descoberto! Uma técnica poderosa que pode utilizar é deixar os outros pressionarem pelos estilos avançados de codificação, em vez de o fazer você mesmo. Uma coisa é ensinar a alguém a diferença entre herança e composição. É uma coisa completamente diferente ensiná-los suficientemente bem que eles defendem a mudança da sua base de códigos existente para ser mais claro quando ela os usa. Este último caso permite realmente que se saiba que eles não só entendem o conceito, mas abraçá-lo verdadeiramente.
Um ideal para ensinar tais conceitos é não ensinar nada. Deixe os alunos descobrirem algo, e depois aponte-os numa direcção em que a descoberta possa ir. Talvez um deles descubra alguma coisa de bom sobre a herança e você pode apontá-los para o padrão de design do Visitante baseado no que eles descobriram. Não lhes dê apenas um Visitante, mas dê-lhes um sentido de orientação para que eles próprios possam sair e encontrar o Visitante.
É uma abordagem muito mais difícil, e certamente vai querer encontrar um meio de comunicação feliz entre isso e a sua abordagem actual, mas pode ser muito gratificante. Mais importante para a sua resposta, pode trazer valor para a empresa sem o risco. Se está a dar valor a uma empresa, e não a colocar em risco, praticamente nunca_ será despedido. E nos poucos casos em que ainda pode ser despedido, a gerência fornecerá uma razão para isso (tal como uma recessão na economia, ou uma mudança na direcção da empresa). Se o fizer muito bem, verá que a gestão, em vez disso, começará a moldar o seu caminho, tal como molda os seus colegas de trabalho, e encontrará uma tendência curiosa para ter aprendido apenas a habilidade certa apenas quando eles mais precisam dela.