¿Cómo se explica la refactorización a una persona no técnica?

52

¿Cómo explicas la refactorización (y la deuda técnica) a una persona no técnica (generalmente un PHB o un cliente)? ("¡¿Qué, me va a costar un mes de tu trabajo sin diferencia visible ?!")

ACTUALIZACIÓN Gracias por todas las respuestas hasta el momento, creo que esta lista proporcionará varias analogías útiles a las que podemos señalar a las personas apropiadas (¡aunque editar las referencias a PHB puede ser prudente!)

Benjol
fuente
No recuerdo cómo Apple convenció a tanta gente de cambiar de Leopard a Snow Leopard. Probablemente el precio: $ 100 menos de lo habitual en ese momento.
mouviciel
Esta pregunta podría dar algunas respuestas sorprendentemente útiles para cualquiera que trabaje con código en la industria. Presta atención a las personas.
joshin4colours
¿Por qué sería sabio?
Louis Rhys

Respuestas:

53

Cuando tienes un gran cine en casa y agregas cosas, lenta pero seguramente se forma un gran nido de ratas en la parte posterior.

Si a menudo reemplaza partes, a veces vale la pena enderezar todo eso.

Claro, si haces eso, estaba funcionando antes, y no funcionará mejor que cuando empezaste, pero cuando tengas que meterte de nuevo con eso, las cosas serán mucho más fáciles.

En cualquier caso, probablemente sea mejor hacer una comparación similar con algún área temática con la que el PHB o el cliente ya esté familiarizado, es decir, automóvil o construcción o algo ...

whatsisname
fuente
1
No es la mejor analogía porque hace que parezca que cosas malas simplemente se arrastran espontáneamente en su teatro, en oposición a las cosas malas que aparecen como resultado directo de la construcción continua de su teatro.
doppelgreener
21
@Axidos: "nido de ratas" es un idioma inglés que significa "un enredo aparentemente imposible de deshacer" (en este caso, de cuerdas y cables detrás del centro de entretenimiento)
HedgeMage
8
Conceptualmente es bastante bueno - necesita "cables" después de "nido de ratas"
Murph
2
@ Peter: Creo que todos hemos tenido que ir detrás de la televisión al menos una vez. Simplemente explíquelo como cien veces peor y haga girar un hilo de cables por todas partes y tire de esto y tire de eso y descubra una civilización muerta en algún lugar del desastre.
doppelgreener
3
Si alguien no puede relacionarse, muéstreles esto: google.com/images?q=do+not+touch+any+of+these+wires
Steve S
41

Re-factorizar es como el proceso de volver a empacar una maleta hasta que todo encaje perfectamente. A veces, en el proceso, te preguntas por qué estabas tratando de conseguir tanta basura allí para empezar.

Tim Post
fuente
1
Iba a publicar alguna analogía con un garaje o cobertizo, pero esto es mejor.
Matt Ellen
O a veces vas a comprar algunas maletas más y te das cuenta de que pagar los cargos por sobrepeso no es gran cosa, ya que en el software los costos no son iguales a los del mundo físico. Entonces realmente puede encajar todo bien y la restricción de una sola maleta resultó ser arbitraria y absurda.
Dan Rosenstark
+1 Esto es genial. Además de hacer que las cosas ocupen menos espacio, hay cosas que te das cuenta de que ni siquiera necesitabas y que puedes dejar de lado.
Robbie Dee
21

No explicaría el concepto de deuda técnica, porque no es necesario. En cambio, enfóquese en la refactorización: está cambiando el diseño de su programa, no necesariamente para que sea "mejor" o "mejorado", lo está cambiando para que pueda aceptar un cambio que necesita hacer.

Una analogía de automóvil podría encajar: debe agregar un aire acondicionado a un automóvil, pero no fue diseñado originalmente para uno. No solo tiene que hacer un aire acondicionado extraño en forma de L, sino que también debe quitar algunas otras cosas primero y cambiar el sistema de ventilación.

También creo que es una mejor estrategia refactorizar cuando está incorporando nuevas funciones: de lo contrario, podría estar cambiando el diseño en algo que solo se vea "mejor", pero que en realidad no sea adecuado para las circunstancias que rodean la adición de su próxima función.

Macneil
fuente
Mover las piezas en un automóvil para brindar un mejor rendimiento o un mantenimiento más fácil, funciona para cualquiera que haya levantado la tapa de su automóvil, pero ¿cuántos PHB han hecho eso?
Peter Boughton
3
Me gusta este porque enfatiza que se está refactorizando para hacer un cambio requerido más fácil (o posible). La refactorización generalmente no debe hacerse por sí misma, sino para cumplir con un objetivo específico.
Kristopher Johnson
Entonces, la respuesta corta es: ¡No les digas! Solo tenga en cuenta el tiempo en las nuevas características y refactorice en consecuencia.
Jonathan van de Veen
12

Utilizo el término Deuda técnica y lo relaciono directamente con algo que entienden: deuda corporativa. La deuda técnica es como pedir un préstamo. Usted paga intereses por ello. Por ejemplo, puede construir una nueva fábrica y pagarla directamente o puede obtener un préstamo. Si obtiene un préstamo, en realidad pagará más a largo plazo, pero tiene sentido financiero si los términos son correctos .

Sin embargo, si paga un interés del 25% sobre dicho préstamo, se coloca en una posición no sostenible. Esto es lo mismo con la deuda técnica. A veces tiene sentido asumir alguna deuda técnica. Sin embargo, llega un punto en el que el interés es demasiado alto y debe pagarse. Algunas deudas técnicas son como un préstamo hipotecario y otras como deudas de tarjetas de crédito. En emergencias, la deuda de la tarjeta de crédito es un activo importante y valioso. Sin embargo, también puede romper el banco (o el hogar si lo desea) si se usa imprudentemente.

Otro ejemplo: puede pagar $ 10,000 por una caída de correo de marketing para obtener más clientes potenciales para las ventas en el futuro. Estás pagando la "deuda de ventas". Este es un gasto con pago a largo plazo. Compare esto con el motivo por el que desea "gastar" dinero ahora refactorizando un fragmento de código. En ambos casos no hay una recompensa inmediata, pero se está preparando para un mejor rendimiento en el futuro.

Tiendo a usar el término "deuda xxxx" como analogía cuando hablo con quien sea el público objetivo. Por ejemplo, deuda operativa: la imprenta que tenemos ahora funciona bien, pero al detener la producción por un día (o una semana) y actualizar a una nueva máquina, podemos aumentar la producción en un 25%.

EDITAR - Aquí hay otra versión de esto

Nemi
fuente
1
+1 para una respuesta bien razonada que demuestra una economía realista. La deuda es racional a veces, y los puristas pierden demasiadas oportunidades si no pueden tolerarla.
Macneil
1
Y la gente entiende que pedir préstamos para pagar los intereses de préstamos antiguos no es sostenible.
Christopher Mahan
1
Esta es mi preferencia para la explicación, porque me gusta referirme a descartar todo y reescribir (que a menudo es la única opción que queda debido a tanta deuda técnica) como quiebra técnica
Wayne Molina
44
Esta es una respuesta terrible. (1) Esto es más complicado que la explicación técnica de la refactorización. (2) Esto no explica el "por qué" de la refactorización; explica los "cuándo" de la refactorización (es decir, cuándo es rentable). O tal vez realmente no entiendo esta publicación y, por lo tanto, el punto (1).
Thomas Eding
2
@ThomasEding (1) Esto no es una explicación de refactorización, es una explicación de la deuda técnica. (2) Esto explica por qué cuándo refactorizar - a una persona de negocios. Honestamente, a ellos no les importa la razón técnica, a ustedes sí. Quieren una razón justificable por la que esté trabajando en otra cosa que no sea la siguiente característica que impulsará las ventas. Es por eso que la mayoría de los programadores no pueden hablar con su jefe y quejarse de que el jefe es estúpido. No son estúpidos, solo tienen controladores diferentes a los tuyos.
Nemi
8

Limpieza de primavera.

No estás haciendo ninguna modificación a la casa. Solo estás cambiando cosas y deshaciéndote del polvo. Tal vez tirar algunas cosas que ya no usa o necesita. pero no estás agregando nada

Mark Canlas
fuente
1
+1: Esta es la mejor respuesta de la OMI: y casi cualquiera puede relacionarse. "Vives en tu casa, las cosas se ensucian / polvorientan / modly - periódicamente necesitas hacer una limpieza profunda".
Steven Evers
7

"¿Alguna vez has jugado Mouse Trap ? A medida que incorporamos nuevas funciones, cambiamos interfaces y corregimos errores, el código puede comenzar a parecerse mucho a eso. Llega un punto en el que tenemos que gastar mucho capital (tiempo y esfuerzo) , lo que equivale a dinero) asegurándonos de que todas las partes móviles funcionen bien con cada nuevo cambio o adición, o en su lugar podemos reservar tiempo para refactorizar el diseño, lo que resulta en menos partes móviles que tenemos que manejar cada vez que hacemos un cambio. puede parecer , desde la perspectiva del usuario final, que el refactor no tiene ningún beneficio, pero el beneficio ocurre cada vez que se agrega una nueva característica después del refactor. El proceso es más rápido, introduce menos errores y, a partir de entonces, es menos costoso, sin mencionar que el código refactorizado a menudo es más eficiente en general.

Quizás se pregunte por qué dejamos que parezca Mouse Trap en primer lugar:

  • A veces, hacer algo ahora significa que tenemos que sacrificar la elegancia y la eficiencia para simplemente "hacer que funcione".
  • Las características del lenguaje y otras tecnologías disponibles para nosotros como programadores a menudo cambian. A veces, las nuevas características nos permiten reemplazar un revoltijo de seis partes móviles con uno.
  • A menudo, cuando agregamos la función C a las funciones A y B, no sabemos que B finalmente se eliminará y se agregará D. Una forma de lograr C puede funcionar muy bien con B, pero no muy bien con D.

En un esfuerzo por seguir construyendo una mejor trampa para ratones, tenemos que volver constantemente y encontrar lugares para reducir la complejidad y racionalizar lo que tenemos. Es la diferencia entre tener un software con muchas características y tener un software de realmente alta calidad ".

HedgeMage
fuente
6

texto alternativo

Esta es una versión un poco más gráfica de la analogía del cine en casa.

Si desea agregar un nuevo electrodoméstico más [también conocido como, nueva funcionalidad], en un apuro, probablemente pueda encajarlo en algún lugar.

Si desea agregar otro dispositivo más, puede comprar un cable de extensión, que le dará algo de tiempo.

Pero en cada adición, se hace más difícil encontrar una solución. Y te estás exponiendo a un riesgo 1 de incendio [también conocido como errores], y tendrás que sacar grandes cantidades de dinero para pagarle a alguien para que coloque nuevos enchufes en la pared, lo que posiblemente podría escalar todo el camino hasta la tubería principal. placa de circuito, o incluso más.

1 Otra cosa que los PHB no asimilan muy bien: "Bueno, si solo pudiera suceder, ¿de qué se preocupa?"

Benjol
fuente
5

Refactorización: es como organizar su armario de ropa / cajón de herramientas.

  • No tire su ropa / herramientas solo porque están por todas partes.

  • Se podría argumentar que nunca deberían desorganizarse. Pero ellos lo hacen.

Justo como lo hace el código. Especialmente a medida que crece con el tiempo.

Y si no lo limpia, se preguntará qué pasó con esa camiseta que le encantó o con esa llave inglesa que siempre necesita pero que nunca puede encontrar.

Jagmag
fuente
4

Yo diría "mantenimiento de código" . Es importante usar palabras con las que la persona no técnica esté familiarizada y que tengan sentido para una visión del mundo no técnica. Si una persona no técnica (cliente) está familiarizada con el mantenimiento de la aplicación, entonces es fácil establecer paralelos entre el mantenimiento del código y el mantenimiento de la aplicación. Incluso si no son lo mismo, puede explicar que los clientes finales aquí son desarrolladores o aquellos que mantienen el sistema.

Amir Rezaei
fuente
1
¿Las personas no técnicas están familiarizadas con el mantenimiento de la aplicación? Le pregunté a mi abuela: ella no es y es la persona menos técnica que encontré. Además: dado que una persona no técnica no conoce la diferencia entre el código y la aplicación ("Si el código es la aplicación, la aplicación es el código") su analogía no funcionará.
Martin
2
En los lugares donde he trabajado, los tipos de marketing y projman han entendido que "mantenimiento" significa "correcciones de errores después del lanzamiento", y sería falso decir que la refactorización está solucionando errores.
Para mí, la persona no técnica es el cliente. Si el cliente sabe qué es el mantenimiento de la aplicación, también debe comprender el mantenimiento del código.
Amir Rezaei
El "mantenimiento del código" suena como si su código sufriera desgaste o se gastara. Es necesario mantener un automóvil, porque el uso normal hace hincapié en sus componentes, consume líquidos, etc. Una aplicación no es así: el código que se encuentra en un disco duro no "envejece" o "se daña" por sí solo.
Dan Ray
Te daré un ejemplo de mantenimiento: problemas de rendimiento. Su componente, sistema completo o aplicación está escrito en VB y Microsoft deja de admitirlo. El sistema operativo no admite la tecnología en la que se basa su código. Temas de seguridad. El mantenimiento de estos problemas no agrega ninguna funcionalidad nueva que el usuario final pueda notar, sin embargo, son fundamentales para mantener viva la "aplicación".
Amir Rezaei
4

Digamos que usted es un mecánico especializado en la personalización de automóviles, incluso construyéndolos desde cero si el cliente lo requiere. Hay un cliente que vuelve a su tienda de vez en cuando para poner siempre algo nuevo y brillante en su limusina de gran tamaño.

Una vez que entra para tener un buen sistema de sonido instalado. Realiza diligentemente la tarea pasando cables y conectándolo todo correctamente. Sale un día después, está contento y paga generosamente, como siempre.

Al mes siguiente regresa, pero esta vez quiere instalar un cine en casa completo. Una vez más, tomas la limusina. Como profesional, vuelves a visitar el sistema de sonido y facilitas el mantenimiento instalando un sistema de tubos para pasar los cables alrededor del automóvil. De esta forma, los cables están protegidos y son más fáciles de extraer, y si necesita agregar más, también será fácil de hacer. Así que arrancas los cables viejos, instalas el tubo y pasas el sistema de sonido y los cables adicionales para el cine, lo cierras todo y listo.

Al darse cuenta de que el cliente no le pidió que reemplazara el viejo sistema de sonido, se quita parte del costo de los reemplazos y de los tubos. Sin embargo, todavía ganas dinero con el trato, pero no tanto como lo hubieras hecho si hubieras unido el sistema como lo hiciste la primera vez.

Un mes más tarde regresa, esta vez quiere un sistema de iluminación y quiere nuevos altavoces que hayan dañado los antiguos a principios de semana.

Debido a que mantuvo todo bien y ordenado, puede pasar rápidamente los nuevos cables de iluminación a través de su tubo, instalar el sistema y reemplazar el altavoz. Esta vez, sin embargo, ha terminado mucho más rápido, la refactorización valió la pena al mantenerlo en la cima de su juego.

Su competidor que se estaba riendo de usted por arrancar cables perfectamente buenos e instalar todos estos tubos adicionales todavía está luchando para que su cliente esté satisfecho. Claro que lo hizo más rápido que usted la mayoría de las veces, pero a medida que pasa el tiempo, sus clientes se quejan de que cada vez hay más demoras y que la calidad general del trabajo es degradante.

Al observar esto, se da cuenta de que su objetivo no solo es permanecer en el negocio, sino ser el arma principal, es equilibrar lo que hace para satisfacer las demandas del cliente y lo que hace para facilitar su vida en el futuro. Muy rara vez un cliente pagará por ambos, por lo que debe administrar de cerca. Usted apuesta que haciendo las cosas de manera proactiva, incluso a costa de hacer las cosas dos veces, mantendrá los costos de mantenimiento en un porcentaje estable y controlado de su productividad.

El software es el mismo, excepto que los programadores pueden jugar con cinta adhesiva digital durante MUCHO tiempo antes de que los clientes y gerentes sientan realmente los efectos. Desafortunadamente para ese momento, el costo de volver a hacer las cosas bien crece exponencialmente con respecto a la cantidad de cinta adhesiva presente y la edad promedio de dicha cinta adhesiva.

Por eso es importante que sigamos refactorizando el sistema. Muy a menudo la experiencia nos mostrará una nueva forma más eficiente de hacer lo mismo o podemos combinar una funcionalidad similar y explotar redundancias en lugar de simplemente copiarlas. Así es como mantenemos el sistema delgado y malo. El tiempo mostrará que re-factorizar constantemente el sistema para satisfacer las demandas mantendrá la productividad constante al controlar la cantidad colocada en mantenimiento.

Colocar cinta adhesiva aumentará momentáneamente la productividad a costa de llevar un sistema subóptimo. La deuda técnica se incurre cuando se favorece la productividad inmediata en detrimento de los otros aspectos de un sistema. La analogía de la deuda es buena porque al igual que los intereses sobre el capital prestado consumen las ganancias, el tiempo prestado para hacer las cosas rápidamente conlleva un mayor mantenimiento y aumenta la fragilidad del sistema, lo que obliga a un equipo a gastar recursos adicionales en mantenimiento en lugar de crear. Al igual que su pariente financiero, si los préstamos continúan sin disminuir, la mayoría de los recursos se gastan en el pago de intereses, dejando muy poco para mejoras. La deuda técnica va a consumir los recursos técnicos hasta el punto en que la mayoría de los recursos se gasten simplemente manteniendo el sistema funcionando para detener todas las otras mejoras posibles.

Entonces, en última instancia, las preguntas no son si deberíamos hacerlo o no, sino que es ético dejar que los gerentes y los clientes crean que pueden confiar en cifras de productividad artificialmente infladas con el uso de cinta adhesiva digital. Algunos pensarían que es una decisión comercial, pero, francamente, esto es así solo porque los gerentes no lo entienden. Al final, alguien tendrá que pagar la deuda ya sea mediante una refactorización pesada o migrando a un nuevo sistema. En última instancia, para nosotros, los programadores, mantener los sistemas mantenibles, no debería tener que pedir volver a factorizar, ya que es una parte inherente del trabajo, no comprender esto es no comprender de qué se trata la ingeniería de software. Dicho esto, me doy cuenta de que existen sistemas que ya han incurrido en una deuda importante y el pago de esta deuda requerirá decisiones de los pagadores. Su trabajo es tal situación es al menos hacer su parte para dejar de pedir prestado. Esta deuda fue incurridaPOR NOSOTROS tal vez porque no lo sabíamos mejor, porque estábamos presionados para hacerlo, aún así, asumimos esta deuda y, muy a menudo, las personas a quienes les entregamos la deuda no la entienden, por lo tanto, no pueden manejarla adecuadamente.

Aquí está su software, todo listo, espero que les guste ... Pero por cierto, maximicé su tarjeta de crédito haciéndolo, espero que no les importe ... cya

Newtopian
fuente
3

El objetivo de la refactorización es simplificar el diseño y eliminar las ineficiencias. Esto hace que sea más fácil corregir errores y agregar nuevas funciones en el futuro.

La depuración es el doble de difícil que escribir el código en primer lugar. Por lo tanto, si escribe el código de la manera más inteligente posible, por definición, no es lo suficientemente inteligente como para depurarlo.

Si continúa agregando nuevas funciones al código, la refactorización se amortizará rápidamente. Esto será visible en una tasa de error más baja, una depuración más rápida y soluciones más rápidas.

cmcginty
fuente
Pero clever == 0entonces 2 * clever == 0...
Thomas Eding
3

Escribir software es muy parecido a escribir un gran libro de no ficción o una enciclopedia.

El primer borrador siempre apesta. Siempre se puede mejorar reorganizándolo, eliminando secciones que no necesitan estar allí y asegurando un estilo consistente en todo momento.

Siempre que tenga que revisar, lo más simple es agregar una nueva sección, cambiar algunas palabras, etc. Pero a medida que las revisiones se acumulan, el libro comienza a perder su organización. Entonces tienes que hacer más pases de reorganización. Si no lo haces, el libro se convierte en un revoltijo sin sentido.

Kristopher Johnson
fuente
3

Tome su computadora de escritorio, por ejemplo. Tiene una torre, monitor, teclado, mouse, impresora, escáner y parlantes. En definitiva, todo lo que quieres es un bonito escritorio organizado. Así que simplemente conecta las cosas a ciegas, y unos minutos después, he aquí, todo está configurado de la manera que lo desee. Bueno ... casi como quieres.

Un día después, cuando cambia el equilibrio de sus altavoces, se da cuenta de que colocó accidentalmente sus altavoces izquierdo y derecho en las áreas equivocadas, por lo que desea cambiar sus posiciones. Pero oh no! Hay una jungla de cuerdas enredadas; cuando mueves los altavoces, el cable de tu mouse se engancha y ahora el mouse se arrastra junto con los altavoces. Además, su teclado ahora no tiene holgura: solía poder moverlo del escritorio a su regazo.

Muy bien, puedes simplemente desconectar el mouse y el teclado y volver a insertarlos para que todo esté arreglado. Pero esto no ayudará con futuras reorganizaciones y adiciones futuras. También tejer los cables de tu mouse y teclado a través de la jungla es una molestia.

La mejor solución es volver a enchufar todo para volver a enchufarlos de una manera limpia y ordenada donde cada cable no interfiera con el otro. Ahora los cambios futuros son fáciles y continúan siendo fáciles. Invierte un poco por adelantado para obtener grandes ganancias más adelante.

El punto clave es que la solución original funcionó principalmente. Eso es lo que pasa con la refactorización: para empezar, funciona, pero debe cambiar la forma en que las cosas ya existen para hacer cambios futuros fácilmente (mover los altavoces).

Thomas Eding
fuente
2

Es como limpiar la casa después de una fiesta salvaje y loca de la noche anterior.

Digamos que la sala de estar quedó totalmente destrozada. La casa sigue siendo una casa, la sala de estar sigue siendo una sala de estar. Funciona pero no es como podría ser. Después de mirar el desastre, te das cuenta de que debe limpiarse.

Entonces, comienzas a embolsar la basura. Ya se ve mejor. Entonces, miras alrededor de la habitación y decides enderezar los muebles. Vuelves a poner una pieza, luego la siguiente y la siguiente. Wow, la habitación se ve muy bien. Estas orgulloso.

Tu hermana entra y dice que la habitación parece basura, debes arreglar la estantería y aspirar la alfombra. Ella está en lo correcto. La habitación se ve muy, muy bien.

Miras a tu alrededor y ves que las persianas se verían mucho mejor si estuvieran a la misma altura. Hecho. Wow, la habitación es asombrosa.

Trata tu código de la misma manera.

Michael Riley - AKA Gunny
fuente
1
Me gusta, pero lo cambiaría por limpiar la cocina. No cocinar por un tiempo, pero las cosas mejorarán después. Los PHB pueden tener dificultades para organizar una fiesta en horario de empresa :)
Jaap
Una analogía decente, pero hay un defecto que los lectores deben tener en cuenta: si no limpia su casa, entonces su casa literalmente se vuelve menos útil con el tiempo. Mientras que con un programa, esto no sucede.
Thomas Eding
1

¡Fácil!

Tómelo con un ejemplo ... todos en sus vidas han escrito una carta a un ser querido. Tiene que ser alguien querido porque en esas cartas generalmente también prestamos atención a la composición.

Entonces, tienes tu texto, ... el significado pasará de cualquier manera, ¡pero quieres que todo suene bien! ¿Derecho?

Refactorización, lo mismo ... misma información, más o menos, pero la composición es mejor. Y probablemente dará como resultado una mejor revisión por parte del lector.

Otro ejemplo: escribir un artículo para una revista. Dos escritores, ambos saben "sus cosas", la única diferencia es que uno sabe "cómo escribir" y el otro escribe como aprendió a escribir a partir de respuestas como estas.

¿De quién será el artículo que recordarás?

Torre
fuente
1

Todas las analogías con las cosas en el mundo físico, como construir un teatro, son, en mi opinión, terribles.

Debe explicar que el código de refactorización es como ... el código de refactorización. El software es maleable de una manera que los análogos físicos no lo son. A medida que las cosas se vuelven cada vez más complejas, uno debe reactivar (o rehacer, como desee) partes masivas o pequeñas de una base de código para que podamos continuar aumentando la complejidad sin volvernos locos.

¿Por qué refactorizamos? Porque el código que nunca se refactoriza cuesta más por minuto para mantener y cambiar, y finalmente se vuelve más problemático.

Lo interesante de la refactorización es que rehacemos la base de código pero, al menos al principio, la funcionalidad sigue siendo la misma.

Yar
fuente
/ Todas las analogías /? Estoy totalmente en desacuerdo. Solo necesitas ser más creativo. Tampoco responde la pregunta del OP.
Thomas Eding
@ThomasEding gracias por tu comentario. No estoy de acuerdo con el segundo punto: de hecho, estoy respondiendo la pregunta. Sin embargo, haré una edición ahora solo para ti.
Dan Rosenstark
0

Re-factorizar es lo mismo que limpiar algo y darle a las cosas un nuevo lugar para 'quedarse'

Fácil simple y algo que puede tomar muchas veces. A veces incluso agrego que esa persona X dejó un gran lío de cosas y tengo que limpiarlo.

Barfieldmv
fuente
0

Pensé en otro ejemplo, que aparentemente nadie ha mencionado aquí: refactorizar es casi exactamente lo mismo que reorganizar una ecuación en matemáticas (aunque eso podría quedar fuera del alcance de la 'persona no técnica, supongo).

Cuando reorganiza una ecuación, simplemente 'mueve cosas' para que sea más legible y más utilizable, sin cambiar el significado .

Benjol
fuente
1
así que si soy un PHB o un cliente (quién pagará este esfuerzo de refactorización), ¿por qué debería importarme? El código funciona (desde mi punto de vista)
Dan Pichelman
0

Dales una ecuación matemática simple. Por ejemplo:

¿Cuál es más simple?

y = x + x

o

y = 2x

La refactorización es un concepto similar, excepto que, en lugar de simples ecuaciones matemáticas, pones algoritmos. La idea principal es que puedes cambiar entre dos formas de hacer las cosas porque producirán el mismo resultado.

La refactorización más simple que se puede hacer es renombrar.

doX() { ... }
{
   doX()
}

Ahora, como realmente no queremos que las cosas se llamen doX porque realmente no sabemos lo que significa, cambiamos el nombre a algo que se explica más por sí mismo y lo reemplazamos en cualquier lugar donde lo hayamos utilizado.

doBusinessTransaction() { ... }
{
   doBusinessTransaction()
}

Esto le ahorrará dinero más adelante cuando haya un problema o mejora, ya que reduce el tiempo para que las personas entiendan y arreglen su aplicación. Para ahorrar más dinero, existen herramientas gratuitas que hacen este trabajo por usted automáticamente, dependiendo del idioma que esté utilizando. Estas herramientas también tienen licencia para que no sea restrictivo y requiera que haga algo especial además de reconocerlo si lo usa directamente.

Arquímedes Trajano
fuente
1
Realmente me gusta esta analogía porque es comprensible para todos y muy similar al código en sí.
Venkat D.
Gracias, incluso lo publiqué
Archimedes Trajano
0

Una imagen dice más que mil palabras. Por ejemplo, la refactorización tiene dos casos de uso:

  • Cuando las cosas no se hacen bien la primera vez:

refactorizar cuando las cosas no se hacen bien la primera vez

  • Cuando las cosas son tediosas:

refactorizar cuando las cosas son tediosas

Referencias

Paul Sweatte
fuente
XKCD vale la pena ignorar el hecho de que hacer que una tarea de rutina sea más eficiente puede significar que termines haciendo mucho más de lo que hubieras hecho de otra manera. Por lo tanto, debe tener en cuenta el valor que obtiene de los desempeños adicionales de la tarea.
bdsl
@bdsl Eso está cubierto en el lugar de
trabajo.se
0

Considere una respuesta dada en Refactorización , y no se la explique a una persona no técnica. La refactorización es una actividad técnica que no necesitan conocer:

Por supuesto, muchas personas dicen que están motivadas por la calidad, pero están más motivadas por el horario. En estos casos doy mi consejo más controvertido: ¡No lo cuentes!

¿Subversivo? No lo creo. Los desarrolladores de software son profesionales. Nuestro trabajo es construir software efectivo tan rápido como podamos. ... Un gerente basado en el horario quiere que haga las cosas lo más rápido que pueda; cómo lo hago es asunto mío. La forma más rápida es refactorizar; Por lo tanto, refactorizo.

(Refactorización, Martin Fowler, 2000, página 61)

Por supuesto, esto no funcionará si va a pasar un mes haciendo nada más que refactorizar, pero creo que, en general, es una mala idea, y es mucho mejor simplemente refactorizar en la medida necesaria para facilitar su tarea actual o la próxima. , o para limpiar el código con el que acaba de trabajar.

bdsl
fuente