Tu código dice más sobre ti de lo que piensas

3 septiembre, 2020
codigo-uoc

“Pero si mi código está igual que la solución que se ha publicado en el aula”. ¡Cuántas veces me habrán escrito estudiantes diciendo esta frase! “No entiendo cómo es que tengo una C+ y no una A”. Otras tantas. “Mi código supera todos los test proporcionados con el enunciado tendría que tener toda la puntuación de este apartado”. Sueño con ella.

La semana pasada, sin ir más lejos, estuve revisando a petición de un estudiante una de las prácticas que había entregado durante el semestre y en medio de su código me encuentro algo parecido a esto:

La imagen tiene un atributo ALT vacío; su nombre de archivo es codigo-uoc-david-garcia.png

Seguro que a más de uno, tras ver el código anterior, se le ha venido a la mente una luz roja dando vueltas sin parar. Evidentemente, el código es sintáctica como semánticamente correcto. Incluso hace la tarea que se pedía que hiciera. Sin embargo, algo chirría. Y es que este pequeño extracto de código dice mucho del programador:

  • O bien es novato y no tiene claros los fundamentos de programación como es, por ejemplo, definir un bloque condicional aprovechando el álgebra de Boole.
  • O bien, no es novato pero tiene poca experiencia programando o lo que programa es anecdótico. Sería la típica persona que dice: “yo programo en HTML”.
  • O bien, tiene experiencia programando pero no es muy bueno ni se ha preocupado en repasar el código y hacer refactoring.

No todo es la funcionalidad

Muchos estudiantes piensan que con que el programa haga lo que se pide es suficiente para obtener la máxima calificación. Obviamente es esencial que un programa se comporte como esperamos –a decir verdad, es lo mínimo que se pide–, pero no es lo único importante a la hora de evaluar una actividad académica. Tampoco es lo único imprescindible en un entorno laboral. De hecho, estoy convencido de que si en una entrevista de trabajo alguien escribe el código anterior, queda automáticamente descartado para el puesto (yo, al menos, no lo seleccionaría).

Que un código funcione (es decir, haga lo que se le pide), no quiere decir que éste podría estar escrito de una forma mejor. Por ejemplo:

La imagen tiene un atributo ALT vacío; su nombre de archivo es codigo-uoc-david-garcia-2.png

El código anterior es mucho más corto y sencillo de entender y, por consiguiente, de mantener en el futuro. Éste dice del programador que sabe los fundamentos de la programación y conoce el lenguaje en que programa. ¿Pero domina el lenguaje? Bien, veamos una versión más reducida del código visto:

La imagen tiene un atributo ALT vacío; su nombre de archivo es codigo-uoc-david-garcia-3.png

Este código nos dice que el programador ya tiene una cierta experiencia y conoce el lenguaje de programación que está utilizando a un nivel más avanzado (en este caso, suponemos que es Java). Pero, ¿qué nos dice el código siguiente?

La imagen tiene un atributo ALT vacío; su nombre de archivo es codigo-uoc-david-garcia-4.png

Nos dice que el programador se preocupa de estar al día de las novedades que se van incorporando al lenguaje. De hecho, el uso de yield en un switch es una funcionalidad incorporada en JDK 13 (septiembre de 2019) y ahora estamos en la release 14 (marzo de 2020).

Si un estudiante sigue pensando que lo único que importa es la funcionalidad, entonces es que algo no estamos haciendo bien. La calidad del software (i.e. uso de patrones, buenas prácticas, etc.) así como la actitud del programador (i.e. ir siempre a la vanguardia, tener en cuenta futuras necesidades, etc.) son igual de importantes (o incluso más) que la funcionalidad.

(Visited 45 times, 1 visits today)
Autor / Autora
David García Solórzano. Graduado superior en Ingeniería en Multimedia e ingeniero en Informática por la Universitat Ramon Llull desde 2007 y 2008, respectivamente. Es también doctor por la Universitat Oberta de Catalunya desde 2013. Desde 2008 es profesor de la Universitat Oberta de Catalunya en los Estudios de Informática, Multimedia y Telecomunicación. Actualmente es profesor responsable de las asignaturas “Diseño y Programación Orientados a Objetos” y “Diseño de Estructuras de Datos”, entre otras.
Comentarios
Deja un comentario