¿Qué biblioteca / marco abandonó por ser demasiado complejo para el problema que está resolviendo? [cerrado]

12

... y codificó la funcionalidad "manualmente"?

Como un ejemplo bastante metafórico, difícilmente necesitaría una biblioteca para resolver ecuaciones cuadráticas, aunque tales bibliotecas existen y alguien las toma en serio.

Como un caso más cuestionable, dependiendo de las circunstancias, puedo deshacerme de jQuery (por ejemplo, cuando no necesito admitir algunos navegadores de la edad de piedra): simplifica algunas cosas pero agrega otra capa de complejidad y falta de confiabilidad al DOM. Y el uso excesivo de jQuery conduce a problemas absurdos, como uno visto recientemente en SO: ¿cómo asigno un href vacío a una aetiqueta con jQuery? Resultó que era una pregunta HTML, ni siquiera JavaScript.

Otro caso absurdo y aún no obvio para muchos es el uso de un motor / lenguaje de plantillas construido sobre otro sistema de plantillas: PHP. Tercer nivel de plantilla de alguien?

Y otra: a veces simplemente escupir XML (figurativamente) printfes mucho más fácil que hacerlo con un monstruoso motor XML.

¿Algún otro caso de tu experiencia?

mojuba
fuente
44
Como cualquier otra herramienta, usa jQuery donde es apropiado. No usa un martillo y un cincel para abrir la puerta de entrada si tiene una llave.
Robert Harvey
1
@Robert Harvey: por supuesto, pero en ingeniería de software a menudo tenemos problemas para reconocer llaves y martillos. De eso se trata la publicación.
mojuba
Tenga en cuenta que no importa cuán compleja sea una biblioteca popular, es mucho más fácil de entender para los demás que su biblioteca "simple" personalizada, porque están acostumbrados.
Louis Kottmann
@RobertHarvey tu puerta debe estar en mucho mejor forma que la mía.
Jimmy Hoffa

Respuestas:

14

Gran parte de la biblioteca empresarial de MS y la mayoría de los controles de terceros para .net me han dejado con esta sensación después de un poco de uso.

Su experiencia puede ser diferente

Cuenta
fuente
2
De acuerdo: la mayoría de la biblioteca Enterprise es confusa o no intuitiva, con un desfile de bibliotecas de terceros que hacen un mejor trabajo. Pero, por supuesto, si le das una paliza a Microsoft en el título, debe ser una "mejor práctica"
Watson, el
en los primeros días, entlib hizo algunas cosas que eran difíciles de hacer o de resolver con los primeros marcos ... en estos días parece ser principalmente una compatibilidad hacia atrás con los primeros días o las soluciones parcialmente horneadas que ves en futuras versiones en mucho mejor forma
Bill
13

Windows Communication Foundation

El hecho de que tenga una foto de una navaja suiza en la página de inicio lo resume todo para mí. Imagina que la configuración XML es aproximadamente cuatro veces más larga que el código real que escribes, y aún es muy difícil escribir servicios SOAP que sean interoperables entre C #, Java, PHP, Python y todos esos otros lenguajes que "se suponía que debían" ser interoperable con ...

En todos los proyectos futuros, solo me quedaré con REST.

Dean Harding
fuente
2
WCF 4.0 no requiere ningún archivo de configuración XML. No tengo ninguna experiencia en interoperabilidad con otras tecnologías (aparte de usar WCF como cliente, lo que funciona bien), pero puedo decir que lo encontré fácil e intuitivo. A pesar de que comencé a usarlo sin leer ningún libro o tener ningún entrenamiento (y con plazos para cumplir), pude comenzar a correr.
Allon Guralnek
44
Cambié el nombre de "WCF" a "WTF".
MetalMikester
1
@Allon: Admito que no he probado WCF 4.0, es muy posible que hayan realizado mejoras significativas en esa área ...
Dean Harding
12

Uno de los problemas que he experimentado con las personas que "hacen lo suyo" es que, si bien su enfoque suele ser más rápido y sencillo, también es más probable que sea frágil, tenga errores, esté incompleto y / o contenga fallas de seguridad .

Ejemplo simple: puede ser 10 veces más fácil usar printf para emitir XML que usar una biblioteca:

printf("<xml>%s</xml>", str);

pero te acordaste de escapar de los personajes especiales str? Por ejemplo ' <' y ' &'? Algunas personas pueden decir "no, no lo hice" y proceder a escribir esto:

printf("<xml><![CDATA[%s]]></xml>", str);

Pero aún emitirá XML roto si strcontiene la subcadena " ]]>" en cualquier lugar. Estuche de borde, claro. Pero sigue siendo un escenario válido que podría conducir a problemas inesperados con graves consecuencias.

Hay muchos momentos y lugares en los que "rodar el tuyo" puede ser apropiado, pero a veces se necesita mucha experiencia y conocimiento para identificar cuándo es apropiado. Es por eso que a menudo animo a los programadores a preferir el uso de bibliotecas establecidas (donde estén disponibles) en lugar de rutinas auto implementadas.

Mike Clark
fuente
11

Log4Net

La biblioteca es buena, pero la documentación es horrenda. Fue excesivo para lo que quería hacer.

Solía traza en su lugar.

Robert Harvey
fuente
1
¡Robert, tú también me ganaste, sinvergüenza! Solo miro log4net y pienso "wow, estos oyentes son geniales. Ahora, ¿cómo lo uso ...?" y luego creo que cuando lo tenga resuelto, podría haber escrito el mío.
JohnL
55
Realmente, tendría que estar en desacuerdo respetuosamente, no hay nada más simple que log.error ().
Watson
3
@Watson: Si es realmente así de simple, ¿por qué necesitarías un marco?
Robert Harvey, el
Utilizo la alternativa de The Object Guy que tarda unos minutos en configurarse, ya que la complejidad innecesaria de Log4Net lo desanima.
cjmUK
7

SharePoint

No me malinterpretes, SharePoint es increíble si necesitas la mayoría de las cosas con las que viene (¡y viene con muchas!), Pero si no sabes lo que estás haciendo o solo lo necesitas para uno o dos cosas, MASIVAMENTE no vale la pena el esfuerzo y la configuración.

Ryan Hayes
fuente
6

ASP.NET WebForms : aunque como desarrollador web .NET ha sido mi pan de cada día durante mucho tiempo, desde que comencé a usar el marco MVC (y provenía de un entorno de plantilla PHP / Smarty), te das cuenta de que a veces hay mejores formas de hacer desarrollo web y la abstracción que utiliza es exagerada y permeable .

Watson
fuente
Creo que te refieres a ASP.NET WebForms, a diferencia de ASP.NET MVC. ¿Correcto?
Eric King, el
@Eric: sí, correcto, ¡debería arreglar eso!
Watson
3

En casi todos los casos que hice esto, terminé arrepintiéndome:

  • El uso de las funciones PHP oci_ * en lugar de una biblioteca de contenedor resultó ser un mal movimiento debido a la capacidad de mantenimiento del código. Portar todo el código a Zend_Db facilitó mucho el desarrollo del mantenimiento del código de la base de datos.
  • Hacer rodar mi propio componente de cuadrícula ajax, que tomó demasiado tiempo para desarrollarse más, dada la rapidez con que evolucionan algunos de los otros componentes de la cuadrícula. Actualmente lo estoy transfiriendo todo a las cuadrículas Ext JS porque con ellas hay una gran cantidad de funcionalidades de terceros disponibles.
  • Evitar bibliotecas como prototipos y jquery condujo a la aparición repetida de problemas entre navegadores, a menudo difíciles de rastrear. El puerto Ext JS ha resuelto mis problemas de navegador cruzado. Es mágico, incluso si es un vasto marco que me llevó semanas entender.

Llegué a la conclusión de que es mucho mejor elegir algunos marcos confiables de terceros y usarlos como base para todo lo que haces. Esos marcos son desarrollados y depurados por otra persona, lo que es un ahorro de tiempo increíble una vez que los haya estandarizado y los entienda bien.

Joeri Sebrechts
fuente
+1. Y ayuda si esas bibliotecas son de código abierto. Continúe y descargue el código fuente en todas las bibliotecas que está utilizando, si aún no lo ha hecho. Leer el código fuente de la biblioteca es una excelente manera de diagnosticar y solucionar problemas, así como una oportunidad para aprender del código de otros programadores (presumiblemente de bastante alta calidad).
Mike Clark el
2

System.Text.RegularExpressions

Regex es tan complejo y tan lento. Muy rara vez usaré Regex y generalmente escribiré mi propio análisis y coincidencia de texto.

Ocasionalmente, encontraré que Regex es útil para una combinación realmente compleja.

Chris Persichetti
fuente
¿Compila regexp correctamente [o tal vez System.Text.RegularExpressions es más lento que Perl & co. implementación]?
Maciej Piechotka
3
Regex puede ser relativamente lento en comparación con el análisis manual de cadenas, pero es más rápido de lo que muchas personas piensan, y generalmente más que lo suficientemente rápido para la mayoría de las aplicaciones prácticas.
Mike Clark el
2
No creo que esto sea realmente una queja sobre la implementación de .NET en particular, ya que no hay nada particularmente complejo o lento al respecto (de hecho, he encontrado que es una de las implementaciones más rápidas disponibles). Al menos, esa ha sido mi experiencia. Por supuesto, las expresiones regulares en general se vuelven fácilmente complejas, y ciertamente existe la tendencia de que las personas las usen en lugares totalmente inapropiados.
Dean Harding
2

No es que Delphi4PHP necesite mala prensa, pero lo probé (versión 2.0) y fue extremadamente difícil doblarlo a mi voluntad. Quería usarlo para hacer una aplicación web de estilo youtube para que los clientes vieran videos de capacitación, pero era demasiado engorroso y cuando intenté combinar marcos PHP (VCL4PHP, Zend, Smarty y Recess) me encontré con el inevitable cambio de nombre todo porque no hay espacios de nombres en el problema PHP 5.

Dicho esto, al final no hice el mío. Solía ​​aprender de mis errores y decidí mantenerlo muy simple y usar CodeIgniter y FlowPlayer (con JQuery).

Tengo un anhelo de que, independientemente de los frameworks que salgan vivos de PHP 5, PHP 6 tendrá algunos frameworks increíbles que en realidad podrían funcionar bien juntos.

Peter Turner
fuente
2

Weka

Hago mucho trabajo de aprendizaje automático, y si alguna vez necesito algo simple como Naive Bayes o regresión logística, me encanta deshacerme de Weka. Tiene buenas implementaciones de algunos algoritmos de aprendizaje automático bastante complicados, pero la API es una API Java cruda y excesivamente orientada a objetos de la vieja escuela (pre-genéricos). Cosas que me molestan al respecto:

  1. Enrolla su propia matriz redimensionable que nada más utiliza, lo que garantiza la conversión de trabajo ocupado de un lado a otro.

  2. Un montón de acoplamiento secuencial donde los métodos tienen que llamarse en un orden específico y, a menos que realmente RTFM sea cuidadoso, no se dará cuenta.

  3. Cada instancia debe ser un objeto Instance, y tengo que declarar explícitamente con un objeto Attribute si es nominal o numérico. Esto lleva a una gran cantidad de trabajo ocupado que convierte los datos a la forma que Weka quiere. Esto es especialmente molesto ya que la API de Weka arroja tantas excepciones que la compilación de código no significa que sea probable que funcione de todos modos. Si estuviera diseñando la API, sería liberal en lo que acepté (tal vez solo tome una matriz de objetos) e introspeccione los datos para averiguar qué obtuve y qué es lo que debo hacer con ellos.

dsimcha
fuente
2

En un proyecto en particular, abandoné EJB3. Me dio inyección de dependencia y manejo de transacciones gestionadas por contenedor. Pero introduce enormes dependencias (por ejemplo, JBoss) y hace que el sistema sea difícil de escribir para pruebas automatizadas. Ahora lo he reducido a inyección de dependencia de constructor JPA +.

Conor
fuente
1

Escupir HTML en un puerto de depuración en una aplicación. Necesitaba alguna forma simple de obtener algunos datos actuales (con actualización automática). Colocar una biblioteca para formatearlo hubiera sido bueno, pero fue más fácil imprimirlo.

También rechacé en la biblioteca por otra: utilizamos una biblioteca XML grande y compleja en la mayoría de nuestras cosas. Después de pasar 4 horas un día tratando de que funcione en una nueva aplicación, solo dije 'embolsarlo' y utilicé TinyXML. No es tan poderoso, pero se necesita MUCHO menos esfuerzo para que haga cosas simples.

Michael Kohne
fuente
1

Recientemente he estado trabajando en un compilador de lenguaje de script que puedo usar dentro de mis aplicaciones. He usado otros, pero ninguno hace exactamente lo que necesito que hagan. Entonces pensé, ¿por qué no tratar de escribir el mío? Puede pasar un año o dos antes de que sea realmente adecuado para uso general, pero está bien. Además, es una gran experiencia de aprendizaje.

Otra solución 'rodar mi propia' son las piezas utilizadas para traducir mis aplicaciones. Hay bibliotecas existentes, pero no me gustó ninguna de ellas. Entonces hice el mío.

Y los componentes de la base de datos de Delphi. Los odio Siempre tengo. Así que hice mi propia interfaz de base de datos que funciona de la manera en que quiero que funcione (y exactamente como la que hice para PHP, lo que facilita la codificación entre idiomas).

Básicamente, cuando se me da una opción, generalmente termino haciendo mi propia biblioteca.

Gran maestro B
fuente
Yo sé lo que quieres decir. Puedo mostrarle todo un arsenal de STL casero, abstracción de DB, idiomas completos con sus compiladores o intérpretes, y lo que no. Por lo general, sus colegas y la gerencia no lo aceptan, pero ¿qué programador que nunca escribió un compilador incluso si a nadie le importó?
mojuba
0

Ohhh, muchos. He trabajado en varios proyectos ágiles utilizando apis de código abierto. Genial cuando funcionan, pero a menudo hemos sufrido desarrolladores con un fetiche por traer todo tipo de API de terceros, algunas oscuras, otras no, solo porque quieren usar una o dos clases en ellas. El resultado final es una mezcla de código y sistemas pirateados. Lo entregan alegando que es el mejor código de la historia, se van y los pobres vagos que lo recogen encuentran un lío ininteligible e indocumentado lleno de problemas de dependencia y piratas.

drekka
fuente