¿Que qué es un «políglota»? Pues según el diccionario, ¡es la capacidad de conocer varios idiomas! Entonces, ¿cómo te conviertes en un «políglota»? Hablas con Erik Schierboom y te enteras de todo de primera mano.
Jonathan: Bueno, hola a todos y bienvenidos al podcast o al directo de Exercism. Me llamo Jonathan y tengo el privilegio de ser vuestro anfitrión hoy. Me acompaña Eric, que forma parte del equipo de Exercism y lleva implicado varios años. Si has estado en el ecosistema de Exercism en algún momento de los últimos años, es muy probable que te hayas cruzado con Eric en algún punto. Pero, Eric, es genial tenerte en el programa de hoy. Me hace mucha ilusión descubrir un poco más sobre tu historia, cómo acabaste en el mundo de la tecnología y algunas de tus opiniones sobre distintas cosas del sector. Pero antes de que nos sumerjamos demasiado en todo eso, me encantaría que te presentaras y nos dieras un poco de contexto, un poco de tu historia sobre cómo acabaste donde estás ahora.
Erik: Claro. Sí. Es genial estar aquí. Soy Eric, como probablemente ya has mencionado. Vivo en los Países Bajos. Nací allí, así que he vivido aquí toda mi vida. Cuando era... empecé a pensar en cuándo fue la primera vez que hice algo de verdad con ordenadores. Y creo que debió de ser una consola NES. Jugando a Mario. Y eso me enganchó. Sí, era genial. Y también muy frustrante, porque los juegos de entonces no tenían piedad.
Jonathan: No tenías puntos de guardado, etc., así que a empezar de nuevo y desde el principio.
Erik: Bueno, depende de si vivías en Estados Unidos o en el resto del mundo, porque en realidad había dos versiones distintas. Pero sí, creo que abrías la ranura de delante y metías los discos o lo que fuera, los cartuchos. Y eso me encantaba, me encantaba de verdad. Nosotros no teníamos una NES, pero yo tenía un par de amigos que sí. Así que iba a su casa con regularidad a jugar, y había muchísimos juegos geniales con los que jugaba, y también juegos frustrantes. Pero era algo buenísimo. Y eso fue lo que me enganchó. Creo que así es como se enganchan muchos programadores a intentar ser programadores: solo por querer crear un juego. Lo pensé. Aunque, spoiler, nunca lo hice. No soy desarrollador de videojuegos. Vale. No, no, no. Pero esa fue la razón por la que empecé a aficionarme a los ordenadores. Y luego mi padre tuvo un accidente antes de que yo naciera. Quedó paralizado por debajo de los hombros. Así que iba en silla de ruedas. Pero siempre estaba en casa. Y eso era genial. Tenía un padre que estaba en casa las 24 horas del día. Así que siempre era genial llegar a casa. Y a él también le gustaban los ordenadores. Así que en algún momento, creo que yo tendría unos 10 años o algo así, consiguió este ordenador que no era nada lujoso. Creo que era un X286. Era en blanco y negro y tenía MS-DOS instalado. Y podías jugar. Había muchísimos juegos, y conseguí algunos juegos de mis amigos, y tenían que imprimir todas las hojas con las contraseñas para poder arrancar los juegos de verdad, porque tenían protección por contraseña. Era como el manual. Ahora no te saldrías con la tuya con eso. Pero en aquella época sí. Y me encantaba jugar a esos juegos, pero también me encantaba intentar averiguar cómo funcionaban. Y rompí mi ordenador. Ni siquiera recuerdo cuántas veces. Tenía este servicio de asistencia, que era el padre de un amigo mío que era muy bueno con los ordenadores. Y cada vez que rompía mi sistema, lo llamaba y él era muy amable y venía a casa a ayudarme a arreglarlo. Pero todavía me acuerdo de estar en modo pánico cuando me daba cuenta de que no podía salir de ese problema. Pero aprendí mucho de aquello.
Jonathan: ese problema. Pero aprendí mucho de aquello. En un disquete, y me acuerdo de estar ahorrando para esa cosa durante años y luego meterlo, y simplemente no cargaba nunca en esos pequeños disquetes. Así que esa fue una de mis grandes frustraciones. Creo que nunca llegué a averiguar cómo arreglarlo. Pero ¿los juegos venían en disquetes y tenías que... conseguías un cartuchito donde los metías y los cargabas y todo ese tipo de cosas?
Erik: Nunca.
Jonathan: Ya.
Erik: Sí, a veces tenías varios disquetes. Así que sí, en realidad fue una gran época. Y me encantaba el MS-DOS y simplemente averiguar qué podía hacer. Y luego descubría qué no podía hacer. Así que sí, era genial.
Jonathan: Sí, era genial. ¿Y ella entonces trabajaba a jornada completa? ¿Y tu padre estaba en casa?
Erik: No, mi madre cuidaba de mi padre a tiempo completo. Necesitaba muchos cuidados. Al principio podía moverse con las manos y más adelante podía usar la barbilla, porque sus manos empezaron a deteriorarse un poco y tenía menos control. Pero ella lo cuidaba a tiempo completo. Así que mis padres siempre estaban en casa. Para mí era muy raro ir a casa de otras personas cuyos padres trabajaban. Llegaba el final del día y los padres todavía no habían vuelto. A mí eso me parecía muy raro. Pero bueno, era simplemente una situación distinta.
Jonathan: A mí eso me parecía muy raro. ¿Así que solo estabas tú?
Erik: Sí, tengo una hermana. Es tres años menor que yo. Nadie diría nunca que somos hermanos. Somos muy distintos. Antes me peleaba mucho con ella, pero ahora nos llevamos fenomenal. Así que acabó bien. Vale. Y a ella no le gustaban los ordenadores, así que no me invadía el tiempo de ordenador.
Jonathan: Pero nos peleábamos a menudo por el ordenador. Ella quería jugar a Los Sims y yo quería jugar a SimCity o lo que fuera. Así que siempre estábamos a la greña desde ese punto de vista.
Erik: Adiós. Sin duda me gusta mucho más la elección de SimCity. Pero no, ella nunca se interesó de verdad por los ordenadores. La única forma en que conseguí que se interesara fue cuando tuve una SNES, la Super Nintendo, y teníamos Mario Kart. Y a ella sí le gustaba Mario Kart, así que jugábamos mucho juntos al Mario Kart. Por supuesto, yo siempre ganaba porque había practicado mucho más, pero a ella le seguía gustando.
Jonathan: ¿Así que todavía te gusta trastear? Sí, MS-DOS, si no me equivoco, es un entorno bastante de bajo nivel. Sí. Así que probablemente bastante de bajo nivel. Sí, sin duda. Y entonces, ¿cuántos años tenías cuando trasteabas con ese sistema?
Erik: Vale. Bastante de bajo nivel, sí. Sin duda de bajo nivel. Sí, eso fue con unos, creo que 10. Y luego tenía un amigo que estaba en mi equipo de fútbol, básicamente. Pero ya era un buen programador, y de hecho sabía programar juegos. Y lo hacía en Visual Basic. Y yo me quedaba completamente alucinado. Venía a mi ordenador y me mostraba que escribía algo y yo no entendía nada. Pero después de media hora tenía algo que caminaba por la pantalla, y a mí me parecía totalmente mágico. Yo estaba asombrado. Pero en ese momento no intenté programar de verdad. Seguía pensando que era demasiado difícil hasta para intentarlo. Así que no lo hice. Simplemente trasteaba y jugaba.
Jonathan: Así que yo... solo voy a meterme un momento.
Erik: Y luego, cuando era un poco mayor.
Jonathan: ¿Cómo se hizo la conexión entre «ah, puedo programar el juego y puedo hacer esto como algo serio», si tiene sentido, o «puedo seguir esto de una forma más seria»?
Erik: Sí, eso llegó más tarde. Cuando tenía unos, creo, 17 años, tuve que elegir qué camino tomar, básicamente. En mi cabeza tenía dos opciones. Una era estudiar Historia y la otra era hacer informática. Al final fue una elección bastante sencilla, porque sentía que la informática era algo que me encantaría hacer un poco más que simplemente Historia. En Historia puede haber partes muy aburridas, y no pensaba que fuera a haber partes aburridas en las ciencias de la computación, pero las hay, por supuesto. Así que me equivocaba. Sí, sí. Bueno, ya entraremos en eso en otro momento. Pero sí, hay partes aburridas. Pero tomé la decisión entonces. Y fue en una época en la que todo estaba en auge. Era el boom de las puntocom. Cuando visitábamos mi instituto, la escuela a la que iba a ir, que era una universidad de ciencias aplicadas. Podía elegir entre la universidad de ciencias aplicadas y la universidad. Pero me gustaban más las ciencias aplicadas porque quiero construir cosas. No soy un gran teórico. No sé cómo se dice, pero no se me da bien la teoría. Así que me gusta construir cosas. Soy muy práctico. Empecé por la parte práctica. Y me gustó mucho. Y era un periodo en el que todas esas empresas ganaban un montón de dinero. Decían: «oye, en cuanto te gradúes, tendrás un coche, tendrás esto, tendrás lo otro». Y luego, cuando me gradué, fue el estallido de la burbuja puntocom. Todo estaba patas arriba y en realidad era bastante difícil encontrar trabajo. En ese momento sentí que quizá debería probar la universidad, porque la parte de ciencias aplicadas había sido muy divertida. Y ahí fue donde de verdad aprendí a programar. Pero pensé: bueno, quizá aplace un poco mi carrera profesional y pruebe a ver si puedo hacer la universidad. Así que estuvo bien.
Jonathan: Según tengo entendido, en el sistema educativo europeo te clasifican bastante rápido según si tienes más habilidades prácticas o si vas por la vía más académica de la universidad. ¿Es así en los Países Bajos? ¿Se les da bien decir «oye, tú encajas mucho con esto»? Sé que en Suiza, que es mi referencia principal, si se te da muy bien algo, puedes decir: «vale, genial, ve a hacer una formación como aprendiz y fórmate así». Y en realidad es igual de válido, no se considera ni inferior ni superior que ir a la universidad o lo que sea. Simplemente se ajusta más a tus preferencias en ese sentido. ¿Es así también en los Países Bajos? ¿Y había ese tipo de proceso por el que pasar mientras crecías?
Erik: No diría que se considerara igual. Sigue existiendo la idea de que ir a la universidad y no a la universidad de ciencias aplicadas es mejor o más difícil, o al menos de más prestigio. También obtienes un título distinto. Pero a mí eso no me atraía mucho. Era demasiado teórico. Yo quería aprender a programar, porque todavía no había aprendido a programar. Sabía que probablemente me gustaría. Había visto trozos de HTML, pero nunca había escrito una línea de código. Pero estaba bastante seguro de que me iba a gustar mucho. Cuando empecé, el primer año básicamente no escribí ni una sola línea de código. Simplemente me dejaba llevar con algunos de mis compañeros en un grupo, porque uno de ellos era un programador fantástico que lo sabía todo. Él lo hacía todo, así que ni siquiera tenía la oportunidad de hacer mucho. Pero en el segundo año tomé una decisión consciente: así no funciona. Nunca aprenderé a programar. Así que me metí de lleno y me puse a programar como un descosido. Fue una inmersión total. Empecé con C, que es un lenguaje horrible para empezar. No entraré en lo que pienso de C como lenguaje en sí, pero para empezar es un lenguaje muy difícil. Hacer una lista enlazada quizá en la lección dos o tres no es algo que aprecies como estudiante si no tienes ninguna base. Pero conseguí programar y me gustó tanto que empecé a programar mucho en mi tiempo libre. La forma en que me enseñé a mí mismo a programar, casi, porque la forma en que ellos lo enseñaban era realmente mala, fue encontrar algo que me gustara usar a mí mismo y luego construirlo, o al menos intentar construirlo, porque al principio vas dando palos de ciego y no haces gran cosa. Eso en realidad es útil. Pero al final es práctica, práctica y más práctica. Descubrí que la programación es una habilidad que se adquiere simplemente haciéndola. Puedes empaparte de toda la teoría que quieras y ver, no sé, diez millones de vídeos. Pero si no le dedicas tiempo de verdad, creo que nunca serás un buen programador. Tienes que hacerlo. Y ese es un gran paso. Todavía me acuerdo de cuando era capaz de leer código y estaba bastante contento con ello. Pero luego tener que escribir código, ese fue un paso enorme.
Jonathan: contento con ello y tener que escribir código, ese fue un paso enorme. En los últimos programas he estado preguntando cuándo les hizo clic la programación a las personas, y si hubo un momento para ti en el que se encendió la bombilla y pensaste «madre mía, todo esto tiene sentido». ¿Estabas dando palos de ciego intentando captar la teoría o hubo un momento en el que pensaste «vale, no, esto es sencillo»?
Erik: No creo que tuviera un único momento de eureka. Creo que tuve varios. Llegan por etapas. Creo que el primer programa de verdad que escribí era uno en el que tenías que adivinar una palabra. Como ese juego que es muy popular ahora... Bueno, es como el ahorcado, digamos que es el ahorcado. Pero era en C y conseguí que funcionara, así que podía jugar a mi propio juego. Así entendí un poco lo que estaba pasando, y luego vas avanzando. Tuve algo que tenía que ver con, creo, mutexes. Había trenes y no podían chocar. Podías usar un mutex para cuando se cruzan. Y un mutex es básicamente como una señal que dice «alto» o «sigue». Fue muy divertido. Estaba bastante contento con ello. Así que se lo di a mi profesor. Y me dijo: «¿pero y si quiero tener cuatro trenes?». Y yo: «ay, ay, ay, vaya». No se me había ocurrido. Eso fue revelador, y era solo una frase sencilla. Y pensé: debería haber tenido en cuenta que podría darse el caso de que preguntara algo así. Así que me pasé el fin de semana intentando parametrizar mi código para que pudieras tener varios trenes, y lo conseguí. Lo apañé como pude. No era bonito, pero funcionaba. Ese fue otro momento en el que pensé: «esto es genial de verdad, y soy capaz de hacer este tipo de cosas».
Jonathan: Genial. Veo que eres capaz de hacer este tipo de cosas. Por conocerte, lo sé. Y también, por tener que aprender a programar, existe ese proceso en el que escribes cualquier cosa, haces que funcione y luego lo refinas. ¿Fue esa también tu experiencia? Era algo así como: escríbelo, haz que funcione, ¿a quién le importa lo demás? Y luego refínalo.
Erik: Sí, sí. Creo que el primer año, más o menos, era simplemente: si se ejecuta, estoy muy, muy contento. No existía eso de la estética ni nada parecido. Es solo que si se ejecuta, está bien. Y me pasé muchísimo con los comentarios en mi código, porque mi profesor me dijo que tenías que comentar tu código. Y la proporción de código frente a comentarios era quizá de uno a diez o algo así, era enorme. Y sí, todavía está online mi proyecto más antiguo, el que subí, que fue mi primer proyecto de código abierto. ¿Te acuerdas del MSN Messenger, donde podías enviar mensajes?
Jonathan: Vale, me suena, pero no...
Erik: ¿Te acuerdas de Winamp?
Jonathan: Sí.
Erik: Sí, Winamp era un reproductor multimedia. Eso fue en la época de Napster. Descargabas MP3 y luego los reproducías con Winamp. Lo que yo quería era que, si estaba reproduciendo una canción, se añadiera automáticamente a mi nombre en el MSN Messenger. Y en aquella época me interesaba mucho la programación para Windows. Eso era Win32. Era muy anticuado, no como lo que tenemos ahora, pero muy de bajo nivel y también muy interesante. Así que construí un plugin en C++, que era mi lenguaje favorito en aquella época, aunque también conocía tres lenguajes, así que tampoco decía mucho. Pero construí un plugin. Si Winamp estaba reproduciendo algo, obtenía el nombre mediante API de Win32 muy rebuscadas, y luego actualizaba el nombre que tenías en la ventana de MSN. Así todo el mundo podía ver qué número estaba sonando. Y lo subí a internet, porque pensé que quizá a otra gente le gustaría. Creo que estaba en SourceForge, que hoy ya no lo usa nadie, porque creo que tuvieron algún problema con la privacidad o algo así. Pero resulta que otra gente del mundo lo usó, y me quedé alucinado. Podía ver las descargas: no sé, un par de cientos de descargas, y había gente usando el software que yo había escrito. Fue la mejor sensación del mundo. Y ese fue mi primer programa de código abierto. Nunca tuve realmente el síndrome del impostor. Pensaba: este es mi código. Si alguien cree que es malo, no pasa nada. Funciona, así que estaba contento con él. Y puedo aprender de los comentarios de otra gente. Nunca he sido de los del síndrome del impostor, cosa que a quien me conoce no le sorprendería.
Jonathan: A mí no me sorprendería. En cuanto a tu experiencia con profesores y docentes en la universidad, ¿hubo algún profesor concreto que destacara para ti, por su forma de enseñar, que acelerara tu aprendizaje o que sintieras que tuvo un impacto enorme en cómo entendías la programación y el código? ¿Y qué hacía en concreto que te permitía salvar la distancia entre la teoría y la implementación práctica? Es una pregunta bastante grande. Puedes dividirla en tantas partes como quieras. Sí, sí.
Erik: Sí, sí. Sí, tengo que separarlo entre la universidad de ciencias aplicadas y la universidad. Empezando por esta última, en la universidad creo que el nivel general de las habilidades que alguien tenía que tener para enseñar a la gente era muy, muy bajo. El listón estaba muy bajo. Y mi sensación era que mucha de la gente que daba clase en la universidad lo hacía porque tenía que hacerlo, no porque quisiera. Muchas veces, en la universidad quieres investigar, pero tienes que dedicar una serie de horas a enseñar a la gente. Si no, bueno, forma parte del trabajo, pero no les gustaba nada. Yo quería aprender a programar más después de haber aprendido a programar. Así que cogí la especialización de programación allí, pero era tan mala... Estaba casi enfadado de que ese fuera el nivel de conocimientos de programación que querían transmitirme, era tan malo que me pasé a seguridad. Y la seguridad no me interesa mucho, pero lo de la programación era tan malo... Siempre digo que, de mi etapa universitaria, lo único que aprendí de verdad fue a escribir artículos como es debido, a hacer una buena búsqueda de fuentes, de manera que conoces tus fuentes y no aceptas cualquier fuente sin más. Eso sí lo aprendí en aquellos años, pero no aprendí nada de programación.
Jonathan: Ahora suena que también tiene mucho que ver con la historia, como la forma de interrogar una fuente, cómo te aseguras de que tu argumento es coherente, todo ese tipo de cosas. ¿Cómo se manifestaron en tu forma de programar y de aprender a programar las habilidades y el disfrute de la historia...?
Erik: ...mucho que ver.
Jonathan: ¿Cómo se manifestaron en tu código y en tu aprendizaje de programación, si es que lo hicieron? ¿Cuáles fueron algunos de los puntos en común?
Erik: Es una pregunta difícil. Bueno, ambas implican leer mucho. La historia va de leer. Y la programación también va de leer código. El número de veces que escribes código es mucho menor que el número de veces que lees código. Así que también se parece bastante a leer. Puede parecerse un poco a ser arqueólogo, si tienes un trabajo nuevo y empiezas con este sistema heredado antiquísimo por el que tienes que orientarte. Sientes que estás asomándote a rincones y recovecos para ver qué se esconde ahí. Y a veces salen cadáveres de los armarios, etc. Así que se parece un poco a una exploración. Quiero decir, ¿qué te gustaba de esto? No sé si hay algo más... ¿en qué consistía el disfrute?
Jonathan: Gracias. ¿Dónde estaba el disfrute en el sector para ti?
Erik: Sobre todo, bueno, las historias que contaban mis profesores. Los piratas, contaban que te arrastraban con una cuerda por debajo del barco y eran muy gráficos, etc. Eso me gustaba. Me gustaba mucho. Y me encantaban los romanos y su cultura y cómo se expandieron, y luego también la política. Las puñaladas por la espalda, etc. Eso me encantaba. También di latín en el instituto. El latín no me importaba nada, pero me encantaban las historias que... No me gustaba tener que dar latín, pero las historias que teníamos que traducir sí me gustaban. Pero lo dejé después de dos años.
Jonathan: Esas sí me gustaban. No, la razón por la que preguntaba eso, en torno a la historia, era...
Erik: Sí, me sé la historia.
Jonathan: He visto a varias personas a las que les gustan las cosas más artísticas o sociales, ¿cómo lo diríamos? Quizá las artes en el marco inglés serían como arte e historia y entrarían en esa categoría. Pero cada vez veo más gente a la que le ha gustado ese terreno y que luego se pasa a aprender a programar. Y la razón por la que me interesa es que claramente hay... puntos en común, y tratar de trazarlos un poco ha sido una parte enormemente interesante de las conversaciones que he tenido con distintas personas. Y da la sensación de que, si tienes una visión de conjunto y un enfoque multidisciplinar de las distintas cosas que estudias, llevar eso a la programación es enormemente beneficioso, porque puedes aplicar distintas habilidades al terreno de la programación. Y creo que, sí, es solo... lo comentaría. Así que es interesante que te encantara la historia y que ahora tengas, qué, como experiencia en más de 30 lenguajes de programación distintos y que mantengas muchos de ellos. Bueno, no necesariamente mantenerlos, pero estás muy implicado en gestionar todos esos en Exercism, que es tu... Bueno, sí, sí. Sí, interviene.
Erik: ¿Cuánto es tuyo? ¿Puedo volver un poco a lo que acabas de decir? Has mencionado que hay muchos tipos distintos de personas, con intereses distintos, que programan. Pero una de las razones por las que creo que es así es porque la programación atrae tanto a gente muy técnica, porque tiene reglas estrictas, los lenguajes son muy fijos. Hay gramática, hay sintaxis. Todo eso atrae a quien le gustan las cosas de una manera concreta. Por ejemplo, si eres físico, te gustan las reglas, te gustan las leyes, etc. Y en la programación hay cosas así, pero también es como un arte. A veces la gente lo compara con escribir un libro, y yo sigo pensando... que probablemente sea uno de los mejores ejemplos. No me gusta eso de «construir una casa», porque no se construiría ninguna casa si construyéramos nuestro software como construimos una casa. Pero para mí es de verdad tanto una ciencia como un arte. Jeremy mencionó esto hace poco en lo de Dig Deeper: con un ejercicio muy sencillo, la gente puede dar con cientos de soluciones distintas, aunque pienses «oye, solo debería haber una forma de resolverlo». Pero siempre hay más de una forma. Y eso es lo que me encantaba de la programación: puedes tener algo que funciona, pero luego puedes explorar, no sé, otras 20 opciones, y escribes y ves «oye, esto también funciona». Es esa combinación de ser a la vez un arte y una ciencia lo que me gusta mucho, porque creo que es además la única forma en la que puedo ser creativo de verdad. No soy una persona creativa en absoluto. Tengo mano izquierda y derecha, pero si hiciera algo por casa, como tareas o carpintería o lo que sea, se notaría. No se me da bien, también porque mi padre no pudo enseñármelo. Es muy interesante.
Jonathan: Pero además, a mí eso no me interesaba nada. Yo di arte en el colegio. He hecho música, he tocado la guitarra o lo que sea. Y para mí, el marco que tengo para la creatividad siempre ha estado en el dibujo o en la música y esas cosas. Y nunca había considerado realmente el aspecto creativo del código. Y ahora que lo mencionas, ¿cómo se te da a ti eso? ¿Tocas algún instrumento o...? Sé que te gusta la música, pero solo intento conectar esas dos cosas.
Erik: Bueno, emm... Sí, sí. Sí, intenté aprender a tocar la guitarra. Fue muy duro para mi mujer porque vivíamos en su piso de estudiante y tenía quizá 20 metros cuadrados. Yo intentaba aprender a tocar la guitarra y estábamos muy cerca el uno del otro. Todavía me asombra que lo aguantara. Pero no tengo...
Jonathan: Es solo...
Erik: No tengo ningún talento innato para tocar un instrumento. Tuve que esforzarme muchísimo, muchísimo, para llegar a cierto nivel, que seguía siendo muy bajo. Podía hacer tempos, etc., eso se me daba bien. Pero en un momento dado, mi profesor de guitarra me pidió que improvisara y que hiciera un solo, y me perdí por completo. Por nada del mundo era capaz de hacerlo. Sencillamente no hay creatividad musical en mí.
Jonathan: Sencillamente no hay creatividad musical en mí. ¿Y programando? A diferencia de ti. Cuando llegas a programar algo nuevo, por ejemplo, recibes un encargo de Jeremy o una petición de funcionalidad en Exercism y es como «vamos a hacer X, Y o Z». ¿Eso te estimula mentalmente de verdad y sientes como «vaya, vale, genial, vamos a explorarlo a fondo», y lo disfrutas? ¿Disfrutas ese proceso? ¿Es ahí donde sientes que te enciendes, en cierto sentido?
Erik: A diferencia de ti. Vale. Sí, sí. Es... la programación es tener una idea y hacer que se convierta en algo, eres casi como un dios en miniatura, sí, empiezas con nada, tienes una idea y luego hay algo. Y es sencillamente tan mágico. Todavía me emociono muchísimo cuando tengo un script. Y hay como todo ese texto línea a línea, y luego lo ves haciendo cosas. Y es tan divertido ver al ordenador trabajando para ti según lo que le dijiste que debía hacer. Todavía me gusta. Y el aspecto creativo está definitivamente también en explorar ya desde el principio por qué camino vas a intentar construir algo. Y luego, una vez lo has construido, probablemente hayas oído hablar del ciclo de refactorización, en el que tienes algo que funciona y luego empiezas a iterar y ves si puedes mejorarlo. Y me encanta refactorizar, me encanta. Hay uno de los libros... está por ahí, ¿dónde está? Ah, no lo veo porque queda muy fuera de cámara. Es Refactoring, de Martin Fowler. Y es una de mis mejores experiencias leyendo sobre software. Me encanta refactorizar. Es simplemente el proceso en el que tienes algo que funciona, pero puedes hacerlo aún mejor o más bonito, más rápido, según tus criterios. Y por eso también me gustó tanto Exercism, porque está hecho para eso: resuelves los tests y luego puedes... tienes un arnés de pruebas y puedes hacer lo que quieras con tu código. Y mientras siga en verde, sigue... funciona. Así que...
Jonathan: Eso me gusta mucho. Voy a seguir llevándolo a distintas etapas. Ahora ya has terminado la universidad, has aprendido a programar, has dicho claramente «vale, me comprometo con este proceso de aprendizaje, voy a sumergirme a fondo». Entonces, ¿qué pasó a partir de ahí, desde ese momento en el que te comprometiste de verdad y empezaste probablemente a pensar en tu carrera? Y eso siempre es una gran parte del proceso de estar en la universidad: ¿a qué me voy a dedicar el resto de mi vida? ¿Cómo salió todo eso? ¿Qué pensabas al respecto? ¿Qué se fue abriendo ante ti?
Erik: Claro. En realidad nunca he pensado en mi carrera. Creo que nunca lo he hecho en mi vida. Lo único que de verdad me importa es hacer algo que me guste. Y que esté cerca de mí, para no tener que conducir mucho. No me gusta conducir mucho. Pero no, nunca he pensado en mi carrera como tal. Y también he tenido muchísima suerte. Básicamente nunca he tenido que solicitar un trabajo, salvo quizá una o dos veces. Siempre he tenido amigos o gente que me conocía. Lo mismo con Exercism. Jeremy me conocía y no tuve que solicitarlo ni pasar por no sé cuántas fases de entrevista, como te tocó a ti. Quizá incluso más en tu caso, por cierto. Pero, eh, yo... No, no, ya lo sé. Pero yo no tuve ninguna. Lo mismo cuando buscaba trabajo. Siempre estuve trabajando a la vez que estudiaba en la escuela, incluso en el instituto, siempre intentaba ganar un poco de dinero porque mis padres no tenían mucho. Así que tenía que ganarme mi propia parte. Pero me encanta trabajar. Y creo que trabajé quizá 20 horas en un empleo de programación mientras hacía la universidad, porque teníamos tan poco tiempo real que pasar en la universidad que podía ganar bastante dinero, y con eso me compré esta enorme colección de DVD.
Jonathan: No entremos en eso.
Erik: No entremos en eso. Sí, perdón, en realidad regalé la mayor parte y me quedé con los que tengo muy, muy buenos recuerdos, pero regalé la mayoría. Llegué a tener 400 o 500 DVD en algún momento.
Jonathan: ¿400 o 500 DVD en algún momento? Vaya, qué divertido.
Erik: Se acercaba a eso. Se acercaba a eso. Sí. Pero... Así que mientras estaba en la universidad, un amigo mío, el mismo que era programador en la época en la que yo tenía 10 años o algo así, hizo la universidad conmigo. Y tenía un trabajo y me preguntó: «oye, ¿quieres unirte a esta empresa para ganar un poco de dinero extra?». Y lo hice. Y luego me quedé allí, básicamente. Cuando terminé la universidad, me preguntaron si quería hacer un doctorado. Pero yo lo interpreté como que buscaban poner sus nombres en algo que fuera a escribir yo, para conseguir una publicación. Así que no me apetecía. Y no quería hacer cuatro años de cosas teóricas. Y todo el mundo académico no me atraía mucho. Estaba mucho más cómodo haciendo cosas prácticas dentro de una empresa. Así que me quedé donde estaba trabajando. Estaba con PHP y teníamos un gran equipo. Creo que, salvo quizá nuestro equipo actual, nunca he trabajado en un equipo tan diverso y tan capaz. Pero nos dirigía una dirección que era malísima. Había un ambiente técnico tan descontento allí. Sencillamente, no era bueno, pero aun así me divertí mucho. Pero PHP no es mi lenguaje favorito. A mí me gustaba C#. Soy fan de C# desde que todavía era C# 1.0. Entonces estaba bastante verde. Pedía libros a América y tenía que pagar algún impuesto adicional, y al final salía bastante caro, pero aun así usé muchísimo ese libro. Y luego dije que quería trabajar con C#. No solo como algo aparte, y me presenté. En realidad, también fue para la universidad, pero no para investigar ni nada de eso. Era como dar soporte a las distintas partes de la universidad. Y trabajé con C# unos siete años.
Jonathan: Y trabajé con C# unos siete años. Cuéntame la historia ahí. Porque empezaste como voluntario o como colaborador, ¿verdad? Y luego fuiste construyendo desde ahí.
Erik: Sí. Sí, mientras trabajaba en la universidad, eran muy liberales a la hora de dejarte estudiar cosas o ir a conferencias, etc. Así que en un momento dado oí hablar de algo llamado programación funcional. Y pensé: «oye, no sé nada de esto». Sabía que habían dado una lección optativa en la universidad, pero yo no había hecho nada con ella. Y pensé que quizá debería aprender programación funcional, que quizá sería divertido. Y convencí a otro colega mío para que se uniera. Hicimos un curso gratuito, un curso de Scala en Coursera; ahora hay que pagar si lo haces, pero en aquella época no. Y lo daba Martin Odersky, que es el autor de Scala, un lenguaje funcional que también tenemos en Exercism. Y me divertí mucho aprendiendo programación funcional; también fue bastante lucha mental por momentos, porque es una forma muy distinta de pensar las cosas. Pero perseveré, y me gustó mucho. Y había un foro donde podías comentar con otros estudiantes, por ejemplo, ejercicios que no eras capaz de resolver. Pero alguien preguntó qué recursos podía usar si quería aprender más sobre Scala. Y alguien mencionó: «oye, prueba Exercism, tienen una cosa increíble donde puedes hacer un montón de ejercicios distintos, como pequeños puzles». Y pensé: «oye, esto suena bien». Así que me uní e hice la track de Scala. Y aprendí muchísimo. Ese fue mi primer contacto con el mundo de la programación funcional. Y pensé que quizá debería sumergirme de lleno. Y me pasé a Haskell. Y eso fue toda una inmersión para mí en aquel momento. Pero había mucho... era Exercism v1. Simplemente la gente comentaba tu código, no había un sistema formal de mentoría ni nada parecido. Pero la gente de Haskell era absolutamente fantástica. Básicamente aprendí Haskell de ellos. Busqué mucho en Google y encontré alguna solución muy rara, hice algunas soluciones raras, pero siempre intentaban guiarme hacia algo que fuera Haskell idiomático y bonito. Y fue una experiencia tan buena que pensé: «oye, probablemente debería estar haciendo esto yo mismo para otra gente. Quizá yo también pueda ayudar». Siempre me ha gustado ayudar. Así que pensé que haría C# y simplemente comentaría el código de C# de otras personas. Eso me gustó. Y luego vi que la track de C# tenía, no sé, 40 ejercicios, y Haskell tenía más. ¿Por qué? Así que intenté averiguar por qué era eso. Y resulta que podías enviar pull requests a Exercism y añadir nuevos ejercicios. Y eso fue lo que me enganchó. Y entonces me pasaba cada fin de semana haciendo ejercicios, añadiéndolos. Y cuando terminé con C#, pensé: «oye, F#, vamos con F#». F# es funcional y está en el ecosistema de Microsoft. Así que me gustaban las dos cosas. Combinemos mis cosas favoritas. E hice F# e hice lo mismo. Fui mantenedor de F#, construyendo ejercicios, y me encantó de verdad.
Jonathan: Me encantó de verdad. Tienes un lenguaje, dices «vale, voy a probar Scala». Le fui cogiendo el tranquillo y luego te sumergiste a fondo en él. ¿El tiempo que tardabas en entender cada lenguaje se fue reduciendo con el tiempo? Porque ahora tienes unos cuantos. Quiero decir, ¿cómo fue eso?
Erik: Sí, sí. Bueno, eso funciona igual con los idiomas naturales. Si aprendes francés y lo dominas bien, luego coger el español será mucho más fácil, porque hay mucho conocimiento compartido, como vocabulario compartido, casi dialectos. Lo mismo pasa con la programación. Si sabes C y te pasas a C++, hay muchos conceptos nuevos, pero también había muchísimas cosas exactamente iguales. Toda la familia de lenguajes tipo C, que es también una de las cosas que me gustan de la programación: que hay como árboles genealógicos. Hay una rama de Lisp, hay una rama de ML, hay una rama de los tipo C. Y es casi como la historia, donde tienes esa genealogía en un árbol genealógico o algo así. Eso lo he dicho demasiado alto. Sí, eso es Haskell o Prolog. Pero también me encantan esos casos atípicos, porque tienen ideas únicas. Es lo que suelo querer probar. Buscar un lenguaje que haga algo distinto, aunque todos los lenguajes compartan mucho del mismo conocimiento. Todos tienen lógica booleana, y la lógica booleana es algo fijo, es un punto de partida. Funciona igual en todas partes. Puede que tengas que usar dos ampersands, o que uses «and» como palabra o algo así, pero lo básico sigue siendo lo mismo. Así que, una vez tienes esas bases y las conoces bien, puedes aplicarlas más fácilmente a otros lenguajes.
Jonathan: Es casi como la historia, donde tienes esa genealogía en un árbol genealógico o algo así... a otros lenguajes más fácilmente. Aprendes a programar y tienes en cuenta tu propia experiencia. ¿Cuáles son algunos de los comportamientos y las cosas que hace la gente para aprender a programar? Y estoy seguro de que hay puntos en común en muchas disciplinas distintas. Has mencionado que simplemente te comprometiste y te sumergiste a fondo y luchaste con la cosa hasta que la entendiste. ¿Hay otros comportamientos o cosas que hace la gente que has visto y piensas «sí, se ponen en disposición de aprender»? Sí, muy bien.
Erik: Emm, yo siempre he intentado animar a la gente a construir algo que le gustaría construir. Cuando estaba aprendiendo PHP, construí algo que llevaba un registro de las 250 mejores películas de IMDB que había visto. Veía muchas películas, así que quería tachar cada una de ellas, y aprendí muchísimo de PHP y de MySQL solo construyendo algo que quería construir. Porque entonces, si te topas con un obstáculo, quieres... no parar, sino continuar, quieres arreglarlo, quieres que funcione. Y les he dado ese consejo a varias personas que han empezado a aprender a programar, y les ha funcionado bien. Y hoy en día es muy distinto de cuando yo aprendía, con Stack Overflow, etc. Y hay tanto conocimiento que puedes encontrar en internet. También es difícil encontrar los recursos adecuados. Y ahí es donde creo que Exercism puede brillar de verdad, porque podemos ser casi como guardianes: tenemos gente en nuestra comunidad que sabe cuáles son los recursos correctos. Y eso es algo con lo que veo que lucha la gente nueva. Y también que... es que casi nunca encuentras recursos en los que empieces realmente desde cero. Normalmente el público de Exercism ya sabe al menos un lenguaje. Y luego pasa a otros lenguajes o profundiza más en ese lenguaje. Pero no es para gente que... no tiene ninguna base de programación. Que no sabe qué es un bucle for. Que no sabe qué son las variables. Los strings son algo completamente distinto en su mente. Sí, siempre me llevo miradas raras si mi mujer ve que estoy hablando de strings. Es otra cosa aquí en los Países Bajos.
Jonathan: Sí. Voy a hacer algunas generalizaciones aquí. En los últimos años es probablemente cierto que cada vez más gente ha tomado conciencia de la programación y el código. En el pasado probablemente había menos personas que supieran moverse en ese terreno. Obviamente, a medida que este sector crece y crece y crece a un ritmo bastante rápido, hay muchas opiniones y gente que todavía se está abriendo camino intentando averiguar dónde se posiciona en ciertas cosas y ciertos temas. Todo ese concepto de la causa por la que darías la vida consiste básicamente en qué opinión sostienes y por la que lucharías o que defenderías de forma sana, obviamente. Pero ¿cuál es la cosa que defenderías y querrías...? Plantarte y decir «de aquí no me muevo y tengo que defenderlo». ¿Cuál sería? Vale.
Erik: Tengo muchas de esas opiniones, pero creo que la que me gustaría explicar aquí es que deberías aprender más lenguajes de los que ya sabes. Prueba lenguajes nuevos que no conozcas y prueba lenguajes muy distintos de los que ya conoces. Es muy fácil, por ejemplo: si sabes C#, quédate con C#, y está bien. Pero si consigues encontrar el tiempo y la voluntad de probar otra cosa, por ejemplo F#, o no sé, prueba Kotlin, haz algo distinto y fíjate en las diferencias. Serás un programador mucho mejor. Estoy absolutamente convencido al 100 % de que aprender F# me ha convertido en mejor programador de C#, aunque son lenguajes distintos y tienen filosofías distintas. Pero hoy en día hay muchísimo solapamiento entre lenguajes. Cuando los lenguajes eran todavía bastante jóvenes, por ejemplo, Lisp no se parece en nada a C. Los lenguajes funcionales eran muy distintos de los imperativos. Pero los lenguajes modernos, como C#, como Java, como Kotlin, como Rust, por ejemplo, se inspiran también en otros lenguajes, incluidos los funcionales. Cuando yo estaba en la universidad, el chiste recurrente era que la programación funcional es genial, pero nadie la usa. Pero eso ya no es cierto. Aunque no trabajes en un lenguaje funcional, lo funcional está por todas partes. JavaScript tiene muchos conceptos funcionales. C# tiene coincidencia de patrones avanzada, tiene LINQ, tiene muchísimo de funcional. Y lo que ves es que los lenguajes van prestando conceptos por todas partes. Así que ya no está tan claro qué lenguaje es funcional y qué lenguaje es meramente imperativo. Ahora es más bien una mezcla. Pero sigo pensando que hay mucho que ganar si empiezas a aprender un lenguaje nuevo. Algunos dicen que aprendas un lenguaje nuevo cada año. Yo intento hacerlo. Me imagino que a alguna gente le parecerá molesto y se sentirá abrumada. Pero prueba al menos un lenguaje distinto, y que sea un lenguaje que quede un poco fuera de tu zona de confort. Y te prometo que aprendes cosas, aprenderás mucho y te convertirás en mejor programador en general. Y también para el lenguaje con el que ya trabajas.
Jonathan: y también con el lenguaje con el que ya trabajas. Obviamente, la gente crea lenguajes nuevos para cubrir una necesidad concreta. Y dices que lo imperativo y lo funcional se están fusionando un poco. ¿Ves alguna situación en la que los lenguajes vayan a desaparecer y nos quedemos con un par de lenguajes centrales? ¿O eso es ingenuo?
Erik: No, no, creo que la gente tiene demasiadas opiniones para eso. Siempre habrá lenguajes nuevos. Habrá lenguajes nuevos cada día, y está bien. Pero habrá una criba. Los populares al final probablemente perdurarán. No veo a Java ni a C# desapareciendo pronto. Pero, por ejemplo, C y C++ siempre han sido lenguajes enormes. Pero ahora vemos Rust, que es una nueva forma de abordar los mismos problemas, pero con más seguridad. Seguridad integrada. Y es un lenguaje fantástico del que de hecho debería aprender más. Pero es interesante ver que Rust se está abriendo camino poco a poco hacia lo mismo, hacia que la gente empiece a usarlo en lugar de C o C++, lo cual es muy bueno, en mi opinión. Por ejemplo, en Linux ahora puedes escribir tus controladores en Rust. Así que siempre... será C++. Pero ahora admiten hacer controladores en Rust. Eso fue un paso bastante grande. Creo que seguirá habiendo lenguajes, porque no puedes crear un lenguaje que sirva para todos los propósitos. Y esa es también una de las razones por las que creo que deberías aprender varios lenguajes: porque distintas situaciones piden lenguajes distintos. Es como tratar de... ¿cómo era? Usar un martillo como si fuera una sierra. No sé cuál es la expresión.
Jonathan: ¿La expresión? Es como: vale, necesitas una sierra, pero solo tienes un martillo. ¿Qué vas a hacer? Vale.
Erik: Sí, sí, algo así. Es una nueva... creo que es con un clavo y un martillo, algo así, pero no se me dan bien los refranes en inglés, y no os voy a molestar con la versión neerlandesa. Pero básicamente es que, si solo conoces C#, quizá exista la tentación de usar C# para todo, pero puede haber lenguajes mejores para hacer programación de sistemas o, no sé, IA, que C#, aunque puedas hacerlo en C#, no significa que debas. Así que, si conoces más lenguajes, probablemente estarás mejor preparado para tomar una buena decisión, más adecuada al dominio en el que trabajas.
Jonathan: Vale, es divertido y es bonito. En cuanto a la comunidad de Exercism, ¿qué recomendación le darías esta semana a la comunidad de Exercism, algo que les sugieras encarecidamente que prueben? Y puede ser cualquier cosa: puede ser, ya sabes, sal a dar un paseo. Prueba a hacer el pino. No sé. Vale, puedes... y puedes tener más de una si quieres. Ya sé lo que voy a decir, así que puedes dar tres recomendaciones.
Erik: Es divertido y es útil. Ya sé lo que voy a decir. Vale. Vale, lo primero que se me ocurre es que echen un vistazo a la pestaña Dig Deeper que tenemos ahora. Hemos empezado a... añadimos la nueva funcionalidad Dig Deeper, donde puedes, una vez que has resuelto un ejercicio o al menos una vez que has iterado sobre él, ver enfoques, que son las distintas formas en las que se puede resolver un ejercicio. Y así es básicamente como aprendía todo el mundo en Exercism v1, con los comentarios añadidos: mirando el código de otra gente y viendo cómo lo resolvían. Así aprendí yo mucho Haskell, además de mis comentarios mentales. Simplemente viendo «oh, se puede hacer así». Y luego lo probabas tú mismo y decías «oye, esto es muy elegante y puedo hacer más cosas con ello», y luego lo aplicabas a otros ejercicios. Poder encontrar esas distintas formas de hacer las cosas enlaza casi con el arte de la programación, la manera en que puedes resolver las cosas de distintas formas. Así que están esos distintos enfoques. Yo he escrito artículos y enfoques sobre invertir una cadena. Es una de las preguntas básicas de entrevista que te hacen en las entrevistas de informática. ¿Cómo inviertes una cadena? En C# hay un par de formas idiomáticas distintas, pero son distintas y tienen características de rendimiento distintas, y una de ellas va muy enfocada al rendimiento, pero es menos legible. Me gusta que en la web, una vez lo has resuelto de una manera concreta, puedas decir: «oye, también hay otras formas». Y estas son las ventajas de hacerlo así. Y estas son las contrapartidas. Y no solo puedes ver el enfoque distinto, sino que además intentamos escribir un documento de introducción donde te ayudamos a elegir entre ellos. En informática siempre hay contrapartidas. Casi nunca, nunca hay una solución que sea simplemente la mejor. Siempre puedes escribir las cosas de otra manera. A menudo... sí. La solución más legible no siempre es la que mejor rinde. Ayudarte a tomar las decisiones, a entender las contrapartidas y a elegir entre distintos enfoques. Eso es también algo que intentamos hacer con la pestaña Dig Deeper. Y los he estado escribiendo en mi tiempo libre ahora. Me divierte mucho escribir esta información y compartirla con la gente. Así que animaría mucho a la gente a probar a escribirlos o simplemente a leer enfoques. Sé que no todos los ejercicios los tienen. Acabamos de empezar con esta funcionalidad hace una semana. Así que estará bastante limitada a un par de ejercicios de C#, pero la ampliaremos muchísimo. Y aceptamos PR de la comunidad para este tipo de cosas. Y os ayudaré encantado a escribir y a sacarlo adelante, y podrás compartir tu conocimiento de tu lenguaje. Creo que eso es algo que siempre le gusta a la gente. Si te gusta un lenguaje, te gustaría que a otros también les gustara. Así que los enfoques son una forma muy bonita de presumir de lo que puede hacer tu lenguaje. Echa un vistazo.
Jonathan: Echa un vistazo. ¿Tienes alguna otra para esta semana?
Erik: Emm, bueno, a riesgo de sonar como alguien que piensa en Exercism todo el tiempo, a mí me gusta mucho el foro de Exercism. Una cosa que he descubierto en mi carrera es que es muy difícil encontrar una comunidad de gente afín a la tecnología que sea casi un espacio seguro donde puedas hablar de cosas sin que otra gente te haga sentir tonto o se meta en discusiones o sea combativa. Así que me gusta mucho cómo intentamos, con el foro, hacer de esto un lugar muy seguro y agradable para la gente, pero también un lugar donde puedes encontrarte con programadores muy buenos. Gente muy hábil que tiene grandes ideas sobre sus lenguajes o sobre el mundo de la programación. Y disfruto mucho simplemente leyendo lo que ha escrito otra gente. Hay un hilo sobre cuáles son tus libros de programación favoritos. Y yo ya he puesto algunos libros en mi lista de libros por leer, porque... sí, no te topas con todos los libros. Pero otra gente los ha leído. Puedes usar la sabiduría de la multitud, básicamente.
Jonathan: ...de otra gente, y luego podemos usar la sabiduría de la multitud, básicamente, ese hilo, y estoy seguro de que va a haber oro puro que podamos extraer de ahí. Pero, quiero decir, ya sabes, eso está muy bien, Eric. Creo que si quieres dar una recomendación más, eres bienvenido, pero si no, empezaremos a ir cerrando un poco. Pero cualquier pensamiento o comentario adicional... sí, sigamos compartiendo.
Erik: Mmm, sí, eso va en el vídeo. No, en realidad no. Estaba intentando encontrar una tercera.
Jonathan: Y yo... siempre estoy intentando encontrar una tercera. En ese caso, demasiado. Pero, Eric, muchísimas gracias por este rato. Ha sido genial escuchar tu historia, escuchar cómo eso ha trascendido al mundo de la tecnología. Disfruté especialmente escuchando un poco sobre la historia, y quizá sea algo sobre lo que quieras pensar y compartir un poco más, sobre cómo la historia y el código y todo eso se solapan en algún momento. Pero muchísimas gracias. Es un placer tenerte en el equipo y he aprendido, y seguiré aprendiendo, muchísimo de ti. Un saludo enorme para ti, porque has superado los 100.000 puntos de reputación en la web de Exercism. Sé que dirás que la razón por la que lo has hecho es que has hecho trampa, pero aun así, lo tomaremos como un logro notable de todos modos. Así que muchísimas gracias. Y sí, si estás escuchando esto y no conoces Exercism, echa un vistazo a Exercism y estoy seguro de que te encontrarás con Eric en algún momento en ese espacio. Pero, Eric, gracias. Lo agradezco de verdad. Y voy a pausar esta grabación y podemos hablar un poco a raíz de esto, pero gracias por tu tiempo. Y espero que lo hayas disfrutado tanto como yo. Ha sido genial.
Erik: Pues no me importaría. Genial. La verdad es que sí. Sí. Muchas gracias.
Escucha, aprende e inspírate con los miembros de nuestra comunidad.