Jump to content

Readability versus Performance


alexviseu
 Share

Recommended Posts

Ora boas.

Voltei a Portugal passado um ano e tal no estrangeiro e tenho trabalhado como freelancing online em PHP desde 2009 (era o meu ganha pão). Agora decidi enveredar pelo mercado de trabalho português e para os processos de recrutamento fiz os típicos básicos testes de algoritmia de PHP, como ordenar arrays e fazer paginações.

Uma coisa que notei, tanto na avaliação feita aos meus troços de código, como no ênfase durante as perguntas não técnicas, é uma certa obsessão, quase evangélica, pela performance em código PHP.

Tendo crescido e vivido em regime de freelancing, em projectos pagos à hora, e muitas vezes responsável por mais pessoas do que só eu (tanto em desenvolvimento como em manutenção) acabei naturalmente por me render à máxima de que o que conta no final de tudo, é quão bem um projecto funciona, quão expansível este é para o futuro, e quão fácil (leia-se barato) de fazer manutenção/alterações.

Como consequência sigo por defeito uma filosofia do Readability before Performance. Isto essencialmente acaba por dizer que as prioridades de organização de código e algoritmia são as seguintes:

  1. O código deve de funcionar
  2. O código deve de ser o que for rápido de escrever e também mais fácil de ser entendido por quem vier depois.
  3. O código deve de ser o menos complexo possível (mais complexidade origina mais potenciais vulnerabilidades).
  4. Se a performance do código for determinada sendo preponderante à performance da aplicação, então aí sim, alterar o código de forma a ser rápido o suficiente (idealmente ainda assim mantendo os 3 pontos acima descritos).

A meu ver os ganho de performance relevantes tipicamente acabam por ser feitos no acesso à base de dados, no acesso a WebServices e no acesso ao FileSystem. Operações que por norma, só por si, demoram muitas ordens de magnitude do que qualquer código de PHP.

Parece-me que esta obsessão da performance PHP acaba por ser mais académica do que prática, e vejo-a mesmo como nociva, tanto à segurança da aplicação, como à eficiência que deveria de importar mais (a económica).

Estou com muita curiosidade desta diferença de postura que eu tenho com o que eu vejo sendo a aparente postura dos programadores seniors nas empresas em que me fizeram as avaliações. Especialmente visto que este é na prática o meu primeiro contacto com o mundo empresarial português em termos de PHP.

Estou maluco, out-of-touch com o verdadeiro mundo empresarial ou quê? Que opinam?

Link to comment
Share on other sites

Viva,

Pergunta: frameworks php? Não falaste. Normalmente as empresas optam por usar uma ou outra framework para simplificar o trabalho de equipe. Deduzo que ao trabalhares com aplicações complexas, acabes por criar código que muitas vezes as Frameworks já o trazem por defeito. Também é verdade que muitas frameworks começam a ficar bloated e em certas operações, reduzem a performance.

Muitas vezes a performance prende-se também com níveis de cache que não têm propriamente a ver com a implementação PHP: cache de opcode, cache de queries, optimização de base de dados, cache de respostas... também não falaste em cache.

Já quanto à qualidade de código, penso que é menos relativo. Basta seguir os PSRs e usar ferramentas como phpunit, codesniffer e phpDocumentor e o teu código terá sempre qualidade.

A rapidez com que se produz código parece-me mais relativo. Provavelmente se dominares bem uma Framework podes produzir soluções mais rápido, do que se usares uma nova implementação ou algo que não estejas tão acostumado.

EDIT: já agora... ultimamente tenho estado a trabalhar com Laravel... e claro, nos meus tempos livres, na Duality, desenvolvida por mim.

Edited by taviroquai
  • Vote 1
Link to comment
Share on other sites

Em geral acho que a preocupação em termos de optimização que deve existir desde o início é ao nível da complexidade assimptótica, e mesmo a este nível, em código devidamente encapsulado, é provável que a maioria dos potenciais problemas possam ser resolvidos mais tarde.

E diria que isto é a abordagem "académica" (não me parece que a tua classificação da obsessão por performance de "académica" faça muito sentido, pelo menos no mundo académico que conheço).

Contudo, não sei até que ponto uma abordagem baseada nestes princípios funciona na prática (a minha experiência no desenvolvimento de aplicações web é praticamente inexistente), visto que há demasiadas questões a ter em conta no que diz respeito à optimização de aplicações web hoje em dia. Uma ideia que tenho de algumas experiências a tentar optimizar certas aplicações web, é que em certos casos o pessoal não só não tem grandes preocupações com performance desde o início, como no final também não analisa devidamente o desempenho da aplicação em utilização real para detectar pontos onde a aplicação pode e deve ser optimizada. E se por um lado estar obcecado com performance é mau, não ter qualquer preocupação com performance também o é (na minha opinião).

A eficiência económica é uma questão complexa, na medida em que não é só o custo de desenvolvimento do código que deve ser contabilizado. Será preciso considerar os custos de infra-estrutura, e o custo da utilização da aplicação (que incluem a satisfação dos utilizadores e/ou o tempo perdido pelos mesmos na sua utilização).


Battousai, é curioso que o paper do Knuth sejam tão citado nestas questões de optimização prematura, quando o principal objectivo do paper é precisamente defender a optimização prematura usando os gotos. Ou seja, o paper é citado sobretudo por causa de uma frase que vai contra a ideia geral do mesmo 😄

Link to comment
Share on other sites

Não queria citar o paper propriamente, mas mais a ideia passada pelo link directamente colocado ( que se calhar nem foi o melhor para passar a ideia geral 😛 ).

Na minha opinião, uma aplicação bem estruturada, com princípios sólidos de POO, é mais tarde mais fácil de optimizar. Isto porque se devidamente desemparelhadas, as layers podem entrar em cache mais facilmente.

Preocupar com performance como prioridade máxima em vez de estrutura de código, pode significar emparelhamento de responsabilidades e, em grandes projectos com alterações constantes, a um elevado custo de manutenção.

Edited by Battousai
Link to comment
Share on other sites

Eu pessoalmente tenho o desempenho em muita consideração, tendo também sempre saliente todas as normas de segurança que devem ser aplicadas.

Há uns valentes meses (anos vá..) comecei a utilizar uma extensão do chrome denominada "Page load time", cujo objectivo, como é óbvio pelo nome, é detectar o tempo de demora de uma página até esta ser carregada por completo. Para mim é bastante útil para ir fazendo comparações. De salientar que é necessário, para se atingir todos os fins, fazer CTRL + F5 (pelo menos no Chrome) para eliminar toda a cache.

Lá no trabalho o patrão não tem a vertente do desempenho muito rígida (não a tem sequer) pelo que tenho que ser sempre eu a forçar este desempenho e a preocupar-me com ele, o que para mim é natural, pois deve ser iniciativa do programador.

Edited by bioshock
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.