Recebi por e-mail hoje esse texto de um colega. Como ele autorizou, vou compartilhar.
Outro dia um colega me chamou num canto e fez um comentário mais ou menos nessas linhas: “olha, eu adoro trabalhar aqui, mas estou tendo um problema sério. O Fulano, da minha equipe, é um excelente programador, o cara é muito bom mesmo, mas eu sinto dificuldade para entender o código que ele escreve. Na hora que preciso alterar alguma coisa, o bicho pega.”
Conheço as duas pessoas e posso garantir que não se trata de incompetência de ninguém, pelo contrário, são ótimos profissionais. Ainda assim, o problema existe e merece atenção.
Esse texto é específico para programadores. Coisas que vale
lembrar de vez em quando.
Outro dia um colega me chamou num canto e fez um comentário mais ou menos nessas linhas: “olha, eu adoro trabalhar aqui, mas estou tendo um problema sério. O Fulano, da minha equipe, é um excelente programador, o cara é muito bom mesmo, mas eu sinto dificuldade para entender o código que ele escreve. Na hora que preciso alterar alguma coisa, o bicho pega.”
Conheço as duas pessoas e posso garantir que não se trata de incompetência de ninguém, pelo contrário, são ótimos profissionais. Ainda assim, o problema existe e merece atenção.
Para mim um bom programador é aquele capaz de fazer programas
fáceis de entender, fáceis de alterar. Se meus colegas não entendem meu código,
então não sou um profissional tão bom quanto pensava que era! Talvez seja hora
de reavaliar os meus hábitos como programador.
É bom ter em mente que quando a gente escreve um programa, o fonte
tem duas finalidades bem distintas: uma é fazer o computador produzir o
resultado esperado. A outra é comunicar de modo claro o que você entende sobre
o problema, facilitando ao máximo a vida do próximo programador, que vai manter
o software depois, quando você estiver fazendo outra coisa.
Como nós trabalhamos com máquinas o tempo todo, a gente acaba se
confundindo, achando que se o computador entende, então o ser humano tem que
entender. Não é bem assim.
Para um compilador não faz muita diferença se você colocar vinte
ifs, um dentro do outro. Do mesmo modo ele também não se importa quando acha
uma classe com duzentos membros, ou um método com duas mil linhas. O computador
não vai soltar nenhum “ai”. Já o ser humano, o pobre coitado que dará
manutenção na sua obra prima, esse sim vai se arrepender de ter nascido.
Ocorre que, diferente do computador, nossa mente é eficiente
apenas para pequenas quantidades*. Por isso quanto mais a gente divide, mais
fácil fica lidar com o mundo. Dividimos livros em capítulos, dividimos o tempo
em anos, meses, a semana em dias, dividimos os animais em mamíferos, répteis,
etc. Na verdade nós gostamos de dividir tudo. Dentre tantas coisas no universo,
porque você acha que o seu programa pode ser diferente, se é o mesmo cérebro
que tem que entender isso tudo? Você não pode quebrar as regras e ficar impune.
Veja, não é suficiente que seja “possível” compreender o que você
produz. Isso é só a sua obrigação. O que estou sugerindo é dar um passo além.
Na nossa profissão o passo além é ser capaz de tornar fáceis coisas que
normalmente se espera que sejam difíceis. Para um programador, isso equivale a
dominar a complexidade inerente a um problema ir encontrando suas propriedades
fundamentais, percebendo as características comuns, dividindo em pedaços
simples e deixando tudo explicadinho, levando essa abordagem até as partes mais
básicas.
Fora o tamanho, outra origem de dificuldade é o uso de construções
muito complexas.
Eu reconheço o valor de um profissional capaz de se manter
antenado nas novas tecnologias, sempre se aprimorando profissionalmente, sempre
afiando o machado. Com certeza isso é importante. Porém, se eu tiver que
escolher, eu não tenho dúvida: prefiro um programador que saiba produzir um
software simples e funcional do que um gênio que produz peças de alto grau de
complexidade técnica e que teremos que jogar fora no ano que vem. Se você usa
técnicas incompreensíveis para seus colegas, seu trabalho é inútil numa empresa
séria. Sinto muito.
Talvez dominar técnicas sofisticadas lhe confira um grau de
satisfação pessoal. Só que você não deveria exigir habilidades incomuns das
outras pessoas, porque provavelmente quem vai dar manutenção no seu sistema
será um profissional menos experiente que você. Isso é a coisa mais natural do
mundo. Tudo correndo bem, no futuro você estará desenvolvendo outros sistemas.
E quem vai manter o atual? O “sangue novo”, claro. Se o sangue novo não for
capaz de continuar com o produto, isso indica que ele é um incompetente? Talvez
seja. Porém o mais provável, independente do mérito do colega, é que você tenha
criado um problema para a empresa. Eu te pergunto: é interessante ter um
programador que cria este tipo de situação?
Você pode pensar “ah, qualquer coisa, se não entenderem meu
código, eu sento e explico”. Enquanto é muito bacana compartilhar conhecimentos
e poder explicar pessoalmente para um colega como se usa a técnica que os gurus
inventaram na semana passada, a verdade é que provavelmente o pobre infeliz do
seu colega não vai ter a mesma facilidade que você teve para digerir e empregar
esse conhecimento. Estou falando desse cara, que está sentado ali do seu lado
hoje. Agora imagine a pouca sorte do outro sujeito, aquele que terá que lidar
com o seu software daqui a dez, quinze anos, quando você já estiver navegando
em mares distantes.
Se me permite sugerir, meu nobre colega, não escreva código para
pessoas tão inteligentes e capacitadas como você. Compreenda e seja
compreendido. Lembre-se que um comunicador eficiente não exige vasto
conhecimento da sua audiência, procurando manter as coisas simples.
Dizem que certa vez Charles Chaplin e Albert Einstein foram a um
evento público e num dado momento, quando eram aclamados pela multidão, Chaplin
comentou com Einstein “eles te aplaudem porque NINGUÉM te entende, e me
aplaudem porque TODOS me entendem”.
Um abraço.
O JuciÊ
Nenhum comentário:
Postar um comentário