Blog de Orlando Alonzo

Comentarios sobre tecnología, redes sociales y cosas como desarrollo de software, libros y películas.

¿Quién mató al ingeniero de software?

Teclado

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.

17 Comments

  1. Muy buen articulo Doctor estoy de acuerdo con su punto de vista.

    No es malo el uso de herramientas que faciliten el trabajo , pero si antes no hay una correcta educación nos encontraremos con desarrolladores de muy mala calidad y software que resuelva a medias los problemas.

    Creo que hay muchos factores, alumnos sin vocación ni interés, planes de estudio que no ayudan a desarrollar un perfil, el uso de herramientas equivocadas para el aprendizaje, estoy de acuerdo que todo eso contribuye a que la calidad de los ingenieros vaya a la baja.

    El estudio de algoritmos y el desarollo de programas que usan un lenguaje de programacion como C++ o Pascal son heramientas que ayudan a que un ingeniero de software vaya entrenándose en la resolución de problemas.

    Aqui igual entra la vocación, si no tienes la vocación odiaras la programacion, curiosamente conozco a muchos Ingenieros en Sistemas que no saben desarrollar sistemas ni les gusta la programacion, entonces puedo concluir que se equivocaron de carrera.

    En muchos casos el desarrollo de software es semejante al ajedrez, para tener éxito debes considerar todas las opciones y la consecuencia futura que tendrán tus movimientos y qué se debe atacar primero para terminar con el problema. Aqui entra el ingenio, el esfuerzo mental y es donde muchos fallan por falta de vocación.

    Voy a mencionar un ejemplo ( sin nombre para que nadie se ofenda), hace unos años en la empresa donde trabajo se contrató a un programador para que hiciera un sistema para el control de cafeteria. El tipo en cuestión tenia dos años de haber egresado y tenía muy buenas ideas sobre el sistema, nos dijo que lo desarollaría en Visual Fox, y después de unos meses nos entregó el desarrollo final para que lo probaramos. Funcionó bien durante un mes, al siguiente el sistema empezó a volverse increíblemente lento cuando tratabamos de generar algun reporte.

    El programador nos dijo que lo iba a revisar, pero pasó otro mes y la cosa empeoraba y él no hallaba la cuasa del problema. Entonces le pedi el código que generaba los reportes para ayudarlo a revisar, y al checarlo me voy encontrando que todas sus búsquedas para los reportes las hacía secuencialmente!! Nunca usó SQL.

    Claro que la cafeteria tiene unas dos mil transacciones diarias que se guardan en las tablas (ni si quiera usaba base de datos) y el sistema, instalado en un CPU modesto, se colgaba cuando se deseaba algun reporte.

    Al preguntarle porque no usaba instrucciones SQL me respondió porque no estaba familiarizado , que el prefería desarrollar usando herramientas de ambiente gráfico y asistentes. ¿La conclusión? Se le despidió y se contrato a otra persona que si pudo terminar el trabajo.

  2. Muy buen articulo, estoy deacuerdo en todo lo que nos escribe el Ing. Orlando.

    Recuerdo que durante la carrera tuvimos maestros que nos decian “Tu programa funciona o no funciona, no hay de otra, 10 o 0”., Y muchos nos fuimos educando de esa forma, “habia que hacer que el programa funcionara, sea como sea pero que funcionara”., Y ahora que muchos trabajamos en empresas muy exigentes nos damos cuenta de algo: “Funciona? y que tal funciona? cuantos recursos consume? como esta hecho? es la mejor forma de hacerlo?”.

    No puedo negar que tambien tuvimos buenos maestros (como el ing. Orlando aqui presente) que nos ayudaron a abrir los ojos para ver mas allá de lo que nos habian enseñado, a darnos cuenta que hay mas de una forma de hacer las cosas y que nos mostraron no solo como hacer que funcionaran las cosas, sino como hacerlas funcionar bien.

    Saludos!

  3. Estoy de acuerdo con la idea general de tu Punto de vista, mas hay ciertos aspecto con los cuales no estoy de acuerdo, continuación tratare de plasmarlos, cin la esperanzas de hacerlo de la mejor manera posible.

    Primero quiero establecer que he leído con calma lo escrito aquí y lo escrito por Robert Dejar. Considero que solo es un ViewPoint (punto de vista), no tiene peso para ser llamado artículo.

    En lo muy particular, pienso que la devaluación educativa en todos los campos, y todos los niveles y es una realidad creciente. Si tomamos en comparación la edición que recibían nuestros padres a la educación que actualmente recibimos podemos notar diferencias sustanciales más no radicales.

    La devaluación académica nace desde los mismos planes académicos, técnicas y metodologías de enseñanza. Mas todo eso no lleva a pensar, acaso las escuelas tienen como objetivo producir a la misma calidad de alumnos??? , Las escuelas tiene las misma metas y propósitos????. Dejo estas preguntas en el aire, espero que les haga pensar un poco.

    Por otro lado me he percatado que hay “un tal para cada cual”, en software esta el software cerrado y el software abierto.

    Hay centros educativos que le dan un fuerte impulso a la alta dirección, alta gerencia. Hay centros educativos donde se preocupan por generar investigadores, donde se preocupan por los cimientos: No es lo mismo un ISC que un LI o un ISIC lo único que es igual es que es ese nivel todos son licenciaturas

    Alguna vez un Maestro me dijo “Si deseas resolver tu problema, has otra cosa diferente”, en otra ocasión me comento que el conocimiento no es instantáneo mas bien es un proceso de un poco mas lento el cual requiere de “incubación”.

    Por ultimo, siento que algunos centro educativos, pierden algunos puntos clave al reducir los ciclos escolares de semestres a cuatrimestres o a tetramestres. Ya que al reducir los tiempos dedicados a ciertas materias no logras cubrir con todos los aspectos de la misma, multiplica este factor por las N cantidad de materias que deberías llevar.

    P.D. Acaso dios juega a los dados.

  4. Excelente articulo de Robert DEWAR. …

    Es importante señalar, que el problema de la avaricia por tener mas matriculas en las escuelas afecta a todos los ramos de las licenciaturas e ingenierias, pero enfoquemonos al perfil del INGENIERO , como bien lo mencionan el Doc, es de ingenio y curiosidad por descubrir, entender y solucionar ese reto, fenomeno, o algun punto donde deseamos llegar. Sin duda alguna, es una realidad que crece y cada ves hay menos curiosos, menos investigadores, y más gente que le gusta que le den la comida en la boca.

    Bien lo decia un excelente maestro (el Ing. Chuc) que sean sinceros consigo mismos, que no eran aptos para la carrera, mejor se consiguiesen una placa de taxi o algo con que ganarse la vida

    el punto neural de esta reflexion, es hasta donde pudiese llegar las consecuencias de un mal elemento (un ingeniero de software), que por azares del destino, este en un lugar donde sea pieza clave para la resolucion a un problema que puede afectar a muchos otros procesos.

    no quiero imaginar que esto pueda pasar en un sistema de salud o de control de pacientes o algo por el estilo….

    no hay mejor trabajo que el que se hace por hobbie, y que mejor que te paguen por ello!, ya los problemas de la educacion en mexico, es bien sabido por todos, pero necesitamos heroes que nos den la pauta para tener como referencia y crecer, ser mejores y despues, insuperables.

    Doc, mi admiracion por Ud., es una gran oportunidad de la vida conocer a gente que inspira y que demuestra una entrega y pasion por lo que hace, ser la referencia, no del que quiere ser el mejor, si no la referencia del que quiere ser insuperable: Gracias.

  5. Es cierto todo lo que dicen aquí, las librerías nos han facilitado mucho las cosas en la programación, muchos progamadores ya no son capaces de crear sus propios métodos, lo peor de todo es que los maestros nos mal acostumbran a andar llamando métodos ya existentes, deberíamos empezar por programar mediante lenguajes de bajo nivel para así aprender mejor y despues ya seguir con los lenguajes de alto nivel

  6. hola, me parece q todos tienen muy buenos puntos de vista… y me encanto poder haber encontrado este lugar, puesto que espero alguien me pueda responder. Lo que sucede es que este es mi ultimo año escolar y quiero estudiar Ingenieria del Software, pero antes de eso desearia que alguien por favor me dijera que cursos basicos puedo tomar para estar bien preparado.

    muchas gracias.

  7. @Carlos Vargas:

    Sinceramente es una pregunta bastante difícil; en lo personal no conozco cursos básicos al respecto, pero te puedo recomendar que libros leer:

    The Mythical Man-Month, de Frederick P. Brooks

    Rapid Development, por Steve McConnell (y todo lo que encuentres de este autor)

    Software requirements, por Karl E. Wiegers

    Con esos tres tienes para empezar muy bien; sin embargo, la biblioteca de textos de Ingeniería de Software es *muy* extensa, escribir una bibliografía completa llevaría tiempo.

    Espero te sirva.

    ¡Saludos!

  8. Jose Villarreal

    abril 9, 2011 at 6:21 am

    Hola, soy estudiante de primer semestre de ingenieria de software, mi pregunta es si este es un buen plan de estudios.

    Plan de estudios
    http://www.fime.uanl.mx/plan%20401/ITS%20hoja%201.jpg

    Materias Optativas
    http://www.fime.uanl.mx/plan%20401/ITS%20hoja2.jpg

  9. Juan Alberto Gonzalez

    mayo 11, 2011 at 10:03 pm

    Hola, estoy por entrar a estudiar esta carrera, y no se si en realidad sea una buena opcion, me gusta mucho programar, pero, el problema es que veo que hay muchos tecnicos que segun hacen lo mismo que el ingeniero, es verdad eso?, no quiero estudiar la carrera, y no encontrar trabajo por esta razon. Mi otra duda es, si conoce alguna empresa en mexico dedicada a esto del desarrollo de software?

    De antemano muchas gracias, Saludos.

    Espero su respuesta

  10. @José Villareal:

    Al menos en papel luce bien, quizás hay regulares rellenos, pero bien, a secas. Claro, la realidad puede ser completamente distinta.

  11. @Juan Alberto González:

    Creo que hablas de dos cosas: por un lado, que si es una buena carrera, si lo es. Pero desgraciadamente eso es independiente de como forme una institución a sus estudiantes; hay cientos de escuelas que ofrecen carreras de “ingeniería” de esto o aquello, pero en la práctica ofrecen poco o nulo entrenamiento ingenieril.

    Por otro lado, y como consecuencia directa de lo anterior, el mercado está inundado de profesionistas balines que difícilmente podrían ser considerados ingenieros, y desgraciadamente si hay que combatir contra todos ellos, puesto que ofrecen servicios por un precio mucho menor, eso si, el 99% de las veces de muy mala calidad. Es una realidad que por cierto se da en ciertas carreras; en particular en la ingeniería en sistemas o carreras derivadas, este tipo de profesionistas son una plaga.

    Saludos.

  12. Pues hay jovenes entusiastas que ingresan a la universidad deseando ser unos verdaderos ingenieros, pero, a mitad del camino se encuentran con profesores que les hacen la vida imposbile, que solo llegan a armar grupos para que expongan en lugar de ser ellos quieren expongan una materia y generen talleres que hagan interesante la estadia de las horas de clase.
    Considero que no solo se debe ver esto del lado del estudiante si no tambien del lado del profesor que ni siquiera esta preparado para enseñar algoritmo o estructura de datos q son la base de los programadores.
    Ahora por otro el estudiante se siente frustrado y solo desea terminar la carrera por tener un titulo y terminan trabajando en temas muy lejanos a la ing. de software o de sistemas o informática como quieran llamarle.

  13. Buen articulo el original y muy buena esta reseña y reflexión.

    Pero me parece que el problema no es tan simple, o al menos en México se debe ver desde la realidad que tenemos en el país. La educación es deficiente desde el kinder, y no solo hablo de la educación publica.

    Creo que el problema radica en la forma en que aprendemos durante nuestro paso por las escuelas no es la adecuada para un programador, ya no hablemos para otras cosas.

    El problema es que no se nos enseña a pensar, a razonar lógicamente, no hablo a nivel ingeniería, si no a nivel básico. Se nos enseña a usar herramientas, pero no se nos enseña a pensar, nos “entrenan” para ser buenos técnicos pero no buenos pensadores. Pero pasa, como ya lo han mencionado en los comentarios anteriores, que empezando con los alumnos y siguiendo con los maestros, las clases las hacen de “hueva”; veamos las matemáticas desde primaria, (y lo he visto con mis hijos) todo se hace mecanizado, sin un propósito, no se les enseña el porqué de las cosas. Y así desde la primaria hasta la universidad, no se nos enseña a pensar.

    Ahora, viendo las carreras universitarias, aunque el plan de estudios parezca completo, para el mundo “real” muchas cosas son ya obsoletas. Si dejamos ese pequeño punto olvidado, nos encontramos con el choque de los “buenos” maestros y los “malos” estudiantes, obviamente también, los “malos” maestros y los “buenos” estudiantes. Bueno ya, dejando el sarcasmo de lado. La apatía en los alumnos no es cosa nueva, no les interesa aprender nada; mientras no se les saque de su comodidad todo esta bien y esto no es más el resultado de muchos factores incluido lo que mencionaba del “historial” académico, claro no se puede generalizar no todos los estudiantes son así. Ahora, la culpa no solo es de los estudiantes, tenemos también los maestros que si bien hay muchos con una sabiduría consistente no saben enseñar, no contagian del gusto de aprender. Y hay otros que tienen muy buenas intenciones pero desgraciadamente no dominan el tema.

    Yo creo que el problema no es el lenguaje que se enseñe, ya que diferentes lenguajes sirven para diferentes enfoques. La base de cualquier lenguaje de programación es la misma, la abstracción del pensamiento para convertirla en instrucciones que desempeñen un trabajo especifico para la cual fue diseñada.
    El problema esta en que faltan muchos maestros que sepan como transmitir el conocimiento y alumnos que estén dispuestos en aprender dichos conocimientos.

    Gustavo

  14. Excelente tu articulo, lo he compartido en mi FB, programar es un arte.
    La problematica en las universidades mexicanas es un tema que conduce y conducirá a peores situaciones:
    1) ya no se hace tesis, incluso en maestría
    2) solo les importa el indice de “eficiencia terminal”, para conseguir recursos
    3) estamos generando obreros calificados, digo certificados …
    4) probablemente ya no importa la calidad del egresado, ese es problema del que los contrate
    Comparto tus preocupaciones. Seguramente te puede interesar mi traducción de un articulo de Wiegers: http://campodeencinos.wordpress.com/2011/08/24/nos-vemos-en-la-corte-comentariostraduccion-del-original-de-karl-wiegers-en-construccion/

  15. Considero que una verdadera licenciatura en ingenieria en sistemas necesita ir refinando a los aspirantes desde el examen de admision, no solo durante la carrera, hay escuelas que no manejan el perfil del estudiante y esta realidad hace que haya mucha desercion escolar, son muy pocos estudiantes que tienen un verdadero coeficiente intelectual alto y ahi tenemos a muy pocos doctores que realmente se preocupan por esta realidad.

  16. Muy buen artículo. Estoy de acuerdo con casi todo. Sobre todo con la actitud que hay que tener y la vocación. Lo que no me parece lógico es buscar la parte negativa de Java en que hay muchas librerías y código hecho… cuantas librerías hay en C? Miles, millones? El lenguaje en sí, es algo totalmente estético. Saludos.

Comments are closed.