Por lo general, analizo datos de experimentos y, aunque tengo un esquema general de pasos que debo seguir, es posible que deba ajustarlo a los detalles específicos de los experimentos o las preguntas detrás. Por lo general, soy el único que codifica.
Miré en Wikipedia pero no estoy seguro de qué metodología puedo usar, en parte porque nunca he seguido ninguna, y en parte porque a veces solo exploro los datos, para ver cómo se ve, y otras veces solo quiero una respuesta. (Y porque no se espera mucho que pruebe o tenga una cierta calidad en mi código)
Se me solicitó hacer esta pregunta después de una o dos horas descubriendo que la función r se table
basa en el orden de los vectores y no en el nombre de los elementos para compararlos. Entonces pensé que debería haber probado el comportamiento y las funciones que usaba con algunos datos simulados. Pero utilicé la tabla después de que otro análisis resultó en la falta de información, por lo que no podría haber seguido la metodología de desarrollo basada en pruebas (si la entendiera bien). Sin embargo, siento que con alguna mejora en la forma en que enfrento el proyecto, podría ser más eficiente, además de detectar errores antes, pero también cómo y qué buscar en caso de que dude de un resultado, así que no se concentre solo en Este error de ejemplo.
¿Qué metodología de software se adapta mejor a la investigación?
Básicamente, estoy preguntando cómo garantizar la calidad y el progreso cronometrado, así como mantener la especificidad de la investigación.
Ejemplo de como trabajo:
Un biólogo tiene en mente una pregunta y sabe que hacer un experimento llevará a tener datos de interés (es decir, niveles de expresiones genéticas en dos condiciones), luego establece el experimento y recolecta muestras de 10 personas / ratones / ratas. Ahora debo analizar esos datos para esas 10 muestras usando bibliotecas y pruebas existentes (o implementando nuevas pruebas) pero teniendo en cuenta la pregunta que el biólogo tenía en mente (es decir, qué genes se expresan más en una condición que en otra). La estructura es la misma que en experimentos anteriores (que involucraban 6 condiciones y otro animal) pero la prueba estadística, las normalizaciones y la estructura de datos pueden cambiar. Por lo tanto, suelo copiar una versión anterior y adaptarla a las necesidades actuales.
Respuestas:
Quizás lo que se necesita no sea una metodología de software, sino un cambio político en la academia que solucione el problema de la falta de reconocimiento del papel desempeñado por el desarrollo de software en la ciencia.
El Software Sustainability Institute (Reino Unido) es la organización más cercana a lo que está buscando: cómo defender un uso más concienzudo de la programación de computadoras en la investigación científica.
También proporciona punteros de información para aquellos interesados en las metodologías de desarrollo de software.
Sin embargo, debo señalar que las metodologías generalmente gobiernan los equipos de programadores de software, con iteraciones y refinamiento gradual de los objetivos del proyecto, y funcionan con bases de código estables que duran mucho tiempo. Son para proyectos que son órdenes de magnitud más complejos que lo que estás haciendo.
En cuanto a por qué esta cosa muy obviamente correcta (uso más concienzudo de la programación de computadoras en la investigación científica) no se ha logrado y siempre se ha confirmado, aquí está la verdad inconveniente: en entornos administrativos académicos, se puede ver que los científicos degradan la importancia que juega la computadora programación. A veces se puede ver que se unen para negar el reconocimiento de las contribuciones de las personas involucradas en el software, incluso si la naturaleza de esa contribución se ajusta a la disciplina científica.
En su lugar de trabajo, hay cosas que faltaban y cosas que puede hacer.
Cosas que faltaban:
En resumen, la cultura general es que las personas involucradas no están realmente interesadas en ... lo adivinaste ... un uso más concienzudo de la programación de computadoras en la investigación científica.
Cosas que puedes hacer:
Para los desarrolladores de software de carrera, las pautas de esta naturaleza se pueden encontrar en:
Estos se consideran los requisitos básicos para ejecutar un negocio de desarrollo de software. Sin embargo, cuando estás luchando en una guerra de apatía, solo, debes priorizar. Mejorar con las herramientas, escribir y mantener información, mantener versiones del código fuente es lo mínimo para un entorno único.
fuente
No se preocupe tanto por la metodología, pero intente concentrarse más en lo que necesita para realizar un seguimiento de sus requisitos para el desarrollo del software en sí.
Después de una corta estadía en una posición relativamente similar a la suya, esto es lo que puedo extraer de mi experiencia personal.
Exactitud algorítmica
Probablemente el aspecto más importante, debería ser capaz de demostrar que su software hace lo que fue diseñado para hacer. Aquí las pruebas automatizadas son tu mejor aliado. Me doy cuenta de que puede ser difícil prescindir de un conjunto de datos adecuado, pero en realidad debes acostumbrarte a crear tus propios conjuntos de datos. Sin embargo, su propósito es algo diferente: no está tratando de extraer la tendencia de los datos, sino asegurarse de que el software produzca resultados predecibles y correctos de un conjunto de datos conocido. Entonces, para el reconocimiento de patrones, por ejemplo, no necesita una composición genética de múltiples presentaciones, solo unas pocas líneas de texto podrían ser suficientes para garantizar que el algoritmo detecte el patrón.
Solía elaborar mis datos para representar casos de esquina, casos imposibles. Solía centrarme más en los extremos que en la norma esperada. Muchas veces puedo recordar probar algo imposible solo para ver surgir esta situación en el conjunto de datos real. Si no lo hubiera probado, no habría implementado las detecciones de errores y el registro necesarios para identificar posibles corrupciones o errores en el conjunto de datos. TDD es una buena opción para esta parte, aunque creo que es más importante crear un buen conjunto de pruebas independientemente de si lo hace antes o después del código real.
Versionado
Con demasiada frecuencia, esta parte se deja de lado. Un buen esquema de versiones para su código y paquetes / ejecutables producidos lo ayudarán inmensamente a mantener su progreso en orden. Poder recuperar exactamente el código que se usó para crear resultados obtenidos previamente puede ayudar a rastrear errores o discrepancias. La ramificación también puede ayudar al experimentar con diferentes enfoques o algoritmos.
Asegúrese de etiquetar el código utilizado en los cálculos reales. Consulte las versiones semánticas si necesita ayuda para nombrar las versiones.
Construcción automatizada
Un corolario al punto anterior. Asegúrese de automatizar tanto como sea posible el proceso de creación y empaquetado de su software. No necesita ir a monty completo, solo lo suficiente para que sea trivial crear el sistema final a partir de la fuente y las dependencias. El objetivo aquí es ahorrarle tiempo, pero también tener un medio reproducible para volver a crear el software desde la fuente, incluidas las dependencias y otros elementos externos. Groovy, Maven, ant, Scons, cmake, son solo una pequeña muestra de herramientas de automatización de compilación y sistemas de secuencias de comandos que pueden ayudar.
Si desea hacer un esfuerzo adicional, instale Jenkins o teamcity o cualquier otro sistema de integración continua. Bonificación adicional si tiene que mantener varios servidores o trabajadores para la informática distribuida. La mayoría de estos sistemas tendrán medios para ayudar en el mantenimiento. Además, podrá automatizar completamente las ejecuciones de prueba para que no necesite esperar los resultados antes de continuar, solo confirme y reciba un correo más tarde. He tenido un sistema que tardó horas en superar los conjuntos de prueba. Poner esta automatización fue la mejor inversión de mi tiempo. Especialmente si ya tienes los scripts para construir todo.
Aislamiento del ambiente
Los investigadores pasan una cantidad excesiva de tiempo aislando un conjunto único o pequeño de variables de interés de sistemas complejos a través de sus protocolos. Esto también debe extenderse a sus prácticas de desarrollo de software. También puede verificar la contenedorización con Docker o Vagrant. Le dará un mejor control sobre el entorno en el que se ejecuta el software.
No es necesario tener un gran equipo antes de que esto valga la pena, estuve solo la mayor parte del tiempo, pero me beneficié enormemente al poner esto en práctica. La tranquilidad y el tiempo ahorrados siempre superaron con creces la sobrecarga que me costó hacer esto.
fuente
¿Puedes usar R? Para eso es.
Mantenga su código simple . Elija legibilidad y no se preocupe por el rendimiento a menos que sea un problema. Existen metodologías para tratar de evitar que los equipos de programadores pongan errores en el código del otro, incluso si el equipo es una persona.
Dicho esto, la disciplina de codificación es súper importante. He visto código de científicos y matemáticos avanzados altamente capacitados, y es horrible . Ignoran totalmente el formato. Aprietan el código juntos como si estuviera empaquetado al vacío. Sus nombres variables son totalmente desconcertantes. No escriben comentarios, o escriben comentarios inescrutables, o los comentarios dicen una cosa mientras que el código dice otra. No hagas esas cosas. Siempre piense en los cambios futuros que usted u otros podrían tener que hacer.
fuente