Projetos e dependências do PHP são mais estáveis que as do Javascript.
TL;DR;
Neste artigo eu comparo a estabilidade do PHP e suas dependências de modo geral com o Javascript quando usado para aplicações Back-End, entendendo que a união perfeita de reusabilidade de código e inovação se beneficia da união das duas linguagens, sendo PHP para back-end e javascript para front-end ou para situações específicas não suportadas pelo PHP.
Contextualização
Me considero especialista em PHP, trabalhei em projetos de todos os portes e frequentemente migro bibliotecas, classes, reutilizo bibliotecas de terceiros em diversos projetos até mesmo em versões distintas da linguagem com o PHP 5 para o PHP 7 ou 8, o que sempre me agradou no PHP que dificilmente uma biblioteca PHP ao ser atualizada quebra sua base de código principal ou exige refatorações absurdas, tenho observado ao comparar com javascript e python que o PHP + Composer permitem atualizações suaves entre versões e exigindo pouca manutenção de código.
Já no JavaScript, que é conhecido pelo seu rápido ritmo de atualizações (mais 10 frameworks foram criados neste momento rs) e pelo “dependency hell” do npm, vejo um cenário bem diferente, com pacotes frequentemente exigindo grandes refatorações.
Quero convidar vocês à compartilhar as experiências sobre este comparativo no que tange a estabilidade ou a constante evolução das dependências impacta a eficiência e a longevidade dos projetos. Não é meu objetivo comparar o que uma linguagem faz e outra não, a minha questão aqui, é que no meu ponto de vista o PHP permite maior reusabilidade e menor refatoração para atualizações dos sistemas, o que garante que uma mesma base de código já testada e validada pelo tempo continue a gerar valor sem grandes esforços de atualização por incompatibilidade.
Experiência profissional
Trabalho com PHP desde 2005, um período anterior à criação do Composer. Na época, não existia um gerenciador de pacotes que tornasse o desenvolvimento mais organizado, como temos agora. Desde que o Composer se popularizou entre 2013 e 2015. Ao longo dos anos, observei o PHP evoluir de maneira bastante estável e contínua o que para outros pode ser considerado "lenta".
Peguei um relatório no meu Bitbucket, Github e WakaTime, e hoje em dia quando falo de linguagens que mais tenho contato chego nestes números:
- Javascript/Typescript/Node.js: 50%
- PHP 35%
- Python e outras 15%
Como podem ver, mesmo o PHP sendo minha linguagem principal, sou extremamente ágil no desenvolvimento com PHP, atribuo isso à estabilidade da linguagem e dependencias, que me permite focar em outras linguagens como Python e JavaScript para realizar as tarefas que tais linguagens me beneficiam melhor, como Aplicativos Mobile, Microsserviços e processamentos de alta carga de dados, dito isso, acredito ter uma visão bem ampla sobre o gerenciamento de dependências em diferentes ambientes e como cada ecossistema lida com as mudanças e a reusabilidade de código "legado" entre estas diversas linguagens.
PHP e Composer: Um Ecossistema Estável
Desde a adoção do Composer, a comunidade PHP passou a ter uma estrutura mais sólida para gerenciar dependências. Mesmo com as atualizações para versões mais recentes, como PHP 7 e PHP 8, a transição entre versões é geralmente suave, e muitas vezes não exige grandes alterações no código. Isso contribui para a longevidade dos projetos, o que vejo como uma grande vantagem para sistemas que precisam de manutenção a longo prazo.
Exemplos práticos que ilustram essa estabilidade incluem:
- Compatibilidade entre versões: Classes e pacotes desenvolvidos para PHP 5, por exemplo, ainda funcionam bem nas versões mais recentes, o que ajuda na continuidade dos projetos.
- Atualizações graduais e incrementais: O PHP tende a respeitar a compatibilidade reversa, evitando alterações bruscas que poderiam exigir grandes refatorações, observamos quebras em versões maiores como PHP 5 para o PHP 7, mas depois do 7, as alterações são menos nocivas para o 8.
JavaScript e NPM: Atualizações Constantes e “Dependency Hell”
Trabalhando com JavaScript em projetos com Node.js, React, e React Native nos últimos anos, tenho notado um cenário bem diferente. O npm é um gerenciador poderoso, mas sua fama de “dependency hell” não é à toa. Instalar uma dependência simples muitas vezes traz dezenas ou até centenas de pacotes secundários, que facilmente vão ocupar 100mb até alguns gigas dependendo do projeto. Esse rápido ritmo de atualizações faz com que um projeto iniciado há pouco tempo, como 1 ou 2 anos, possa precisar de uma grande atualização para se manter funcional.
Não acredita? faça o teste de pegar um tutorial de desenvolvimento de aplicativo com React-Native de 1 ou 2 anos atrás sem pegar o arquivo .lock, apenas usando os comandos de instlação das dependencias e me diz se vc consegue rodar o "hello world".
Entre as principais dificuldades que já enfrentei com dependências no JavaScript estão:
- Excesso de dependências secundárias: Cada pequena biblioteca parece trazer uma cadeia enorme de outras bibliotecas.
- Refatorações frequentes: Até frameworks estabelecidos, como React e React Native, exigem grandes adaptações com as atualizações.
- Boilerplates obsoletos rapidamente: Com frequência, noto que tutoriais ou boilerplates criados recentemente já estão desatualizados e precisam de configurações específicas para funcionar com versões atuais.
Conclusão
Acompanhando de perto a evolução das linguagens que trabalho todo dia percebo que a estabilidade do PHP, é uma vantagem clara para projetos de longa duração ao custo de baixa inovação. Em contraste, a rapidez de evolução do JavaScript pode ser positiva para inovação, mas torna o processo de atualização mais caótico, exigindo que os desenvolvedores refatorem seus projetos com frequência.
Em suma a união do PHP com Javascript é perfeita, mas nos quesitos de custo de manutenção e refatoração o PHP para mim é um vencedor no quesito de linguagem Back-end.
Agora, quero ouvir de vocês: viajei muito? qual é a sua opinião?