Desarrollo de Software Ágil en México

Escrito en 19/06/2012 por Administrador en Archivo

Emmanuel Oseguera
Software Engineer at Crowd Interactive

La oferta y la demanda

En los últimos años, hemos visto cómo el desarrollo de software bajo metodologías ágiles no es ya un extra, sino que es un requisito para dar respuesta a la demanda creciente de soluciones de software de alta calidad para el comercio electrónico. Lo anterior además de lograrlo en tiempos récord.

“Las metodologías ágiles contemplan el desarrollo de software de manera integral, con un énfasis especial en la entrega de valor al cliente, en la generación de negocio y el retorno de la inversión (ROI). Sólo hay una manera efectiva de crear software que funcione, y es de manera colaborativa. La colaboración entre cliente y desarrolladores es indispensable: se debe fomentar y apoyar. El software puede ser visto como un juego colaborativo, y ahí hacen especial énfasis las metodologías ágiles, promoviendo procesos y métodos que faciliten esta colaboración. Se permite a los desarrolladores expandir su aportación de valor a los proyectos, y se ofrece a los clientes transparencia sobre los mismos.”

José Ramón Díaz

Grupo de coordinación de Agile-Spain

Metodologías como SCRUM, Xtreme Programming, Kanban entre otras, han demostrado mejores resultados que las metodologías tradicionales para el desarrollo de software. Sobre todo porque brindan una excelente flexibilidad como respuesta al cambio.

Técnicas como la programación en pares también son, sin duda, un gran ingrediente al momento de desarrollar, puesto que nos permitirán asegurar niveles muy altos de calidad.

Lenguajes como Ruby y frameworks como Ruby on Rails, son otras de las herramientas que hoy en día, empresas como Crowd Interactive utilizan para lograr un software de alta calidad funcionando y que sobre todo, agrega valor al cliente.

La metodología no lo es todo

No solo se requiere que los desarrolladores de software cuenten con bases sólidas en la programación orientada a objetos, también es necesario que cuenten con herramientas que les permitan desarrollar aplicaciones en equipo de manera más eficiente y efectiva, además, de que tengan la facilidad de probar su código de manera automatizada las veces que sean necesarias.

Lo anterior nos lleva a que el profesional egresado de las áreas relacionadas debe de tener la competencias para trabajar en equipo con otros desarrolladores, que pueda integrar su código con el código del resto del equipo para construir así un gran sistema sin romper algo que ya funcionaba.

La siguiente es una lista de las competencias mínimas que considero debe tener el egresado de estos años para formar parte de empresas de desarrollo de software exitosas:

  • Pasión por escribir código
  • Terminar lo que empieza
  • Refactorizar continuamente su código (mejora continua).
  • Conocer patrones de diseño.
  • Ser capaz de demostrar con código que su código funciona (pruebas).
  • Bases sólidas de usabilidad.
  • Habilidad para programar en cualquier lenguaje.
  • Cultura del autoaprendizaje, por medio de la lectura, videos, etc.
  • Dominar el idioma inglés (no es un extra, es algo básico)
  • Humildad, ante cualquier cosa ser humilde es lo mejor que puedes hacer para seguir creciendo profesionalmente.
  • Dominar herramientas para el control de versiones como Git, Github, entre otras.
  • Capacidad de transmitir a otros lo que ha aprendido.

Algunas de las competencias anteriormente mencionadas,  son incluso publicadas como necesarias en algunas empresas de desarrollo de software.

Para Reflexionar

En días pasados en el evento

Magma Rails llevado a cabo en la ciudad de Manzanillo, Colima, en el mes de Junio, expositores de varias partes del mundo como Aaron Patterson, Scott Chacon (CIO cofundador de GitHub), Dr. Nic (Developer Evangelista Engine Yard), Blake Mizerany (ingeniero en Heroku, creador del framework Sinatra), entre otros grandes expositores experimentados, tanto nacionales como internacionales, nos hablaron sobre las tendencias en el desarrollo de software y de lo que actualmente les ha servido (herramientas) para lograr desarrollar productos exitosos, mismos que responden a la demanda del mercado.

Para saber más o menos dónde estamos en esta materia como región, e incluso como país, es necesario preguntarnos constantemente cosas como las siguientes:

  • ¿Cómo se están formando los profesionales del área en las escuelas?
  • ¿Están las universidades públicas conscientes de la demanda del capital humano que hoy se tiene en la industria del software?, y mejor aún,
  • ¿Cuáles son las metodologías para el desarrollo de software que se están enseñando?
  • ¿Son vigentes los planes de estudio?, ¿responden éstos a las demandas de las empresas de desarrollo de software?
  • En sus trabajos escolares y prácticas, ¿implementan metodologías ágiles?, es decir, ¿están inmersos ya en estos ambientes?
  • ¿Utilizan herramientas para el control de versiones para integrar el software desarrollado?,
  • ¿Cuál es la cultura que se les está creando a los futuros ingenieros?

En fin, debemos preguntarnos cosas en este sentido para determinar si estamos educando adecuadamente o si simplemente estamos preparando personas que requerirán de una gran capacitación inicial por parte de la empresa a la que se integren, sin mencionar el costo que conlleva.

Valdría la pena hacer un análisis acerca de si se están preparando profesionales de acuerdo a las actuales demandas del mercado o si por el contrario, simplemente se siguen formando profesionales de desarrollo de software de manera tradicional en esquemas y tecnologías en las que los clientes de hoy ya no se interesan no por anticuadas, sino porque ya no responden a sus demandas.

Al fin de cuentas, esto se verá reflejado en las competencias que tengan o le falten a los futur@s ingenier@s de estas áreas.

¡Ah! Síganme en Twitter @emmanueloseguer, y a @Crowdint, por supuesto.

Imagenes por Esteban Cortés, Tania Escudero, y http://juixe.com/

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *


*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>