Me encontré con este excelente artículo el día de hoy; habla de un tema con el que coincido completamente: la baja calidad de los ingenieros de software que egresan de las universidades y escuelas. El artículo está centrado en los Estados Unidos, pero a fin de cuentas la problemática existe en todos lados. En el artículo están las opiniones de Robert Dewar, un profesor emérito de la Universidad de Nueva York, sobre las razones sobre porqué el cree que la calidad de los ingenieros egresados ha decaído dramáticamente, cuales son las razones de tal cosa, y como se podría solucionar este problema. El problema básico que describe el artículo es que la gran mayoría de los ingenieros de software que egresan hoy en día son básicamente incompetentes; en ocasiones resulta impresionante ver la cantidad de cosas que desconocen los estudiantes de nivel de licenciatura, cosas que los maestros o instructores dan por sentado que deberían de saber. En particular tiene que ver con los programas de estudio de las escuelas, que no son lo suficientemente rigurosos, y peor aún, no promueven el pensar a fondo y la resolución de problemas.
Debo decir que soy maestro de ingeniería de software y de otras materias, como algoritmos; eso me da perspectiva del problema. Una muestra del mismo: durante la materia de algoritmos, en el primer cuatrimestre de la carrera, se les pidió a los alumnos que hicieran un algoritmo que calculase la suma de los cuadrados de los números impares desde 1 hasta 100. En algún punto un alumno escuché a un alumno preguntarle a otro “¿cómo se calcula el cuadrado de un número?“, y entonces fue cuando entendí que había un problema serio, de fondo, desde el principio. Si no se corrigen esos problemas, ¿qué clase de ingenieros vamos a tener en el futuro?
Los problemas en la formación
Uno de los puntos del artículo antes mencionado es que la inclusión de Java como lenguaje principal en las escuelas es uno de los factores que han llevado a la baja de la calidad, debido a que la gran mayoría de estudiantes sólo saben usar librerías ya hechas, pero no tienen ni la mas mínima idea de como funcionan o que pasa en dichas librerías. Es decir, pueden usarlas a la perfección, pero la gran mayoría de ellos no podrían hacer una; principalmente debido a que los programas de estudio actuales dejan a un lado materias como algoritmos, estructura de datos y otras más, mientras que las que si se llevan generalmente están mal enfocadas; en pocas palabras, no tienen los medios para hacer tal cosa.
A título personal no creo que el uso de Java sea nocivo; creo que un buen programador es un buen programador independientemente del lenguaje, y lo mismo para los malos programadores; si creo que es una mala elección como primer lenguaje, por lo mucho que esconde del funcionamiento de una computadora, y de un compilador como tal. Los más ingenieros recién graduados no tienen claro ni siquiera que es un compilador, a fin de cuentas, entre muchas otras cosas.
Mi apreciación es que muchos estudiantes de ingeniería actuales son mucho menos entusiastas que en el pasado; mucho de lo que desconocen está a su alcance, pero carecen de ese elemento básico del ingeniero, que es la curiosidad por conocer como funcionan las cosas, y mientras se conforman con lo que reciben en las aulas. Y las escuelas también tienen que ver en esto: en los Estados Unidos la cantidad de ingenieros matriculados en las escuelas ha venido a la baja, y estas, con tal de mantener la cantidad de alumnos, le han bajado de intensidad a sus programas de estudio con tal de que sean “llamativos” a más gente.
La actitud del aspirante a ingeniero
En general, la desinformación del ingeniero relacionado con las TI en general es alarmante; la gran mayoría (extremadamente cercana al 100%) no tiene conocimiento de las grandes obras en las diversas ramas: hablando en particular de la ingeniería de software, muchos ingenieros ni han escuchado hablar de The Art of Computer Programming de Donald E. Knuth, biblia indispensable para todo programador, no han leído jamás The Mythical Man-Month, ni siquiera EL artículo por excelencia de la ingeniería de software, “No silver bullet“, ambos de Frederick P. Brooks Jr.; si programan en C no tienen ni idea del libro de El Lenguaje de Programación C de Kernighan y Ritchie, considerada la biblia del lenguaje por todo programador de C que se considere medianamente competente, y muchísimos otros libros más de gran importancia que podría mencionar.
Un problema serio que yo he sufrido en carne propia es la nula capacidad para solución de problemas por parte de los alumnos: en un curso de Borland Delphi les pedí a mis alumnos que hicieran varios juegos, por equipos. Uno de los juegos era hacer un clon de buscaminas, el juego que trae Windows. Epílogo: no pudieron hacerlo. ¿La razón? no pudieron encontrar una solución (en código) a la forma en la que se van borrando las celdas sin bombas al hacer clic en una vacía. ¿Son tontos? no, para nada. Necesitaron de conocimiento en algoritmos y estructura de datos, y simple y sencillamente no llevaron las materias con el rigor necesario ni tuvieron el entrenamiento suficiente al inicio de su carrera, y ahora empiezan a pagarlo, y será peor cuando egresen, cuando tengan un trabajo donde seguramente les pedirán de todo; lo menos “peor” que les pedirán es un buscaminas.
Hay algo muy cierto, y es que no cualquiera sirve o tiene las aptitudes para ser ingeniero; y cito del artículo textualmente:
…se requiere de un cierto conjunto de inclinaciones y talentos, y es para estos para los cuales las escuelas deberían de preparar sus planes, y no para las hordas de gente semi-interesada que usa librerías preconstruidas para crear aplicaciones sin inspiración alguna.
Nada más cierto.
¿Cuáles son las posibles soluciones?
Se mencionan varias posibles soluciones al problema: entre ellas se mencionan dar más apoyo al estudiante pero uno a uno, aunque es difícil en las escuelas en la actualidad, principalmente porque no todos son maestros de tiempo completo y segundo porque hay muchos más alumnos que maestros; uno muy importante y con el que coincido ampliamente es el leer buen código escrito por buenos programadores; esto es crítico para aprender a programar, y algo que siempre trato de fomentar en mis alumnos.
Epílogo
Hay un punto al final del artículo que es muy interesante, y con el cual me identifiqué plenamente: muchos de los que nos metimos en programación lo hicimos porque nos pareció (y nos sigue pareciendo) divertido, nos gustan los retos intelectuales, y nos encanta que nos enfrenten con problemas complicados, y entonces crear un algoritmo para resolverlos. Todo eso nos parece divertido, y debo añadir, altamente gratificante. A este día, mi profesión me sigue pareciendo mi hobby.
Y les dejo esta reflexión, copiada textualmente, sumamente sencilla pero extremadamente poderosa, que yo no podría escribir mejor:
Si la gente encuentra aburrido calcular un valor interesante, luego correr ese programa y obtener un valor de 42 cuando debería de ser 83, y encontrar porqué se obtuvo 42 en lugar de 83, si se encuentra eso tedioso y aburrido, entonces no son la clase de gente que hace falta.
Amén.
0 comentarios:
Publicar un comentario