¿Por qué la mayoría de las universidades de informática no están al día con las tendencias de la industria?

Debemos distinguir dos respuestas.

(1) La primera respuesta es que la informática se trata de algunas ideas de alto nivel, y que los detalles no importan, ya que se pueden aprender “en el trabajo”. Es una racionalización. Citar a Knuth como ejemplo de este pensamiento realmente está pervirtiendo el trabajo de Knuth. Esto es lo que Knuth dijo sobre la educación en informática:

“Las personas que descubren el poder y la belleza de las ideas abstractas de alto nivel a menudo cometen el error de creer que las ideas concretas en los niveles inferiores son relativamente inútiles y podrían ser olvidadas. (…) por el contrario, los mejores informáticos son completamente basado en conceptos básicos de cómo funcionan realmente las computadoras, y de hecho que la esencia de la informática es la capacidad de comprender muchos niveles de abstracción simultáneamente “.

De hecho, Knuth pasó mucho tiempo en detalles concretos, implementando TeX, por ejemplo. Por supuesto, que yo sepa, Knuth no pasó mucho tiempo jugando con Visual Basic. Pero diría que si hubiera estado interesado en diseñar interfaces de usuario, debería haber aprendido Visual Basic.

Es una excusa o una racionalización demasiado común decir que debemos centrarnos en las grandes ideas y que los detalles como el hardware o el lenguaje de programación son irrelevantes. No son.

La física es la misma en todas partes, sin embargo, los físicos insisten en hacer experimentos costosos en entornos difíciles. Del mismo modo, resolver problemas de juguetes utilizando software de juguetes no es lo mismo que resolver problemas reales (similares a la industria) con herramientas reales.

(2) La segunda respuesta es que seguir las últimas tendencias es una pérdida de tiempo. Eso está muy bien fundado.

Pero eso es completamente cierto donde quiera que vaya. No solo es cierto para las universidades, sino también para los profesionales. Muchas personas crean excelentes aplicaciones web con una arquitectura de software basada en LAMP que tiene al menos más de diez años.

La gente, en la industria, todavía usa el motor TeX de Knuth. Porque aún no está obsoleto. Y, francamente, Knuth es muy sabio para diseñar software que pueda resistir el paso del tiempo. Pero todos los programadores deberían apuntar a construir dicho software. Y de hecho, muchos lo hacen. Gran parte del software que usamos hoy fue escrito hace décadas.

El iPad podría ser el último juguete, pero las personas crean sus aplicaciones utilizando un lenguaje antiguo (Objetivo C) que ejecuta un compilador bastante convencional (clang).

Conclusiones:

(1) Los informáticos, y especialmente los que enseñan informática, deben preocuparse por las ideas concretas de bajo nivel. Y estas ideas requieren que nos ensuciemos las manos. Aprender el modelo relacional no es lo mismo que aprender SQL. Y aprender SQL es útil por derecho propio (y no solo para aplicaciones).

Entonces, si las computadoras funcionan con tarjetas perforadas, debe aprender sobre las tarjetas perforadas. Si están programados en C, debe aprender sobre C. Si están programados en algún lenguaje revolucionario nuevo, entonces necesita aprender sobre este nuevo lenguaje revolucionario.

Los profesores y profesores que no se adaptan son simplemente vagos o incompetentes.

(2) Nadie debería preocuparse indebidamente por las últimas tendencias. No sienta que tiene que adquirir la última tecnología que Microsoft está impulsando. Puede experimentar por diversión, pero antes de invertir un tiempo considerable en una nueva tecnología, asegúrese de que haya demostrado su eficacia. Y no necesita aprender sobre cada variación de una idea.

¿No estoy seguro de lo que quiere decir con “tendencias de la industria”? No he estado en una universidad que no tenga expertos que trabajen en áreas mayormente activas, compitan directamente con la industria o trabajen con ellos.

Ahora mi respuesta es más científica. La informática como disciplina no es lo mismo que la práctica en la industria. ¿Creo que los “aspectos prácticos” de un programa de grado deberían tratar de estar a la altura de los estándares de la industria? Sí. Pero el campo en sí es fundamentalmente una ciencia matemática de nicho que colabora con varios campos que se destaca por sí mismo fuera de la industria (donde participan partes de la academia y la industria). No creo que debamos desdibujar la línea entre la verdad y lo que las empresas piensan que es rentable para los estudiantes. Debe ser un discurso estrictamente académico donde estudiemos Ciencias de la Computación. Respeto a las universidades que eligen hacer esto.

¿Cómo podemos cambiarlo? Honestamente, hablando como alguien que entiende el proceso de cómo los cursos universitarios cambian o se actualizan, los cursos de nivel inferior no son tan flexibles y no espero que haya mucho espacio para cambiar las cosas porque ¿adivina qué? Esos estudiantes necesitan los fundamentos. Las únicas oportunidades para mejorarlos son actualizar la forma en que practican para llevar a cabo cosas como tareas o los lenguajes de programación que aprenden. Es más adecuado introducir tendencias más actuales en la investigación hacia el final de una licenciatura. Esto se debe a que las tendencias cambian con el tiempo, y los aspectos anteriores de un programa deben ser elementos sólidos y rígidos que representen los fundamentos, la teoría o las aplicaciones del campo.

¿No son ellos?

He descubierto que los profesores de CS generalmente están en sintonía con la industria y les enseñan a los estudiantes sobre conceptos fundamentales que serán útiles en una carrera de desarrollo de software. Pero su trabajo no es ser los propios desarrolladores de software.

Un desarrollador de software y un profesor de CS son dos trabajos muy diferentes que requieren un conjunto de habilidades muy diferente. La mayoría de los profesores de CS no serían buenos desarrolladores web, pero la mayoría de los desarrolladores web tampoco serían buenos profesores de CS.

Si los profesores de CS tuvieran que adquirir todas las habilidades de un ingeniero de software moderno, no tendrían tiempo para hacer su trabajo, que es investigar y enseñar a los estudiantes las teorías fundamentales de la informática.

Aprender a usar un marco JavaScript complicado es totalmente exagerado para un profesor de CS. Además, estos marcos cambian todos los meses de todos modos. Es mucho mejor para el profesor conocer la teoría detrás de la red mundial y las tecnologías que no están cambiando en el corto plazo, como HTML.