segunda-feira, junho 30, 2008

Elegância Vs Desempenho

Na maior parte das vezes fazer código elegante (que seja extensível, de fácil manutenção, etc) e com bom desempenho é a mesma coisa que por duas pessoas em extremos opostos de uma corda a puxarem para seu lado.

A minha filosofia em relação a este assunto é que os problemas de desempenho podem ser numa primeira fase postos um pouco de lado, a não ser que se saiba à partida que estamos a fazer um pedaço de software que necessita de ter um desempenho optimizado ao máximo. Geralmente os maiores problemas surgem quando o que está feito não é exactamente o pretendido pelo cliente, logo o melhor é ter um código que facilmente se modifique e se adapte a novas necessidades.

Logo a fórmula que uso será 80% para elegância e 20% para desempenho, isto traduzindo na prática é o mesmo que dizer que dou privilégio a um código de fácil extensibilidade e manutenção, mas quando vejo que isso me vai claramente custar no desempenho procuro uma solução alternativa/intermédia.

6 comentários:

  1. Não faria mais sentido começar por fazer o chamado código elegante e de fácil manutenção/alteração e mais para o fim do projecto começar a efectuar optimizações de desempenho?

    Eu não tenho ainda muita experiência e se calhar é exactamente por isso que acho importante ter um código mais elegante inicialmente.

    ResponderEliminar
  2. Só há um problema com o deixar a optimização para depois: nunca é feito! :D

    ResponderEliminar
  3. As "Rules of Program Optimisation", de Michael A. Jackson, exprimem bem a minha opinião relativamente a este assunto:

    Rule 1: Don't do it.

    Rule 2 (for experts only!): Don't do it yet

    ResponderEliminar
  4. Parece que há mais gente a partilhar da minha opinião. Por acaso não sou muito de seguir regras pré definidas, mas sim adaptar-me pela experiência que possuo e é com base nessa experiência que escrevi a minha opinião.

    Quanto a deixar as optimizações para o fim e nunca as fazer o que a experiência me diz é que quando as coisas "caiem" as optimizações são sempre feitas mas estamos a gastar tempo num ponto que já sabemos que é fundamental.

    Agora também não acho que se deva deixar tudo para o final e esperar que a torre não se "desmorone" muito, temos de ter uma atitude minimamente preventiva (os tais 20%) em pontos que à partida é expectável que tenham problemas de desempenho.

    ResponderEliminar
  5. Sabes que mais: eu também concordo contigo...

    Mas melhor, posso-te dizer da experiência que não houve um projecto (UM!) em que não me tenha arrependido mais tarde de não ter tido mais preocupações com o desempenho no início do projecto.

    Por outro lado, pode-se sempre dizer que se o código fôr suficientemente elegante, extensível, flexível e intermutável... então não terás problemas.. essas mesmas características que tanto procuras para salvaguar a possibilidade de fazer adaptações ou mesmo mudar inteiramente de rumo ao sabor de ventos que não controlas (é esse o problema, não é?)...

    ...essas mesmas características (elegância, pureza e abstracção) também te permitirão derivar um projecto altamente optimizado, ou optimizável...

    Não sei se me faço entender, até porque o meu discurso parece um pouco...despistado? talvez um pião de 360º

    ou seja, a moral desta história é que, mesmo reconhecendo o tal erro, estou preparado para o fazer de novo, com a convicção de que sim, elegância, pureza e abstracção.

    ResponderEliminar
  6. O fraco desempenho, na maior parte das vezes, é devido a um problema de (e não na) elegância :-) Muitos espremem ciclos de relógio. Eu perfiro encontrar alternativas...

    ResponderEliminar