¿Que tanta importancia le das a tus algoritmos?
#1
Posted 05 September 2013 - 10:59 AM
Pues eso... a modo de cierto relajo se me ocurrió abrir esta encuesta. Me encantaría ver como son sus posturas al respecto.
Como dice el título del hilo: ¿Que tanta importancia le das a tus algoritmos?
Muchos de aquí me conocen por ser muy técnico, analítico, y porqué no... ¡bien cuadrado!
Yo cuando estoy programando trato a mis algoritmos, al menos a algunos de ellos en donde sus funciones son críticas o muy importante, me lo tomo con mucha seriedad.
Yo a esos algoritmos los estudio bajo al menos tres posturas:
1) Complejidad ciclomática, conocida como V(G).
2) Cantidad de líneas de código, o LDC para abreviar.
3) Complejidad computacional.
El primero es para determinar el "tamaño" del problema y ver los posibles caminos y bifurcaciones que tiene. Esto permite determinar de forma directa un plan de pruebas blancas o prueba de caja blanca (se pude decir de ambas, aunque la 2da forma es la más difundida y técnicamente correcta).
Combinando (1) y (2) puedo estimar una complejidad "amortiguada" que no es más que V(G)/LDC. Este valor (o métrica en la jerga de Ingeniería de Software) permite determinar lo denso o pesado que es un algoritmo. Parte de esto lo expresé en un anterior artículo .
Al aplicar (3) obtengo su valor estimado de O() y/o Theta() de ser posible. Esto me puede dar una idea de la rapidez y/o consumo de memoria respectivamente de crecimiento que tiene dicho algoritmo. En combinación con (2) me puede ayudar a estudiar posibles alternativas más rápidas, estables, o hasta incluso que podrían ser más amigables con los recursos de memoria.
En ocasiones, y si el tema escapa de algunas de mis posibilidades, busco en la red de redes si por casualidad no existe un paper, tesis, artículo o cualquier material que lo haya estudiado y me permita encontrar alternativas más adecuadas, o tips de como acelerar o implementar algunos controles que en ocasiones se dejan de lado.
¿Ustedes que tanta importancia les dan? ¿Mucha? ¿Poca? Solamente lo ponen a prueba con algunos valores y ya está... ¿Que más hacen? ¿Que otras cosas considerarías fundamentales considerar?
#2
Posted 05 September 2013 - 01:41 PM
Yo creo que le doy una importancia por arriba de la media, no hago un análisis tan a profundidad como lo haces tú mi buen amigo Marcelo, pero me baso en la lógica, siempre tratando de encontrar "la recta", es decir, el camino más corto que el intelecto me permite.
Claro, ésto lo escribe un programador que se hizo en la calle y no en la academia
Saludos
#3
Posted 05 September 2013 - 01:52 PM
Saludos.
#4
Posted 05 September 2013 - 02:33 PM
#5
Posted 06 September 2013 - 08:34 AM
Que alguien más diga que está tan matado de la cabeza como yo para no sentirme tan rarito y pasao de nerd.
Saludos,
#6
Posted 06 September 2013 - 09:39 AM
O sea... ¿soy el único pinche rayado?...
No, Delphius..., también yo los pienso, en serio. Aunque no lo parezca.
#7
Posted 06 September 2013 - 09:57 AM
O sea... ¿soy el único pinche rayado?
Que alguien más diga que está tan matado de la cabeza como yo para no sentirme tan rarito y pasao de nerd.
Saludos,
Amigo Delphius, ni estás matado de la cabeza, ni eres rarito ni pasao de nerd; el darle importancia a los algoritmos, analizarlos, optimizarlos y probarlos, es algo elementalmente inherente al ejercicio profesional de la resolución de problemas mediante un ordenador.
Saludos.
#8
Posted 06 September 2013 - 10:12 AM
O sea... ¿soy el único pinche rayado?
Que alguien más diga que está tan matado de la cabeza como yo para no sentirme tan rarito y pasao de nerd.
Saludos,
Amigo Delphius, ni estás matado de la cabeza, ni eres rarito ni pasao de nerd; el darle importancia a los algoritmos, analizarlos, optimizarlos y probarlos, es algo elementalmente inherente al ejercicio profesional de la resolución de problemas mediante un ordenador.
Saludos.
Si, solo que algunos los hacemos de forma silvestre y otros lo hacen científicamente, esa es la diferencia.
A veces quisiera tener la paciencia de hacerlo "científicamente" pero soy vago, que le voy a hacer
Saludos
PD; Llega una edad en la que el análisis se hace mentalmente, los jovenzuelos si tienen que hacer el trabajo rudo jajajajaja
#9
Posted 06 September 2013 - 10:24 AM
O sea... ¿soy el único pinche rayado?
Que alguien más diga que está tan matado de la cabeza como yo para no sentirme tan rarito y pasao de nerd.
Saludos,
Amigo Delphius, ni estás matado de la cabeza, ni eres rarito ni pasao de nerd; el darle importancia a los algoritmos, analizarlos, optimizarlos y probarlos, es algo elementalmente inherente al ejercicio profesional de la resolución de problemas mediante un ordenador.
Saludos.
Si, solo que algunos los hacemos de forma silvestre y otros lo hacen científicamente, esa es la diferencia.
A veces quisiera tener la paciencia de hacerlo "científicamente" pero soy vago, que le voy a hacer
Saludos
PD; Llega una edad en la que el análisis se hace mentalmente, los jovenzuelos si tienen que hacer el trabajo rudo jajajajaja
Muy buena la acotación, independientemente del método que se utilice (cada algoritmo y cada necesidad o entorno ameritará su método), no convierte a quien lo realice en matado de la cabeza ni en otras rarezas.
Saludos.
PD; Llega una edad en la que el análisis se hace mentalmente, los jovenzuelos si tienen que hacer el trabajo rudo jajajajaja
De acuerdo, "Más sabe el diablo por viejo que por diablo", cada cual valora, sobrevalora o minimiza la importancia de sus logros y sus cosas de acuerdo al esfuerzo que hizo para conseguirlas, por supuesto todas muy respetables.
#10
Posted 06 September 2013 - 10:44 AM
Recibí una llamada de un gerente de sistemas de una empresa con renombre y después de presentarse me dijo:
"Me han dicho que usted conoce y domina el lenguaje Pascal, puede venir a verme..."
Accedí a hacerle una visita de cortesía para ver de que se trataba el asunto.
Resulta que tenían un grave problema con la impresión de boletas que recibían de forma continua a través de modem desde la planta de su cliente y que días antes habían cambiado el formato. Me comentó que la única documentación del programa eran unas hojas impresas del código y el código fuente en un disco.
Comencé pues mi "análisis" y en alrededor de una hora ví donde estaba el problema. lo llamé y le dije que si, que yo le resolvía su problemática.
Me miró como se mira a alguien que está loco y me comentó que habían ido ingenieros de escuelas privadas y que en un mes no le habían solucionado el problema, que como un programador en una hora le decía que se lo resolvía.
Pues nada, tenía a mi favor que conocía Turbo Pascal, que yo hacía mis "pruebas de escritorio" con hojas impresas del código, mientras que los "Ingenieros de la NASA" pues para comenzar no conocian bien a bien el lenguaje y me los sigo imaginando viendo el código hoja por hoja sin saber donde comenzaba y donde terminaba un procedimiento
Y bueno, para no hacer más largo el "chisme", le resolví el problema por experiencia no por conocimientos.
Saludos
#11
Posted 06 September 2013 - 12:26 PM
O sea... ¿soy el único pinche rayado?
Que alguien más diga que está tan matado de la cabeza como yo para no sentirme tan rarito y pasao de nerd.
Saludos,
Delphius,
del un buen análisis nace una buena solución. La verdad es que en la escuela te enseñan las pruebas de escritorio y quizá no llegamos a tanto, pero si despedazas tu proceso al detalle podrás plasmar una solución efectiva y rápida.
Hace unos años tuve la necesidad de involucrarme en una certificación CMMI y me di cuenta que no es nada del otro mundo, solo te recuerdan que si no trabajas todos los pasos para hacer software trabajarás doble o triple.
Y no es que no te los enseñen, es solo que Santa Hueva te protege con su manto y luego te da por tomar el camino más corto.
Y como dice E-Go, a veces las hojitas ayudan más de lo que parece.
#12
Posted 06 September 2013 - 04:59 PM
Ha bueno... entonces ya somos dos los locos entonces.No, Delphius..., también yo los pienso, en serio. Aunque no lo parezca.
Pues parece que soy rarito porque de mis compañeros y amigos no recuerdo a alguno que le pusiera énfasis a esto como yo.Amigo Delphius, ni estás matado de la cabeza, ni eres rarito ni pasao de nerd; el darle importancia a los algoritmos, analizarlos, optimizarlos y probarlos, es algo elementalmente inherente al ejercicio profesional de la resolución de problemas mediante un ordenador.
Saludos.
Convengamos que yo tampoco soy tan jovenzuelo ya... que los 30 están a la vuelta de la esquinaSi, solo que algunos los hacemos de forma silvestre y otros lo hacen científicamente, esa es la diferencia.
A veces quisiera tener la paciencia de hacerlo "científicamente" pero soy vago, que le voy a hacer
Saludos
PD; Llega una edad en la que el análisis se hace mentalmente, los jovenzuelos si tienen que hacer el trabajo rudo jajajajaja
En algunas que otras ocasiones me he dicho que el dedicarle tiempo a estar estudiando un algoritmo me es una pérdida de tiempo y no vale la pena hacer sufrir mi cabeza. Pero mi instinto analítico friki y nerd me puede más y me absorbo en las hojas y el lápiz alejado de la PC.
Después me doy conque en la mitad de las veces si fue una buena inversión el haber dedicado tiempo a pensarlo y en la otra mitad me doy con que fue una sobrepreocupación y resultaba ser algo insifignificante es hacerme tanta molestia.
Muy buena la acotación, independientemente del método que se utilice (cada algoritmo y cada necesidad o entorno ameritará su método), no convierte a quien lo realice en matado de la cabeza ni en otras rarezas.
Pues últimamente han aparecido personas dentro de la disciplina de Ingeniería de Software que medio han saltado del Barco (como DeMarco por ejemplo) y se habla que mucha de las buenas prácticas que tanto se han fomentado están sobrevaluadas y no vale la pena tanta rosca.
Y ya uno se siente que al dedicar tiempo y esfuerzo en hacer un estudio más elaborado y concienzudo de las propuestas y alternativas es como si fuera parte de sólo una élite formada por unos tipos pasaos de rosca y sin mucha vida a la que hay que marginar por ser unos locos obsesivos.
Lo que estuve percibiendo en los últimos años es como se ha perdido la formación en introducción a la programación. Ya no se enseña diagrama de flujo por ejemplo. Y hay que incluso confunde el diagrama de flujo (mal llamado flujorama) con el DFD o Diagrama de Flujo de Datos.Delphius,
del un buen análisis nace una buena solución. La verdad es que en la escuela te enseñan las pruebas de escritorio y quizá no llegamos a tanto, pero si despedazas tu proceso al detalle podrás plasmar una solución efectiva y rápida.
Hace unos años tuve la necesidad de involucrarme en una certificación CMMI y me di cuenta que no es nada del otro mundo, solo te recuerdan que si no trabajas todos los pasos para hacer software trabajarás doble o triple.
Y no es que no te los enseñen, es solo que Santa Hueva te protege con su manto y luego te da por tomar el camino más corto.
Y como dice E-Go, a veces las hojitas ayudan más de lo que parece.
Directamente saltan a hacer algoritmos "on the fly" y no se le dedica tiempo a debatir si efectivamente en como llevar una buena prueba.
Hace mucho que no me paso por Yahoo! Respuestas. Allí abundaban (y estimo que más aún hoy) personas que no podían ser capaces de razonar un algoritmo elemental como el sumar n elementos o si venían con un algoritmo que les fallaba y uno les comentaba si lo probó haciendo un diagrama de flujo y/o la prueba de escritorio y salían con un WTF.
Noto en como si bien UML está ganando más presencia de cátedra, al mismo tiempo se la está dando pobre y/o ineficazmente y los estudiantes se la pasan de lado argumentando que es más aparatoso, complejo, redundante y una completa pérdida de tiempo. Esto me hace acordar a un debate acalorado que se dio en el blog de Javier Smaldone, un colega de mi tierra Argentina, en donde el argumentaba apoyándose en una hipotética supuesta carta irónica de un estudiante hacia un profesor reprochando sobre las supuestas bondades de UML. Al final uno de los comentaristas, de alias "El Mendocino" creo recordar, le puso muchos tantos bien fundamentados sobre su crítica. No tiene desperdicio leerlos.
Saludos,