Reinvente a roda. Quantas vezes forem necessárias!

AGRADEÇA AO AUTOR COMPARTILHE!

Quem nunca ouviu a frase “Não reinvente a roda”? Pra quem diz, isso faz sentido e parece bem inteligente… em partes. Explico:

Ao contrário do que se possa pensar, “reinventar a roda” nem sempre é algo ruim. Se levarmos em consideração que nem todo mundo sabe tudo sobre todas as coisas do universo, reinventar a roda pode ser um processo criativo extremamente valioso para quem executa, além de abrir a mente para problemas comuns, problemas novos, e, obviamente, suas soluções. Um exemplo:

Digamos que uma pessoa não saiba absolutamente nada sobre manuseamento de imagens com PHP, então ela estuda um pouco aqui, um pouco ali, e resolve postar no StackOverflow sobre um problema qualquer que teve durante seu aprendizado. Até este momento, ela está aprendendo sobre funções nativas de uma linguagem da qual não tem tanta experiência, ou seja: está adquirindo muito, mas muito conhecimento. Até que começam a chegar respostas à sua pergunta:

“Pra quê se matar com esse monte de função só pra mudar uma imagenzinha, quando você pode baixar uma biblioteca que faz isso pra você? Não reinvente a roda, cara! Se preocupe em entregar o software!”

“Besteira. Baixa o <<nome da biblioteca aqui>> que ele já faz isso tudo pra você.”

“Usa o Super-hiper-mega-ultra Framework 2000, ele tem 98136278 módulos, incluindo um de gerenciamento de imagem”.

As três respostas acima são baseadas em situações reais, que eu já vi no próprio StackOverflow. A partir desse momento, as chances do desenvolvedor desistir do código que ele estava escrevendo e optar por baixar um script pronto são altas. E qual o problema nisso? Se estamos falando de um desenvolvedor mais experiente, que já tem uma certa noção de como a coisa funciona e ficou com uma dúvida extremamente específica, não tem problema nenhum. Talvez realmente seja melhor ele não reinventar a roda e apostar num código de terceiros. Mas e se, por acaso, estivermos falando de um total iniciante que, como mencionei acima, não tem noção nenhuma de como funcionam as ferramentas da linguagem para fazer o que ele quer (no caso do exemplo, manusear imagens)?

Aí sim, temos um problema: ele pode até conseguir fazer o que quer, mas vai deixar de adquirir um conhecimento importantíssimo para qualquer iniciante, coisa que mais pra frente pode causar problemas na sua carreira de desenvolvedor.

Imagine que esse foi o primeiro caso, e que isso vai acontecer mais algumas vezes. O desenvolvedor em questão vai se tornar mais um adepto do “Não reinvente a roda”, e vai passar a depender 100% de códigos de terceiros. Isso sim é péssimo, horrível, uma das piores coisas em qualquer desenvolvedor. É neste momento que diferenciamos um “programador” de um “digitador de código”, ou pior, de um cara que não consegue fazer nada que já não exista, um cara que teve toda a sua capacidade de inovação podada.

Obviamente, isso é uma escolha do desenvolvedor, e não seria justo culpar as pessoas que o ajudaram no StackOverflow, por exemplo. Mas o fato é que quando nos dedicamos a ajudar pessoas que estão iniciando em algo que já temos experiência, é importante destacar todas (ou algumas das melhores e piores) formas de se fazer algo. Assim esse desenvolvedor vai ter muito mais chances de crescer, além de aprender muito mais e até se tornar apto a contribuir com alguma biblioteca mais rapidamente, algum dia. Veja bem:

Se esse desenvolvedor aprendeu do jeito certo, isto é, aprendeu, inicialmente, sem precisar recorrer a bibliotecas de terceiros, ele vai ter a mesma experiência que profissionais que contribuem com algum projeto open source, logo, ele vai poder contribuir de forma ativa nesse projeto, já que sabe como tudo funciona.

“Mas um iniciante pode muito bem baixar o código de um projeto pronto e ler para entender como funciona!”

É um argumento válido, admito. Mas… se estamos falando de um iniciante, que não faz ideia de como as coisas funcionam, talvez seja “um pouco” complicado para ele, de repente, ler um projeto inteiro para entender como funciona o manuseamento de imagens no PHP. Ele pode aprender com isso, com certeza. Mas nada vai ser mais efetivo que o bom e velho php.net para ele conhecer de verdade o que cada função faz, e como faz.

O que eu quero dizer é que, se soubermos detalhar melhor as respostas quando estivermos contribuindo com o aprendizado de qualquer pessoa, estaremos ajudando de forma direta na carreira dessa pessoa. Induzir um iniciante a algum vício de quem “é de casa”, por assim dizer, é o contrário de ajudar, por mais que pareça brilhante na hora que o iniciante responde “nossa, não sabia que era tão fácil! Fiz em 1 linha o que estava tentando fazer com 15!”.

O que eu sempre faço quando vou ajudar alguém em qualquer coisa que eu tenha um certo conhecimento é:

  1. Explicar, resumidamente, como foi minha curva de aprendizado para determinada coisa;
  2. Dar alguns exemplos de como funciona essa determinada coisa;
  3. Detalhar que existem “N” formas de se fazer, mas deixar claro que é importante aprender do começo.

Pode parecer muito mais chato do que dizer “É só baixar a <<nome da biblioteca aqui>>!”, e é. Mas no final, me sinto muito melhor em ver que a pessoa está aprendendo de verdade, e que vai levar esse aprendizado para outros projetos, repassar para outras pessoas e etc. e tal.

Por fim, minha dica para quem está aprendendo qualquer coisa está no título deste artigo: Reinvente a roda quantas vezes forem necessárias. Crie um projeto particular, escreva códigos de exemplo, pesquise, corra atrás. Só deixe de “reinventar a roda” quando você tiver pelo menos 80% de certeza de como essa roda funciona. Os outros 20% só o tempo vai ensinar.

E você? O que acha sobre esse negócio de reinventar a roda? Concorda? Discorda? Opiniões, críticas, textões, desabafos, reclamações e o que mais der na telha são bem-vindos. Tudo será lido e respondido com a mesma consideração. ;)

AGRADEÇA AO AUTOR COMPARTILHE!

4 Comentários

Laercio
1

Pois é, infelizmente aqui no Brasil poucos estão realmente dispostos a contribuir com conhecimento.. geralmente quando o fazem fazem desse jeito só colocam a linha q “resolve o problema” e fica por isso msm.. Parabens pelo artigo

Antônio Abrantes
2

Concordo plenamente!! Inclusive, no que diz respeito a aprendizado, sempre procuro implementar os códigos da forma mais bruta possível e sempre procuro aconselhar meus colegas a fazer o mesmo! Acredito que saber não apenas que as coisas funcionam, mas como elas funcionam, provem um entendimento muito mais pleno! Parabéns pelo artigo!!

Richard
3

Eu sou a prova disso. Iniciei em PHP e a maioria dos conselhos em fóruns era pra usar o framework tal. Haviam até duelos que qual era o melhor. Nem entendia nada de orientação a objeto e fui navegar nesses mares. O resultado foi drástico, alta curva de aprendizagem e não consegui sair do 0. Comecei então a fazer o código bruto, fazendo validações, rotas, páginas, etc. Comecei então a repetir os códigos e a partir daí comecei a entender a necessidade da orientação a objetos gradativamente, uso de classes, métodos, privado, protegido, público… Naturalmente as coisas foram fazendo sentido. O resultado disso foi um mini framework, uma estrutura de arquivos e diretórios que estão cada um fazendo a sua função. Há tempo pra tudo, tempo para aprender a linguagem e tempo para aprender um framework.

Eduardo Weidman Barijan
4

Concordo com o artigo e a posição do autor. Por isso que os fóruns de desenvolvimento eram muito valiosos. Contribuia bastante em alguns e sempre nessa pegada de ensinar mesmo, não de apontar atalhos, como costumávamos chamar essas soluções prontas. Quando se está aprendendo não tem nada melhor do que você ficar só com a linguagem que está aprendendo e sua documentação. Os mentores que porventura estiverem com você devem prezar pelo seu aprendizado e te mostrar como resolver as situações sem depender de código de terceiros. Claro que no nível profissional você vai usar frameworks e outras bibliotecas. Mas vai usar sabendo o por quê e não só porque alguém falou que deveria. Parabéns e obrigado pela contribuição.

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">