¿Cómo manejas el código intencionalmente malo?

21

Hay muchas historias sobre códigos intencionalmente malos, no solo en TheDailyWTF sino también en SO. Los casos típicos incluyen:

  • Tener una construcción inútil que desperdicia el tiempo (por ejemplo, un bucle vacío que cuenta con un valor enorme) para que los programadores puedan "acelerar" fácilmente la aplicación eliminándola cuando se les encomiende.
  • Proporcionar documentación intencionalmente engañosa, errónea o nula para generar costosas solicitudes de soporte.
  • Generando fácilmente errores, o peor, generando aunque todo funcionó bien, bloqueando la aplicación por lo que se requiere una costosa llamada de soporte para desbloquear.

Estos puntos muestran una actitud más o menos maliciosa (aunque a veces por accidente), especialmente el primer punto ocurre con bastante frecuencia.

¿Cómo se debe tratar con tales construcciones? ¿Ignorar el problema o simplemente eliminar el código ofensivo? ¿Notificar a su gerente o hablar con la persona que introdujo la "función"?

mafu
fuente
10
¿Es "a veces por accidente" o es "intencionalmente malo"? No veo cómo pueden ser ambos.

Respuestas:

7

La mayoría de los códigos malos se deben a una falta de comprensión y la solución es la educación.

El código intencionalmente incorrecto es completamente diferente, debido a algo completamente ajeno a la experiencia del codificador o al resto del proyecto. Como tal, debe averiguar por qué están saboteando el código a propósito y abordar ese problema. Esto significa, más a menudo que no, políticas de oficina, y esa rara vez es una situación agradable para alguien.

La forma en que manejaría el lado de la política depende de muchas circunstancias (no mencionadas anteriormente). La forma en que manejaría el código es primero asegurarme de que no soy el único malentendido, que realmente es un código malo, y luego corregir las deficiencias obvias. Si es razonablemente posible, escriba pruebas de que el código incorrecto fallará. Comprobar dos veces que he entendido correctamente significaría hablar con la persona que escribió el código. Eso debe hacerse de una manera muy amable y educada, sin asumir la intención, y puede ayudar a encontrar la razón subyacente (política) necesaria más adelante.

El envío es más importante que la perfección de la torre de marfil, pero hay dos puntos que vale la pena abordar. Arreglar deficiencias obvias te da el 80% de los resultados con el 20% del esfuerzo, y rara vez vale la pena ignorar ese tipo de fruta de bajo perfil. Pero lo que es más importante, si no aborda la razón subyacente (política), es probable que se escriba un código intencionalmente más malo y cause más problemas, y posiblemente evite el envío.


fuente
28

Nunca (en 20 años) encontré un código intencionalmente malo, pero los ejemplos que usted cita parecen (al menos para mí, pero IANAL) son intentos de defraudar a un empleador o un cliente, por lo que probablemente tenga un legal obligación de señalarlo a su gerente.

gkrogers
fuente
2
Convenido. Nadie escribe código intencionalmente malo. Están resolviendo un problema, y ​​lo están resolviendo de la mejor manera que saben. Pueden ser equivocados, poco educados, ignorantes, etc. Pero realmente no puedo entender que un desarrollador escriba intencionalmente algo que sabe que es malo.
Dan Ray
8
Incluso si no es legal, al menos hay una obligación ética.
Chris Farmer
@ChrisFarmer No se puede separar la obligación ética del contexto más amplio: hay algunos contextos donde el código deliberadamente malo representa una resistencia colectiva legítima, ya sea económica o política. (Y un contrato de trabajo sólo se merece ser honrado de buena fe cuando la relación se formaliza no es explotador individual o estructuralmente.)
user234461
11

Depende de la cultura de la empresa. La mayoría de las veces, simplemente no es su trabajo arreglar y limpiar todos los códigos incorrectos.

De Coders at Work , el pensamiento de Jamie Zawinski sobre la sobreingeniería, que también se puede aplicar en esta situación:

Al final del día, ¡envía la maldita cosa! Es genial reescribir su código y hacerlo más limpio y, por tercera vez, en realidad será bonito. Pero ese no es el punto: no estás aquí para escribir código; Estás aquí para enviar productos.

Hay muchos codificadores y códigos defectuosos, y simplemente tratar de corregirlos a medida que los encuentra, a expensas del proyecto / tarea actual, simplemente puede no valer la pena si el producto "está funcionando". Con demasiada frecuencia, todos somos programadores de cinta adhesiva.

Ver también la publicación de Joel Spolsky: The Duct Tape Programmer

esponja
fuente
+1 Soy realmente un fanático del concepto de envío de productos. Creo que a muchos perfiles técnicos les falta ese concepto.
+1 yo también. Hay demasiados tipos de "código limpio", etc., que respaldan una visión sesgada de lo que es importante. La calidad del código es tan importante. Los ganadores no son los que tienen el mejor producto. Son aquellos que tienen un producto lo suficientemente bueno enviado lo suficientemente rápido.
Joonas Pulakka
44
Creo que te perdiste el punto de la pregunta: el tipo habló sobre código intencionalmente malo , no simplemente código escrito por programadores malos.
Hila
@Hila Creo que mi punto sigue siendo válido si el código incorrecto fue intencional o no. A menos que sea un problema que estaba en la lista de proyectos / tareas asignada, no es responsabilidad de un programador de cinta adhesiva arreglar y limpiar todo el código incorrecto . La cultura por ahí no es académica y escribir código limpio / hermoso. Se trata de enviar y respaldar un producto / negocio. Personalmente, me encantaría arreglar todo el código incorrecto con el que me encuentro, pero no puedo dedicar el 100% de mi tiempo a eso: simplemente nunca podría terminar la tarea / proyecto que me asignaron en ese momento.
Spong
3
@sunpech Pero limpiar código intencionalmente incorrecto no es lo mismo que simplemente limpiar cualquier código. No se trata de hacer que su aplicación sea más "hermosa", se trata de corregir el código dañino que se puso allí a propósito. Es como decir que un médico no debe sacar unas tijeras que un colega olvidó dentro de un paciente porque una cirugía cardiotorácica se trata de salvar vidas y no de cuán bonitas son las puntadas.
Hila
4

Esa actitud es el síntoma de algo peor.

  • ¿La gerencia fomenta la competencia de los desarrolladores?

  • ¿Dónde está el espíritu de equipo?

  • ¿Las tareas son asignadas por alguien más que el propio equipo?

  • ...

En cualquier caso, eliminar el código ofensivo no es suficiente. Quejarse con su gerente ciertamente no ayudará a mejorar el espíritu de equipo.

Trataría de hablar con la persona directamente y trataría de entender por qué haciendo muchas preguntas sin juzgarlo. Todo el equipo tiene que hacerlo sin agresividad.

En la mayoría de los casos, ese comportamiento constructivo pone el problema real (el peor) bajo luz, y luego puede trabajar en ello.

Si realmente no funciona. Eliminar a ese desarrollador del equipo.


fuente
4

¡Si pensara que fue intencional, probablemente despediría al tipo! Si es el resultado de que alguien no sea un programador lo suficientemente bueno, trabajaría en sus habilidades. Si fuera empujado desde arriba, probablemente comenzaría a buscar un nuevo trabajo.

Zachary K
fuente
2

¿Cómo se debe tratar con tales construcciones? ¿Ignorar el problema o simplemente eliminar el código ofensivo? ¿Notificar a su gerente o hablar con la persona que introdujo la "función"?

Dependiendo del contexto, cualquiera de esos podría ser el más apropiado. Otras posibilidades incluyen, solicitar la transferencia a un proyecto diferente, conseguir un nuevo trabajo y varios actos de moralidad y / o legalidad cuestionables.

Sin embargo, dado que no conocemos los hechos reales y las personas reales involucradas, no hay forma de que alguien en la posición que usted describe deba prestar mucha atención a nuestros consejos / valor de 2 centavos.

Si esta es una situación real de la que está hablando, puede valer la pena hablar en voz baja con su gerente y pedirle consejo sobre lo que debe hacer. Si es posible, trate de conversar sobre lo que puede / debe hacer, no sobre señalar con el dedo. Si es posible, no nombre los nombres. Existe una buena posibilidad de que su gerente ya tenga una idea del problema.

Pero el otro lado es que puede estar soplando esto fuera de proporción. Piensa mucho sobre eso antes de hacer algo. Piense en las consecuencias, incluida la posibilidad de que cualquier medida que tome pueda ser contraproducente ... gravemente.

Stephen C
fuente