¿Existe un término para una complicación excesiva de la POO?

18

Hace un año o dos vi un excelente artículo sobre OOP (Java), que mostraba la progresión de un simple registrador concreto de dos o tres líneas de código, y un proceso teórico de pensamiento excesivo por parte del desarrollador inexperto que básicamente decía oh, debería ¡agregue esto en caso de que alguna vez lo deseemos! Al final del artículo, este simple registrador era un desorden gigante de basura que el desarrollador original apenas podía entender ...

¿Existe un término común para este tipo de complicación excesiva? Ese artículo (que desearía poder encontrar de nuevo) muestra el concepto maravillosamente para un caso aislado, pero me he encontrado con proyectos completos en los que los desarrolladores se habían programado esencialmente en un nudo por el uso excesivo de patrones, marcos, bibliotecas y otros asuntos. A su manera, esto es tan malo (o incluso peor) que las aplicaciones de espagueti VB6 heredadas que heredamos para su reemplazo.

Lo que realmente estoy buscando es mencionar esto cuando entrevisto. Quiero saber si alguien es consciente y consciente de lo fácil que es caer en esto con falta de arquitectura / planificación previa (y obtener una idea de si parecen tener el equilibrio correcto), pero en realidad no es algo Puedo encontrar mucha información sobre.

jleach
fuente
25
Sí, se llama OOP.
cabeza de jardín

Respuestas:

28

El término más frecuente que escuché para describir tales diseños es la ingeniería excesiva . El significado original de la palabra, sin embargo, no está relacionada con el desarrollo de software, y fuera del desarrollo de software que tiene, probablemente, no es un mal tono tan.

En un nivel más general, Joel Spolsky dio a los diseñadores que complicaron demasiado los diseños arquitectónicos el nombre de " astronautas de la arquitectura ".

Sin embargo, especialmente para una entrevista, creo que es más importante saber cómo se llama lo contrario, poner solo las cosas en un diseño que realmente se necesitan y olvidarse del enfoque poco saludable "por si acaso": esto se llama el principio YAGNI .

Doc Brown
fuente
Gracias. Soy un gran defensor de YAGNI, no estaba seguro de si había un opuesto común.
jleach
Destacaría que yagni se trata de "lo que realmente se necesita en este momento". Todavía debe dejar las cosas fuera, incluso si se sabe que será necesario más adelante, siempre que no sea necesario en este momento.
Doblado
77
@Bent también destacaría que no significa ignorar por completo las cosas / cambios que seguro que sucederán en la función cercana ... saber cómo se extenderá el software después puede guiarlo a escribir código que será más fácilmente refactorable a lo largo de esos ejes de cambio.
Bakuriu
He estado usando el término "ingeniería pobre" en lugar de "ingeniería excesiva". He trabajado con personas que aman agregar todo tipo de funciones y extensiones "por si acaso" que no tienen casos de uso claros. Si no comprende el problema que está tratando de resolver, es solo una mala ingeniería.
Josh Johnson el
4

Sí, la sobreingeniería es el término más simple para describir esto. He visto diseños excesivamente complicados y innecesariamente complicados más de lo que puedo recordar a lo largo de los años. Hace muchos años, cuando tomaba un curso de Microsoft GWBasic, el instructor repetidamente golpeó el método KISS (Keep it Simple Stupid). Esto es tan cierto hoy como lo fue entonces.

Así que siempre recuerdo KISS y siempre diseño con los principios SOLID en mente. Pero dicho esto, todavía es posible diseñar un diseño con principios SÓLIDOS plenamente considerados. Debe equilibrar un enfoque pragmático de sentido común con el deseo de ser puro y adherirse a las pautas OOP generalmente aceptables. Si se le da suficiente tiempo y le encanta crear soluciones complejas, puede terminar en el camino del diseño de un motor para una patineta porque pensó que eventualmente se convertiría en un automóvil. Afortunadamente, he sido lo suficientemente disciplinado como para no hacer esto a lo largo de los años, pero lo he visto muchas veces.

Para resumir, para evitar la complicación excesiva del código:

1) BESO (Mantenlo simple estúpido)

2) Siga los principios SÓLIDOS con la practicidad en mente.

3) No intentes diseñar para cada eventualidad. Y a veces, las abstracciones pequeñas y con fugas no son cosas horribles, si están aisladas, son intencionales y si el esfuerzo para evitarlas supera con creces los efectos de mantenerlas.

4) Considere la implementación de soluciones mientras las diseña. No puede simplemente decir "oh, ese es un detalle de implementación", y asumir que su diseño es práctico. Solía ​​trabajar con un arquitecto que hacía esto con frecuencia, y, por desgracia, sus diseños nunca funcionaron, y como resultado, ya no trabajo allí.

5) Codifique como si fuera usted quien lo mantendrá.

David Spenard
fuente
-3

Entonces, va a tener esta entrevista y tiene la intención de engañar al candidato para que muestre lo que sabe sobre ingeniería de software y luego dirá "No, probablemente quiera aplicar todo lo que sabe en su primera tarea, avance ahora , creador de chapa dorada sobre ingeniería sin valor comercial! Shoo! "

Creo que sería más seguro presentar un ejemplo concreto y discutir los pros y los contras de aplicar ciertos patrones. De lo que estaría solicitando respuestas como "Depende, ¿lo quiere rápido? ¿Será todo esto? ¿Qué tan complicado es el problema? ¿Qué patrones ya existen?" y puedes aprender algo tú mismo. Esto también permitiría al candidato demostrar su sentido del contexto, mientras que sería una pregunta más abierta. Esperar y querer una respuesta específica, en el mejor de los casos, le brindará a alguien con la misma mayor preocupación que la suya. Si no obtiene su respuesta, podría ser que el candidato lo considere obvio.

Martin Maat
fuente
44
Lo siento, pero realmente me preguntaba si había un término para eso. No estaba buscando consejos sobre cómo realizar una entrevista (o que mi pregunta fuera percibida de alguna manera sobre cómo realizaría una entrevista). Sin embargo, gracias por su preocupación ...
jleach
1
Bueno, usted escribió ese último párrafo en su pregunta, que es difícil de ignorar y una declaración bastante. Si no aprecia los comentarios sobre ciertas partes de su texto, puede ser más restrictivo en lo que anota.
Martin Maat