La programación en pares es una técnica de desarrollo de software en la que dos programadores trabajan juntos en una estación de trabajo. Uno, el conductor , escribe el código mientras que el otro, el observador o navegador , [1] revisa cada línea de código a medida que se escribe. Los dos programadores intercambian roles con frecuencia.
Durante la revisión, el observador también considera la dirección "estratégica" del trabajo, y propone ideas para mejorar y posibles problemas futuros que se deben abordar. Esto tiene como objetivo liberar al conductor para que pueda centrar toda su atención en los aspectos "tácticos" de la realización de la tarea actual, utilizando al observador como red de seguridad y guía.
La programación en parejas aumenta las horas de trabajo necesarias para entregar el código en comparación con los programadores que trabajan individualmente. [2] Sin embargo, el código resultante tiene menos defectos. [3] Junto con el tiempo de desarrollo del código, otros factores como los costos de soporte de campo y el control de calidad también influyen en el retorno de la inversión. La programación en parejas podría compensar teóricamente estos gastos al reducir los defectos en los programas. [3]
Además de prevenir errores a medida que se cometen, pueden existir otros beneficios intangibles. Por ejemplo, la cortesía de rechazar llamadas telefónicas u otras distracciones mientras se trabaja en equipo, tomar menos descansos en intervalos acordados o compartir descansos para devolver llamadas telefónicas (pero volver al trabajo rápidamente porque alguien está esperando). Un miembro del equipo puede estar más concentrado y ayudar a impulsar o despertar al otro si pierde la concentración, y ese rol puede cambiar periódicamente. Un miembro puede conocer un tema o una técnica que el otro no, lo que puede eliminar demoras para encontrar o probar una solución, o permitir una mejor solución, ampliando así de manera efectiva el conjunto de habilidades, el conocimiento y la experiencia de un programador en comparación con trabajar solo. Cada uno de estos beneficios intangibles, y muchos más, puede ser difícil de medir con precisión, pero pueden contribuir a horas de trabajo más eficientes. [ cita requerida ]
Un sistema con dos programadores posee mayor potencial para la generación de soluciones más diversas a los problemas por tres razones:
En un intento por compartir objetivos y planes, los programadores deben negociar abiertamente un curso de acción compartido cuando surge un conflicto entre ellos. Al hacerlo, consideran un mayor número de formas de resolver el problema de las que podría considerar un solo programador. Esto mejora significativamente la calidad del diseño del programa, ya que reduce las posibilidades de seleccionar un método deficiente. [4]
En una encuesta en línea realizada en 2000 a programadores en pareja, el 96% de los programadores afirmó que disfrutaba más trabajando en pareja que programando solo. Además, el 95% afirmó que se sentía más seguro de su trabajo cuando programaba en pareja. Sin embargo, como la encuesta se realizó entre programadores en pareja autoseleccionados, no tuvo en cuenta a los programadores que se vieron obligados a programar en pareja. [5]
Los conocimientos se comparten constantemente entre los programadores que trabajan en parejas, ya sea en la industria o en el aula. Muchas fuentes sugieren que los estudiantes muestran una mayor confianza cuando programan en parejas [5] , y muchos aprenden, ya sea desde consejos sobre las reglas del lenguaje de programación hasta habilidades generales de diseño [6] . En la "programación en parejas promiscua", cada programador se comunica y trabaja con todos los demás programadores del equipo en lugar de hacerlo sólo con un compañero, lo que hace que el conocimiento del sistema se extienda a todo el equipo [3] . La programación en parejas permite a los programadores examinar el código de su compañero y proporcionar retroalimentación, lo que es necesario para aumentar su propia capacidad de desarrollar mecanismos de seguimiento para sus propias actividades de aprendizaje [6] .
La programación en parejas permite que los miembros del equipo compartan ideas rápidamente, lo que hace que sea menos probable que tengan agendas ocultas entre ellos. Esto ayuda a los programadores en parejas a aprender a comunicarse más fácilmente. "Esto aumenta el ancho de banda y la frecuencia de la comunicación dentro del proyecto, lo que aumenta el flujo general de información dentro del equipo". [3]
Existen estudios empíricos y metaanálisis sobre programación en pares. Los estudios empíricos tienden a examinar el nivel de productividad y la calidad del código, mientras que los metaanálisis pueden centrarse en los sesgos introducidos por el proceso de prueba y publicación.
Un metaanálisis concluyó que los pares suelen considerar más alternativas de diseño que los programadores que trabajan solos, llegan a diseños más simples y fáciles de mantener y detectan los defectos de diseño antes. Sin embargo, planteó inquietudes sobre la posibilidad de que sus hallazgos hayan sido influenciados por "signos de sesgo de publicación entre los estudios publicados sobre programación en pares". Concluyó que "la programación en pares no es uniformemente beneficiosa o efectiva". [7]
Aunque los programadores en pareja pueden completar una tarea más rápido que un programador individual, la cantidad total de horas-hombre aumenta. [2] Un gerente tendría que equilibrar la finalización más rápida del trabajo y la reducción del tiempo de prueba y depuración con el mayor costo de codificación. El peso relativo de estos factores puede variar según el proyecto y la tarea.
El beneficio de trabajar en parejas es mayor en tareas que los programadores no comprenden completamente antes de comenzar: es decir, tareas desafiantes que requieren creatividad y sofisticación, y para principiantes en comparación con expertos. [2] La programación en parejas podría ser útil para lograr alta calidad y exactitud en tareas de programación complejas, pero también aumentaría significativamente el esfuerzo (costo) de desarrollo. [7]
En las tareas sencillas, que la pareja ya comprende por completo, la asociación da como resultado una caída neta de la productividad. [2] [8] Puede reducir el tiempo de desarrollo del código, pero también corre el riesgo de reducir la calidad del programa. [7] La productividad también puede caer cuando se utiliza la asociación de novatos sin la disponibilidad suficiente de un mentor que los oriente. [9]
Un estudio sobre programadores que utilizan herramientas de asistencia de IA como GitHub Copilot descubrió que, si bien algunos programadores concibieron la asistencia de IA como algo similar a la programación en pares, en la práctica el uso de dichas herramientas es muy diferente en términos de la experiencia del programador, ya que el programador humano tiene que pasar repetidamente entre los roles de conductor y navegador. [10]
Hay indicadores de que un par no está funcionando bien: [ opinión ]
La programación por pares remota , también conocida como programación por pares virtuales o programación por pares distribuida , es una programación por pares en la que los dos programadores están en diferentes ubicaciones, [12] trabajando a través de un editor colaborativo en tiempo real , un escritorio compartido o un complemento IDE de programación por pares remota . El emparejamiento remoto presenta dificultades que no están presentes en el emparejamiento cara a cara, como demoras adicionales para la coordinación, depender más de herramientas de seguimiento de tareas "pesadas" en lugar de "livianas" como fichas, y pérdida de comunicación verbal que resulta en confusión y conflictos sobre cosas como quién "tiene el teclado". [13]
El soporte de la herramienta podría ser proporcionado por:
errores tácticos (sintácticos, ortográficos, etc.) y también piensa estratégicamente en la dirección del trabajo.