ElePHPant (Eu tenho um desses! :D)

PHP: Sim, nós precisamos de padrões!

Ontem o InFog publicou o artigo PHP: Sim, nós precisamos de padrões que eu concordo em gênero, número e grau… então resolvi reproduzí-lo na íntegra aqui e adicionar alguns links/observações:

Se você é um programador web e tem o PHP como sua linguagem principal, ou uma das linguagens que mais usa, pode ser que você já tenha ouvido falar que a comunidade PHP está buscando se organizar e criar padrões para simplificar/melhorar/evoluir o ecossistema desta linguagem que é tão usada no mundo todo.

Se você ainda não ouviu falar disso, então está na hora de correr atrás e se antenar mais para não ficar para trás!

Onde começam os problemas?

PHP é uma linguagem criada para a web e cresceu na web. E isso tem seus pontos altos e seus pontos baixos. O ponto alto é que é realmente fácil começar a desenvolver para web com PHP, pois basta usar um servidor HTTP (ou o servidor embutido do PHP 5.4), um navegador, um editor de textos e pronto, você já começa com os “olá mundo!” da vida. Isso é algo fantástico no PHP e acaba trazendo muita gente para a linguagem.

Mas trazer muita gente significa trazer muita opinião, já que cada um pode fazer o que quiser e da forma que quiser. Com isso temos vários programadores, iniciantes ou não, construindo aplicações PHP em cada esquina por aí. Com várias aplicações sendo construídas  e nenhum padrão a se seguir, as pessoas acabam criando padrões e tentando convencer as pessoas que estão ao redor que  aquele padrão é bom.

No caso do PHP (e outras linguagens também), é possível escrever código de muitas maneiras diferentes e usando trocentos padrões e não padrões diferentes.

Como as pessoas acabam criando padrões e também acabam trabalhando em equipes de empresas e/ou comunidades, esses padrões se espalham e podem até se tornar padrões amplamente aceitos e utilizados. No PHP temos os padrões de código do PEAR e do Zend Framework, que são os mais conhecidos. Mas aí vem o pessoal dos outros frameworks e resolve que os padrões do PEAR do ZF não são tão bacanas assim e resolvem criar os seus padrões… Olha aqui o do CodeIgniter, o do CakePHP, o doKohana, o do Yii, o do … É, acho que já deu para entender, não é?

Neste cenário fica muito claro que existe uma segregação entre os frameworks e também entre os usuários e programadores destes frameworks. Todo mundo pensando que o outro é inimigo, concorrente, alguém a ser vencido e eliminado.

FIG

Como sempre existem aqueles que não buscam a guerra, aconteceu de um pessoal se juntar e começar a pensar “espera um pouco, qual é o motivo de brigarmos e repetirmos esforços?”, e desse questionamento nasce um grupo para tratar da interoperabilidade entre os frameworks, o FIG (Framework Interop Group).

E com isso as coisas se resolvem, o mundo se torna um lugar feliz e as pessoas passam a sorrir mais e a dormir melhor…

Não é bem por aí, já que, para funcionar a tal da interoperabilidade entre os frameworks, era necessário criar os padrões, para que todos trabalhassem de uma forma mais parecida e reaproveitável. O problema é, qual padrão usar? Já que, em teoria, todos estão corretos e cada um é o melhor de todos?

PSR

Depois de muita discussão começam a surgir as PSR (PHP Standards Recommendation), que são as recomendações de padrões para o PHP.

Veja bem, as PSR são RECOMENDAÇÕES, não obrigações. Ou seja, você faz se quiser fazer e se entender o bem maior que esta padronização pode trazer.

Com as PSR a tendência é ter componentes melhores e com mais possibilidades de reuso. Com isso podemos centralizar esforços em código bom e bons projetos, em vez de ficar cada framework com a sua comunidade refazendo tudo o que já existe por aí.

A PSR-0 trata do autoload de classes, assim não é mais necessário ficar fazendo o famoso include para trazer trechos de código de outros arquivos.

Já a PSR-1 é composta por regras básicas para a base de código, como arquivos sempre em UTF-8, namespaces seguindo a PSR-0, classes devem estar em StudlyCaps e métodos e funções emcamelCase, não usar a short tag do PHP e outras coisinhas.

PSR-2 é um guia de estilos mais completo, onde são definidos itens polêmicos como o uso de 4 espaços em vez de tabs, a abertura de chaves para classes, métodos e funções deve ser na linha abaixo da declaração, mas para blocos lógicos e laços deve ser na mesma linha (putz, esse me deu raiva… mas me acostumei com ele), e mais um monte de regras, que você se acostuma fácil depois de algumas horas seguindo.

Recentemente surgiu também o PSR-3, que descreve uma interface padrão para Loggers.

E o melhor de tudo é que o código das pessoas começa a ficar mais semelhante, mais organizado e isso facilita pacas na hora de manter um projeto que você não iniciou. Isso é empatia! Pensar no próximo (lembrando que muitas vezes “o próximo” somos nós mesmos uns meses depois).

Concluindo…

Padrões são bons, pessoal! Sério, a vida de desenvolvedor em comunidade (software livre, empresa, você e seu eu do futuro), fica muito melhor.

A comunidade PHP é conhecida por ser relaxada, desorganizada, preguiçosa e cheia de sobrinhos que pensam que programam e só sabem usar scripts prontos… Está mais do que na hora de mudar esse conceito sobre o PHP e sobre sua comunidade. A evolução está nos puxando para frente neste momento e não podemos ficar parados!

Fale sobre o FIG, as PSR e todo o movimento de melhorias e profissionalização do PHP com seus amigos, traga o pessoal para discutir e implementar melhores práticas e ajude a comunidade PHP a ser reconhecida como capaz.

(…)

Além disso, existe o PHP The Right Way, parada obrigatória para quem está aprendendo e/ou quer melhorar.

31 thoughts on “PHP: Sim, nós precisamos de padrões!

    1. Chavão

      Acho legal seguir o padrão, ninguém manda como você deve identar seu código, mas outros devs que pegar seu código vão se sentir mais confortáveis caso estiver num padrão.

    2. ZéDuino

      Pensando assim, você nunca participará de uma grande equipe/projeto e ficará apenas nos 4 digitos ($).. #ficaadica

  1. Pingback: Nós precisamos de padrões | PHP Maranhão

    1. tarciozemel

      Membro este que marotamente criou outro repo pra fazer o pull request, o que fez com que a contribuição de todos os envolvidos fosse “esquecida”… ¬¬

      1. Carlos Schults

        Mas você não precisa ficar apertando a barra de espaço quatro vezes…basta configurar no seu editor de textos ou IDE para que o tab utilize quatro espaços…

  2. Eric Ruiz

    Bah, achei que o tema era para debater PADRÕES e não LINGUAGENS… mas ok.

    Bom… aqui no trabalho, como 90% dos sistemas são PHP, adotamos ZF, e claro adotamos e seguimos o ZF coding standards (que na verdade cai nas PSRs)…

    Bem, o que posso dizer é que nossos códigos ficaram infinitamente mais legíveis e finalmente temos uma documentação de código automática e 99% funcional devido aos comentários melhor estruturados. Claro foi um pé no saco se acostumar com “regrinhas” chatas e configurar o Eclipse, mas valeu a pena.

    O fato é: nós programadores sempre precisamos de padrões de desenvolvimento, porém isso só fica claro quando saímos dos projetos pequenos e encaramos os grandes, onde a complexidade e a interdependência entre, não somente classes, mas principalmente os demais membros de uma grande equipe, se tornou indispensável para o sucesso do projeto. E o que dizer na interdependência entre sistemas? Afinal, somos PROgramadores e não POGamadores, não é?

    1. Eric Hideki

      Uma linguagem pode ser melhor que outra, porém em alguns detalhes. Cada projeto que sua empresa pretende desenvolver deve saber aplicar quais tecnologias atendem melhor a solução proposta. PHP ainda tem muito mercado pela frente, porém perdeu um pouco o foco diante as tecnologias do Ruby e Python, nada que prejudique o mercado PHP.

      Como toda generalização é burrice, sim, dizer que uma linguagem é completamente superior a qualquer outra é ser ignorante. Todas as linguagens podem e devem ser complementares, cabe ao desenvolvedor saber utilizar e aproveitar ao máximo o que cada um pode oferecer.

  3. Carlos Schults

    Olá Thiago, ótimo post.

    Só tenho uma dúvida: qual é exatamente a diferença entre StudlyCaps e CamelCase? Pois eu sempre considerei que o Camel Case tinha dois tipos: o UpperCamelCase (usado para nomes de classes) e o lowerCamelCase (usado para nomes de funções, variáveis e métodos).

    1. Thiago Belem Post author

      Fala Carlos,

      Eu não conhecia ou tinha ouvido falar de StudlyCaps até você perguntar.. mas segue o que encontrei:

      StudlyCaps encompasses all such variations,[5] and more, including even random mixed capitalization, as in MiXeD CaPitALiZaTioN (typically a stereotyped allusion to online culture).

      • CamelCase é o velho nomeLongoDeFuncao (lower camel case) ou NomeLongoDeFuncao (upper camel case)
      • StudlyCaps [de verdade] é qualquer tipo de padrão (até aleatório), podendo ser NoMeLoNgOdEfUnCaO ou até mesmo o nOMElONGOdEfUNCAO

      Mas pode ser que – hoje em dia – o StudlyCaps tenha se tornado algo menos “Orkutizado” e seja algo beeeem parecido com o CamelCase.

      1. Carlos Schults

        Legal, Thiago.
        Surgiu mais uma dúvida: qual o posicionamento oficial – se há algum – dos frameworks com relação a esse novo padrão? Eles recomendarão o abandono dos próprios padrões em favor das PSR’s?

    1. Thiago Belem Post author

      Realmente… Se pessoas com essa mentalidade deixarem a comunidade PHP, o PHP vai evoluir bastante.

      Enquanto os desenvolvedores ficarem com esse mimimi de A é melhor que B, nenhuma comunidade vai evoluir.

      1. Eric Hideki

        Como comentei acima, é burrice afirmar que uma é melhor que a outra, cada um tem seus pontos fortes e fracos. Infelizmente o PHP não apresentou crescimento nas soluções aplicadas, permitindo que o espaço para Python e Ruby crescesse, porém o PHP é uma tecnologia sensacional, com poderosos frameworks, o que realmente pega na questão da linguagem é o seguinte:

        A linguagem foi utilizada em épocas em que questões como testes, orientação a objeto e formas de melhoras de desempenho, coisas mais atuais, não eram na época tão importantes e divulgadas. Grande parte dos programadores são aqueles mais antigos, então não tem tanto conhecimento a respeito dessas metodologias, claro que vai de cada um, porém grande parte ainda não houve uma mobilização para que seja mudado esse cenário.

        Com certeza as pessoas que utilizam PHP hoje em dia estão se conscientizando das desvantagens que estão levando diante outras tecnologias, estão se mobilizando e trazendo e enriquecendo cada vez mais a linguagem.

        PHP ainda é a linguagem mais utilizada, seja para internet, criação de aplicativos em Flex e outras coisas mais, então não há o porquê de afirmar que está para trás, a questão que deve ser abordada é que não houve rapidamente a adaptação de boas práticas entre todos os programadores que desenvolvem em PHP.

        Não sei se estou errado diante dessa imagem que tenho, se estiver, gostaria de saber a opinião de vocês.

      2. Chavão

        Eu concordo com a frase: “Para evoluir saia do PHP e vá para Python ou Ruby.” em um ponto de vista!

        A comunidade Python e Ruby tem padrões e metodologias muito bem definidas e seguidas, se um programador PHP sair do PHP um pouco e ir passear em uma dessas linguagens, o conhecimento e a forma de programar vai mudar completamente.

        Assim como acredito que tenha me tornado um programador PHP bem melhor após de trabalhar o último ano inteiro com Java.

    2. Angelito M. Goulart

      O PHP está evoluindo assim como toda linguagem. A diferença é que há alguns anos atrás era a linguagem totalmente dominante na web. Agora com o crescimento de Python e Ruby tem gente desprezando o PHP. Uma linguagem pode até influenciar, mas quem determina a qualidade de um código, é o programador.

Comments are closed.