Sabes programar, pero no sabes informática
Todos tenemos que saber programar aunque no sepamos qué es un sistema de archivos. Programar empodera, pero saber cómo funciona un PC, parece que no.
Actualmente, en España no hay paro -prácticamente- en el sector tecnológico. La razón no es otra que falta gente, la que hay generalmente tiene condiciones decentes, y de formación específica no llega mucha gente. Es paradójico porque hay trabajo de sobra, pero no hay personal con la cualificación necesaria para dedicarse a ello.
Desde hace tiempo se han incentivado iniciativas planificadas para aumentar el interés de las personas, sobre todo, de las mujeres, para dedicarse a IT o a programar. También se incluyen iniciativas para aprender a programar. Programar no es un don, es una habilidad más, un oficio. Programar una aplicación como WhatsApp o Facebook no es solo cuestión de habilidad, porque en su desarrollo están involucradas miles de personas con funciones diferentes, y se iría a otro plano teórico en el que ya importan cosas como la eficiencia o los patrones de diseño.
Hay un mito muy extendido que es el de “todos necesitamos saber programar” o “todo el mundo debería programar”. Insisto en la idea de que programar no es más que decirle a un ordenador cómo quieres que resuelva un problema, con una serie de instrucciones que tú entiendes, y que él entiende una vez descifradas en forma de código máquina. No es un superpoder, ni algo por lo que deberías sentirte especial. Es un trabajo como otro cualquiera.
Me encuentro con perfiles de programadores o de gente iniciada en la programación, a los que les han dicho que aquí hay mucho trabajo y que no les va a faltar el pan, con escasos conocimientos de informática en general. Generalmente, me pasa cuanto más joven es el perfil. Los nacidos entre los 80 y el 2000 han tenido casi todos un PC en casa, han jugado a juegos de ordenador y conocen cómo funciona Windows. En cambio, los nacidos a partir del 2000, su primera experiencia con la informática no ha sido con un PC, sino con un móvil o tableta.
Nunca he creído en la bobada de los “nativos digitales”. Lo que sí que creo es que en móviles y tabletas hay una abstracción que te impide conocer cosas como:
Que los ficheros se encuentran en un sistema de ficheros
Que tienen formato (o es implícito, como en Linux/Mac)
Que la memoria no es infinita
Que existe una consola de comandos en prácticamente todos los sistemas operativos
Aunque estas cosas se enseñan en los grados y en la ingeniería informática, muchos de los que nos dedicamos ahora a cacharrear, cuando teníamos 14, 15 años, montábamos máquinas virtuales para crearnos un servidor PHP con el objetivo de hacer el tonto. Para hacer eso, naturalmente, necesitas un ordenador. Yo, que nací en los 90, en 2007 mi PC tenía capacidad más que suficiente para virtualizar Ubuntu sin quemarme la CPU. Hoy, un nacido en los 2000 podría virtualizarse un datacenter de los primeros dosmiles entero en su PC con la edad que yo tenía entonces, con tecnologías que hoy damos por supuestas, pero que en los primeros dosmiles estaban en bragas. Solo hay que comparar el JavaScript de hoy con el de 2007.
No me gusta ser un pollavieja y echarle la culpa a las nuevas generaciones de todo. Esto es tan antiguo como el mismo tiempo. Lo que sí que es cierto es que en las escuelas la informática que se enseña, conforme los sistemas operativos se han ido desplazando hacia la sencillez y la facilidad de uso, se han convertido más bien en aprender a usar una interfaz gráfica sin necesidad de comprender mínimamente lo que ocurre por debajo.
En muchos coles se enseña a los niños a programar con Scratch. Scratch es muy divertido y ayuda a los niños a pensar de forma estructurada, planificar y pegarse con los problemas de la programación. Pero que sepan programar con 8 años no les hace buenos informáticos. Si ahora le preguntas a un crío de 15 años si sabe lo que es un sistema de ficheros, una extensión de archivo o qué significa formatear el disco duro, probablemente solo te sepa responder la última sin mirar en Google. Porque en un móvil (que es lo que realmente tocas en tu día a día) no necesitas hacer nada de eso.
Cuando era pequeño, instalar un SO implicaba armarse de paciencia. Los procesadores eran lentos, la memoria escasa, y a veces tocaba intervenir vía línea de comandos, si el arranque no tiraba bien, pues tenías que meterle el disquete. Recuerdo que con 8 años mi padre instaló Windows Millennium en el PC de casa, y la instalación tomó casi 2 horas. Hoy rara es la instalación de un SO que lleva más de 30 minutos, y si es antiguo en una máquina virtual, quizá en 15 minutos la tienes resuelta. Por no hablar de que todo fallaba mucho más antes. ¿Se corrompía el disco duro, o se fragmentaba? A pasar el desfragmentador de disco o a formatear. ¿Copia de seguridad? Si tenías un pincho USB que superase el gigabyte eras un privilegiado, porque lo que más memoria tenía era el iPod (20 GB). Hoy tengo pendrives de 5 euros de 128 GB y SSDs de 1TB por menos de 100 euros. Era todo mucho más rollo, y te obligaba a bajar al barro de vez en cuando. Y si ya venías de la microinformática de finales de los 80 y principios de los 90, todavía era aún peor: una cinta de ZX Spectrum tardaba en cargar 5 minutos de reloj, y si tenías 128 kb’s de RAM eras el rico del barrio. ¿Sistema operativo? Los programas que tú te picases de las revistas o los que te grabaran en cinta.
Al igual que mis padres, si querían música, tenían que o bien rascarse el bolsillo para comprarse el Cassette o el vinilo, o bien poner una grabadora de Cassettes enchufada a la radio (comiéndose los anuncios de por medio, claro) para hacerse una copia bootleguera de malísima calidad, mientras que yo podía elegir entre comprarlo en iTunes canción por canción, o irme al P2P, esperar 14 horas a que una canción se descargase, y a veces encontrarte con sorpresitas como virus, troyanos, o porno indeseado. Cargar mi increíble MP3 de 512 MB (una capacidad notable para 2005, porque si querías algo más, tenías que dejarte los papeles en el iPod) con sus carpetitas de música organizada por géneros (la mayor parte era rap español), y un dineral en pilas. Eso, o “quemarte” un CD en el Discman, que si además te lo llevabas para correr o hacer ejercicio, te cargabas el disco y el Discman.
Los chavales hoy solo necesitan registrarse en Spotify.
Es evidente que sería indeseable volver a esos tiempos en los que nos complicábamos tanto para tener lo que queríamos gratis. Pero gracias a esas complicaciones, muchos aprendimos habilidades informáticas por el camino. Si aprendías a programarte tus scripts porque te molaba hacerte webs, eso que te llevabas. No obstante, creo que antes de saber programar, de picar Python, JS o cualquier lenguaje de moda, es más importante saber cómo funciona un puñetero ordenador. Sea Windows, Mac o Linux. Y me temo que cada vez más personas desconocen cómo funciona su PC porque ya no tienen necesidad de usar algo que no sea el navegador web o que se haga su teléfono móvil. Porque saber programar no implica saber de informática, y a las pruebas me remito. Y saber informática es una habilidad, de lejos, más útil, que la de programar.
El problema de la mayor incompetencia percibida de los "nativos digitales" lo he escuchado en otro foro: un amigo, profesor universitario en una escuela de ingeniería industrial prestigiosa, me comentaba que en su asignatura de Fundamentos de SW / Programación tenía constantes interrupciones porque la gente no era capaz de localizar los corchetes o las llaves en el teclado (!!!); no entendían que el lo que escribes en el IDE tiene que ir guardado en "algún sitio", que no se queda ahí sin más; les parecía extraterrestre el hecho de que el código fuente de un programa requiriera una cierta estructura de carpetas, y que no funcionaran las cosas tirando archivos donde sea; y esto sólo para comenzar.
Como indicabas, una causa probable son las interfaces tan pulidas y sencillas con las que interaccionamos todos a diario - para "ellos" son las únicas.
Con respecto a la solución, efectivamente deben irse a los Principios, como en cualquier oficio o materia. Pero creo que la mejor forma de entenderlos (sobre todo en el ámbito del SW) es mediante Project Based Learning: que el objetivo primario sea construir una aplicación (en su acepción más general) e ir despejando las carencias de conocimiento sobre la marcha, e ir pelando la cebolla a medida que lo vayas necesitando: especialmente hoy día, el signal-to-noise es muy bajo, y acercarse al SW con una estrategia top-down en lugar de bottom-up... me parece un error - imagina que tu primera toma de contacto con sistemas distribuidos es Designing Data-Intensive Applications, de Kleppmann (un libro 10/10, por cierto) en lugar del Quickstart de BigQuery + Cloud Run de Google Cloud Platform (cierto, estoy mezclando conocimiento de materia con un producto concreto, pero con esto refuerzo el enfoque finalista).
Fíjate, que al final todo esto es culpa de una buena ejecución de los conceptos de encapsulación y abstracción. Y que es un fractal: el usuario final que solo sabe usar una touchscreen; el ingeniero que sólo usa servicios serverless y nunca ha levantado una VM; el ingeniero que sólo usa Python y nunca ha programado en C.
Ahora bien, la clave aquí es saber dónde está uno mismo, en qué nivel. Y tener la humildad y capacidad de introspección de decir que si te has parado aquí, es o porque no has tenido tiempo, o porque no lo has necesitado aún.
Fin de la brasa.