Considere las dos palabras informática y ciencia. Los regalos de la primera al mundo son enormes y van desde la ubicuidad de los registros médicos electrónicos que salvan vidas hasta la oportunidad de entrar en una pelea virtual en un bar a cualquier hora del día en Twitter. La segunda palabra, ciencia, representa un movimiento intelectual que ha aportado grandes avances como la vacuna contra la polio, algunos viajes a la luna y demasiados otros para enumerarlos. Entonces, ¿por qué la combinación de las dos palabras en informática se queda tan corta, especialmente cuando buscamos personal para nuestros equipos de programación?
No es que el campo no haya cumplido. Hay petabytes de archivos LaTeX por ahí llenos de ideas brillantes como nuevos lenguajes de programación, algoritmos de búsqueda inteligentes, algoritmos de visión artificial y un gazillón de nociones intermedias. Muchas de ellas son maravillosas.
El problema es que pocos de nosotros necesitamos realmente gran parte de ellas. Un amigo me confesó que ha visto florecer un equipo de desarrollo pasando por encima de los licenciados en CS y contratando sólo a físicos, contables o algún otro tipo de persona experta en matemáticas. Estos nuevos empleados son más prácticos y se centran en conseguir que las máquinas cumplan su cometido, que es más o menos lo que quieren hacer casi todas las empresas.
No es que los licenciados en CS sean malos; es sólo que no van a hablar de los problemas que la mayoría de nosotros necesitamos resolver. Así que aquí hay una lista bastante incompleta de por qué puede ser mejor ignorarlas.
La teoría distrae y confunde
Muchos informáticos son matemáticos de corazón y la mentalidad obsesionada con los teoremas impregna la disciplina. Un teórico me dijo que todas las pruebas matemáticas son en realidad programas y viceversa, al menos en su mente. En realidad, no le interesa tanto entregar un código que haga el trabajo como demostrar que su código es correcto. Vale.
Es raro que un estudiante de CS se gradúe sin recibir una buena dosis de NP-completitud y máquinas de Turing, dos hermosas áreas de la teoría que serían agradables si no acabaran creando malos instintos. Un biólogo me pidió que resolviera un problema de comparación de secuencias de ADN y le contesté que era NP-completo, una clase de problemas que puede llevar mucho tiempo resolver. No le importó. Tenía que resolverlo de todos modos. Y resulta que la mayoría de los problemas NP-completos son bastante fáciles de resolver la mayor parte del tiempo. Sólo hay unos pocos casos patológicos que estropean nuestros algoritmos. Pero los teóricos están obsesionados con el conjunto delgado que confunde a los algoritmos simples, a pesar de que rara vez se observa en la vida cotidiana.
El mismo problema ocurre con las máquinas de Turing. Los obedientes estudiantes de CS aprenden resultados nihilistas como el Teorema de Rice, que demuestra que realmente no podemos analizar los algoritmos informáticos en absoluto. Pero las máquinas de Turing son un modelo bastante malo para el funcionamiento de nuestras máquinas normales y a menudo es muy fácil crear software que haga cosas inteligentes con nuestro código. Cualquier estudiante de CS que no se tome estos resultados teóricos con una buena dosis de sal se arriesga a abandonar cuando una respuesta perfectamente utilizable está a mano.
Los lenguajes académicos se usan raramente
No debería sorprendernos que la academia engendre esnobismo y amor por las soluciones arcanas. Lo hace en todos los campos. Cuando le pregunté a un graduado del MIT cuál era su lenguaje favorito, me dijo con orgullo que estaba seguro de que no tenía ni idea de cuál era. Sólo después de insistir un poco, cedió y me dijo que era CLU. Tenía razón.
Hay muchas ideas geniales por ahí de los obsesionados con los lenguajes, pero a veces estas ideas acaban creando desorden y confusión. Si a un miembro del equipo le encanta alguna característica extraña y empieza a incluirla en la base de código, todos los demás van a tener que aprenderla. Si todo el mundo hace lo mismo, el tiempo para ponerse al día es brutal.
Por eso Google eligió el camino bajo cuando construyó Go. Sus creadores insistieron en que el lenguaje debía tener pocas construcciones y ser sencillo de aprender en el menor tiempo posible. Esta simplicidad ayudó a todo el mundo porque todo el mundo conocía muy bien este núcleo.
Muchos profesores de CS son matemáticos, no programadores
Uno de los secretos sucios de la mayoría de los departamentos de informática es que la mayoría de los profesores no saben programar ordenadores. Su verdadero trabajo es dar conferencias y gestionar subvenciones. Entienden de hojas de cálculo y de propuestas de subvención, no de hacer investigación. Por eso Dios les dio estudiantes de posgrado. La última vez que muchos de ellos programaron realmente un ordenador fue cuando ellos mismos estaban en la escuela de posgrado. Desde entonces, la podredumbre de los bits y las telarañas se han instalado y los compiladores de sus máquinas probablemente no arrancan.
Muchas asignaturas obligatorias apenas se utilizan
Las estructuras de datos suelen ser el tema principal del segundo curso que los estudiantes toman en informática. Es una pena que ya pocos usemos muchas estructuras de datos. O bien metemos las cosas en tablas hash de objetos o las metemos en una base de datos que piensa por nosotros. Sigue siendo bastante útil para todos pensar un poco en la complejidad algorítmica, pero muy pocos necesitan preocuparse por los árboles B o incluso por las listas enlazadas. No sólo eso, sino que muchos de nosotros nos hemos dado cuenta de que es mejor confiar en una biblioteca estándar que toquetear nosotros mismos las estructuras de datos. Es demasiado fácil cometer errores. Muchas organizaciones prohíben explícitamente las estructuras de datos propias con buenas razones.
Hay cualquier número de otros ejemplos de temas en el plan de estudios clásico que simplemente ya no son tan importantes. Los compiladores son complejos y esenciales, pero los únicos que los escriben son los estudiantes que se ven obligados a crear versiones de juguete en un curso semestral. Incluso Apple utilizó herramientas de código abierto de stock cuando creó el compilador para Swift.
Los modelos matemáticos nos llevan por el camino equivocado
Cualquier persona que haya aprendido teoría de bases de datos ha descubierto la ingeniosidad de la Forma Normal de Boyce-Codd, la forma en que descomponemos una estructura de datos elaborada en pequeñas tablas. Todo es muy elegante y eficiente – hasta que esperas eternamente una respuesta a tu consulta SQL llena de comandos JOIN.
La mayoría de los equipos de desarrolladores aprenden rápidamente a «desnormalizar» sus bases de datos para mejorar el rendimiento. En otras palabras, quitan toda la inteligencia y meten los datos en una tabla enorme. Es un poco feo y derrochador, pero a menudo es tremendamente rápido. En cuanto a la hinchazón, el espacio en el disco es barato.
Una vez que empiezan a poner en práctica su educación, muchos desarrolladores pasan unos cuantos años desaprendiendo toda la inteligencia matemática de sus cursos de CS.
Las instituciones engendran arrogancia
Todos pensamos que tenemos razón, pero la propia naturaleza de los títulos académicos está diseñada para dar a los graduados la capacidad de argumentar su superioridad con autoridad. Esto puede ser cierto a veces, pero incluso en los mejores días es difícil saber lo que es realmente correcto, especialmente en un campo que se mueve rápidamente.
Una persona con la que trabajé adoraba los «estándares de codificación» que trajo al departamento y le encantaba cada oportunidad de citar los estándares durante la revisión del código. Estos estándares eran opiniones quisquillosas sobre dónde colocar los espacios en blanco, pero una vez que empezó a hablar de ellos con precisión académica, empezó a blandirlos como garrotes en las revisiones de código. Señalaba el código con espacios en blanco diferentes con la ominosa afirmación de que el código no cumplía las normas. Y así nos quedamos todos contando espacios para que todo se ajustara a un estándar casi académico.
Muchas habilidades modernas son ignoradas
Muchas de las habilidades modernas simplemente no están cubiertas en muchos departamentos. Si quieres entender Node.js, React, diseño de juegos o computación en la nube, encontrarás muy poco de ello en el plan de estudios promedio. La lista de cursos de una escuela media se concentra en los fundamentos, es decir, en conceptos profundos como las condiciones de carrera que formarán parte de la computación mucho después de que se olviden palabras como Node.js o React. Ese es un objetivo noble, pero el 99 por ciento de lo que hacen la mayoría de los programadores es luchar con la idiosincrasia de la palabra de moda actual du jour.
Es muy común que los departamentos de ciencias de la computación produzcan pensadores profundos que entienden algunos de los desafíos fundamentales sin ningún conocimiento superficial de los detalles que dominan el día del empleado promedio. Por eso las empresas encuentran igual de interesante contratar a alguien de un laboratorio de física que acaba de utilizar Python para masajear algunos flujos de datos de un instrumento. Pueden aprender los detalles superficiales con la misma facilidad que el genio de la informática.
La vanguardia académica tarda en llegar
El aprendizaje automático y la inteligencia artificial están de moda y muchos se apresuran a experimentar con ellos. Pero llevan décadas siendo estudiados por los departamentos de CS. ¿Tiene sentido investigar todas las ideas que emanan de las escuelas hoy en día – o esperar pacientemente hasta que finalmente estén listas para su uso generalizado?
La titularidad puede engendrar complacencia
Hay muchas razones maravillosas detrás de la institución de la titularidad y la mayoría de los profesores que disfrutan de sus protecciones merecen plenamente todos los beneficios por sus contribuciones de antaño. El problema es que, en los campos que evolucionan rápidamente, los estudiantes de hoy en día tienen poca necesidad de los conocimientos de hace una década o más. Sin embargo, la titularidad garantiza que muchos de los profesores habrán pasado diez, veinte o incluso treinta años de los días en los que tenían los mayores conocimientos.
Y luego están las distracciones que pueden alejar a los profesores. Un genio titular parece escribir en su blog sin cesar sobre los diversos torneos de póquer y las malas rachas que le enviaron a casa. Otro ha invertido en un equipo de béisbol de ligas menores y se jacta de salir con los peloteros y de follar pelotas mientras hacen prácticas de bateo.
El intelectualismo rara vez produce resultados
Cuando le conté a un profesor titular que uno de mis alumnos había conseguido un trabajo gracias a unas cuantas charlas sobre Angular y React, sonrió y dijo: «Lo último que quiero hacer es convertir esto en una escuela de oficios.»
Eso está bien, pero no hay tantos que puedan justificar el gasto de cerca de medio millón de dólares en preguntarse si los ángeles polinómicos o exponenciales pueden bailar en la cabeza de un alfiler. La tradición de las artes liberales es algo maravilloso, pero fomenta el desprecio por el conocimiento práctico. Se trata de unas verdades profundas y eternas. Pero cuando tu empresa tiene que enviar algo la semana que viene antes de la fecha límite, nadie tiene tiempo para mirarse el ombligo y preguntarse por las verdades eternas.