
Tanto si trabajamos por nuestra cuenta como si lo hacemos por cuenta ajena, es habitual que no lo hagamos solos, sino que tengamos que hacerlo junto a un equipo de personas. El desarrollo de software de calidad es una tarea que exige a menudo de perfiles diferentes, cada uno especializado en un área (frontend, backend, administración de bases de datos, usabilidad…). Esto hace que necesitemos de un sistema eficiente para organizar al equipo. Y cómo no, existe una tremenda variedad de software destinado a facilitar esa organización.
Este artículo pretende ser el comienzo de una serie donde abordaremos precisamente este tema: Cómo el software existente puede ayudarnos a la hora de trabajar junto a un equipo de personas, de modo que la interacción sea lo más sencilla posible y podamos centrarnos en el trabajo en sí mismo. La idea es que tengamos a mano una relación de herramientas a las que recurrir en caso de que sea necesario, y las tengamos siempre presente en nuestra cabeza para detectar la necesidad rápidamente y podamos así cubrirla de forma efectiva. Hoy comenzaremos con los sistemas de control de versiones.
Es casi inconcebible hoy en día trabajar desarrollando software y no utilizar un sistema para controlar los cambios que se van realizando, tanto por nosotros mismos como por nuestros compañeros de trabajo. Tales utilidades se denominan sistemas de control de versiones, y existen un buen puñado de ellas. La característica principal en que se dividen bien podría ser si se trata de un sistema centralizado o no. En el primer caso, existe un servidor común donde se encuentra el código fuente, tanto la versión actual en desarrollo como todas aquellas versiones intermedias desde que dio comienzo el proyecto. En el último caso, no es necesario (aunque a menudo es recomendable) poseer un servidor común, sino que se pueden enviar y recibir actualizaciones de cada uno de los miembros participantes de forma directa.
¿Cómo funciona un sistema de control de versiones? Lo habitual es que cada programador realice los cambios necesarios en el código fuente para la tarea que se le ha encomendado. Una vez que dichos cambios están listos, los envía al servidor (o a los otros participantes), de modo que el resto pueda recibirlos en cualquier momento, y así trabajar sobre dichos cambios cuando tengan que realizar cualquier otra tarea. Se puede dar el caso de que varios programadores trabajen sobre el mismo fichero o ficheros, en cuyo caso el sistema lo detectará, y actuará para evitar posibles conflictos. Se pueden dar dos casos:
Si bien sólo por esta característica ya merece la pena trabajar con un sistema de este tipo, espera a conocer las otras ventajas:
Y otras muchas características que suelen ser propias de un sistema de control de versiones específico.

Algunos de los más habituales son CVS, Subversion, Git, Mercurial, o Bazaar, si bien encontrarás otros muchos. Personalmente, me decanto por Git, el mismo que se utiliza para llevar un control del desarrollo del kernel de Linux (de hecho, fue creado inicialmente para esta tarea), y que además de ser muy popular, es un sistema distribuido, flexible, y para el que existe una gran cantidad de bibliografía. Pero te recomiendo que pruebes unos cuántos y te decidas por el que mejor se ajuste a tus necesidades.
Existe una ingente cantidad de repositorios de software que ponen a disposición del usuario un sistema de control de versiones donde alojar su código. La mayoría de los repositorios de software libre más conocidos utilizan algunos de estos sistemas para acceder al código fuente, y poder colaborar si así se desea en el desarrollo del mismo, o crear tu propio proyecto y alojarlo en ellos de forma gratuita. Muchos otros también permiten alojar proyectos privados a los que sólo tienen acceso tanto tú como tus colaboradores.
Entre los más conocidos, cabe mencionar:
Además, no dejes de echar un vistazo a los servicios unificados de gestión de proyectos, como Unfuddle, ya que éstos suelen traer a menudo la posibilidad de alojar tu código en su propio repositorio de software.