A introdução ao Padrões de Projeto Head First nos exorta a a não reinventar a roda:
O senhor não está sozinho. A qualquer momento, em algum lugar do mundo, alguém está enfrentando os mesmos problemas de design de software que o senhor. O senhor sabe que não quer reinventar a roda (ou pior, um pneu furado), então procura os padrões de design – as lições aprendidas por aqueles que enfrentaram os mesmos problemas. Com os padrões de projeto, o senhor aproveita as melhores práticas e a experiência de outras pessoas, para que possa dedicar seu tempo a… outra coisa. Algo mais desafiador. Algo mais complexo. Algo mais divertido.
Evitar a reinvenção da roda proverbial é um um pouco da sabedoria padrão recebida nos círculos de desenvolvimento de software. Certamente há alguma verdade nisso, mas acho que é um pouco perigoso se for levado muito ao pé da letra – se o senhor negar categoricamente todas as tentativas de resolver um problema com o código, uma vez que qualquer biblioteca existente esteja instalada.
Não tenho tanta certeza. Acho que reinventar a roda, se feito corretamente, pode ser útil. Por exemplo, James Hart reinventou a roda. E ele gostou:
Reinventei a roda na semana passada. Sentei-me e codifiquei deliberadamente algo que eu sabia que já existia e que provavelmente também já havia sido feito por muitas outras pessoas. Em termos convencionais de programação, perdi meu tempo. Mas valeu a pena e, além disso, eu recomendaria que quase todo programador sério fizesse exatamente a mesma coisa.
Mas quem é James Hart? Apenas outro programador. Se isso não tiver peso suficiente para o senhor, o que lhe parece? de Charles Moore, o criador do FORTH?
Um segundo corolário era ainda mais herético: “Faça você mesmo!”
A abordagem convencional, aplicada em maior ou menor grau, é que o senhor deve usar uma sub-rotina padrão. Eu digo que o senhor deve escrever suas próprias sub-rotinas.
Antes de poder escrever suas próprias sub-rotinas, o senhor precisa saber como. Isso significa, para ser prático, que o senhor já as escreveu antes, o que dificulta o início. Mas o senhor pode tentar. Depois de escrever a mesma subrotina uma dúzia de vezes em outros computadores e linguagens, o senhor será muito bom nisso.
Moore seguiu isso de forma surpreendente. Durante toda a década de 70, enquanto implementava o Forth em 18 CPUs diferentes, ele invariavelmente escrevia para cada uma delas seu próprio assembler, seus próprios drivers de disco e terminal, até mesmo suas próprias sub-rotinas de multiplicação e divisão (em máquinas que as exigiam, como muitas faziam). Quando havia rotinas fornecidas pelo fabricante para essas funções, ele as lia para ter ideias, mas nunca as usava literalmente. Por saber exatamente como o Forth usaria esses recursos, por omitir ganchos e generalidades, e por pura habilidade e experiência (ele especulava que a maioria das subrotinas de multiplicação/divisão era escrita por alguém que nunca havia feito uma antes e nunca mais faria), suas versões eram invariavelmente menores e mais rápidas, geralmente de forma significativa.
Além disso, ele nunca ficava satisfeito com suas próprias soluções para os problemas. Ao revisitar um computador ou um aplicativo depois de alguns anos, ele frequentemente reescrevia as principais rotinas de código. Ele nunca reutilizava seu próprio código sem reexaminá-lo em busca de possíveis melhorias. Posteriormente, isso se tornou uma fonte de frustração para a Rather, que, como braço de marketing da FORTH, Inc., muitas vezes oferecia trabalhos com a suposição de que, como Moore tinha acabado de fazer um projeto semelhante, esse seria fácil – apenas para observar, impotente, como ele rasgava todo o seu código anterior e começava de novo.
E ainda há o Bob Lee, que lidera o desenvolvimento da biblioteca principal do Android.
Dependendo do contexto, o senhor quase sempre pode substituir “Por que reinventar a roda?” por “Por favor, não concorra comigo” ou “Por favor, não me faça aprender algo novo”. De qualquer forma, o oponente não tem um argumento real contra a criação de algo mais novo e melhor, mas também não quer admitir suas motivações doentias para tentar impedi-lo.
Mais sementes, mais flores, eu digo. Não construa casas sobre pias de cozinha. Reinventem. A maior parte da nossa tecnologia atual é uma porcaria e, mesmo que não fosse, quem sou eu para tentar impedir o senhor?
De fato. No mínimo, a frase “Don’t Reinvent The Wheel” deve ser usada como um chamado às armas para que o senhor se informe profundamente sobre todas as soluções existentes, e não como uma ferramenta para minar aqueles que querem legitimamente criar algo melhor ou aprimorar o que já existe. Em minha experiência, infelizmente, é muito mais o segundo caso do que o primeiro.
Portanto, não, o senhor não deve reinventar a roda. A menos que o senhor pretenda aprender mais sobre rodas, isto é.