Cómo desarrollar eficazmente programas de bioinformática 2
Guía rápida: Cómo desarrollar programas de bioinformática de forma eficaz (2)
Reimpreso▼
Etiqueta:
Charla miscelánea
Mantener la documentación del proyecto y reducir la dificultad de gestión
Sin buenos hábitos de programación, es imposible escribir código limpio, libre de errores y reutilizable. No solo necesita tener hábitos de nomenclatura variables y escribir documentación para su código, sino que los proyectos grandes también requieren pruebas y escritura de código frecuentes. Al igual que los programas de higiene fisiológica, estas tareas suelen ser tediosas y fáciles de lamentar o ignorar por completo para quienes participan en ellas. Sin embargo, una de las ventajas de los programas informáticos es que pueden sustituir tareas tediosas con una serie de pasos automatizados.
En el mundo del software de código abierto y la investigación colaborativa, el código que escribes puede aportar valor a otros. Muchas revistas académicas exigen que se publiquen manuscritos y código fuente. La clave para una buena documentación es escribir un buen código, pero a menudo se pasa por alto porque es tedioso o simplemente se supone que ya nadie abrirá el código fuente. La mejor manera es generar la documentación automáticamente. Los enfoques ligeros como Doxygen, JavaDoc, PyDoc y otras fuentes pueden generar automáticamente documentación de código fuente. Los buenos hábitos de nomenclatura de variables también son una garantía importante para una documentación de alta calidad. Evite el uso de nombres de variables que carezcan de descriptividad. Si es necesario, utilice nombres consistentes o más largos. Algunas comunidades de código abierto tienen sus reglas de nomenclatura de variables favoritas. dichas reglas existen en el idioma que usted usa comúnmente. A la gente le encanta trabajar con código documentado y, si aporta valor a los demás, obtendrá más oportunidades, tanto a nivel personal como profesional. Del mismo modo, muchos empleadores potenciales querrán ver el código que escriba, por lo que mantener paquetes de códigos documentados puede resultar útil para buscar empleo.
Si está trabajando en un proyecto que es lo suficientemente grande y complejo, a menudo tendrá que escribir y probar su código, implementarlo en varios servidores web o realizar tareas informáticas complejas. Afortunadamente, muchos de estos procesos pueden ser reemplazados por herramientas de automatización de tareas. La utilidad 'make' en UNIX es el antepasado de muchos ataques modernos de automatización de tareas. Su núcleo puede leer y ejecutar cualquier cantidad de archivos make (archivos make de definición de lenguaje de macros estructurados, como apache ant, SCons y Rake). Proporcionan una funcionalidad similar a la de 'hacer' y, a veces, funcionan de forma más intuitiva. Los programadores encontrarán que casi todos los pasos de escritura, prueba, empaquetado, implementación y ejecución de código se pueden automatizar mediante algún software automatizado.
Guarde su código fuente
Hay algunas cosas seguras sobre la programación de computadoras (1) Cada vez que modifica el código, siempre existe una alta probabilidad de que algo salga bien. incorrecto (2) A medida que el hardware de la computadora envejece, aumenta la posibilidad de errores. A pesar de esto, muchos programadores se contentan con tener su código anterior distribuido en su disco duro como archivos no estructurados y redundantes. Muchos sistemas de control de versiones (VCS) están disponibles gratuitamente y pueden registrar cambios en el código fuente y revertir los cambios del código combinado. Pero a pesar de la conveniencia de VCS, muchos programadores no aprovechan al máximo el sistema, especialmente en el campo académico. Los VCS de código abierto como CVS, Subversion y Git son fáciles de obtener, configurar y usar, y la mayoría de los compiladores de texto y código fuente pueden admitir VCS o extensiones integradas. El cliente VCS TortiseSVN y SCPlugin pueden integrar las funciones de VCS a nivel del sistema operativo, de modo que la función de control de versión del código se puede implementar a través del administrador de documentos del sistema operativo. Dada la facilidad de uso y la baja barrera de entrada de VCS, no hay razón para no usarlos. Si trabaja para un equipo, VCS es menos imprescindible porque proporciona cosas como bloqueo de archivos y combinación automática de cambios, lo cual es muy útil cuando varias personas modifican el mismo código al mismo tiempo. No es necesario configurar y mantener el mismo sistema de servidor VCS, ya que muchos servicios en línea, como SourceForge y GitHub, proporcionan rendimiento VCS estándar, así como funciones adicionales. Uso de VCS. Además, la experiencia en la aplicación de dichos sistemas agregará experiencia personal o profesional.
Muchos programadores no se dan cuenta de la importancia de la copia de seguridad hasta que se pierden códigos importantes por errores de hardware, robo de computadora u otras razones. Históricamente, el respaldo de computadoras ha involucrado un departamento de TI, costosos sistemas de software de respaldo y un cronograma claro de eventos de respaldo.
Estos costosos dispositivos de respaldo han dificultado que ganen popularidad entre los estudiantes y las universidades menos costosas. Recientemente, muchos proveedores y aplicaciones web ofrecen una clase nueva y creciente de modelos de respaldo informático, también conocidos como "instantáneas". Número de servicios que aparecen entre los proveedores que instalan clientes de software en computadoras para monitorear los cambios del sistema de archivos en la computadora, como Mozy e IDrive (solo se enumeran aplicaciones comerciales). La principal ventaja de estos servicios es que después de la instalación inicial, el software continúa realizando copias de seguridad de los archivos sin la intervención obvia del usuario. (Es por eso que a veces se les llama software de respaldo "configurar y olvidar"). Si bien la mayoría son esfuerzos comerciales, hay muchos que ofrecen cuentas gratuitas que brindan mucho espacio de almacenamiento para el código fuente y otra documentación importante. Al momento de escribir este artículo, están comenzando a surgir aplicaciones de código abierto para estos sistemas, como TimeVault, y esperamos que surjan y maduren muchos proyectos similares de código abierto en el futuro cercano. Por supuesto, el software y los sistemas de respaldo pueden fallar, por lo que implementar un plan de respaldo redundante que cubra dos o más sistemas o servicios es una medida de mitigación inteligente. (Realice una copia de seguridad en un disco duro externo o en un servicio de copia de seguridad en red)
"Adopte" el paradigma de la computación paralela
La implementación de la programación paralela puede aumentar drásticamente la complejidad de muchas tareas de computación de BI, pero la complejidad resultante es Esto impide que muchas personas lo utilicen para mejorar la eficiencia de la programación de BI. Básicamente, existen dos tipos principales de tareas informáticas que se pueden paralelizar, que se dividen en acoplamiento flexible y acoplamiento estrecho (LC y TC) según los modelos dependientes. La ejecución de una tarea LC depende del estado o resultado de otras tareas informáticas similares. En los ejemplos de BI, se calculan todas las afinidades de receptores coordinadas de forma independiente y se calculan múltiples alineamientos de secuencias para familias de proteínas independientes. Las tareas LC generalmente son las más fáciles de paralelizar porque usan la misma lógica de programa en diferentes archivos de datos o usan diferentes parámetros en el mismo archivo de datos. Existen muchos sistemas de software diseñados específicamente para ejecutar y controlar tareas LC paralelas. Los más populares son los sistemas de código abierto como Sun Grid Engine (SGE) y Open Portable Batch System (OpenPBS). A menudo se les llama sistemas de programación de proyectos o de procesamiento por lotes y se utilizan para realizar tareas informáticas individuales de forma regular dentro de un grupo de redes informáticas.
La ejecución de las tareas de TC depende del estado actual o del resultado de otras tareas. Los ejemplos en BI incluyen la simulación dinámica de moléculas y los algoritmos de optimización estocástica son generalmente más difíciles de implementar y generalmente requieren que se llamen funciones de fusión de programas desde bibliotecas paralelas, como las bibliotecas basadas en la interfaz de paso de mensajes (MPI), que permiten la ejecución paralela. y sincronización los detalles complejos de la verificación de coherencia se dejan en manos del programador.
Recientemente, Google ha introducido un nuevo paradigma de computación paralela llamado MapReduc, que es una arquitectura de software simplificada que se utiliza para la computación paralela en grandes grupos de computadoras. Desde que se describió originalmente MapReduce, se han implementado una gran cantidad de proyectos de código abierto en varios lenguajes de programación, Hadoop (Java
), Disco (Python), Skynet (Ruby). En esencia, el marco MapReduce descompone las tareas en "subtareas" discretas (pasos del mapa), las distribuye entre los nodos informáticos de la red y luego agrega los resultados de las "subtareas" individuales (pasos de reducción). Aunque MapReduce no es adecuado para toda la computación paralela, muchos bioinformáticos están dispuestos a probar MapReduce y ha acelerado la coincidencia estadística de secuencia corta de conjuntos de datos de secuenciación de alto rendimiento.
Cabe señalar que la computación paralela no requiere el uso de un clúster de computadoras. Muchos marcos de software que facilitan la computación paralela pueden ejecutarse mediante CPU de múltiples núcleos de una sola máquina. Al momento de escribir este artículo, se puede comprar una estación de trabajo de computación con CPU de 8 núcleos por menos de USD 300,00, incluso si no se tiene mucho presupuesto, este dispositivo de computación paralelo básico se puede obtener fácilmente. O mejor aún, los dispositivos informáticos virtuales o "en la nube", como Amazon Elastic Compute Cloud (EC2), proporcionan una forma económica de obtener grandes cantidades de recursos informáticos y permitir la computación paralela selectiva bajo demanda.
Como resultado, grandes iniciativas de biocomputación financiadas con fondos públicos, como Cancer Biomedical Informatics Grid (caBIG), han comenzado a invertir en esta arquitectura de computación en la nube para respaldar su trabajo.