Programación en pareja

Técnica colaborativa para el desarrollo de software
Programación en pareja

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.

Ciencias económicas

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 ]

Calidad del diseño

Un sistema con dos programadores posee mayor potencial para la generación de soluciones más diversas a los problemas por tres razones:

  1. Los programadores aportan diferentes experiencias previas a la tarea;
  2. Pueden evaluar la información relevante para la tarea de diferentes maneras;
  3. Se encuentran en diferentes relaciones con el problema según sus roles funcionales.

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]

Satisfacción

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]

Aprendiendo

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] .

Formación de equipos y comunicación

Dos compañeros de trabajo programando en pareja, 2007

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]

Estudios

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]

Indicadores de incumplimiento

Hay indicadores de que un par no está funcionando bien: [ opinión ]

  • La desconexión puede presentarse cuando uno de los miembros se aleja físicamente del teclado, accede al correo electrónico o incluso se queda dormido.
  • El fenómeno de "observar al maestro" puede surgir si un miembro tiene más experiencia que el otro. En esta situación, el miembro más joven puede asumir el papel de observador y cederle al miembro más experimentado de la pareja la mayor parte de la actividad de codificación. Esto puede conducir fácilmente a la desconexión.

Variaciones de emparejamiento

Experto-experto
La combinación de expertos puede parecer la opción obvia para lograr la mayor productividad y puede producir excelentes resultados, pero a menudo brinda poca información sobre nuevas formas de resolver problemas, ya que es poco probable que ambas partes cuestionen las prácticas establecidas. [2]
Experto-novato
La combinación de experto y novato crea muchas oportunidades para que el experto sirva de mentor al novato. Esta combinación también puede introducir nuevas ideas, ya que el novato tiene más probabilidades de cuestionar las prácticas establecidas. El experto, ahora obligado a explicar las prácticas establecidas, también tiene más probabilidades de cuestionarlas. Sin embargo, en esta combinación, un novato intimidado puede "observar pasivamente al maestro" y dudar en participar de manera significativa. Además, algunos expertos pueden no tener la paciencia necesaria para permitir la participación constructiva del novato. [11]
Novato-novato
La formación de parejas de novatos puede producir resultados significativamente mejores que dos novatos trabajando de forma independiente, aunque esta práctica generalmente no se recomienda porque es más difícil para los novatos desarrollar buenos hábitos sin un modelo a seguir adecuado. [3]

Programación de pares remotos

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:

  • Software para compartir pantalla completa [14] [15] [¿ fuente autopublicada? ]
  • Multiplexores de terminales
  • Herramientas de edición distribuida especializadas
  • Los programas de chat de audio o el software VoIP pueden resultar útiles cuando el software para compartir pantalla no ofrece la capacidad de audio bidireccional. El uso de auriculares permite que los programadores tengan las manos libres.
  • Entornos de desarrollo en la nube
  • Servicios de programación colaborativa en pareja

Véase también

Referencias

  1. ^ Williams, Laurie (19-20 de febrero de 2001). Integración de la programación en parejas en un proceso de desarrollo de software . 14.ª Conferencia sobre educación y formación en ingeniería de software. Charlotte. pp. 27-36. doi :10.1109/CSEE.2001.913816. ISBN 0-7695-1059-0Uno de los programadores, el conductor, controla el teclado y el ratón y ejecuta activamente el programa. El otro programador, el observador, observa continuamente el trabajo del conductor para identificar errores tácticos (sintácticos, ortográficos, etc.) y también piensa estratégicamente en la dirección del trabajo.
  2. ^ abcde Lui, Kim Man (septiembre de 2006). "Pair programming productivity: Novice–novice vs. expert–expert" (PDF) . Revista internacional de estudios humanos y computacionales . 64 (9): 915–925. CiteSeerX 10.1.1.364.2159 . doi :10.1016/j.ijhcs.2006.04.010. Archivado desde el original (PDF) el 20 de julio de 2011 . Consultado el 18 de noviembre de 2012 . 
  3. ^ abcde Cockburn, Alistair ; Williams, Laurie (2000). "Los costos y beneficios de la programación en pares" (PDF) . Actas de la Primera Conferencia Internacional sobre Programación Extrema y Procesos Flexibles en Ingeniería de Software (XP2000) .
  4. ^ Flor, Nick V.; Hutchins, Edwin L. (1991). "Análisis de la cognición distribuida en equipos de software: un estudio de caso de programación en equipo durante el mantenimiento perfectivo del software". En Koenemann-Belliveau, Jürgen; Moher, Thomas G.; Robertson, Scott P. (eds.). Estudios empíricos de programadores: cuarto taller . Ablex. págs. 36–64. ISBN 978-0-89391-856-9.
  5. ^ ab Williams, Laurie ; Kessler, Robert R.; Cunningham, Ward; Jeffries, Ron (2000). "Fortaleciendo la defensa de la programación en pares" (PDF) . IEEE Software . 17 (4): 19–25. CiteSeerX 10.1.1.33.5248 . doi :10.1109/52.854064. 
  6. ^ ab Williams, Laurie ; Upchurch, Richard L. (2001). "En apoyo de la programación en parejas de estudiantes". Boletín ACM SIGCSE . 33 (1): 327–31. doi : 10.1145/366413.364614 .
  7. ^ abc Hannay, Jo E.; Tore Dybå; Erik Arisholm; Dag IK Sjøberg (julio de 2009). "La efectividad de la programación en pareja: un metaanálisis". Tecnología de la información y el software . 51 (7): 1110–1122. doi :10.1016/j.infsof.2009.02.001.
  8. ^ Arisholm, Erik; Hans Gallis; Tore Dybå; Dag IK Sjøberg (febrero de 2007). "Evaluación de la programación en pares con respecto a la complejidad del sistema y la experiencia del programador". IEEE Transactions on Software Engineering . 33 (2): 65–86. doi :10.1109/TSE.2007.17. S2CID  9889035. Archivado desde el original el 29 de octubre de 2010. Consultado el 21 de julio de 2008 .
  9. ^ Stephens, Matt; Doug Rosenberg. "¿La programación en pareja realmente mejorará su proyecto?" . Consultado el 28 de mayo de 2011 .
  10. ^ Sarkar, Advait; Gordon, Andrew D.; Negreanu, Carina; Poelitz, Christian; Ragavan, Sruti S.; Zorn, Ben (2022). "¿Cómo es programar con inteligencia artificial?". Psychology of Programming Interest Group . Consultado el 27 de marzo de 2023 .
  11. ^ Williams, L. y Kessler, R. (2003). Programación en pareja iluminada. Boston: Addison-Wesley Professional. ISBN 9780201745764.
  12. ^ Flor, Nick V. (2006). "Desarrollo de software distribuido globalmente y programación en pares". Comunicaciones de la ACM . 49 (10): 57–8. doi :10.1145/1164394.1164421. S2CID  8963421.
  13. ^ Schümmer, Till; Stephan Lukosch (septiembre de 2009). "Understanding Tools and Practices for Distributed Pair Programming" (PDF) . Journal of Universal Computer Science . 15 (16): 3101–3125 . Consultado el 30 de abril de 2010 .
  14. ^ Agile Ajax: Programación en pareja con VNC Archivado el 2 de abril de 2008 en Wayback Machine [ fuente autopublicada ]
  15. ^ Programación en pareja: la configuración definitiva y otras opciones que probamos. – Blog de Jonathan Cogley
  • wikiHow: Cómo hacer programación en pares Guía práctica; contiene sabiduría común sobre cómo hacer que la programación en pares funcione.
  • Guía de programación de pares Tuple:Pair Guía de programación de pares que cubre estilos de emparejamiento, antipatrones y más. Incluye videos de ejemplos de emparejamiento.
  • c2: Programación en pares
  • c2:Patrón de programación por pares
  • c2: Frecuencia de rotación de pares
Obtenido de "https://es.wikipedia.org/w/index.php?title=Programación_en_pares&oldid=1236913482"