Já faz algum tempo que diversos textos de blogs falam sobre uma tal de "JavaScript fatigue" (ou cansaço de JavaScript), que se refere aquele loop infinito de aprender uma nova tecnologia baseada em JS para depois saber que algo ainda mais brilhante e inovador já saiu no lugar. A questão é que o front-end para a web está em um fluxo de desenvolvimento tão agressivo que o tempo para aprender os novos frameworks e libraries parece nunca ser o suficiente, daí a síndrome de impostor bate a gente fica com aquela sensação de "e lá vamos nós, tudo de novo"!
No entanto, quase sempre, a nova stack do momento não é a resposta para os seus problemas. Novas tecnologias são desenvolvidas para resolver problemas que ainda não foram resolvidos ou para resolver problemas já conhecidos de forma mais eficiente. Mas, tudo vem com um preço, pois aquilo que é novo ainda não foi testado em batalha, de tal modo que escolher o que é mais recente, simplesmente por ser mais recente, pode ocasionar em riscos que você não vai querer ter no seu projeto.
Nesta perspectiva, organizei três pontos que você deve levar em consideração na hora de escolher as tecnologias que vão compor a stack do seu novo projeto de front-end.
Vamos nessa!
Siga o dinheiro
Ok, você encontrou um framework absolutamente fantástico, a documentação demonstra que problemas muito complexos podem ser resolvidos com apenas uma única linha de código. Você abre o seu terminal favorito e digita vorazmente:
npm install the-source-of-power
Sua mesa estremece, as luminárias piscam, tudo a sua volta se apaga, apenas o seu monitor permanece aceso com uma luz poderosíssima que atravessa o seu escritório, até que de repente...
Você vê que o último commit no GitHub foi realizado há 5 anos atrás.
É, eu sei, eu sei. Já aconteceu comigo várias vezes. Projetos muito interessantes e promissores podem simplesmente desaparecer e existem diversos motivos para que isso aconteça. Dentre esses motivos, está a questão do dinheiro. Porque, como todo mundo já sabe, projetos grandes precisam de desenvolvedores; e desenvolvedores precisam de café; e para comprar café é necessário ter dinheiro.
Portanto, é importante investigar como, porque e quem está por trás das tecnologias que você está interessado. É uma empresa consolidada que abriu parte da sua tecnologia para a comunidade? É uma startup que recebeu um fundo de investimento? É um desenvolvedor solo que mantém o projeto apenas no seu tempo livre?
Mesmo as tecnologias que são software livre e de código aberto podem receber injeção de dinheiro das big techs (estou olhando para você, Linux Kernel!). Em outros casos, projetos podem ser mantidos por times de desenvolvimento dessas mesmas big techs (tipo o React) e liberadas para a comunidade sob uma licença aberta. Por outro lado, isso não garante que tais projetos serão mantidos a longo prazo, tal como aconteceu com a Parse Platform, que foi subitamente descontinuada pela Facebook. O que nos leva para a próxima questão.
A importância da comunidade e do ecossistema
No meu primeiro estágio de front-end eu trabalhei com Phonegap/Cordova, que consiste em uma série de tecnologias que permitem o desenvolvimento de aplicativos móveis híbridos utilizando a stack de front-end para a web (HTML, CSS e JavaScript). Foi bem interessante, porque em 2013 era muito mais difícil desenvolvedor um aplicativo para smartphone - e mais difícil ainda era criar um aplicativo que funcionasse em todos os sistemas operacionais mobile.
De todo modo, nessa época, o Phonegap já tinha uma versão estável e que funcionava na maior parte dos dispositivos, bem como era um projeto mantido ativamente pelo Adobe. Apenas indicadores positivos. Legal, né?
Não. Não era legal.
A tecnologia do Phonegap só fazia sentido com os plugins, que eram aquilo que realizava a conexão entre o código em JavaScript e os recursos do smartphone, tal como câmera, acelerômetro, GPS, notificações, etc.
Acontece que os plugins eram em sua maioria desenvolvidos pela comunidade e não eram mantidos ativamente. A maior parte deles sequer tinha uma versão estável que poderia ser utilizada em produção.
A lição disso é que o ecossistema e a comunidade que está envolta de uma tecnologia são tão importantes quanto a tecnologia em si. Embora o Phonegap fosse estável, somente seria útil com os plugins adequados, de forma que utilizar esse código de terceiros tornava o Phonegap tão instável quanto os seus plugins.
Cuidado com o overengineering (excesso de engenharia)
Já começo dizendo que talvez você não precise de Redux no seu novo projeto baseado em React. Overengineering ou excesso de engenharia é uma expressão utlizada para se referir a situações onde um problema de engenheria de software recebe uma solução que é mais complexa do que o necessário. Soluções complexas implicam em mais tempo de desenvolvimento, tempo que poderia ser utilizado para desenvolver uma nova feature, a qual poderia agregar mais valor no seu projeto.
Usei o exemplo do Redux porque é quase padrão que ele seja utilizado para gerenciar o estado da aplicação em projetos React. Embora a arquitetura do Redux seja uma solução excelente, em contrapartida, é extremamente complexa e precisa de bastante boilerplate. Se você adicionar redux-saga ou redux-observable no jogo, daí sim que o negócio fica complicado!
Talvez MobX seja o suficiente para gerenciar o estado do seu app; ou talvez você precise apenas de alguns useState; ou talvez você não precise de nada! Tudo depende da complexidade e das necessidades do seu projeto, não vale a pena escolher uma tecnologia só porque todo mundo usa ou porque "é bom ter".
Considerações finais
Em síntese, as três dicas que eu trouxe aqui foram:
- É importante investigar como, porque e quem está por trás das tecnologias que você está interessado.
- O ecossistema e a comunidade que está envolta de uma tecnologia são tão importantes quanto a tecnologia em si.
- Soluções complexas implicam em mais tempo de desenvolvimento, tempo que poderia ser utilizado para desenvolver uma nova feature, a qual poderia agregar mais valor no seu projeto.
Espero que essas dicas ajudem você a escolher as tecnologias do seu próximo projeto em JavaScript.
Até a próxima!