¿Hace falta la universidad para programar? Conversación con Andrés Arriaga
Éste fue el primer episodio con invitado. Andrés Arriaga estudia ingeniería en computación en el Instituto Tecnológico de Costa Rica y tiene su propio podcast, donde repasa uno por uno los cursos de su carrera para desmitificarla.
Cuarenta minutos que se me fueron sin darme cuenta. Aquí lo que me llevé.
Por qué eligió computación
Andrés lo tiene bastante claro, y me gustó que la primera razón no fuera técnica:
Es un estilo de vida que va mucho conmigo. Es mucho de estar en un mismo lugar, tranquilo, hablando con personas acerca de ideas, acerca de solucionar problemas, creando soluciones. Es algo muy creativo pero sin necesidad de estar conectando circuitos o dañándose las manos o estando al aire libre.
Y luego, sin rodeos: además de que paga muy bien.
Me identifiqué con la parte de los circuitos. Yo soy ingeniero en biónica, no estudié computación ni sistemas, y también tuve materias de electrónica. No las odié, pero costaba bastante trabajo estar ahí conectando circuitos para que todo saliera.
Los algoritmos ya estaban en su vida
Antes de la universidad, Andrés no había programado formalmente. Pero:
El mismo concepto de algoritmo está en todos lados. Está en una receta de cocina. Es una serie de pasos que uno tiene que seguir, uno lo puede repetir, es escalable, es finito, da un resultado.
Su verdadera puerta de entrada fue Minecraft, y específicamente el redstone:
En redstone son como circuitos, básicamente. Usted puede hacer circuitos, puede crear diferentes mecanismos, y es como activar esa forma de pensar de cómo es que una cosa afecta a la otra, cómo una entrada va a obtener una salida y viceversa. Uno va pensando en cómo programar un mecanismo, pero en 3D y en un juego.
A mí me pasó parecido con los videojuegos. Es casi siempre la misma curiosidad la que te lleva: cómo funciona esto, qué es lo que está detrás.
Lo hermoso y lo horrible
Le pregunté qué le gusta y qué no de programar, y la respuesta tiene las dos mitades bien separadas.
Lo hermoso:
Es precioso cuando uno sabe hacer todo, cuando todo le sale de la primera, cuando uno sabe exactamente lo que está haciendo. Usted nada más tiene que crear. Nada más crea, piensa, imagina y ejecuta.
Lo horrible:
Una vez que uno tiene que buscar información que no sabe, nuevas tecnologías, cómo conectar, cómo hacer cosas nuevas con las que uno no está cómodo o nunca ha experimentado, ahí es donde hay que sacar el rato, sacar el tiempo de sudar la gota. No fluye como uno lo espera. Como en las películas.
Eso me recordó ese programa de Linux que llenas la pantalla de texto corriendo y parece que estás hackeando algo. La imagen que la gente tiene de programar contra la realidad, que es un bloque de texto quieto.
Su proyecto favorito: un mini YouTube
El final del curso de Principios de Sistemas Operativos, el semestre anterior: un mini YouTube.
Un servidor con videos —la base de datos, entre comillas, era realmente una carpeta— y clientes que se conectan, piden videos y los reproducen. Y además, un cliente de pruebas de estrés: un programa que crea muchos hilos de clientes conectándose todos casi al mismo tiempo, para ver hasta dónde aguanta.
Lo que me gustó fue el resultado final. Fue verlo en acción. Fue como: wow, realmente así es como se hace algo. Muy primitivamente un YouTube.
Dónde se siente cómodo: bases de datos
Andrés se va hacia bases de datos y análisis de datos, y explica bien por qué es un modo de pensar distinto:
Programar en ellas no es tan parecido a un lenguaje imperativo como python o a uno orientado a objetos como Java. Hay que pensar bastante en cómo se diseña una base de datos y cuáles son los queries para esa base de datos, cómo puedo agarrar toda la información de la manera más eficiente posible.
Y lo que le gusta: que se conecta con todo. Le metes Java, le metes python, con una base de datos adherida. Con bastante poco esfuerzo relativamente.
Ahí discrepamos: a mí las bases de datos son lo que más trabajo me cuesta. Me gusta más ver las cosas en movimiento, pensar en la estructura y en cómo se relacionan.
Curiosamente lo más difícil para él también fueron bases de datos —las no relacionales— y las estructuras de datos al principio, cuando les pusieron un proyecto muy fuerte antes de que él entendiera bien qué era una estructura de datos.
Debugging
Le comenté esa regla que dice que necesitas el doble de capacidad para depurar un programa que la que usaste para escribirlo —así que si programas a tu máximo, es imposible corregirlo. Su respuesta:
Debugar tiene su propia ciencia y su propia arte. Hay que tener experiencia. Es lo que aquí llamamos colmillo: si usted lleva tiempo programando, va a saber exactamente dónde falló o por dónde va el error.
Lo que la escuela no te enseña
Ésta fue la mejor parte de la conversación, y le dediqué su propio texto, porque son dos cosas y las dos son detonantes:
Saber investigar. Muchos profesores en la universidad dan por un hecho que usted ya sabe investigar.
Nunca rendirse. Con una historia de ping pong, una frase de su papá sobre el boxeo, y unos quizes cronometrados donde varios de sus compañeros se quebraron.
¿Y la universidad?
La pregunta del episodio. Su respuesta:
Para nada. No es para nada necesario ir a la universidad para aprender a programar. Hay increíbles y excelentes programadores que salen de lugares como los coding bootcamps, y son muchísimo mejores que gente que sale de las mejores universidades.
Cita el canal Engineering Truth, de Matt Tong, que entrevista a gente que salió de la academia para preguntarles cómo es realmente el trabajo. Y el argumento que le convenció: cuatro años de carrera contra tres meses intensivos de bootcamp para conseguir un puesto de developer, aunque sea básico. En esos meses tenés tanta experiencia porque estás metiéndole mucho esfuerzo, y luego en un año estás casi como mid-level.
Pero con un matiz importante:
Ahora bien, si uno quiere especializarse a profundidad en ciencias de la computación, en ingeniería de software, en administración de proyectos, yo diría que una de las rutas más acertadas, más pavimentadas, es la universidad. Pero no para programar. Para programar uno lo puede estar haciendo desde ya. Lo que ocupan es esfuerzo, nada más. Querer, las ganas.
Por dónde empezar desde cero
Si no sabes absolutamente nada —si sólo sabes que existe un mouse, una computadora y un monitor— su ruta es concreta, y termina en una imagen que se me quedó: la semillita.
Su podcast, y un problema de traducción
Andrés hace Computer Science / Software Engineering College Courses Review Podcast: va curso por curso de su carrera, los describe, da recomendaciones, dice qué hacer y qué evitar.
Y de paso menciona algo interesante: "ingeniería en computación" no se traduce bien al inglés. Computational engineering sugeriría hardware, cuando su carrera es software: una combinación entre ingeniería de software y ciencias de la computación, que son dos áreas de conocimiento bastante marcadas y distintas.
Su objetivo es desmitificar: las cosas que se ven muy abrumadoras, como son cuatro años, y computación cuántica y no sé qué cosas. Quiero explicarle a la gente que no es nada del otro mundo.
Le dije, y lo mantengo, que espero copiarle parte del estilo. Da un buen mapa de lo que pasa en un curso y lo explica muy sencillo, con ejemplos claros. A mí a veces se me nota que me trabo al explicar; con él fluía.
Y sobre IA
Le pregunté, a partir de Principios de Ray Dalio, si deberíamos dejarle las decisiones a una inteligencia artificial.
Su postura, resumida: la IA va a volverse casi un estándar en la industria, y quien salga de la universidad va a necesitar buenas bases. Coincide con la preocupación de que las grandes empresas la monopolicen, pero también piensa que es propiedad intelectual legítima, y que el trabajo de una empresa le da a otras una referencia para hacerlo mejor.
Su horizonte era de diez a veinte años para ver algo notablemente más inteligente, quizá con cómputo cuántico de por medio. Por el momento no lo veo como una gran amenaza.
Esa parte, leída hoy, envejeció rápido. La dejo tal como la dijo.
Este texto sale del episodio 012 del Podcast Algoritmos, una conversación con Andrés Arriaga.