2009-07-24 4 views
9

¡Estoy ocupado! La mayor parte de mi tiempo lo paso usando técnicas analíticas, o en el trabajo del curso, y cuando cambio al modo de programación, necesito generar código rápidamente. Desde entonces, al Investigador principal del laboratorio en el que estoy no le importa si estoy usando TDD o un ábaco siempre que obtengo resultados rápidos.¿Cómo incorporo TDD en mi flujo de trabajo como programador científico/estudiante/investigador?

He leído "TDD por ejemplo" y me pareció bastante útil. Posteriormente compré "Refactorización: mejorando el diseño del código existente", "Patrones de diseño: elementos de software reutilizable orientado a objetos" y "Trabajando eficazmente con código heredado", pero estos libros son grandes y las perspectivas de saltar a ellos ahora son desalentadoras. !

El estilo conversacional y el flujo de "TDD por ejemplo" hicieron que fuera fácil de incorporar a mi agenda. Pero, no sé cómo trabajar en estos otros libros y en qué orden; parece que cada uno es igual de relevante (estoy en una especie de callejón sin salida filósofo de comedor; estoy esperando que cada aspecto de mi kit de herramientas de programación mejore, pero su interdependencia me tiene atascado o perdiendo tiempo para cambiar el contexto; perdón por el analogías :)). p.ej. Tengo un código heredado que necesita ser refactorizado y cubierto con pruebas, necesito avanzar usando TDD (pero nunca lo hago), necesito codificar con patrones de diseño, así que dejo de reinventar las ruedas.

¿Hay una buena manera de romper estos requerido lee en trozos del tamaño de un byte y una manera de hacerlo, mientras que la aplicación de sus técnicas a los proyectos actuales (personalmente, me suelta la información si no puedo aplicarlo de inmediato)? ¿Me concentro en un libro y lo completo? ¿Necesito TDD primero y luego refactorizar y diseñar habilidades de patrones (pero 'chicken and the egg' todos estos libros de pruebas unitarias hablan sobre patrones de diseño y refactorización como si los conociera hacia atrás y hacia adelante)?

He leído el best tutorials for beginners pero no explica cómo lo integro en un apretado horario. Y, leí programming in a scientific environment, pero nuevamente se pierde la marca de cómo se agregan estas técnicas cuando ya se ha retrasado.

Respuesta

2

Dada la descripción de lo que haces, primero comenzaría por cuestionar la suposición. No sé nada sobre la complejidad de sus programas, pero si su codificación consiste estrictamente en la generación de cálculos y es una especie de "nivel de script", lo que significa que para un pedazo dado de código podría simplemente tirarlo y reescríbalo como lo guardas, entonces muchas de estas técnicas son excesivas. Creo que TDD (quizás una versión emparejada que se combina en pruebas de integración) siempre será valiosa, pero más allá de eso, no necesariamente.

Sin embargo, en realidad está diseñando sistemas de software (y al menos parte de lo que podría hacer podría calificar incluso si no todo, por ejemplo modelo de base de datos, pantallas de entrada, distribución de resultados) entonces yo diría read basta de estos libros para comenzar, y no te preocupes por no hacerlo bien todo el tiempo para empezar, solo asegúrate de estar progresando mensualmente todas las semanas.

Por cierto, los patrones de diseño pueden ser útiles para leer sobre cómo se tratan los problemas similares, pero no "diseñar usarlos" en lugar de otra cosa. Su diseño puede no ser bueno por sí mismo, pero los patrones provienen del diseño del mundo real, y no al revés. Entonces, ciertamente puede ver más soluciones orientadas a objetos que lo que puede estar haciendo, pero no se preocupe si lo que hace se ajusta a un patrón de diseño. Asegúrese de que lo que está haciendo sea un buen diseño que se pueda mantener en sus propios términos, y los patrones se derivarán de eso.

+0

+1 - De acuerdo 100% – Paul

+1

Software de escritura para un laboratorio de investigación, puedo afirmar que no es una suposición segura de que la actitud de "hacerlo rápido" es una indicación de que el alcance del software es pequeño o "nivel de script". Los principales investigadores científicos a menudo ven el software creado para su investigación como un medio para un fin y no les importa la calidad que el software produjo, solo sus resultados finales. Esto a menudo resulta en un diseño de software deficiente debido a la presión para hacer las cosas a corto plazo, así como a los esfuerzos duplicados en los proyectos debido a la falta de implementaciones modulares. –

+0

+1 @Mark, sí, el código es bastante complejo y no puede lograrse fácilmente en entornos como Matlab o Mathematica. Entonces, necesito comenzar a reutilizar el código (lo que me obligará a refactorizar). – bias

1

No puede hacerlo todo, todo a la vez (eso lo sabía). Algunas técnicas le ahorran tiempo, y TDD y refactorización ocupan un lugar destacado en esa lista. Particularmente con TDD: no te preocupes por cuándo hacerlo, si hacerlo o no, cómo adaptarlo a tu agenda; solo hazlo. Cuanto antes empiece, antes podrá ahorrarle tiempo.Una vez que tengas esa habilidad en la mano, cuando te acerques a una tarea del código heredado, escribe pruebas para protegerte (no, eso no es TDD, pero las habilidades de escritura de prueba que has perfeccionado con TDD se aplicarán). Cuando tiene buena cobertura del módulo que necesita cambiar, puede refactorizarlo libremente y ejecutar sus pruebas con frecuencia. De los libros que mencionas, en la situación que describes, el siguiente que recomendaría leer es el de Michael Feathers trabajando con eficacia con el código heredado: te dará los trucos que te llevarán adelante.

Por el momento, sin embargo: TDD todo. Le ahorrará tiempo antes de lo que imaginaba, y puede dedicar ese tiempo a aprender más y mejores técnicas.

1

Comenzaría con el libro de Refactorización (porque mencionó que está inundado de código heredado) e intentaré leerlo una hora a la vez. Luego, la próxima vez que esté programando, busque formas de aplicar lo que lee.

Una vez que empiezas a sentir que estás liberando algo de tiempo, mira los otros libros. También recomiendo el libro Code Complete para mejorar tus habilidades.

Cuestiones relacionadas