653 meneos
9774 clics

El código

Aquello tenía pinta de que iba a ser el pin siete del RJ45 o que habíamos encendido el servidor con el dedo en ángulo de doce grados en lugar de dieciséis. Vamos, que sólo nos quedaba un sospechoso: el programa. Y ahí estuvo mi error. $Hyperboss fue informado pertinentemente por Gargamel de un problema informático sin resolver y nos reunió a MKII y a mi en su despacho. Muy serio.
etiquetas: wardog, mundowardog
usuarios: 321   anónimos: 332   negativos: 5  
74comentarios mnm karma: 823
Comentarios destacados:                 
#2   Es una pena que no actualice el blog mas a menudo.

Cuando lo descubrí me lo leí entero de un tirón.
#1   Me parto siempre con este tío!!

jajajajaja
votos: 12    karma: 115
#2   Es una pena que no actualice el blog mas a menudo.

Cuando lo descubrí me lo leí entero de un tirón.
votos: 53    karma: 472
#6   #2 Yo es que oigo "Sistemas?" y ya es que me parto xD xD
votos: 1    karma: 26
#16   #2 Joder, y yo. He llegao hasta a comprarme el libro y me lo estoy releyendo otra vez. Las batallas contra el antiguo Boss son épicas.
votos: 2    karma: 35
 *   cathan cathan
#3   Grandioso. Fiel reflejo de lo que puede haber detrás de una "empresa de software muy conocida" de las que abundan en el panorama cárnico egpañol.
votos: 12    karma: 112
#4   Atention SPOILER es na recopilaciond e cagadas del código.

Programas monoliticos, GOTO, varibles globales, voids...... creo que no se han dejado nada del manual del chapuzas, incluso se han inventao nuevos, como semaforos cutres y paso de parametros por ciencia infusa. En pleno agosto me ha puesto los pelos de punta.
votos: 6    karma: 58
#8   #4 así programaba yo creo que en mi primera práctica de la carrera... empiezo a dudar de que eso lo hicieran becarios... xD
votos: 5    karma: 53
#11   #8 Así programaba yo antes de entrar en la carrera, cuando ni siquiera tenía internet para consultar sino que iba a prueba y error con un libro mal traducido... Y yo creo que ni así cometía tantos gambazos...

Madre mía, tengo los pelos como escarpias.
votos: 0    karma: 7
#20   #11 #4 Pues que queréis que os diga, yo puedo perdonar todo lo que se dice en el texto y más, lo único que me jode hasta ponerme de mala ostia y que es el más claro síntoma de que el que lo hizo no tiene ni puta idea es encontrarse el código sin comentarios explicativos.

Es el más claro indicativo de que el que lo hizo no tiene experiencia, la horrible experiencia de coger algo sin documentar e intentar saber que mierda es. Los loops anidados X10 a veces son necesarios, hay selects que no…   » ver todo el comentario
votos: 2    karma: 23
#22   #9 No tiene porqué, yo he programado aplicaciones que manejan muchísimos datos en VB6 y va de pm y ya lleva 7 años de funcionamiento.
#20 hay selects que no puedes evitar traerte un porron de datos porque los criterios de búsqueda que tienes no son campos clave ¿Qué tendrá que ver?
votos: 1    karma: 19
#28   #22 Pos que hay veces que no puedes optimizar las llamadas a base de datos ni haciendo mil join y no queda otra que traerse casi todo a local y recorrerselo en loops, la vida es dura y antes que joder el servidor de la bbdd con mil llamadas se jode al usuario que espere ad infinitum por su consulta.

Lo digo porque en el texto hace referencia a un select sin wheres muy jocosamente descojonandose de que no acote la búsqueda y es que a veces no se puede, y amos yo sin sin, admito que nunca pero…   » ver todo el comentario
votos: 1    karma: 15
 *   SkaWorld SkaWorld
#62   #28 Me cuesta creer que sea necesario llevar "todo" a cliente antes que hacerlo en una consulta... ¿Qué servidor de BBDD usas? Porque por mi experiencia, usando los índices adecuados (hay que tener las estadísticas de los mismos actualizadas), haciendo subconsultas, vistas indexadas, funciones y procedimientos almacenados, todo funciona mucho más eficientemente que llevarse tropecientos mil datos a cliente (uso de disco en servidor y tráfico de red).

De hecho, para mi el "*" en una consulta es el equivalente de poner un GOTO en un código xD
votos: 1    karma: 14
#63   #62
#47
#34 Aqui es donde igual cabe explicar que soy de ABAP fui durante 2 años parte del mantenimiento correctivo y evolutivo de empresa gorda (ahora gracias a dios abandone ese infierno y trabajo desde hace algun tiempo en proyectos de implantacion desde 0, pero aun me levanto empapado en sudor pensando en el cabron del Remedy xD ), toca tu un módulo de SAP lleno de Z que no has visto en tu vida y que no está muy claro, porque falta la documentación a que se dedica y porqué hace lo que…   » ver todo el comentario
votos: 3    karma: 29
 *   SkaWorld SkaWorld
#64   #63 Ah, entonces utilizas ORACLE (dicho al revés es "el caro"). Ahora, al menos en Cantabria, está de moda pedir tu perfil para cobrar un máximo de 18.000€ brutos al año, y siendo discapacitado. Hace unos años se cobraba más por esto (más del doble), así que supongo que el sector se habrá llenado de "becarios" y "terroristas" como los que indicas :-P

En fin, si algo de eso te toca la moral, contraataca: thc.org/root/phun/unmaintain.html xD xD xD
votos: 1    karma: 17
#65   #64 Si bueno el sector yo ya lo pille tocado y ahora es un cachondeo xD pero en la defensa de los chavales diré que en el fondo hasta los entiendes, curso de 15 días de introducción a abap y ale a subir paridas a productivo pal consultor técnico y el funcional con 1 mesecillo de curso más de lo mismo y hacen lo que pueden, es un problema de como estan planteados los proyectos de desarrollo en este país que se han tirado los precios a base de recortar la calidad de software tirando de mano de…   » ver todo el comentario
votos: 0    karma: 9
#67   #65 Esperemos que el software "a medida" en general vaya tomando poco a poco el camino de la normalidad y ganando en calidad. Yo soy de los que creen (y pueden demostrar) que una persona experta (con una buena base y experiencia) es capaz de desarrollar lo que 3 o 4 de estos "chavales", en el mismo tiempo (o menos) y con mucha más calidad.

"Un experto es una persona que ha cometido todos los errores posibles en su campo del conocimiento."
Niels Bohr

Tarde o temprano las empresas tienen que ver estas cosas. Casos como el que relata Wardog son reales en más sitios de los que nos imaginamos ;)
votos: 1    karma: 14
#61   #9 Coincido con #22, he realizado (por exigencias del guión) una aplicación en VB6 (desde el 2001) dirigida a un entorno multiusuario (> 150 usuarios concurrentes), con más de 400 tablas y algunas con más de 15 millones de registros, procedimientos almacenados, vistas indexadas, etc... e iba como un tiro. Claro que en la parte SQL tienes que saber "tunear" y depurar mucho con trazas y demás. Pero partes del mismo programa rehechas en C#, con su LINQ y la madre que lo parió, en…   » ver todo el comentario
votos: 1    karma: 14
#34   #20 El buen código es aquel que no necesita ser comentado.

Si eres buen programador, sigues las convenciones, buenas prácticas, haces un código modular, desacoplado y con nombres coherentes, tu código se vuelve infinitamente más legible que si haces una mierda de funcion enorme de 200 lineas con un comentario de 10 lineas que te explica la biblia y más.

Es más, no soporto ver el típico código de becario mal enseñado en la facultad, en el que a cada linea de código le acompaña un comentario inútil de cabecera. Por ejemplo

// Oculto la vista
view.hidden = true;

Esas mierdas complican más la lectura del código y lo peor es que el que lo hace se sentirá hasta un hacha...
votos: 13    karma: 120
#40   #34 y #35 Típica excusa para no comentar. Estaría bien lo que decís (y en un mundo en el que todo el mundo es un hacha programando sería posible) pero no es incompatible con comentar el código, por lo menos hay que escribir una breve descripción al inicio de la función para saber qué hace sin necesidad de leerla.
votos: 1    karma: 18
#41   #40 Para eso está el nombre de la función. El 95% no necesitan ninguna explicación si les pones un nombre descriptivo. Si de verdad necesitas poner un comentario en todas tus funciones para saber qué hacen, algo estás haciendo mal.
votos: 4    karma: 41
#43   #41 y #42 ¿Si os encontrais la función get_user qué os va a devolver?
votos: 3    karma: 32
#45   #43 ¿Que parámetros le pasas? ¿Que parámetros esperas que te devuelva?
votos: 0    karma: 9
#46   #45 ¿Que parámetros le pasas? No sé, mira los comentarios de la cabecera :-)
¿Que parámetros esperas que te devuelva? Eso es lo que estoy preguntando.
votos: 0    karma: 6
#48   #46 WTF? ¿Me lo estás diciendo en serio?

Miras la función y ves que objeto espera la función que le pases y miras el retorno y ves que tipo de objeto te devuelve. Para eso no te hace falta ningún comentario. Obviamente ni #34, #35, #40 ni yo ni Neo puede mirar al nombre de una función o un método y saber que va a devolver sin saber el resto.

Pero vamos, para muestra un botón:

public User getUser (Object id) {}

No se trata de no comentar, se trata de no ser redundante. Y un código bien hecho en el 99% de los casos se autoexplica sólo.

BTW: ¿Lo de no utilizar camel case ha sido aposta o iba relacionado con la pregunta? La respuesta a esta pregunta quizás explicaría algunas cosas
votos: 5    karma: 47
#42   #40 no estoy de acuerdo. Tienes montones de buenas opciones para evitar comentarios innecesarios. Y ese tipo de comentarios son, por regla general innecesarios. El problema es que los comentarios a veces son una excusa para no nombrar a los métodos adecuadamente.

Programar es como escribir. El primer nivel es poner palabras juntas para expresar algo. El segundo es intentar no repetirse y clarificar las cosas. El tercero es aplicar un estilo de redacción y el último es que además puedas transmitir lo que quieres de una forma concisa y clara.

Code is poetry no es sólo una frase bonita. Es una manera de hacer las cosas
votos: 5    karma: 52
#72   #40 #70 Para mi poner una cabecera al inicio de los metodos o clases (tipo javadoc) explicando lo que hace, sus parametros y lo que devuelve lo considero mas documentar que comentar y lo hago siempre (excepto con casos muy triviales como los setters and getters) y siempre de una forma estandar.

A lo que me refería es que el ideal es que el código sea autodescrito, aunque se que dependiendo del lenguaje y de la necesidad de optimizar otros aspectos en vez de la legibilidad sea difícil de conseguir, pero debería ser una de las principales reglas a seguir.
votos: 0    karma: 7
#73   #72 Si estoy de acuerdo con que el código debe ser significativo, tampoco creo que sea precisamente un ideal, y el mayor problema de fiarse del código es que el código puede estar mal y, no nos engañemos, seguramente lo estará antes o después. También hay más cosas como que suele reflejar demasiado la forma de pensar de quién lo escribió, una forma de pensar que para otra persona no puede ser tan evidente.

Por cierto, al menos yo no me refería a la documentación. Por eso me refería a esas…   » ver todo el comentario
votos: 0    karma: 7
#55   #34 El comentario es necesario porque conecta el código con lo que funcionalmente hace.

#36 a diferencia de lo que se dice en el artículo, son eficientes. Pero son inmanejables. No hay forma de seguir el código si se utilizan variables locales. Cantas más se usen, más difícil de seguir.

Hay una técnica de tortura más fina que consiste en, además de poner muchas, reutilizarlas.
votos: 0    karma: 12
 *   iNauta iNauta
#56   #37 Es que lo que tú ves como un gran inconveniente se supone que era la ventaja por la que se hacía, es decir, tú declaras una serie de variables globales que todos los métodos, procedimientos, funciones o lo que sean las usarán como parámetros de entrada, así si cambian los requerimientos con cambiar las variables globales no tienes que ir buscándolas función por función, con el riesgo de colarte alguna. Será que no pillo lo que dices y me gustaría entenderte.

#55 ¿dices que las variables globales son inmanejables y al mismo tiempo que no hay forma de seguir el código si se utilizan variables locales?
votos: 0    karma: 10
 *   Sr.Aracnido Sr.Aracnido
#57   #56 arg, sorry, una errata. Debe ser << No hay forma de seguir el código si se utilizan variables globales >>

Se entiende que es cuando son muchas/todas.

De todas formas no está de más recordar que hay quien no es capaz de seguir el código, solo entiende sus propios programas y no siempre.
votos: 0    karma: 12
 *   iNauta iNauta
#60   #56 Precisamente vengo yo de programar una monstruosidad gigantesca durante los últimos 18 meses usando Symfony 2, se que no es demasiado comparable por que PHP no usa declaracion de variables, pero casualmente Symfony 2 (que va en modo estricto por defecto) si lo hace y tienes que declararlas todas antes de usarlas.

Bien, pues puedo confirmar que no hemos usado el concepto "variable global" (Globals en php) ni nada que se le parezca ni de lejos. Se han creado algunas interfaces, hay…   » ver todo el comentario
votos: 1    karma: 16
#68   #56 cuando cambian los requerimientos lo normal es que cambies el código no el valor de las variables, por lo tanto mejor tener el acceso a través de una interfaz y no arriesgarse a estropearlo todo tocando en un solo sitio. Es una cuestión de fe y de ver lo bien que funciona
votos: 0    karma: 9
#70   #34 #35 En realidad yo iba a comentarle casi lo mismo a #20 en un tono muy similar al tuyo, pero es que creo que te has pasado. Si tu código no necesita ningún comentario simplemente significa que realmente tu código hace más bien poco. Lo ideal no es que tenga comentarios o que no los tenga, lo ideal es que esté bien comentado.

A mi me fastidia ver comentarios simples sobre cosas que ya se ven en el código y que no aportan nada. Ahora mismo me acordé de unos compañeros con los que hice un…   » ver todo el comentario
votos: 1    karma: 16
 *   Arth
#71   #70 Ah, que él hablaba de parametrización y no de requerimientos del software. No lo leí, sólo la parte de requerimientos.

Aún mejor. Cuando hagas una nueva release haces una versión personalizada para cada cliente con su parametrización particular en variable globales. :palm:

A mi me ha dado la impresión de alguien no sabe de que habla cuando se refiere a requerimientos y que de lo que de verdad quiere hablar es de parámetros globales.... pero no me gusta señalar a la gente.

Con respecto a esto, leyendo tu comentario en #69 ya veo que eres todo un experto y sabes de que hablas. El ejemplo de barajarCartas es un ejemplo de buenas prácticas de desarrollo de software en estado puro. :-)
votos: 0    karma: 9
 *   giropa832
#35   #20 Pues lo ideal es precisamente un codigo que no necesite ningun comentario, o lo que es lo mismo que viendo los nombre de metodos, variables y la estructura puedas entender lo que hace el programa. Los comentarios se podrian exclusivamente cuando se haga algo raro o dificil de entender.

El select con where siempre va a ser mas rapido que traerte toda la tabla y luego filtrar en el código, aunque los campos que filtres no tengan indice (que seria lo ideal),
votos: 3    karma: 35
 *   Maegruin
#47   lo de la variable trileana es buenísimo jeje.

Lo de vender programas con código de mierda y luego cobrar por una "bolsa de horas" de mantenimiento es el negocio del siglo, cojonudo, cuanto peor mejor. Lo malo de la historia es que el cliente es el que dedica tiempo de sus empleados para arreglar desastres de otros, mu bien: ¿cuando necesiten un nuevo software que harán?, ¿encargarselo a sus propios empleados y montar un equipo que dirijan los que supieron arreglar la barbarie…   » ver todo el comentario
votos: 2    karma: 24
#54   #20 << hay selects que no puedes evitar traerte un porron de datos porque los criterios de búsqueda que tienes no son campos clave >>

No, no creo. Es mejor dejar a la base de datos que filtre. Sobre todo si es remota.

Y sobre el general, tampoco. Un programa que tenga bucles anidados más de dos o tres veces es que está mal diseñado. Etc.
votos: 1    karma: 21
#51   #8 ¿ qué te hace suponer que los becarios han estudiado una carrera o informática ?
votos: 2    karma: 26
#36   #4 ¿Que tienen de malos las variables globales? Lo pregunto en serio.
votos: 0    karma: 10
#37   #36 que si una variable global es usada por mas de un método, creas dependencia entre ellos, así a la hora de mantener tendrás que tocar en cuatro, cinco o cien sitios distintos si quieres cambiar el código o refactorizarlo. Si además le añades que el código no lo has hecho tú (aunque a veces que lo hayas hecho tu es incluso peor) pues tienes un bonito cacao en el que cuando tocas una cosa revienta otra que no tiene nada que ver. Y todo gracias a las variables globales. Y a esta bonita descripción se le llama encapsulamiento, que se da el primer día de POO en cualquier facultad del mundo.
votos: 4    karma: 44
#38   #36 Una variable global no suele tener nada de malo. Pero 6 scrolls de pantalla de variables globales debería ser ilegal, penado con varias cadenas perpetuas consecutivas.
votos: 8    karma: 78
#66   #36 Que siempre están ahí :-)
votos: 0    karma: 6
#69   #36 Algunas cuestiones que se mencionan aquí son "buenas prácticas", no porque lo contrario sea una malo en sí mismo, simplemente porque se usa sin tener ni idea de qué se hace porque parece más fácil. Alguien que sepa lo que hace debe saber barajar cuando una variable necesita ser global entendiendo los riesgos y beneficios.

Bien, el problema es que si yo tengo un procedimiento al que le paso ciertos parámetros por lo general en cualquier lenguaje de programación la cabecera/firma…   » ver todo el comentario
votos: 2    karma: 22
#5   Aún me estoy riendo con lo de "Un pitufo epiléptico ha estado practicando sexo tántrico con doce sapos encantados sobre los portales RFID me parece una causa razonable."
votos: 10    karma: 98
#7   Wardog: el gato más famoso de Menéame.
votos: 2    karma: 27
#9   Joder, me ha recordado a cualquier programa hecho en VB, lentitud pura y dura a partir de X datos por muy bueno o malo que esté programado.
votos: 0    karma: 6
#30   #9 Creo que te confundes con Java
votos: 2    karma: 10
#10   Genial, como siempre.

PD.: yo no aseguraría que fuesen becarios, a no ser que fuesen becarios de los 80 xD
votos: 2    karma: 26
#12   ok, lee la tabla entera y luego filtra. Pero entonces tendrian que haber visto que al menos uno de los cores estaba al 100%
votos: 3    karma: 30
#13   #12 No necesariamente, depende primero de cómo leas los registros y segundo de en qué momento mires el core. A lo mejor estaban mirándolo cuando todavía estaba trayéndose giga y pico por la red, o cuando la base de datos estaba todavía calculando todo lo que tenía que devolver accediendo a disco.

Y luego que cuando hay muchos cores, a veces la tarea se reparte entre todos ellos, no poniendo ninguno al 100% porque al ser una tarea secuencial, no puedes ponerlos todos a trabajar a la vez.

En cualquier caso, depende.
votos: 1    karma: 15
#74   #13 Pero hombre, no se trata de "mirar el procesador" en un instante concreto. xD Lo que se analiza son los registros de monitoreo de rendimiento. Cualquier motor de BBDD con cara y ojos mismo ya provee tales herramientas.
votos: 0    karma: 12
 *   Malversan
#26   #12 Según explica el filtro de los datos lo hace el equipo cliente no el servidor.
votos: 4    karma: 48
#29   #12 Lo que tendrían que haber visto es el log de la consulta SQL en la base de datos, pero bueno... está divertido igualmente.
votos: 3    karma: -3
#32   #29 No creo que estuviera configurado para que guarde un log de todos los select que se hacen en la base de datos, como mucho de queries lentas y ya explica que lo habían optimizado y que volaba.
votos: 3    karma: 32
#53   #12 ¿ No cantaría más bien el acceso a disco ?
votos: 1    karma: 19
#59   #12 en el log de sql. Quizás no en el de consultas lentas, ya que parece que la lentitud se producía al recorrer los datos de esa consulta en memoria del cliente, pero si en el log por consultas más repetidas por distintos usuarios ya que era algo generalizado.
#39
votos: 1    karma: 19
 *   joffer joffer
#15   Suma dos variables globales y devuelve el resultado. Qué grande xD xD xD

Me ha recordado una cosa que me encontré que ITdeu otra $Superempresaweb había hecho para cierto $Banco, y que me tocó mantener porque se había hecho infumable. Tampoco me quiero preguntar cuánto le cobraron en su momento al banco por la aberración y cuánto cobró el becario.

El caso es que era una aplicación web que gestionaba media docena de restaurantes y te mostraba lo que había de comer en…   » ver todo el comentario
votos: 16    karma: 149
 *   yemeth yemeth
#49   #15 por el servidor JBoss no creo que cobraran nada, ya que es software libre. Y aunque el diseño de una aplicación en una única tabla es una cutrez, no tendría que ralentizar si ésta tiene los índices necesarios y se accede de forma correcta.

Yo también me he encontrado código con selects sin ningún where en el que se recorrían los registros hasta obtener un elemento tuviera el id :-S Y, efectivamente, en fase de pruebas funciona perfectamente...
votos: 3    karma: 34
#17   Yo llevo unos meses trabajando en una aplicación web enorme hecha en Java que básicamente hace lo mismo que esa, al iniciarse precarga decenas de variables globales pillando todo a tropel de la base de datos (aunque incluye wheres) y luego se dedica a filtrar o tratar los datos a través de métodos especialmente diseñados para tal fin. De hecho no es la primera vez que la base de datos de producción se queda K.O. por sobrecarga. Claro que al menos está bastante mejor hecha que esa (por suerte para mi y mi compañero). :palm:
votos: 3    karma: 34
#18   He llorado del descojone, sobretodo cuando averiguan el motivo de la lentitud.
votos: 5    karma: 50
#19   Los GOTO en si no son malos y llegan a ser lógicos y útiles en muchos casos (sobre todo en C). Podría daros ejemplos pero no hay mejor ejemplo que el Kernel de linux y muchos de sus módulos.
votos: 3    karma: 31
#21   Está ocurriendo ahora mismo en nuestras Facultades. Nadie enseña a programar para que otros puedan luego revisar y/o mejorar lo hecho. Y la Programación Orientada a Objetos, aun muchos profesores la consideran una molesta exigencia curricular. Aunque por fortuna no todos, muchos docentes han dejado la labor de enseñar a programar de verdad, a las ofertas de certificación profesional de las grandes casas de software.
votos: 2    karma: 21
 *   --289219--
#23   Yo reconozco que no programo bien por falta de algunos conocimientos y por que programo con muchos descansos entre medias. Pero por favor... es pensar un poco...
votos: 0    karma: 9
#24   +10 :-P

Impresionante!
votos: 0    karma: 9
#25   El envío es ligeramente personal con todos esos motecitos, me siento como si empezase a ver Dinastía en la última temporada.
votos: 0    karma: 9
#27   ¿En que idioma está escrita la noticia? ¿Javascript?
votos: 1    karma: 25
#33   #27 PHP. Por los $.
votos: 0    karma: 8
#31   ¡Grandioso!

y yo he visto un progrmaa escrito por uno de Eve.., perdon, por uno de $Megaconsulting que hacia lo mismo. En desarrollo iba bien, pero en produccion con una base de datos de unos millones de registros...
votos: 3    karma: 36
#39   slow query log

Aún así.. Se ha superado a sí mismo con la redacción :-)
votos: 0    karma: 6
#44   TLDR;
votos: 0    karma: 8
#50   No sé qué me asusta más, que el filtrado de queries se haga DESDE LA RUTINA y no desde una clausula where en la consulta, o que se ataque a la BDA desde el cliente y no sea el servidor que haga de puente (a no ser que tenga una copia en local para escenarios offline).
votos: 1    karma: 17
#58   Grande Wardog. Inconmensurable. Lo del presidente lo usare la próxima vez que me vengan con la tontería!
votos: 0    karma: 6
comentarios cerrados

menéame