/ algoritmia

¿Las competencias de programación son importantes en la vida laboral?

Actualmente existen muchas opiniones contradictorias acerca de si las competencias de programación son útiles o no, a continuación contaré por que creo que son bastante importantes bajo mi experiencia. No duden en comentar y discutir lo escrito en este blog.

¿Qué son las competencias de programación?

Son como las olimpiadas de matemáticas, pero con computadores.

En este tipo de competencias se presenta una serie de retos de diversos temas, por ejemplo, estructuras de datos, algoritmos, geometría, física, teoría de grafos, entre otros. Se deben escribir programas de computador (individualmente o por equipos) para resolver dichos problemas.

¿Qué es la vida laboral?

Es una competencia de programación con duración indefinida donde nos pagan por resolver problemas. También se escriben programas de computador (individualmente o por equipos) para resolver dichos retos.

Respuesta a la pregunta original:

Aquí las razones por las cuales considero que las competencias de programación son importantes en la vida laboral, trataré de hacer un paralelo de las habilidades adquiridas y como se usan en la industria:

  • Habilidades para resolver problemas: Generalmente en las competencias de programación debemos resolver los retos de la manera más eficiente posible, para esto debemos conocer entre otras cosas, la complejidad computacional de nuestras soluciones, estructuras de datos y técnicas de programación. Cuando aplicamos estos conocimientos en nuestro trabajo, escribimos programas más rápidos, más eficientes y generalmente más simples.
  • Trabajo en equipo: Muchas competencias se realizan en equipos, generalmente de 2 o 3 personas. Esto es una experiencia increíble ya que nos ayuda a buscar formas para comunicar mejor nuestras ideas, también nos ayuda a comprender las reacciones de nuestros compañeros y a mantener un ambiente cómodo para todos. Supremamente importante en la vida laboral.
  • Revisión de código: Esto está relacionado con el punto anterior, generalmente es necesario leer código de nuestros compañeros y que ellos lean el nuestro para compartir soluciones y discutir ideas. Cuando tenemos equipos sólidos, se tiende a escribir el código de la manera más clara posible y con algún tipo de convención para que todos puedan entenderlo más fácilmente. Esto es comparable con algún tipo de pair programming (dado que en las competencias sólo se puede usar un computador por equipo) o el famoso code review. Incluso en las competencias individuales, se suele leer el código de competidores avanzados (después de terminada la competencia) para encontrar mejores maneras de solucionar los problemas. Esto nos ayuda mucho a comprender el código de las demás personas.
  • Búsqueda de errores (bugs): Todo programa de computador tiene una alta probabilidad de errores. En las competencias de programación, parte de nuestro trabajo es eliminar dichos errores de nuestros programas o los de nuestros compañeros. Esto es una habilidad que personalmente valoro mucho y que hace una gran diferencia en la vida laboral.
  • Pruebas unitarias: Cada uno de los retos, viene con un conjunto de datos para probar si nuestro código resuelve correctamente el problema o no. Esto crea el ambiente perfecto para escribir nuestro código de tal forma que podamos comprobar su salida para una entrada específica, de igual forma como lo haríamos con unit test en cualquier programa de nuestra vida laboral. En las competencias incluso existen casos de prueba los cuales podemos conocer antes de resolver el problema (parecido a lo que se pretende con TDD).
  • Preparación para entrevistas: La mayoría de las empresas (principalmente los gigantes como google o facebook) utilizan preguntas muy similares a los retos que encontramos en las competencias de programación para sus entrevistas. Al practicar constantemente podemos incrementar nuestras posibilidades de encontrar un buen trabajo (:

¿Dónde puedo practicar?

Existen muchos sitios en internet donde resolver retos de programación, entre mis favoritos están:

Conclusión

Las competencias de programación no cubren el 100% de las habilidades que necesitamos para ser buenos desarrolladores pero son un gran complemento para lograrlo.

No dudes en compartirnos tu opinión o las dudas que puedas tener al respecto.