¿Cómo está tu equipo de programación?

Hola, un placer verte por aquí. Te habla Simón Sánchez y esta vez vamos a hablar sobre ¿Cómo está tu equipo de programación?

Todo tipo de software interesante fue creado por individuos y pequeños equipos. Mi compañero de cuarto de la universidad, por ejemplo, fue un exitoso desarrollador de juegos en la década de 1980. Él personalmente codificó todos los aspectos de los juegos, desde los gráficos hasta la lógica del juego. Pero hoy, el desarrollo de juegos requiere un equipo de programadores y muchos otros talentos especializados, incluidos artistas, músicos y abogados, para obtener licencias de los personajes más populares.

HPC no es diferente. El desarrollo de código a menudo requiere mucho esfuerzo. Incluso las aplicaciones relativamente pequeñas se benefician de los expertos en áreas que rara vez están controladas por una sola persona. Imaginemos que un biólogo ha inventado una forma de analizar imágenes celulares que proporciona una evaluación más precisa del funcionamiento de la membrana celular. El algoritmo es computacionalmente intensivo y la mayoría de sus usos previstos estudiarán un gran número de células.

¿Qué composición del equipo de personas se necesita para desarrollar este código?

Inicialmente, es probable que la idea venga directamente de un experto en dominio. Son personas que entienden el problema a resolver. En nuestro ejemplo de procesamiento de imágenes, el biólogo comprende cómo funcionan las células y, más específicamente, la ciencia detrás del procesamiento a realizar. En algún momento, el software producirá un resultado y alguien debe saber si ese resultado es correcto y tiene valor.

Algunos expertos en el dominio están bastante bien informados sobre las matemáticas que se utilizan en sus campos, y algunos pueden tener experiencia en la ejecución de estos algoritmos en sistemas HPC de tamaño pequeño a mediano. Pero los expertos en dominios normalmente querrán o necesitarán ayuda para construir implementaciones paralelas y escalables de su código.

iniciar sesión en especialistas en algoritmos numéricos, que suelen tener experiencia en matemáticas, matemáticas aplicadas o quizás informática. Su profundo conocimiento de los métodos numéricos les permite inventar nuevas formas de realizar cálculos equivalentes basados ​​en los objetivos de precisión, paralelismo y restricciones de hardware específico. Pueden tener interés y comprensión de la ciencia que motiva el trabajo … o no.

Debe sopesarse cuidadosamente la importancia relativa del tiempo de desarrollo frente al rendimiento proporcionado, ya que esto afectará la estrategia de desarrollo central. Si su código se necesita rápidamente y se espera que cambie con frecuencia, podría ser apropiado desarrollarlo en un entorno diseñado para la velocidad de implementación como MATLAB o Python y utilizar una herramienta como Star-P para lograr escalabilidad.

Si el proyecto es solo una colaboración entre dos personas brillantes, la vida es fácil. Pero los códigos actuales generalmente requieren que un equipo de personas trabaje durante un período de tiempo prolongado. Esto plantea la necesidad de más habilidades en el equipo de desarrollo.

A menudo, nuestro experto en dominios y especialista numérico carecerá de experiencia en el campo más general de Ingeniería de software. ¿Cómo se estructurará el código para facilitar el mantenimiento y el crecimiento de la funcionalidad a lo largo del tiempo? ¿Cuáles son las posibles plataformas de hardware a admitir y cómo afecta esto a la arquitectura del código? ¿Qué herramientas, bibliotecas y middleware se adoptarán como elementos críticos en el proyecto y cuáles se evitarán? ¿Cuál es el proceso de compilación? ¿Repositorio de código? ¿Cómo instalará un usuario el código? Un proyecto exitoso requiere cierta atención a la arquitectura y al proceso de desarrollo. Y, por supuesto, cualquier ingeniero de software digno de su teclado planteará rápidamente el problema. seguro de calidad.

Un proyecto requerirá monitoreo de errores, pruebas de regresión automatizadas y métricas para garantizar la calidad. Algunos ingenieros de software son bastante buenos para hacer cumplir una estricta disciplina de calidad. Pero esto a menudo requiere un recurso dedicado enfocado únicamente en mantener la infraestructura de prueba, implementar las pruebas y administrar y evaluar la calidad general del código. El arte y la ciencia del aseguramiento de la calidad ha evolucionado hasta el punto de que es poco probable que alguien capacitado en la construcción de un producto sea el más capacitado para construir y administrar una operación de aseguramiento de la calidad.

Un área de evaluación que a menudo requiere atención especial, especialmente en HPC, es la de optimización del rendimiento. A primera vista, ajustar el rendimiento puede parecer tan fácil como ejecutar un punto de referencia y trabajar en áreas que parecen tener un rendimiento deficiente. Pero si observa organizaciones o proyectos exitosos, generalmente encontrará una o más personas que han realizado análisis de desempeño, evaluaciones comparativas y perfeccionamiento del trabajo en su vida y que marcan una gran diferencia en el desempeño que brindan. La mayoría del software es demasiado complicado y el hardware en el que se ejecuta es demasiado variable para predecir y optimizar el rendimiento en abstracto. Solo los productos o códigos de software más grandes y de mayor duración pueden crear una simulación de rendimiento útil y precisa de su funcionamiento. En la mayoría de los casos, una organización desarrolla un conjunto de puntos de referencia y luego agrega y refina el conjunto para que sea representativo de los usos del cliente a lo largo del tiempo.

Entonces, continuando con el ejemplo anterior, a nuestro biólogo se le ocurrió su idea, encontró a alguien que la expresó en matemáticas útiles y tuvo ayuda con la estructuración del software, las pruebas y la optimización del rendimiento. ¿Lo que queda?

Suponiendo que este nuevo código se utilizará fuera de la organización que lo desarrolló, e incluso si no lo es, el biólogo no debe subestimar el trabajo requerido y el beneficio proporcionado por una documentación precisa y completa. Dependiendo de la naturaleza del código, podría ser algo más que señalar características. Cuanto más innovador sea, se necesitará más atención para diseñar un conjunto eficaz de documentación (quizás incluyendo materiales de capacitación). Nuevamente, en la mayoría de los casos, será de gran beneficio encontrar personas con experiencia y habilidades en la creación de conjuntos de documentación.

Con un grupo de personas que desarrollan código, pruebas y evaluaciones comparativas, los requisitos de hardware seguramente habrán crecido hasta el punto en que administracion del sistema las actividades comienzan a tomar una cantidad significativa de tiempo. A menudo, el mayor problema con las tareas de administración del sistema es que uno o más de los ingenieros de software superiores y brillantes se encargarán del «pasatiempo» de la administración del sistema. Es una forma de empezar, pero no una solución a largo plazo. Esta área también está cambiando rápidamente en función de la disponibilidad de centros de recursos y alojamiento basados ​​en la nube, pero incluso una pequeña encuesta sobre el uso de estos recursos muestra rápidamente que nada es gratis (en términos de tiempo o dinero).

La concesión de licencias puede ser un problema doloroso si no existe una estrategia desde el inicio de un proyecto. ¿El código será de código abierto? ¿Qué licencia se utilizará? La mayoría de los códigos actuales tienden a incluir código desarrollado por otros como subsistemas, a menudo con diferentes términos de licencia. Legal El asesoramiento y una estrategia sólida que sea entendida por todo su equipo es una necesidad.

Favor trabajo en equipohay que dedicar tiempo y esfuerzo a la gestión de las personas y del grupo, como dice el viejo refrán «los ejércitos luchan boca abajo». En otras palabras, «no olvides la cerveza y la pizza». Esto plantea la pregunta: «¿Cuán universal es la costumbre de trabajar en equipo a través del paso del tiempo para comer y beber?» (y específicamente, si comes y bebes, ¿cuántas veces hay pizza y cerveza?). Esto llevó a una pequeña encuesta internacional informal para ver qué están haciendo los demás para unir equipos y crear camaradería (ver Figura 1).

Figura 1
Una de las peores cosas que le pueden pasar a un proyecto es detener el desarrollo antes de su finalización debido a la falta de fondos o, si se trata de un proyecto de grupo de código abierto, permanecer incompleto debido a la pérdida de contribuyentes. Se requiere un seguimiento diligente del progreso con respecto a los recursos. El mantenimiento de los niveles de financiación y contribución suele requerir un esfuerzo continuo por parte del director del proyecto.

En conclusión

El éxito depende de las contribuciones de una amplia variedad de conjuntos de habilidades. Estos conjuntos de habilidades se encuentran en personas que tienen sus propios hábitos de trabajo, estilos de comunicación y expectativas. Al menos en los Estados Unidos, es probable que provengan literalmente de un número sorprendentemente grande de naciones. Entonces, para obtener los mejores resultados en equipo, empaque sus empanadas, vino y algo de karaoke y observe cómo despega su proyecto de desarrollo.

Acerca de

David Rich es el vicepresidente de marketing de Interactive Supercomputing. David aporta a ISC más de 25 años de experiencia en marketing, ventas y servicio a empresas de alta tecnología tanto grandes como emprendedoras. En AMD, lideró la entrada de la empresa en HPC, iniciando la transición a x86 de 64 bits como el procesador HPC preferido. Durante su mandato en AMD, también fue presidente del HyperTransport Consortium, una organización de estándares para la tecnología de interconexión de alta velocidad. La experiencia previa de David incluye ser el gerente fundador de la línea de productos TotalView, que se ha convertido en el estándar de facto para la depuración paralela y distribuida. Fue vicepresidente de Fujitsu System Technologies, que desarrolló tecnología de redes de alta velocidad que fue precursora de InfiniBand. Su experiencia en procesamiento paralelo comenzó en BBN Technologies, donde trabajó en la serie de computadoras Butterfly. David tiene una licenciatura en ciencias de la computación de la Universidad de Brown.

Deberías compartir en una historia de tu Instagram para que tus amigos lo sepan

??? ? ? ???

Comparte