Executando verificação de segurança...
6

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?

Carregando publicação patrocinada...
3

Uma coisa interessante é que sempre que vou atualizar as depencências dos meus projetos Laravel já rodo junto a atualização do npm, e ,enquanto o composer mostra tudo perfeito, sempre o npm mostra algum problema que está acontecendo nos pacotes. É incrível, não tem uma vez que não diz que algo está depreciado ou com problemas. O da vez é uma versão descontinuada do sass css.

2

A minha percepção é que era moderna do Javascript, isto é, após jQuery, foi a primeira linguagem de programação profissional de muita gente devido ao boom e, por tanto, sem bagagem ou noção alguma de padrões de projetos, ou ecossistema que uma linguagem de programação requer.

Quando todo mundo passou a usar,

  1. os gerenciadores de pacotes estavam muito crus e basicos devido a gama enorme de ambientes que o JS estava sendo usado (desktop, mobile, web, embacados...) por isso tantos
  2. horrível de programar e encontrar erros, e por isso surgiu o TypeScript.
  3. não existiam tantos pacotes para instalar, e os que existiam ou não eram conhecidos, ou as pessoas simplesmente não queriam aprender a usar-los, ou não queriam contribuir ou aceitar contribuição, por isso tantos pacotes semelhantes, e todos os semelhantes incompletos, sempre faltando uma funcionalidade
  4. muitos packages de pequenos devs mantidos no tempo livre

No boom das aplicações web, quando Laravel conquistou os devs de PHP, o PHP já era solido como linguagem. Antes do Laravel, já existia comunidade, frameworks estável e MUITO bem estruturado. Quando Laravel surgiu passou a usar muitos pacotes do framework Symfony, pois não precisa reinventar a roda, e a comunidade do Laravel passou a contribuir com a Symfony. Do ponto de vista de engenharia, o Laravel basicamente reuniu os melhores pacotes, usando padrões de projetos otimizou a integração com um trabalho de engenharia maravilhoso, tornou customizavel de maneira simples, configurável, ótima curva de aprendizado com uma documentação completa e de fácil compreensão.

E quando falo de PHP, desconsidero qualquer coisa que não é orientado a objetos, por exemplo, o wordpress.

1

PHP é complicado - uma limguagem antiga, cheia de vicios, de uma outra epoca - mas que tem uma base instalada bem solida, otima documentacao, excelentes frameworks e literalmente milhares de linhas de codigo de exemplo.

So que depende tanto de frameworks - que as vezes a pessoa nem "aprende" PHP, mas aquele framework especifico (p.ex. laravel e filamentphp).

Javascript, por outro lado, como colocado no texto - eh um pesadelo. Simples assim.

5

PHP, JavaScript, Java todas surgiram no mesmo ano de 95. Antigo é Cobol, Pascal, C... Nessa época dava pra fazer besteira em qualquer linguagem. Todas evoluíram e destaco o PHP, que hoje em sua verão 8.4 a ser lançada este mês, está melhor e mais estável do que nunca.

Essa galera que fazia consulta no banco no meio do html em PHP 5, se não aprendendeu a como estruturar um bom projeto, ficou pra trás com toda a certeza. Se você pegar um código interno do Laravel, por exemplo, vai ver que nada mais é do que vanilla PHP muito bem estruturado, com padrões de projeto, arquiteturas, patterns etc, mas que não deixa de ser PHP puro. É a própria demonstração do poder da linguagem que pode ser usado por bons programadores e outros enfadonhos também.

1

web é tenso mesmo, quando iniciei na programação fiquei no dilema, aprendo c, c++, .net ou java por ser uma linguagem desktop e que não tem tanta dependencia podendo focar em uma linguagem só ou vou pra web que pra começar tenho que aprender: php, javascript, html e css?

tem vezes que eu me questiono se fui pro lado certo kkk