lunes, 15 de diciembre de 2008

Ya se me habia olvidado!!!

Después de un buen tiempo sin poder regresar a esta parte que había propuesto hace algún tiempo, ahora después de trabajar duro y estarme matando para detectar problemas, tengo muuuuuchas experiencias propias que pudieran ayudarles a mejorar el rendimiento de las aplicaciones.

Aclarando que no soy fan de la lectura profunda (libros completos) y que si me equivoco aquí será porque no lo he comprendido bien y no por que lo haya sacado de un libro del que no recuerdo ni el titulo. Todo lo propuesto aquí será por experiencia propia y porque se ve el correcto funcionamiento en la práctica. Así que empezamos.

Obviamente todos dirán que la mejor aplicación es la que se analiza y se modela bien desde el inicio, ¿cierto? Bueno pues tienen razón, ahí si no digo nada, no sea que los grandes filósofos de la programación se me vengan encima, efectivamente si lo planeamos bien vamos a tener una súper aplicación que hace todo lo que se pidió, un agradecimiento y un súper bono para el analista y su equipo, la aplicación funcionara perfectamente por unos cuantos años tendremos un modelo que nos permitirá agregar o quitar módulos a la aplicación sin tener que realizar una gran cantidad de modificaciones a lo ya hecho. Pues si eso es lo que nos venden lo proveedores de software de la actualidad, pero que pasa con el resto, con lo que solo pocos programadores saben o se atreven a hacer, que pasa con el tunning de la aplicación, porque no todo programador se enorgullece de sus “hijos” (programas valga la redundancia para los que digan que exagero) diciendo pues sí, hace lo que me pidió el líder de proyecto o el cliente, pero además algo de lo que él no se preocupo (por que el cliente no se lo pidió o porque es aburrido fijarse en los detalles ocultos) esta aplicación lo hace en NN milisegundos, también note que el consumo de CPU al hacer una prueba de stress con el número de usuarios que suponen será el actual era de un máximo del 10% y aunque solicitamos que el equipo ejecutor tuviera NN Gb de memoria RAM vi que el consumo estaba por debajo de los 500 Mb con lo cual lo que al analista suponía un tiempo de vida sin modificaciones de 2 años yo como programador asumo que serán mínimo 5.

Estuvo bueno el choro pero quién diría algo así, por lo menos no lo he escuchado de muchas personas (programadores) hablamos de cuanto nos pagan, de que tan grande es la aplicación, de quien lo hace mejor o más rápido, pero efectivamente pocos se interesan en hacerlo bien, bueno pues poco a poco iremos tratando temas de optimización de código y además intentare dar una explicación del por qué deberíamos de utilizarlo así o por lo menos por qué yo lo uso así y en qué forma me ha ayudado.

El primer punto y fuerte es algo tan sencillo y tan concurrente a realizarse en la toma de decisiones en un programa el tan simple (depende de cómo lo uses) y sofisticado if

A poco no es común hacer una comparación como estas:

if(opción==1)…
if(opción.equals(“ALTA”))…

Bueno en esta entrada no veremos nada de si usas bien o no el if, pero si hay algo aquí que cambiándolo por unas cuantas líneas de código mas y suponiendo que esta comparación se realiza unas cuantas miles de veces o más, el ahorro que se tendría en cuanto al uso de CPU y Memoria seria considerable, claro no es solo un if, sino el “warning” que veremos a continuación.

El comparar una variable contra una constante es un uso común en los programas, pero que hay detrás de esto, el problema relevante es que las constantes también ocupan un lugar en memoria, desafortunadamente no tenemos espacio en memoria para poder almacenar todas las constantes habidas y por haber para así no tener que preocuparnos de cuanto espacio ocupan, porque ya estaría contemplado, bueno pues lo que pasa es que a fin de cuentas una constante en un programa es una variable sin nombre y referenciada por su valor en el mismo.

Entonces al crear una constante de esta forma estamos reservándole un espacio en memoria cada vez que la utilizamos de “forma inconsciente” ¿Y cómo hacer que una constante sea en verdad una constante?

Respuesta 1.- declarar una variable global que almacene este valor para su uso dentro del programa y así crear solo una variable en memoria ahorrándonos la asignación de espacio en segundos o terceros usos.

Respuesta 2.- La primera mas indicarle al compilador que esta variable ya no va a cambiar su valor durante la ejecución del programa para así compactar la memoria reservada únicamente a lo que necesita en ese momento y no más además de definir el ámbito de la variable para que otros programas la puedan utilizar también.

Solución.- Dejar de usar las comparaciones de variables contra constantes, bueno no verdad creo que si son necesarias, viéndolo bien cada programa que hago lleva una de estas cosas bueno pues optemos por la segunda, a quien dio la primera respuesta tiene un 5 por que solo es un analista simple.

Entonces tendríamos que identificar todas las constantes como tales dentro del programa o dentro de la aplicación para ponerlas en una ubicación desde la cual todas pudieran utilizar su valor.

public class Constantes {
    public static final int OK_OPTION = 0;
    public static final int CANCEL_OPTION = 1;
    public static final String SAVE_OPTION = “ALTA”;
    public static final String DELETE_OPTION = “BAJA”;
}

Con lo que nuestras comparaciones anteriores las tendríamos de la siguiente manera:

if(opción == Constantes .CANCEL_OPTION)…
if(opción.equals(Constantes .SAVE_OPTION))…

Este es el final de esta entrada, comencemos por eliminar las malas prácticas de programación que tenemos hasta ahora, es un camino largo, pero espero poder ayudarlos a que sea más tranquilo, de nuevo la propuesta, si tienen dudas o sugerencias sobre cualquier tema ya saben pueden comentarlo y lo analizamos a fondo para poder darles una respuesta. Por mi parte me despido ahora si tratando de ser constante y publicar por lo menos una entrada cada semana.

martes, 18 de septiembre de 2007

¡¡¡Bienvenidos todos!!! Espero les guste


Hola a todos, ¿Que tal? ¿Como están?, antes que nada Bienvenidos y gracias por visitar este blog, algunos de ustedes ya me conocen (Todos, jajaja, los únicos 5), otros no, algunos ya no me soportan y están diciendo en este momento: "Ahora hasta por Internet lo vamos a tener que aguantar". Lo sé, lo sé, pero pues ni modo, mientras no cobren en este blog, aquí seguiremos, jajaja. Para los que no me conocen, ahí les va un poco de historia, agarren sus cuadernos.

Bien, pues yo nací.... (uuuuhh!!!) ...ya, pues luego me decidí a hacer este blog, jajaja, no es cierto. Mi nombre es Víctor Hugo Rojas López, Nacido en el DF y crecido en Hidalgo, estudie en La UAEH, en Pachuquita la carrera de Lic. en Sistemas Computacionales. Actualmente ya no soy desempleado ¡¡¡afortunadamente!!!, me encuentro laborando en Centro Bancomer para la consultora E6 y pues aquí comienza mi nueva "aventura" (no creo que sea una aventura, pero bueno) en el mundo laboral y de la cual quisiera compartir experiencias y en la que los espero continuamente.

Pues por el momento no tengo nada mas que decir que contarles un poco mas de mi propósito con este blog. La idea principal es crear un soporte (de los que ya hay muchos) para nuevos programadores, gente que tiene problemas con sus desarrollos, con sus decisiones (también personales eh!), mostrar sugerencias acerca de temas de computación (TI, Programación, Redes, Juegos, etc) y brindarles un apoyo que esté al alcance de todos sobre todo en el área de programación que es mi "fuerte" y en las que no soy bueno, pues sí conozco a gente que es muy buena en otras áreas y nos podemos ayudar de ellos, anímense a preguntar, las respuestas llegan solas, también estaremos dando algunas sugerencias, promocionando a los amigos y cualquier otra cosa que se nos ocurra. "Quiero Compartir un poco de mi experiencia en la vida y la de mis amigos".

Esporádicamente les estaré contando de anécdotas ocurridas, algunas graciosas, algunas otras de reflexión, etc. etc. Y lo mas importante de todo estaré leyendo sugerencias continuamente de lo que estoy haciendo mal, de lo que puedo mejorar, lo que no debo de hacer, así que espero sus sugerencias, anímense, esta idea es principalmente para ustedes "queridos podescuchas", no verdad, ese es otro programa, bueno pues ni modo. Esta es mi "gran idea" espero les agrade y también les pido su apoyo para poder hacer de esto algo grande.

  • PD. Dejen comentarios, si no me voy a sentir mal, por lo menos tengo un contador de visitas que espero llegue a 10 antes de un año.

  •