¿La decisión de diseño o programación más lamentable que tomaste? [cerrado]

57

Me gustaría saber qué tipo de decisiones de diseño tomaste y cómo fueron contraproducentes. Debido a una mala decisión de diseño, terminé teniendo que apoyar esa mala decisión para siempre (también participé en ella). Esto me hizo darme cuenta de que un solo error de diseño puede perseguirlo para siempre. Quiero aprender de las personas más experimentadas qué tipo de errores han experimentado y qué aprendieron de ellos.

Estoy seguro de que esto será de gran ayuda para otros programadores al ayudarlos a no repetir esas decisiones.

Gracias por compartir tu experiencia.

VNarasimhaM
fuente
19
pasar demasiado tiempo en SO! ;)
Mitch Wheat
66
@George: parece que su primer enlace es sobre ingeniería excesiva, que puede estar tangencialmente relacionado con este hilo, pero no es un duplicado. El segundo y último enlace se refieren a errores de codificación y errores de gestión, ninguno de los cuales es duplicado de este hilo.
Juliet
1
Esto probablemente debería convertirse en un wiki de la comunidad (hay un cuadro cuando edita la publicación).
3
Desearía que hubiera una forma de votar para contrarrestar el cierre. ¿Votar a un cierre?
Kieveli
55
¿Qué les pasa a todos los votantes cerrados? Entonces, ¿qué pasa si no es un CW? Deje que el autor de la pregunta obtenga algunos votos para formular la pregunta. Estoy realmente interesado en este tema. No permita que CW se interponga en el camino de una buena pregunta subjetiva. Sheesh, SO está lleno de chillidos de "CW THIS".
syaz

Respuestas:

73

Ignorando a YAGNI , una y otra vez ...

Jorge Córdoba
fuente
22
Es cierto para la mayoría, pero también hay personas que podrían usar un poco menos de YAGNI. Ningún extremo es el mejor lugar para estar.
Consola 80x24
56

"Lo haré más tarde"
"Más tarde" nunca llega.

Duleb
fuente
8
Más tarde nunca llega.
Nunca lo hace.
Se ha dicho, si no tienes tiempo para hacerlo ahora, ¿qué te hace pensar que tendrás tiempo para arreglarlo más tarde?
44
Llamamos a esto "iteración nunca"
NotMe
10
No hay nada tan permanente como una solución temporal.
dietbuddha
52

C ++, herencia virtual múltiple en forma de diamante . Tienes la idea.

Kyralessa
fuente
19
Necesito crear una nueva cuenta para volver a votar esto ...
Kieveli
Sí ... experiencias dolorosas ...
Ed S.
Acabo de tener un feo recuerdo
Neil N
1
@ Jay en realidad parecía una buena idea en ese momento.
66
No sé qué significa eso, pero suena doloroso +1
The Desintegrator
44

La configurabilidad en una aplicación es agradable. Demasiada configurabilidad es una pesadilla para usar y mantener.

Travis Beale
fuente
2
Si. Cierto. Es idealismo hacer que todo sea configurable y decirle al jefe que nunca más tendremos que cambiar una sola línea de código.
1
Después de haber sido el desafortunado usuario atrapado en uno de esos sistemas infinitamente configurables para la gestión de nuestro proyecto, solo puedo decir que lo votaría un millón de veces si pudiera.
HLGEM
La sobreflexibilidad en la configuración generalmente se debe a que no puede ejecutar código arbitrario en tiempo de ejecución, por lo que debe anticipar todo.
Esto se llama «spoftcoding» en lugar de «hardcoding»
deadalnix
42

De uno de mis errores, he aprendido que la normalización de DB no debe seguirse a ciegas. Puede, y en algunas situaciones DEBE aplanar sus mesas.

Terminé administrando un montón de tablas (a través de modelos) y el rendimiento no fue tan bueno como podría ser con un pequeño aplanamiento para las tablas.

Eimantas
fuente
55
No podría estar más de acuerdo ... Soy un ingeniero de software y se nos dice que siempre nos normalicemos. ¡Qué montón de mierda. Fue solo porque los maestros no han intentado trabajar con bases de datos realmente complejas y dependientes del rendimiento.
8
Podría agregar que la normalización también puede ser muy positiva, por supuesto.
12
Creo que los programadores son demasiado rápidos para desnormalizar por razones inadecuadas, pero sí, la adhesión servil a las reglas de normalización es un gran error. En general, una de mis grandes frustraciones en el desarrollo de software es cuando alguien dice "Debemos hacer X", y cuando señalo todos los problemas que esto causará, responden: "Eso es irrelevante. Todos los expertos coinciden en que X es bueno, por lo tanto, debemos hacer X, siempre, sin excepciones ".
44
Mi acercamiento a la normalización es siempre directo. Siempre me normalizo, PERO si veo un posible aumento del rendimiento con poco aplanamiento: siempre pruebo y comparo y, en la mayoría de los casos, vale la pena aplanar.
Eimantas
77
¡Pero la normalización es DIVERTIDA! :) Lo digo en serio, disfruto diseñando estructuras de datos. Lo que diría es que si bien es fácil desnormalizar un esquema normalizado, lo contrario NO es cierto. Necesitas CONOCER las reglas antes de romperlas.
36

Usar un único carácter en bases de datos para estados, etc. No tiene sentido en absoluto, la sobrecarga de usar un carácter más largo () o nvarchar2 () es minúsculo en comparación con la red y el análisis incurrido por cualquier llamada SQL, pero los caracteres siempre terminan más bien ofuscado o agotado (no por estados, sino por otras cosas). Mucho mejor simplemente poner la versión legible para humanos y también tener en su modelo Java (en mi caso) una enumeración con valores coincidentes.

Supongo que esta es una forma de optimización prematura innecesaria y ciega. Como si usar un solo personaje salvara al mundo en estos días. Aparte de booleanos Y / N en bases de datos que no admiten booleanos / bits.

JeeBee
fuente
+1 Acabamos de tener una reunión sobre este mismo tema. Llegamos a la misma conclusión.
APC
¿Qué pasa si su cliente trabaja con esas abreviaturas y no quiere abandonarlas?
Para los sistemas existentes, debe ser compatible (todavía crearía una enumeración Java de valores adecuados, con un método <code> MyEnum fromChar (char c) </code>), por supuesto. Para nuevos diseños, ¡simplemente no vayas allí!
Algunas bases de datos admiten enumeraciones, que son compactas y legibles, y también sirven para prohibir valores inesperados. Si puedes, usa esos.
Karl Bartel
2
Casi tan malo: usar el tipo BIT en MS SQL Server, antes de descubrir que no puede ser parte de un índice.
finnw 01 de
32

No desarrollar una capa de acceso a datos adecuada y tener SQL en todas partes en mi código, solo para obtener algo "rápido" en funcionamiento. Más tarde, cuando el proyecto comenzó a expandirse y los requisitos cambiaron, se convirtió en una pesadilla. No sabía qué era un DAL en ese momento.

... me alegro de haber pasado eso, aunque todavía veo programadores con más de 20 años de "experiencia" haciendo esto.

CitizenBane
fuente
16
No recuerdo dónde lo leí, pero hay una diferencia entre 20 años de experiencia y un año de experiencia repetido 19 veces.
CaffGeek
@Chad: Estaba en algún lugar de los escritos de Joel Spolsky.
+1: Sí. E intente refactorizar toda esa lógica vinculada en ese SQL ... Ya sea en línea, SQL de forma libre o procesos almacenados. [Sí, no tengo miedo de esa guerra santa.]
Jim G.
26

Pensando que podría ser Arquitecto, Desarrollador y PM, todos en el mismo proyecto.

2 meses de sueño 3 horas por noche me enseñaron que simplemente no puedes hacerlo.

Craig
fuente
15
¡Así que deja de dormir tanto! oh, espera ... quieres decir que eso NO es normal ... ?? Hmm, Tengo que hacerme algunas otras personas en este proyecto ...
Avid
Suena como el PM: necesita capacitación con estimaciones :)
21

Elegir Microsoft Foundation Classes (MFC) para escribir un IDE de Java.

Oliver Weichhold
fuente
3
Owwww. Eso haría que me doliera el cerebro.
Greg D
2
Esa no fue una mala decisión en 1999. AWT fue feo y lento entonces.
finnw 01 de
finnw - bueno, ¡al menos sigue siendo feo!
Niklas H
20

No fue mi decisión (me uní a la compañía un poco más tarde), pero un lugar en el que trabajé fue demasiado lejos, incluyendo la traducción de todos sus mensajes de registro.

Resultados:

  • Más doloroso agregar nuevos registros
  • Más costo por traducción
  • Los registros son más difíciles de leer después

Ups

Jon Skeet
fuente
Estoy haciendo algo de i18n aquí, y tratando de averiguar qué va al usuario y qué va a los registros. Quiero que todos los resultados orientados al usuario sean localizables, pero quiero que los registros sigan siendo los mismos. En el proceso, tengo que hacer más para averiguar a dónde va una excepción de lo que me gusta.
David Thornley
1
Déjame adivinar, ¿tu estadounidense? Y si no, ¿solo hablas inglés? Use la internacionalización donde las nuevas entradas de registro en inglés, si hay otro idioma disponible, muestra el idioma de los usuarios. SUGERENCIA: el uso de códigos de error ayuda aquí, ya que significa que siempre puede grep / scan registros sin importar el idioma.
2
@ Jacob: Soy inglés, pero solo hablo inglés. Pero esto era para una empresa donde toda la base de ingeniería estaba en Inglaterra, por lo que tener archivos de registro (que son para fines de diagnóstico, no información visible para el usuario) en otros idiomas sería un desperdicio de recursos. Estoy de acuerdo en que usar códigos de error en lugar de texto permite la traducción sobre la marcha, pero aún es más trabajo que simplemente usar un solo idioma para empezar. Se trata de reducir el trabajo identificando dónde algo que suena útil en realidad no va a proporcionar ningún valor significativo.
Jon Skeet
10
Soy sueco. Tendría que ponerme medieval en cualquiera que incluso sugiera que el código / comentarios / registros deberían estar en otra cosa que no sea inglés. El inglés es EL idioma que se usa para todo menos para las interfaces de usuario. Todo lo demás solo hace que el código sea difícil de leer y discutir. Usar un idioma nativo es ridículo ya que cualquier otro marco / biblioteca que use está en inglés.
jgauffin
1
+1 Inglés es la lengua franca de la programación. Tenerlo traducido es simplemente poner una capa adicional donde necesita la menor cantidad de capas y la mayor claridad posible.
20

Reinventando la rueda

Shyju
fuente
19

Haciendo demasiado diseño . Crear muchos diagramas UML, particularmente diagramas de secuencia para cada operación, muchos de los cuales al final resultaron inútiles. Al final resultó que una cantidad significativa de tiempo podría haberse ahorrado al saltarse diseños / diagramas innecesariamente detallados e iniciar la codificación directamente.

Jahanzeb Farooq
fuente
Si la pregunta era: "¿Cuál es la decisión de diseño o programación más lamentable que hayas visto tomar?" a diferencia de los errores que cometimos nosotros, puse "UML" cerca de la parte superior de mi lista. Justo debajo de "el registro de Windows".
2
UML es bueno para discutir entre los miembros de un equipo, pero cuando se trata del diseño y luego implementarlo de acuerdo con el diseño, siempre termina mal. Este es un tipo de sueño de algunas compañías, pero realmente, la escritura de software definitivamente no funciona de esa manera. +1!
deadalnix
17

Los clientes creyentes saben lo que quieren y luego hacen demasiado antes de consultar con ellos.

Anders
fuente
15

¿Mi peor decisión de diseño? En la década de 1980 estaba trabajando en un proyecto donde se nos ocurrió la brillante idea de crear una especie de plantilla para nuestras pantallas de entrada de datos que se interpretaría en tiempo de ejecución. No es una mala decisión: hizo que las pantallas de entrada fueran fáciles de diseñar. Básicamente, simplemente cree un archivo que se parezca a la pantalla de entrada de datos, con algunos códigos especiales para identificar qué era una etiqueta frente a qué era un campo de entrada, e identificar si los campos de entrada eran alfa o numéricos. Luego decidí agregar algunos códigos especiales más a estos archivos para identificar qué validaciones deberían realizarse. Luego agregué más códigos para permitir la construcción condicional de la pantalla, el campo X solo se incluyó cuando alguna condición era verdadera, etc. Luego agregué más códigos para hacer un procesamiento simple de las entradas. Etcétera etcétera. Finalmente, convertimos nuestra plantilla de pantalla en un nuevo lenguaje de programación, completo con expresiones, estructuras de control y una biblioteca de E / S. ¿Y para qué? Hicimos un montón de trabajo para reinventar FORTRAN. Teníamos un estante lleno de compiladores para idiomas que estaban mejor diseñados y mejor probados. Si hubiéramos dedicado tanto esfuerzo a construir productos en los que realmente teníamos algo de experiencia, esa compañía aún podría estar en el negocio hoy.

Arrendajo
fuente
Eso es divertido y trágico :)
Lo triste es que este enfoque es a veces el mejor camino a seguir. El cliente puede elegir "la pantalla se puede cambiar en cualquier momento" o "la pantalla hace todo, incluso hacer el té", ¡pero no ambas cosas!
3
No tengo nada en contra del uso de plantillas u otro código genérico. El error fue convertir un fragmento de código genérico en un lenguaje dentro de un idioma.
He visto exactamente esto ... ¡en 2004! ¡Toda la lógica de negocios se extiende alrededor de quince tablas de configuración con varios intentos a medias de "lenguajes" dinámicos incorporados en buena medida (ver la Décima Regla de Greenspun)!
1
¿No te refieres a COBOL en lugar de FORTRAN?
finnw 01 de
15

Aplicación demasiado entusiasta de YAGNI (que se denomina Diseño por enumeración en trampas del desarrollo orientado a objetos ) en un entorno donde cualquier persona sensata podría decir que los requisitos definitivamente iban a cambiar. Y cambia repetidamente.

Si ha codificado todo exactamente con los requisitos actuales, mientras golpea a cualquiera que diga "¿no podría ser esto más genérico?" con su mazo YAGNI, y luego los requisitos cambian drásticamente (pero de una manera que podría haberse anticipado razonablemente), entonces esa puede ser la diferencia entre tomar 2 semanas para adaptarse, o tomar 20 minutos.

ACTUALIZACIÓN: Para aclarar, aquí hay un ejemplo ficticio que no está muy lejos de lo que sucedió. Stack Overflow fue diseñado para admitir insignias, pero supongamos que al principio solo puedan pensar en cuatro insignias. Solo cuatro, un número tan pequeño, por lo que codificaron el soporte para exactamente cuatro insignias en toda la lógica del sitio. En la base de datos, en la información del usuario, en todo el código de visualización. Porque "Ya no necesitarás" ninguna insignia en la que no puedas pensar, ¿verdad? Supongamos que el sitio se activa y la gente comienza a sugerir nuevas insignias. Cada insigniatoma hasta dos semanas para agregar, porque hay mucho hardcoding para ajustar por todas partes. Pero aún así, "Ya no necesitarás" más insignias que la lista de hoy, por lo que nunca hay una refactorización para admitir una colección genérica de insignias. ¿Una colección tan genérica hubiera tomado más tiempo por adelantado? No mucho, si alguno.

YAGNI es un principio valioso, pero no debe (ab) usarse para excusar un diseño deficiente y una codificación inadecuada. Hay un equilibrio, y con experiencia, creo que me estoy acercando.

Consola 80x24
fuente
1
Sí y no, ¿puedes predecir en qué dirección va a cambiar? Tengo experiencia de los sistemas complejos dolorosamente que resultó totalmente inadecuada para la primera reutilización, lo que no encaja en la generalidad predicho ...
Benjol
^ Sí, prefiero tratar con YAGNI que esa basura.
¿Entonces crees que deberías haber pasado las 2 semanas por adelantado?
finnw 01 de
44
Ese ejemplo no es YAGNI en absoluto. DRY es parte de YAGNI, y sin él no puedes responder al cambio.
3
Stephan, el ejemplo muestra un descuido y un abuso inapropiado de la frase clave, que era mi punto. DRY (con su variante OAOO) también es un buen principio, pero bastante separado: c2.com/cgi/wiki?OaooBalancesYagni . Sin embargo, no puedo encontrar nada en ninguna parte que respalde su afirmación de que "DRY es parte de YAGNI". La mostaza va bien con los perritos calientes, pero eso no significa que la mostaza sea parte de los perritos calientes. Si pudiera aclarar, tal vez con referencias, tal vez lo entenderé.
Consola 80x24 el
15

Recursos humanos incompetentes

¡Intentando hacer algo correcto y grandioso con las personas equivocadas!
Incluso si están en el papel de un ego superfluo PM (que es bastante común, especialmente en grandes empresas donde su incompetencia puede durar más tiempo).

revs Robert Koritnik
fuente
1
Entiendo tu dolor :(
13

Cada vez que creo una deuda técnica, escribo un código de procedimiento, me salteo las pruebas de escritura, etc. porque me estoy apurando. Casi inevitablemente encuentro que esto me causa dolor en el camino.

TrueWill
fuente
13

Uso de los servicios de integración de SQL Server (SSIS).

No se lo deseo a mi peor enemigo.

Después de construir varios paquetes de SSIS en los últimos dos meses, solo para descubrir que los paquetes que desarrollé no son distribuibles y no se pueden implementar. Específicamente en un entorno no web, sin licencia de SQL Server.

Es una situación muy mala, cuando tiene menos de 48 horas para volver a escribir sus paquetes SSIS en código puro .NET POCO o perder su fecha límite específica.

Me sorprende que pude reescribir tres paquetes SSIS (que me tomó dos meses probar y desarrollar), en 12 horas en código puro .NET, con adaptadores OLEDB y adaptadores SQL.

SSIS no es distribuible y no ejecutará paquetes desde una máquina cliente si no tiene instalada una licencia de SQL Server (específicamente DTSPipeline.dll). Sería genial saberlo por adelantado. Veo el descargo de responsabilidad ahora (en letra pequeña) en MSDN. Eso no sirve de nada cuando tiene un código de ejemplo en Internet utilizando un código de máquina con licencia SQL solamente. Básicamente, debe crear un servicio web que hable con su servidor SQL para ejecutar sus paquetes SSIS mediante programación. No puede ejecutarlos desde código .NET puro, a menos que tenga una licencia SQL instalada en la máquina ejecutora. ¿Qué tan poco realista es eso? ¿Microsoft realmente espera que se use SSIS desde máquinas que requieren la instalación del servidor SQL? Qué desperdicio completo de dos meses.

Mi empresa nunca volverá a utilizar SSIS debido a esta pequeña "gotcha".

D3vtr0n
fuente
¡Quizás debería evitar el uso de software de "letra pequeña" por completo! Talend, por ejemplo, es un IDE ETL de código abierto.
+1: Sí. La experiencia de desarrollo de SSIS también es una pesadilla. Probablemente hay al menos media docena de formas mejores de realizar ETL.
Jim G.
11

No definir el mecanismo / modelo de implementación lo antes posible.

Austin Salonen
fuente
10

Agregue algunos huevos de pascua 'divertidos' en un código que escribí antes de irme de vacaciones por 2 semanas. Pensé que sería la única persona que lo leería cuando volviera, me haría reír y estar listo para volver a codificarlo.

Huelga decir que mi jefe no estaba impresionado cuando lo revisó mientras yo estaba fuera, y estaba aún menos impresionado cuando uno de los 'huevos de pascua' estaba involucrando su cara graciosamente dibujada en ASCII.

Mmmmmm ...

Daniel May
fuente
1
OMI, eso es "¡Buen trabajo señor!"
18
Hace muy poco, mi equipo se burló de mí por mensajes de rastreo como "¡sumando el valor (p) a la tabla de jugadores!" Dije mira, me hicieron trabajar en Talk Like A Pirate Day, se merecen lo que reciben.
3
¡Arr, tus loggs estarán buscando un keel'haulin!
10

Usar ASP.Net Themes cuando solo una carpeta CSS normal hubiera funcionado bien.

Phil.Wheeler
fuente
Jajaja en eso, sí!
1
Esta respuesta podría acortarse a "Usar ASP.NET"
finnw
Las máscaras son útiles para configurar la CssClass predeterminada.
Min
8

Tomar el camino rápido para que funcione el código, en lugar del camino correcto (poco general, pero lo llamaremos una abstracción y, por lo tanto, una respuesta "correcta").

Arrozal
fuente
7

Mi empresa tiene un modelo de desarrollo similar a una cascada, donde nuestros usuarios comerciales y analistas comerciales definirán los requisitos para los proyectos. En uno de nuestros proyectos "grandes", obtuvimos una gran cantidad de requisitos, y noté que varios requisitos contenían detalles de implementación , específicamente información relacionada con nuestro esquema de base de datos utilizado por nuestro sistema de contabilidad.

Comenté a los usuarios comerciales que la implementación es mi dominio, no debería estar incluida en los requisitos. No estaban dispuestos a cambiar sus requisitos porque, después de todo, son EL NEGOCIO, y solo tiene sentido que los contadores diseñen software de contabilidad. Como desarrollador humilde que está demasiado lejos en la encuesta de tótems, me pagan por hacer en lugar de pensar . Por mucho que luché contra él, no pude persuadirlos para que volvieran a escribir los requisitos: hay demasiado papeleo y burocracia en torno a los cambios que es demasiado complicado.

Entonces, les di lo que pidieron. Por lo menos, funciona , pero la base de datos está extrañamente diseñada:

  • Mucha normalización innecesaria. Un único registro que contiene 5 o 10 campos se divide en 3 o 4 tablas. Puedo lidiar con eso, pero personalmente me gustaría tener todos los campos 1: 1 en una sola tabla.

  • Mucha desnormalización inapropiada. Tenemos una tabla que almacena los datos de la factura que almacena más que los datos de la factura. Almacenamos una serie de indicadores varios en la tabla InvoiceData, incluso si el indicador no está relacionado lógicamente con la tabla InvoiceData, de modo que cada indicador tiene un valor de clave primaria mágico y codificado y todos los demás campos anulados en la tabla InvoiceData. Dado que la bandera está representada como un registro en la tabla, sugerí colocar la bandera en su propia tabla.

  • Mucha más desnormalización inapropiada. Ciertos indicadores de toda la aplicación se almacenan como columnas en tablas inapropiadas, de modo que cambiar el indicador de una aplicación requiere actualizar todos los registros de la tabla.

  • Las claves primarias contienen metadatos, de modo que si una clave primaria varchar termina con "D", calculamos las facturas utilizando un conjunto de valores, de lo contrario lo calculamos con otro conjunto. Tendría más sentido extraer estos metadatos en una columna separada, o extraer el conjunto de valores para calcularlos en otra tabla.

  • Las claves externas a menudo van a más de una tabla, de modo que una clave externa que termina con "M" podría vincularse a nuestra tabla de cuentas hipotecarias, mientras que una clave externa que termina con "A" podría vincularse a nuestra tabla de cuentas automáticas. Sería más fácil dividir los datos en dos tablas, MortageData y AutoInsuranceData.

Todas mis sugerencias fueron derribadas con muchos gemidos y crujir de dientes. La aplicación funciona tal como está diseñada, y aunque es una gran bola de barro, todos los trucos desagradables, casos especiales y reglas comerciales extrañas están documentados sarcástica y humorísticamente en el código fuente.

Julieta
fuente
3
¡Dios mío, espero que tu CV sea bueno y esté actualizado para un escape rápido antes de que la gran bola de barro sucumba a la gravedad!
Benjol
7

Se adhieren a la tecnología anterior porque parece demasiado complicado permitir que sus clientes actualicen a una nueva versión de .NET Framework, pero en realidad tomará más tiempo de desarrollo crear el software porque no puede utilizar algunos componentes (que ahorran tiempo) Versión marco más nueva.

Tom van Enckevort
fuente
+1: Sí, he estado allí ... Y tan pronto como me di cuenta de que el n00bs no mejoraría, comencé a planear mi escape a pastos más verdes.
Jim G.
Y así lo hice, ¡me jubilé el mes siguiente!
vides
6

De vuelta en la universidad, estaba trabajando en mi proyecto de diseño senior. Otro tipo y yo estábamos escribiendo un sistema de seguimiento de errores basado en la web. (Nada innovador, pero los dos queríamos tener algo de experiencia web). Hicimos lo mismo con los servlets de Java, y funcionó razonablemente bien, pero por alguna razón tonta, en lugar de optar por usar Excepciones como nuestro mecanismo de manejo de errores, elegimos para usar códigos de error.

Cuando presentamos nuestro proyecto para una calificación y uno de los profesores preguntó lo inevitable: "Si tuvieras que hacerlo de nuevo, ¿qué harías de manera diferente?" Al instante supe la respuesta: "Usaría excepciones, para eso están ahí".

Greg D
fuente
Ahhh las alegrías de reinventar la rueda! :-) Eso es gracioso.
Lo llamo fallas intencionales, solo para que pueda mejorarlo en la próxima iteración.
whatnick
2
Las excepciones son solo para manejar excepciones. Demasiadas personas abusan de las excepciones al convertir todo en una excepción.
@jacob: estoy de acuerdo con su opinión de que las excepciones deben usarse para cosas que puede predecir (es decir, condiciones excepcionales) pero de lo que he visto (y no ser un programador de Java) Java parece usar excepciones para todo lo que está bajo el sol. Por lo tanto, no usar excepciones en el código Java podría considerarse ir en contra del flujo del lenguaje.
6

No es mi elección de método, pero creé un XSLT para convertir un archivo XML basado en filas en un informe HTML basado en columnas.

Solo funcionaba en IE, era completamente imposible decodificar cómo funcionaba. Cada vez que necesitábamos expandirlo, era increíblemente difícil y tomó años.

Al final, lo reemplacé por un pequeño script de C # que hizo lo mismo.

JDunkerley
fuente
Yo también he hecho eso. Implementé un motor de plantillas de correo electrónico usando XSL y me resultó difícil de leer y mantener.
TrueWill
Sí. Reemplazó el enorme árbol de archivos XSLT de alguien con algunas funciones simples de VB.NET. Muy satisfactorio, especialmente cuando la próxima solicitud de cambio de cliente que llegó fue imposible de hacer en XSLT.
Descubrí que la mayoría de los programadores consideran que XSLT es una mala elección, simplemente porque no la obtienen . Es extremadamente útil para un pequeño conjunto de problemas, mucho más eficiente que muchas otras soluciones. Por otro lado, es de vías de uso muy a menudo, y sobre todo no en ese pequeño conjunto de problemas ...
Avid
6

tratando de usar todas las nuevas tecnologías (para aprender nuevas tecnologías) a pesar de que ni siquiera se requiere ...

Oscar
fuente
5

No tomé suficiente tiempo para evaluar el modelo de negocio. Hice lo que me pidió el cliente, pero entre 6 y 12 meses después, ambos llegamos a la conclusión de que debería haber sido diferente.

Ponis OMG
fuente
4

Diseño sin especificación.

Sam
fuente
3
Las especificaciones no siempre son posibles
Debería ser "Implementar la solución sin preguntar al cliente si eso es lo que quería"; lo que generalmente significa que seguiste las especificaciones.
dietbuddha
3

Implementé una subsección de una aplicación de acuerdo con los requisitos.

Resulta que los requisitos estaban hinchados y chapados en oro, y mi código estaba sobrediseñado. Debería haber diseñado mi subsección para que solo funcione con lo que estaba agregando en ese momento, pero planifique agregar todas las demás cosas sin incluir soporte genérico para ello desde el principio.

Kieveli
fuente