lunes, diciembre 26, 2011

Programacion de alto rendimiento

Todos los dias vemos surgir aplicaciones en Internet, la mayoria de ellas inutiles. El punto es que, de vez en cuando aparecen buenas ideas que mueren por no cumplir con el requerimiento de alto rendimiento, por consecuencia los usuarios las abandonan en cuestion de segundos.

Es por ello que como desarrolladores debemos considerar no solamente programar por programar, sino hacerlo con una orientacion al alto rendimiento, aun cuando pensemos que el numero de usuarios podria ser minimo.

Todo cuenta; el web server (software y hardware), el lenguaje de programacion utilizado en el servidor, el framework de javascript que utilicemos como front end o middleware, la base de datos, el diseño de la misma, los formatos y tamaños de imagenes, etc. Cada decision que tomemos respecto a la arquitectura juega un papel fundamental para el comportamiento final de la aplicacion, suena muy logico, pero muy poca gente hace incapie en ello; la mayoria de las decisiones se toman en base a las habilidades del equipo y/o de acuerdo a lo que "dictan las tendencias".

Comencemos pues con las decisiones, mucho se habla de cual es el mejor lenguaje de programacion? muchos alegan que es Java, otros que es PHP, otros argumentan que a la fecha no hay nada mejor que C/C++. Lo cierto es que todas las decisiones que se tomen a lo largo del proyecto tendran que ver con el contexto del mismo, habra que conocer las limitantes y caracteristicas de cada uno, los pros y los contras. Me es imposible discutir aqui cada una de las caracteristicas de cada lenguaje de programacion. Pero manejemos puntos generales de lenguajes de uso mas comun.

C/C++
Este lenguaje de programacion ciertamente continua siendo el mas rapido, por lo tanto se sigue utilizando para optimizar aplicaciones en las cuales se requiere un rendimiento superior, claro que hay que considerar que no todo en la vida es un compilador y que tambien se conjuga la calidad de los algoritmos utilizados. La desventaja es que programar en este lenguaje requiere de un especial cuidado, esto se debe a que hay que administrar el manejo de memoria en cuanto a los recursos de manera manual, esto implica la posibilidad de destruir recursos que pudieran ser utilizados a futuro generando errores de sistema, o por otro lado, la posibilidad de dejar recursos vivos por mas tiempo del necesario. Otra caracteristica de este lenguaje es que a pesar de existir versiones de el en casi todas las plataformas (PC, Mac, Linux, etc), existe la posibilidad de encontrar incompatibilidades que pudieran dificultar el portar el codigo de un lugar a otro.

Java
Java es uno de los lenguajes mas utilizados actualmente, es maduro y robusto; su fuerte son las aplicaciones de negocio, totalmente independiente de plataforma (siempre y cuando se cuente con una maquina virtual). Diversos frameworks se han construido para facilitar el desarrollo en este lenguaje: Struts, Faces, Spring, etc. Actualmente se cuentan con especificaciones, aterrizadas en productos, para lidiar con diversas necesidades de la industria de desarrollo; soluciones a la persistencia como JPA, inyeccion de dependencias (DI), programacion orientada a aspectos (AOP), etc. La administracion de recursos se realiza automaticamente gracias al recolector de basura (garbage collector), lo que facilita la administracion de recursos. De las grandes desventajas que presenta es la curva de aprendizaje requerida para construir una aplicacion completa, y aun asi, esto sera unicamente sobre un framework, dominar mas de uno de ellos requerira mucho tiempo y mucha paciencia.

PHP
Este lenguaje de programacion se ha popularizado por su sencilla curva de aprendizaje, su facilidad de desarrollo, su rendimiento y la facilidad con la que se puede dar mantenimiento a una aplicacion gracias a que no requiere compilacion; esto se debe a que este lenguaje pertenece a la familia de lenguajes de scripting. Su desarrollo no require licencias, otra ventaja. Dentro de las desventajas de este lenguaje se encuentran la poca oferta de frameworks que enriquezcan el producto.

En proximas publicaciones continuaremos con la discusion de aplicaciones de alto rendimiento.

No hay comentarios.: