¿Cómo administra usted (personas y organizaciones) su fuente para hacer ¿es más fácil de volver a utilizar? ¿Mantiene específicamente una biblioteca de reutilización? Y si es así, ¿cómo lo indexa para maximizar su tasa de acierto?
no lo hago y no tengo una opinión ciertamente controvertido aquí pero encontrar la idea de maximizar la reutilización de código contraproducente (estoy interpretando "maximizar" como priorizar por encima de todas las otras cosas en lugar de considerarla como tener ventajas y desventajas para equilibrar en consideración). Prefiero, en cambio, permitir que una buena cantidad de esfuerzos redundantes en equipos se deslicen a favor de desacoplar y aislar mejor el módulo de cada desarrollador. En primer lugar antes de que todo el mundo empieza en desacuerdo conmigo a izquierda y derecha, creo que podemos estar de acuerdo en algunas cosas:
- La reutilización de código erróneo que tendrá que pasar horas de depuración código de otras personas no es deseable.
- Reutilizar código que equilibre un rango tan amplio de necesidades dispares que apenas satisface sus propias necesidades y requiere pasar por muchos aros para finalmente obtener una solución incómoda e ineficiente no es deseable.
- Reutilizar código que requiere cambios de diseño constantemente y pasa por depredaciones de un tipo que requerirá que reescriba el código usándolo cada 6 meses no es deseable si hubiera podido implementar la solución usted mismo en media hora en formas que no Necesito cambios de diseño en el futuro ya que solo está satisfaciendo sus necesidades precisas.
- Una base de código llena de código de aspecto extraño no es deseable en comparación con una que usa más el lenguaje y la biblioteca estándar de maneras idiomáticas y familiares, incluso si eso requiere un poco más de código.
- Los desarrolladores pisando los dedos de los demás porque ambos desean realizar cambios incompatibles en el mismo diseño, mientras que pelear y discutir y realizar cambios que causan errores en las implementaciones de los demás no es deseable.
- No es deseable tirar un montón de dependencias a diseños inmaduros que no se han probado (no tuvo una cobertura de prueba exhaustiva, no tuvo el tiempo de realmente insonorizar el diseño y asegurarse de que satisfaga efectivamente las necesidades del usuario sin requerir más cambios de diseño) .
- Tener que incluir/importar/vincular un bote de bibliotecas y clases/funciones con el script de compilación más complejo para escribir algo simple es indeseable.
- Más que nada, reutilizar el código de una manera que cuesta mucho más tiempo tanto a corto como a largo plazo que no reutilizarlo no es deseable.
Afortunadamente, al menos podemos estar de acuerdo en estos puntos. El problema que he encontrado al maximizar la reutilización de código de colegas excesivamente entusiastas es que a menudo conduce a uno o más de los problemas anteriores. El problema fundamental no era directamente el entusiasmo por la reutilización del código, sino que las prioridades estaban sesgadas hacia la reutilización del código en lugar de la cobertura de prueba, los diseños de insonorización, asegurarse de que las cosas estuvieran lo suficientemente maduras antes de reutilizarlas como locos, y así sucesivamente.
Naturalmente, si todo el código que reutilizamos funcionaba maravillosamente, tenía una cobertura de prueba exhaustiva, se demostró que satisfacía las necesidades de todo lo que lo usa de manera mucho más productiva que no reutilizarlo, y no tuvo que pasar por cambios de diseño durante años, me encantaría la reutilización del código. Pero mis experiencias a menudo descubrieron que las cosas no cuadraban demasiado con este ideal en formas en las que la reutilización del código se estaba convirtiendo en un problema de mantenimiento en lugar de la solución.
¿Cómo administra usted (personas y organizaciones) su fuente para hacer es más fácil de reutilizar? ¿Mantiene específicamente una biblioteca de reutilización? Y si es así, ¿cómo lo indexa para maximizar su tasa de acierto?
Así que, de nuevo, no trato de "maximizar" la reutilización de código entre código propietario escrito internamente entre el equipo. Procuro asegurarme de que el equipo no dedique una enorme cantidad de tiempo al esfuerzo redundante, pero dejo que las cosas se deslicen bastante si tanto los físicos como los que realizan el renderizado implementan su propia clase de cuadro delimitador alineado con el eje, p. No es necesariamente tan redundante, ya que el físico podría usar representaciones min/max que son más eficientes para su propósito, mientras que el desarrollador de renderizado podría usar representaciones de centro/medio tamaño. Trato de asegurarme de que reutilicemos la mayor cantidad de la biblioteca estándar cuando sea posible, porque se trata de una reutilización de código prácticamente garantizada, sólida, bien probada y que no requiere más cambios de diseño (otros equipos gastan una carga de barco). de su tiempo para asegurarse de eso).
En cambio, cambio el enfoque en las pruebas. Un módulo que duplique un poco de código aquí y allá está totalmente bien si me preguntas si funciona maravillosamente de manera que haga felices a los usuarios, tiene una cobertura de prueba completa y no garantiza cambios interminables. Aceptamos dicha duplicación todo el tiempo cuando utilizamos bibliotecas de terceros que probablemente dupliquen algún código que también tenemos en nuestra base de código interno. No es un problema cuando la redundancia no conduce a esfuerzos de mantenimiento redundantes.
Así que sugiero simplemente relajar la idea de maximizar la reutilización de código un poco. Pero si quiere que sea más fácil reutilizar el código realmente sólido, bien probado y no trivial, entonces me ha resultado mucho más útil organizar bibliotecas de propósito único, como una biblioteca "matemática", biblioteca de procesamiento de "imágenes", etc., en lugar de tratar de fusionarlas en algo como "núcleo" o "común". Los últimos tipos tienden a tentar a los desarrolladores a incluir todo tipo de funciones de utilidad eclécticas que apenas benefician al equipo que las usa, y en su mayoría tiende a ensuciarse en formas en que comienza a ser difícil encontrar algo de interés.
Buenos nombres para las cosas refactored. No de dónde vino o qué solía hacer, o dónde se usa actualmente, sino qué es REALMENTE. –