Programación competitiva, ¿ayuda en el Desarrollo de Software?
Ingeniería de Software
Los cursos de "Introducción a la programación", "Curso básico de ..." y similares suelen presentar información de fundamentos, sentencias, lógica, entre otros. Naturalmente, quienes inician en el desarrollo de Software suelen tener una perspectiva limitada respecto a los problemas o dificultades en las que nos enfrentamos al momento de desarrollar Software. Lo que siempre encontrará, sin duda, cualquiera que intente aprender a programar es la complejidad de los problemas a resolver: una suma, una búsqueda lineal, algoritmos recursivos, entre otros.
En la universidad un profesor desarrolló un "Club de Programación" como actividad extracurricular, en el que se veían temas de algoritmos y resolución de problemas para la competiciones del ICPC. En consecuencia, se descubrieron diversos temas de estudio que resultan atractivos. Sin embargo, paralelamente me encontraba con el desarrollo de Software empresarial en el que esporádicamente me encontraba con la necesidad de implementar conocimientos que adquiría en el "Club de Programación".
Ahora bien, se comprende que los temas de estudio del "Club de Programación" no eran sobre Ingeniería de Software, Calidad del Software o El Proceso de Desarrollo de Software. En igual forma, un compañero y amigo del Club; Eduardo, mencionó en una ocasión "en los concursos vas a desarrollar código que no volverás a ver si no es para entender por qué no resolviste el problema. Es código que no recibirá mantenimiento y que no importa qué tan legible sea, debes considerar que estás contrarreloj".
En este punto, no es justo afirmar que la programación competitiva no proporciona conocimientos y herramientas para el desarrollo de Software, después de todo, conocer algoritmos, estructuras de datos, formas de analizar y resolver problemas, resultan importantes al momento de desarrollar Software.
En programación competitiva se busca que el programa solucione una problemática implementando el algoritmo más eficiente posible y en el menor tiempo posible. No obstante, no se considera que los datos a recibir sean validados en el sentido estricto del ámbito. Dado el caso ¿el Software desarrollado es de calidad?
Boyd (como se citó en Caballero Cervantes, 2006) postula 5 máximas de satisfacción:
- entregar el producto que el cliente desea o necesita
- entregar la calidad de manera acorde con el precio
- entregar el producto en el espacio de tiempo que el cliente desea o necesita
- entregar el nivel de retroalimentación que el cliente desea
- contar con un sistema de resolución de conflictos justo para el cliente y el equipo de desarrollo
la programación competitiva; en cierta forma, tiene como objetivo cumplir algunas de estas 5 máximas. Sin embargo, como ya se ha mencionado, la calidad suele ser subjetiva e incluso arbitraria.
Sin duda, la programación competitiva nos proporciona una perspectiva de que el Software a desarrollar debe ser eficiente, aunque en otro sentido, deja de lado algunos otros factores que deben ser considerados en el desarrollo de Software, ¿qué hay de la experiencia del usuario?, por ejemplo.
Ahora bien, ¿tú qué opinas? deja tus comentarios y; si es posible, las referencias.
Referencias
- Caballero Cervantes, O. H. (2006). TECNOLOGÍAS DE INFORMACIÓN Y HERRAMIENTAS PARA LA ADMINISTRACIÓN DE PROYECTOS DE SOFTWARE. Revista Digital Universitaria, 1-13.