¿Qué necesito para contribuir al código open source?
Tags: opensource, tips, development, contribution
Published: 2020-06-17 15:24:56

Seguramente día a día utilizas alguna librería open source en alguno de tus proyectos, ¿no te gustaría saber que esa librería que utilizas día a día tiene un toque tuyo?

Si la respuesta es un "Si", estás en el lugar correcto, primero que nada debemos entender que el software open source esta abierto a mejora continua y no precisamente requiere que los contríbuidores sean programadores expertos, si bien, todo software requiere código, también requiere documentación, traducciones, pruebas unitarias, pruebas funcionales, reporte de bugs entre otras acciones que pueden ayudar a mejorar esa librería y tú puede ayudar con ello. 

En general e independientemente del lenguaje de tu preferencia, existen algunos aspectos que debes tomar en cuenta para poder ser parte de la comunidad open source, enseguida te dejo una lista de los requisitos para convertirte en `contribuidor` o `colaborador` de algún proyecto:

1. Conocer y usar `git`.
2. Tener ganas de formar parte de un proyecto.
3. Paciencia para resolver problemas y atender comentarios.
4. (Casi siempre requerido) Saber inglés.
5. Cumplo con todo, ¿por dónde comienzo?

Si no tienes algúno de estos puntos, no te preocupes del todo, en este blog te anexaré un resumen de cada punto mencionado esperando que te funcione como guia para realizar tu primera contribución.

> **Contríbuir** es el acto de agregar alguna mejora o corrección en un proyecto open source, **colaborar** es el acto de ser un contribuidor constante en cierto proyecto, un colaborador hace de un proyecto suyo e inclusive puede llegar a tener permisos de administración o desición sobre ciertos aspectos del proyecto. 

## Conocer y utilizar GIT

`git` es lo primero que debes aprender para comenzar a contribuir en proyectos open source, te recomiendo tener un conocimiento básico/intermedio de ésta herramienta para que puedas gestonar los cambios o modificaciones que envíes a algún proyecto. La mayoría de los proyectos open source utilizan `git` y suelen estar almacenadas en `GitHub` y `GitLab`, si aún no tienes cuenta te recomiendo que la crees, es totalmente gratuito.

> Tip: Te recomiendo ampliamente que estés familiarizado con los conceptos: `fork`, `clone`, `branch`, `commit`, `pull`, `push`, `rebase`, `squash` , `pull request`, `code review`. Si tienes alguna duda o deseas profundizar más en estos conceptos, tenemos un post dedicado a este tema, puedes verlo [aquí](https://dev.to/javleds/git-para-contribuidores-53ho).

## Tener ganas de formar parte de un proyecto

`Contribuir` o `colaborar` en proyectos open source requiere de esfuerzo y tiempo, una de las razónes por las que las personas no participan en este tipo de proyectos es porque no deja ganancias económicas (al menos al principio), pero provee una manera de enriquecer tu curriculum y de mejorar en mucho tus habilidades de programador. 

Con el tiempo, `contribuir` puede ayudarte a conseguir mejores oportunidas y/o si tu librería o proyecto comienza a ganar popularidad, la gente comenzará a hacer donaciones y/o a mantener tu proyecto económicamente. 

> Es muy difícil llegar a éste punto, pero no es imposible. 

## Paciencia para resolver problemas

Identificar algún problema, necesidad o mejora en librerías open source puede ser complicado, a parte de ésto, dedicar algunas horas o días para brindar una solución, envíarla para revisión y que te pidan muchos cambios o que rechacen tu `PR` puede ser muy frustrante, incluso podría parecer que es demasiado trabajo y que no es bien compensado, ¡ten mucha paciencia!.

Si te propones ayudar en algún proyecto, sea que tus cambios sean aceptados o no, tendrás un crecimiento personal y profesional muy grande, esto incrementa tu confianza y poco a poco te darás cuenta de que contribuir se hará más sencillo cada vez.

Lidiar con las revisiones será un proceso que comenzarás a disfrutar por el aprendizaje que te dejan y las personas que vas conociendo son una de las principales ventajas de ser parte de ésta comunidad.

## Saber inglés

La mayoría de las librerías open source populares están escrítas en inglés, no es necesario que seas totalmente bilingue, pero si te servirá que tengas las habilidades básicas para explicar qué conlleva tu mejora y documentarla si es necesario. 

Considera que las revisiones de `PR` funcionan como una especie de chat sobre tu código y regularmente te preguntarán algunas cosas cómo:

- ¿Cuál es el motivo de tu cambio.
- ¿Que ventajas tiene?.
- ¿Qué implicaciones/impacto tiene?
- Siempre debes estar preparado para contestar este tipo de cuestiones. 

## Cumplo con todo ¿por dónde comienzo?

Si no sabes por dónde comenzar, cada proyecto en github tiene una sección llamada `issues`, en ella puedes ver todos los problemas u oportunidades de mejora que han encontrado o propuesto otros desarrolladores, ingresa en el issue que más te llame la atención e intenta reolverlo.

Si no eres un programador con mucha eperiencia o te sientes muy inseguro, puedes comenzar por buscar issues relacionados con documentación o traducciones, estos suelen ser fáciles y te ayudarán a ganar confianza en ti mísmo para hacer contribuciones cada vez más difíciles.

## Tips

Por mi expriencia en campo, te puedo compartir aglunos tips que te pueden ayudar a lograr a sacarle el mayor provecho y agilizar el proceso de contribución:

- **Realiza pull requests pequeños y enfocados a una sola solución:**

  Cada pull request debe pasar por un proceso de revisión, éste proceso suele ser lento porque las personas que revisan el código deben hacer muchas revisiones a demás de seguir aportando mejoras al proyecto, por ello, intenta que tu pull request sea lo más compacto posible, pero sin sacrificar la calidad ni las buenas prácticas.

- **Se profesional al recibir comentarios respecto a tu trabajo:**
  Los `reviewers` de código tienen una tarea difícil, y es asegurar que los cambios que proponemos no dañen de ningúna manera el funcionamiento o el requerimiento inicial del proyecto, cuando un `reviewer` te solicite cambios o rechace tu `PR`, tomalo como una crítica constructiva y continúa con tu trabajo. Si tienes dudas respecto al motivo de rechazo o no queda del todo claro el mesnsaje del `reviewer` seintete con las libertad de preguntar los motivos. 

- **Disfruta contribuir, tomate tu tiempo:**
  Es open source, regularmente no tienes ganancias económicas por participar en estos proyectos, todos los involucarados en el proyecto saben esto y por ende suelen ser muy pacientes en cuanto a avances, de igual manera, avanza a tu ritmo y disfruta de colaborar o contribuir.

  No olvides ser paciente con las actividades que no dependen de ti, como los `code reviews`.

- **Investiga las mejores prácticas del lenguaje:**
  Independientemente del lenguaje que utilices, siempre intenta seguir las mejores prácticas de código, esto ayuda en muchas ocasiones a agilizar el proceso de `code review` y minimiza el número de correcciones solicitadas o rechazos.

- **Realiza tests de tus mejoras o cambios:**
  Asegurate de que los cambios que realices estén respaldados por un buen test, es casi un hecho que te lo van a solicitar, pero de igual manera, es buena idea acostumbrarse a hacer test para minimizar el riesgo de bugs en el proyecto.

- **Lee la sección `Contributing` incluida en el archivo `README.md` de cada proyecto:**
  En este archivo se especifican las reglas para que puedas contribuir de manera exitosa, a veces colocan `code standards`, en ocasiones te solicitan que ejecutes una serie de pruebas para asegurarte de que tu código no afectó en nada, entre otros datos importantes.

- **Se respetuoso con los otros contribuidores:**
  Considera que al ser partícipe de proyectos open source, estarémos tratando con personas de diferentes culturas, todos tenemos diferentes maneras de hacer las cosas e ideologías, siempre debes estás abrierto al dialogo y debes respetar a las personas con las que interactuas. 

## Conclusión

Contríbuir en proyectos open source no es fácil, pero las recompensas valen la pena; la experiencia, el aprendizaje y las conexiones que obteienes no tienen comparación. Te invito a que crees una cuenta en `GitHub` (si aún no la tienes), búsques en ella una librería que utilizas mucho e intentes realizar una contribución. 

Te deseo lo mejor en el mundo open source, y si ya tienes experiencia cuentame de ella en los comentarios.