¿Qué es un «políglota», me dirás? Bueno, según el diccionario, ¡es la capacidad de conocer varios idiomas! Entonces, ¿cómo te conviertes en «políglota»? ¡Hablas con Erik Schierboom y te enteras de primera mano!
Jonathan: Bueno, hola a todos y bienvenidos al podcast o al stream en vivo de Exercism. Mi nombre es Jonathan y tengo el privilegio de ser su anfitrión hoy. Me acompaña Eric, que es parte del equipo de Exercism y ha estado involucrado durante 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 topado con Eric en algún punto. Pero Eric, es genial tenerte en el programa de hoy. Me emociona conocer un poco más sobre tu historia, cómo terminaste en el mundo tech y algunas de tus perspectivas sobre distintas cosas del sector tech. Pero antes de que nos metamos demasiado en esos temas, me encantaría que te presentes y nos des un poco de contexto, un poco de tu historia de cómo llegaste a donde estás ahora.
Erik: Claro. Sí. Qué bueno estar aquí. Entonces, soy Eric, como probablemente ya mencionaste. Vivo en Países Bajos. Nací ahí. Así que he vivido aquí toda mi vida. Cuando... empecé a pensar en cuándo fue la primera vez que hice algo de verdad con computadoras. Y creo que debió haber sido un sistema NES. Jugando Mario. Y eso me enganchó. Sí, era genial. Y también muy frustrante, porque los juegos eran implacables en esa época.
Jonathan: no tenías puntos de guardado, etc., simplemente volver a intentarlo 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 adelante y luego ponías los discos o lo que fuera, los cartuchos. Y de verdad me encantaba eso. Nosotros no teníamos una NES, pero yo tenía un par de amigos que sí. Así que iba allá con regularidad a jugar y había tantos juegos geniales que jugaba, y juegos frustrantes. Pero era algo tan, tan bueno. Y eso me enganchó. Creo que así es como muchos programadores se enganchan con la idea de ser programador: solo por querer construir un juego. Lo pensé. Y, alerta de spoiler, nunca lo hice. No soy desarrollador de videojuegos. Ok. No, no, no. Pero esa fue la razón por la que empecé a interesarme en las computadoras. Y luego mi papá tuvo un incidente antes de que yo naciera. Quedó paralizado debajo de los hombros. Así que andaba en silla de ruedas. Pero siempre estaba en casa. Eso era genial. Tenía un papá que estaba en casa 24/7. Así que siempre era genial llegar a casa. Y a él también le gustaban las computadoras. Así que en algún momento, creo que yo tenía unos 10 años o algo así, consiguió esta computadora no muy lujosa. Creo que era una X286. Era en blanco y negro y tenía MS-DOS instalado. Y podías jugar juegos. Había muchísimos juegos, y conseguí algunos... algunos papás de mis amigos que me conseguían juegos, y tenían que imprimir todas las hojas con las contraseñas para poder arrancar los juegos, porque era protección con contraseña. Era como el manual. Hoy en día nadie te dejaría hacer eso. Pero en esa época se podía. Y me encantaba jugar esos juegos, pero también me encantaba intentar descubrir cómo funcionaban. Y rompí mi computadora. Ni siquiera puedo recordar cuántas veces. Así que tenía esta mesa de ayuda, que era el papá de un amigo mío que era muy bueno con las computadoras. Y cada vez que rompía mi sistema, lo llamaba y él era muy amable y venía 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. Así que... pero aprendí mucho de eso.
Jonathan: este problema. Pero aprendí mucho de eso. En un disquete y recuerdo que ahorré durante años para esa cosa y luego la puse y simplemente nunca, nunca cargaba con esos pequeños disquetes. Así que esa fue una de mis grandes frustraciones. Creo que nunca pasé del punto de tratar de descubrir cómo arreglarlo. Pero ¿era que los juegos venían en disquetes y tenías que... conseguías un pequeño cartucho donde los metías y los cargabas y todo ese tipo de cosas?
Erik: Nunca.
Jonathan: Sí.
Erik: Sí, a veces tenías varios disquetes. Así que, sí, en realidad fue una gran época. Y me encantaba MS-DOS y simplemente descubrir qué podía hacer. Y luego descubrí qué no podía hacer. Así que, sí, era realmente genial.
Jonathan: Sí, era realmente genial. ¿Ella entonces trabajaba de tiempo completo? ¿Y tu papá estaba en casa?
Erik: No, mi mamá cuidaba a mi papá de tiempo completo. Así que necesitaba mucho cuidado. Al principio podía moverse con las manos y después podía usar el mentón porque sus manos empezaron a deteriorarse un poco y tenía menos control. Pero ella lo cuidaba de tiempo completo. Así que mis padres siempre estaban en casa. Para mí era muy raro ir a casa de otras personas donde los padres trabajaban. O sea, era el final del día y los padres todavía no habían llegado. A mí me parecía muy raro. Pero sí, es simplemente una situación distinta.
Jonathan: A mí me parecía muy raro. Eras tú solo.
Erik: Sí, tengo una hermana. Es tres años menor que yo. Nadie diría nunca que somos hermanos. Somos muy distintos. Pero antes peleaba mucho con ella, y ahora estamos totalmente bien. Así que terminó bien. Ok. Y a ella no le gustaban las computadoras, así que no me invadía mi tiempo de computadora.
Jonathan: Pero peleábamos mucho por la computadora. Ella quería jugar Sims y yo quería jugar SimCity o lo que fuera. Así que siempre estábamos peleando desde ese lado.
Erik: Adiós. Definitivamente me gusta mucho más la opción de SimCity. Pero no, ella nunca se interesó de verdad en las computadoras. La única forma en que lograba interesarla era cuando tenía una SNES, o sea la Super Nintendo, y teníamos Mario Kart. Y sí le gustaba Mario Kart, así que jugábamos mucho Mario Kart juntos. Claro que yo siempre ganaba porque tenía mucha más práctica, pero a ella igual le gustaba.
Jonathan: Así que ¿todavía te gusta trastear? Sí, MS dos, si no me equivoco, es algo bastante de bajo nivel. Sí. Así que eso era probablemente bastante de bajo nivel. Sí, totalmente. Y luego, ¿qué edad tenías cuando jugabas con ese sistema?
Erik: Ok. Bastante de bajo nivel, sí. Totalmente de bajo nivel. Sí, eso fue alrededor de... creo que a los 10. Y luego tenía un amigo que estaba en mi equipo de fútbol, básicamente, debería decir. Pero él ya era un buen programador y de hecho podía programar juegos. Y lo hacía en Visual Basic. Y yo quedé completamente asombrado. Él venía a mi computadora y me mostraba que escribía algo y yo no entendía nada. Pero después de media hora tenía algo que caminaba en la pantalla y para mí era completamente mágico. Yo estaba asombrado. Pero nunca intenté programar en ese momento. Todavía sentía que era demasiado difícil hasta para intentarlo. Así que no lo hice. Solo trasteaba y jugaba juegos.
Jonathan: Entonces yo... solo me meto 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 en serio», si tiene sentido, o puedo seguir esto de una forma más seria?
Erik: Sí, eso vino después. Cuando tenía, creo, 17 años, tuve que elegir qué camino tomar, básicamente. Tenía dos opciones en mente. Una era estudiar historia y la otra era hacer TI. Al final fue una decisión bastante simple porque sentía que TI era algo que me encantaría hacer un poco más que solo historia. Puede que haya partes muy aburridas en historia y no pensaba que hubiera partes aburridas en ciencias de la computación, pero las hay, por supuesto. Así que me equivoqué. Sí, sí. Bueno, podemos entrar en eso en otro momento. Pero sí, hay partes aburridas. Pero bueno, tomé la decisión en ese entonces. Y fue en la época en que todo estaba en auge. Era el boom de las punto com. Cuando visitábamos mi secundaria, 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 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. Así que empecé haciendo la parte práctica. Y me gustó mucho. Y era un periodo en el que todas estas empresas ganaban montones de dinero. Y decían: «oye, cuando te gradúes, te damos un auto, te damos esto, te damos aquello». Y luego, cuando me gradué, fue el estallido de las punto com. Todo estaba hecho un desastre y en realidad era bastante difícil encontrar trabajo. Y en ese momento sentí que quizá debería intentar 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á solo pospongo un poco mi carrera laboral y veo si puedo hacer la universidad. Así que estuvo bien.
Jonathan: Entonces, el sistema educativo europeo, hasta donde entiendo, te clasifica bastante rápido entre lo práctico basado en habilidades y la universidad, quizá más por la vía académica. ¿Eso es cierto en Países Bajos? ¿Son bastante buenos diciendo «oye, tú encajas realmente en esto»? Sé que en Suiza, que es mi punto de referencia, si eres muy bueno con Países Bajos, puedes decir: «ok, genial, ve y haz un aprendizaje y capacítate así». Y en realidad es igual de... no se considera ni menos ni más que ir a la universidad o lo que sea. Simplemente se ajusta más a tus preferencias en ese sentido. ¿Eso también es cierto en Países Bajos? ¿Y había ese tipo de proceso durante tu crianza?
Erik: No diría que se considerara igual. Todavía existe esa 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 más prestigioso. También puedes obtener 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 encantaría. Cuando empecé, el primer año básicamente no escribí ni una sola línea de código. Solo iba a la par de algunos de mis compañeros en un grupo, porque uno de ellos era un programador fantástico que sabía todo. Él 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 esto. Nunca voy a aprender a programar. Así que me metí de lleno y programé como un desquiciado. Eso fue una inmersión profunda. Empecé con C, que es un lenguaje horrible para empezar. No voy a 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 vayas a apreciar como estudiante si no tienes ninguna base. Pero logré programar y me gustó tanto que empecé a programar mucho en mi tiempo libre. Así que la forma en que casi me enseñé a programar, 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 solo andas dando manotazos y no logras hacer mucho que sea realmente útil. Pero al final es pura práctica, práctica, práctica. Descubrí que la programación es una habilidad que se adquiere simplemente haciéndolo. Puedes conseguir toda la teoría que quieras y ver, no sé, 10 millones de videos. Pero si no le dedicas el tiempo, no creo que llegues a ser un buen programador. Simplemente 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 eso. Pero luego tener que escribir código, ese fue un paso enorme.
Jonathan: contento con eso y tener que escribir código, ese fue un paso enorme. En los últimos programas he preguntado cuándo les hizo clic la programación a las personas y si hubo un momento para ti en el que cayó la ficha y pensaste «por Dios, todo esto tiene sentido». ¿Estabas dando manotazos tratando de captar la teoría o hubo un momento en que dijiste «ok, no, esto es directo»?
Erik: No creo que haya tenido un único momento eureka. Creo que tuve varios. Va por etapas. Creo que el primer programa real que escribí fue uno donde tenías que adivinar una palabra. Como el juego que está muy de moda ahora donde... Bueno, es como el ahorcado, pero digamos que es el ahorcado. Pero era en C y de hecho logré que funcionara, así que podía jugar mi propio juego. Entonces más o menos entendí un poco lo que estaba pasando y luego avanzas un poco. Tuve algo que tenía que ver con, creo, mutex. Había trenes y no debían chocar. Podías usar un mutex para cuando se cruzaran. Y un mutex es básicamente como una señal que dice «alto» o «sigue». Eso fue muy divertido. Estaba bastante contento con eso. Así que se lo di a mi profesor. Y me dijo: «pero ¿y si quiero tener, digamos, cuatro trenes?». Y yo: «oh, oh, oh, wow. No pensé en eso». Fue como abrir los ojos, y fue solo una simple frase. Y pensé: «oh, debí haber tenido en cuenta el hecho de que podría preguntar algo así». Así que me pasé el fin de semana tratando de parametrizar mi código para que pudieras tener varios trenes y lo logré. Lo metí a la fuerza. No era bonito, pero funcionaba. Ese fue otro momento en el que pensé: «oh, esto es realmente genial. Y puedo hacer este tipo de cosas».
Jonathan: Genial. Puedo ver que haces este tipo de cosas. Entonces, por conocerte, sé que... Y también por tener que aprender a programar, existe este proceso en el que simplemente pones algo, haces que funcione y luego lo refinas. ¿Fue esa también tu experiencia? Era como «solo escríbelo, haz que funcione. ¿A quién le importa lo demás?». Y luego lo refinas.
Erik: Sí, sí, creo que el primer año o así es simplemente: si corre, yo estaba muy, muy contento. No existía eso de la estética ni nada por el estilo. Solo si corre, está bien. Y me pasé completamente de la raya comentando mi código porque mi profesor me dijo que había que comentar el código. Y la proporción de código a comentarios era quizá de uno a diez o algo así, era enorme. Y sí. Todavía mi proyecto más antiguo sigue en línea, el que publiqué, que fue mi primer proyecto de código abierto. ¿Te acuerdas de MSN Messenger, donde podías enviar mensajes?
Jonathan: Ok, me suena, pero no...
Erik: ¿Te acuerdas de Winamp?
Jonathan: Sí.
Erik: Sí, Winamp era un reproductor multimedia. Eso era en la era de Napster. Descargabas MP3 y luego los reproducías con Winamp. Lo que yo quería hacer era que, si estaba reproduciendo una canción, se añadiera automáticamente a mi nombre en MSN Messenger. Y en esa é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 cosas muy geniales. Así que construí un plugin en C++, que era mi lenguaje favorito en esa época, aunque también sabía tres lenguajes, así que no decía mucho. Pero construí un plugin. Si Winamp estaba reproduciendo, obtenía el nombre a través de unas APIs elegantes de Win32 y luego actualizaba el nombre que tenías en la ventana de MSN. Así todos podían ver qué número estaba reproduciendo. Y de hecho lo publiqué en línea porque pensé que quizá a otros les gustaría. Creo que estaba en SourceForge, que ahora ya nadie usa porque creo que tuvieron algunos problemas con la privacidad o algo así. Pero en realidad otra gente en el mundo lo usó y yo quedé asombrado. Veía las descargas: no sé, un par de cientos de descargas, y gente usando el software que yo escribí. Eso fue como la mejor sensación del mundo. Y ese fue mi primer programa de código abierto. Nunca tuve realmente el síndrome del impostor. Sentía que este es mi código. Si alguien piensa que es malo, está bien. Funciona, así que estaba contento con él. Y puedo aprender de los comentarios de otros. Nunca fui de los del síndrome del impostor, lo cual a quienes me conocen no les sorprendería.
Jonathan: No me sorprendería. Sobre tu experiencia con los profesores y docentes en la universidad, ¿hubo algún docente en particular que se destacara, y la forma en que enseñaba, 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 específicamente que te permitía salvar la brecha 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. Hablando de la segunda primero, en la universidad creo que el nivel general de las habilidades que alguien tenía que enseñar era muy, muy bajo. El listón era muy bajo. Y mi sensación era que mucha de la gente que daba clases en la universidad lo hacía porque tenía que hacerlo, no porque quisiera. Así que gran parte del tiempo en la universidad quieres investigar, pero hay un número de horas que tienes que dedicar a enseñar. Si no, bueno, es parte del trabajo, pero en realidad no les gustaba. Yo quería aprender a programar más después de haber aprendido a programar. Así que tomé la especialización en programación, pero era tan mala. Estaba casi enojado de que ese fuera el nivel de conocimiento de programación que querían transmitirme, era algo tan malo que de hecho me cambié a seguridad. Y no me interesa mucho la seguridad, pero lo de programación era tan malo. Siempre digo que, de mi paso por la universidad, lo único que realmente aprendí fue cómo escribir artículos de verdad, cómo hacer investigación de fuentes adecuada, para que conozcas tus fuentes y no aceptes cualquier fuente. Eso sí lo aprendí en esos años, pero no aprendí nada de programación.
Jonathan: Ahora suena mucho también a historia, a cómo interrogas una fuente, cómo te aseguras de que tu argumento encaje, todo ese tipo de cosas. ¿Cómo se manifestaron en tu programación...
Erik: mucho a...
Jonathan: ¿Cómo se manifestaron en tu código y en tu aprendizaje de programación, si acaso? ¿Cuáles fueron algunos de los cruces ahí?
Erik: Esa es una pregunta difícil. Bueno, ambas implican leer mucho. La historia se trata de leer. Y la programación también se trata de leer código. La cantidad de veces que realmente escribes código es mucho menor que las 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 antiguo y heredado por el que tienes que encontrarle la vuelta. Se siente como si estuvieras mirando en cada rincón y hueco a ver qué hay escondido. Y a veces salen cadáveres de los armarios, etc. Se siente un poco como una exploración. Digo, ¿qué te gustaba de esto? No sé si hay algo más... ¿había algún disfrute?
Jonathan: Gracias. ¿Dónde estaba el disfrute en la industria para ti?
Erik: Principalmente, bueno, las historias que contaban mis profesores. Sobre los piratas, contaban que los 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 también la política. Las puñaladas por la espalda, etc. Eso me encantaba. También llevé latín en la secundaria. No me importaba el latín en absoluto, pero me encantaban las historias que... no me gustaba tener que estudiar 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 pregunté eso, justo sobre historia, era...
Erik: Sí, conozco la historia.
Jonathan: He visto a varias personas a las que les gustan las cosas más artísticas o sociales, ¿cómo diríamos? Quizá las artes en el marco inglés serían artes e historia y caen en esa categoría. Pero cada vez más he visto personas a las que les gustaba ese tipo de espacio pasarse a aprender a programar. Y la razón por la que me interesa es que claramente hay una superposición y tratar de trazar eso un poco ha sido una parte enormemente interesante de las conversaciones que he tenido con distintas personas. Y siento que si puedes tener una visión general y tienes un enfoque multidisciplinario entre las distintas cosas que estudias, llevar eso a la programación es enormemente beneficioso porque puedes aplicar distintas habilidades al espacio de la programación. Y creo que sí, eso es solo... solo comentaría eso. 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 mantengas muchos de ellos. Bueno, no necesariamente mantener, pero estás muy involucrado en gestionar todos esos en Exercism, que es tu... Bueno, sí, sí. Sí, adelante.
Erik: ¿Cuánto es tuyo? ¿Puedo volver un poco a lo que acabas de decir? Mencionaste 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 personas muy técnicas, porque bueno, hay reglas estrictas, los lenguajes son muy fijos. Hay gramática, hay sintaxis. Es un montón de cosas que atraen a gente a la que le gustan las cosas de cierta manera. Por ejemplo, si eres físico, te gustan las reglas, las leyes, etc. Y hay cosas así en la programación, pero también es como un arte. A veces la gente lo compara con escribir un libro y yo sigo pensando que ese es probablemente uno de los mejores ejemplos. No me gusta lo de construir una casa, porque nadie... ninguna casa se construiría si construyéramos nuestro software como construimos una casa. Pero en realidad es tanto una ciencia como un arte, siento yo. Jeremy mencionó esto hace poco en los contenidos más profundos, que con un ejercicio muy simple la gente puede llegar a cientos de soluciones distintas, aunque pienses «oye, debería haber solo una forma de resolver esto». 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 escribir y ver «oye, esto también funciona». Es esa combinación de ser un arte y una ciencia lo que me gusta mucho, porque creo que también es la única forma en que puedo ser creativo. No soy una persona creativa en absoluto. Tengo mano izquierda y derecha, pero se notaría... no se notaría si hiciera algo en la casa como quehaceres o carpintería o lo que sea. No se me da bien, lo cual también es porque mi padre no podía enseñarme mucho. Es muy interesante.
Jonathan: Pero también, yo no estaba nada interesado en eso. En mi caso, hice arte en la escuela. Hice música, toqué la guitarra o lo que sea. Y para mí, el marco que tengo para la creatividad siempre ha sido el dibujo o 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 da eso en tu caso? ¿Tocas algún instrumento o...? Sé que disfrutas la música, pero solo trato de conectar esas dos cosas.
Erik: Bueno, eh... Sí, sí. Intenté aprender guitarra. Fue muy duro para mi esposa porque vivíamos en su departamento de estudiante y era de unos 20 metros cuadrados. Yo trataba de aprender guitarra y estábamos muy cerca el uno del otro. Todavía me asombra que lo haya tolerado. Pero no tengo...
Jonathan: Es solo que...
Erik: No tengo ningún talento innato para tocar un instrumento. Tuve que esforzarme muchísimo, muchísimo, muchísimo para llegar a cierto nivel, que seguía siendo muy bajo. Podía hacer tempos, etc., eso lo hacía bien. Pero en un momento mi profesor de guitarra me pidió que improvisara y luego que hiciera un solo, y estaba absolutamente perdido. No podía hacerlo ni loco. Simplemente no hay creatividad musical en mí.
Jonathan: Simplemente no hay creatividad musical en mí. ¿Y el código? A diferencia de ti. Cuando llegas al código, digamos que recibes un encargo de Jeremy o una solicitud de funcionalidad en Exercism y es como «vamos a hacer X, Y o Z». ¿Eso realmente te da energía mental y sientes como «wow, ok, genial, exploremos esto de verdad» y lo disfrutas? ¿Ese proceso realmente...? ¿Sientes de verdad que cobras vida en cierto sentido?
Erik: A diferencia de ti. Ok. Sí, sí. El programa es tener una idea y hacer que sea algo. Eres casi como... casi como un dios en miniatura, sí. Empiezas con nada, tienes una idea y luego hay algo. Es simplemente mágico. Y todavía me siento muy emocionado cuando tengo un script. Y hay todo ese texto que va línea por línea, y luego lo ves haciendo cosas. Es muy divertido ver a la computadora trabajar 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 por dónde vas a intentar construir algo. Y una vez que lo has construido, probablemente hayas oído del ciclo de refactorización, donde tienes algo que funciona y luego empiezas a iterar y ver si puedes mejorarlo. Y adoro la refactorización por completo. Hay un libro... ¿dónde está? Ah, no lo veo porque está muy fuera de la cámara. Pero es Refactoring, de Martin Fowler. Y es una de mis mejores experiencias leyendo sobre software. Me encanta la refactorización. Es solo el proceso de que tienes algo que funciona, pero puedes hacerlo aún mejor o más bonito, más rápido, según tu criterio. Y por eso también me encantó Exercism, porque está hecho para eso: resuelves pruebas y luego tienes un arnés de pruebas y puedes hacer lo que quieras con tu código. Y mientras esté en verde, sigue funcionando. Así que...
Jonathan: Eso me gusta mucho. Voy a seguir volviendo a distintas líneas de tiempo. Ahora ya hiciste la universidad, aprendiste a programar, dijiste claramente «ok, me comprometo con este proceso de aprendizaje, voy a meterme de lleno en esto». Entonces, ¿qué pasó desde ese punto de comprometerte de verdad y luego empezar a pensar probablemente en tu carrera? Y eso siempre es una gran parte del proceso de estar en la universidad: ¿qué voy a hacer el resto de mi vida? ¿Cómo resultó eso? ¿Qué pensabas al respecto? ¿Qué se te abrió enfrente?
Erik: Claro. En realidad nunca consideré mi carrera. No creo haberlo hecho nunca en mi vida. Lo único que realmente me importa es hacer algo que me guste hacer. Y que quede cerca de mí, para no tener que conducir mucho. No me gusta manejar mucho. Pero no, nunca consideré mi carrera. Y además he sido increíblemente afortunado. 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. Igual con Exercism. Jeremy me conocía y no tuve que postular, pasar por no sé, cuatro o cinco etapas de entrevistas como te tocó a ti. Quizá incluso más en tu caso, por cierto. Pero, eh, yo... No, no, ya sé. Pero yo no tuve ninguna. Era lo mismo cuando buscaba trabajo. Siempre estuve trabajando mientras estudiaba en la escuela; incluso en la secundaria siempre intentaba ganar algo de dinero porque mis padres no tenían mucho. Así que tenía que ganar 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 dentro de la universidad que podía ganar bastante dinero, y con eso compré esta enorme colección de DVD.
Jonathan: No entremos en eso.
Erik: No entremos en eso. Sí, perdón, de hecho regalé la mayor parte y me quedé con los que tengo recuerdos muy, muy entrañables, 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. Oh, qué divertido.
Erik: Era cerca de eso. Era cerca de eso. Sí. Pero mientras estaba en la universidad, un amigo mío, el mismo que era el programador en los días en que yo tenía 10 años o algo así. Él hizo la universidad conmigo. Y estaba en un trabajo y me preguntó: «oye, ¿quieres unirte a esta empresa para ganar algo de dinero extra?». Y lo hice. Y luego básicamente me quedé ahí. Cuando terminé la universidad, me preguntaron si quería hacer un doctorado. Pero yo leí eso como... ah, perdón, tú leíste eso como que encontraste algo interesante en tu doctorado, que fue pura suerte, por cierto, yo hice el trabajo, pero fue suerte. Pero yo leí eso como «queremos poner nuestros nombres en algo que tú vas a escribir, para conseguir una publicación». Así que no estaba dispuesto a eso. 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. Era PHP y teníamos un gran equipo. Creo que, salvo quizá nuestro equipo actual, nunca trabajé en un equipo tan diverso y tan capaz. Pero nos dirigía una gerencia que era muy mala. Había un ambiente tecnológico muy descontento ahí. Simplemente no era bueno, pero aun así me divertí mucho. Pero PHP no es mi lenguaje favorito. Así que me interesaba C sharp. He sido fan de C sharp desde cuando todavía era C sharp 1.0. Era bastante tosco en esa época. Pedí libros a Estados Unidos y tuve que pagar un impuesto adicional y al final era bastante caro, pero aun así usé mucho, mucho ese libro. Y entonces dije que quería hacer C sharp como trabajo. No solo como algo paralelo, y postulé. En realidad también fue en la universidad, pero no haciendo investigación ni nada por el estilo. Era como dar soporte a las distintas partes de la universidad. E hice C sharp durante unos siete años.
Jonathan: E hice C sharp durante unos siete años. Cuéntame la historia ahí. Porque empezaste como voluntario o como colaborador, ¿verdad? Y luego fuiste creciendo desde ahí.
Erik: Sí. Sí, mientras trabajaba en la universidad eran muy liberales permitiéndote estudiar cosas o ir a conferencias, etc. Así que en algún momento oí hablar de algo llamado programación funcional. Y pensé: «oye, no sé de esto». Sabía que enseñaban una lección opcional en la universidad, pero no había hecho nada con eso. Y pensé que quizá debería aprender programación funcional, que quizá sería divertido. Y convencí a otro colega mío que quiso unirse. Hicimos un curso gratuito, un curso de Scala en Coursera; hay que pagar si lo haces ahora, pero en esa época no. Y lo enseñaba 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, aunque también fue bastante una lucha mental por momentos, porque es una forma muy distinta de pensar las cosas. Pero perseveré y me gustó mucho. Y había este foro donde podías discutir con otros estudiantes, por ejemplo, ejercicios que no lograbas resolver. Pero algunas personas preguntaban qué recursos podían usar si querían aprender más sobre Scala. Y alguien mencionó: «oye, prueba Exercism, tienen esta cosa increíble donde puedes hacer muchos ejercicios distintos, como pequeños acertijos». Y pensé: «oye, eso suena bien». Así que me uní e hice el track de Scala. Y aprendí muchísimo. Ese fue mi primer contacto con el mundo de la programación funcional. Así que pensé que quizá hacer la inmersión profunda. Y me fui a Haskell. Y eso fue una inmersión realmente profunda para mí en ese momento. Pero había mucho... era Exercism v1. La gente simplemente comentaba tu código, no había un sistema formal de mentoría ni nada por el estilo. Pero la gente de Haskell era absolutamente fantástica. Básicamente aprendí Haskell de ellos. Busqué mucho en Google y encontré algunas soluciones muy raras, hice algunas soluciones raras, pero ellos 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 con otras personas. Quizá yo también puedo ayudar». Siempre me ha gustado ayudar. Así que pensé que haría C sharp y simplemente comentaría el código de C sharp de otras personas. Me gustaba. Y luego vi que el track de C sharp tenía, no sé, 40 ejercicios y Haskell tenía más. ¿Por qué? Así que traté de averiguar por qué era eso. Y resulta que podías enviar pull requests a Exercism y añadir ejercicios nuevos. Y eso fue lo que me enganchó. Y luego simplemente hacía ejercicios cada fin de semana, añadiéndolos. Y cuando terminé con C sharp, pensé: «oye, F sharp, hagamos F sharp». F sharp es funcional y está en el ecosistema de Microsoft. Me gustan los dos. Así que combinemos mis cosas favoritas. E hice F sharp e hice lo mismo. Fui mantenedor de F sharp construyendo ejercicios y me encantó, me encantó de verdad.
Jonathan: Me encantó, me encantó de verdad. Tienes un lenguaje, dices «ok, voy a probar Scala». Más o menos me metí en eso y luego hiciste la inmersión profunda. Ahora, ¿el tiempo que tardabas en entender cada lenguaje se fue reduciendo con el tiempo? Porque ahora tienes varios. Digo, ¿cómo se dio eso?
Erik: Sí, sí. Bueno, funciona igual que con los idiomas naturales. Si aprendes francés y sabes bien francés, entonces retomar español será mucho más fácil porque hay mucho conocimiento compartido, como vocabulario compartido, casi dialectos. Es igual con la programación. Si sabes C y pasas a C++, hay muchos conceptos nuevos, pero también había muchas cosas que son exactamente iguales. Toda la familia de lenguajes tipo C, que también es una de las cosas que me gustan de la programación: tienes como árboles genealógicos. Hay una rama list, hay una rama ML, hay una rama tipo C. Y es casi como la historia, donde tienes esa genealogía en un árbol familiar o algo así. Lo dije muy fuerte. Sí, eso es Haskell o Prologue. Pero también me encantan esos casos raros porque tienen ideas únicas. Eso es lo que suelo querer probar. Encontrar un lenguaje que haga algo distinto, aunque todos los lenguajes de programación comparten mucho del mismo conocimiento. Todos tienen lógica Boolean, y la lógica Boolean es simplemente fija, es un hecho dado. Funciona igual en todas partes. Quizá tengas que poner dos ampersands, o usar "and" como palabra o algo así, pero lo básico sigue siendo igual. Una vez que tienes esos básicos y los conoces bien, puedes aplicarlos a otros lenguajes con más facilidad.
Jonathan: Es casi como la historia, donde tienes esa genealogía en un árbol familiar o algo así. lenguajes con más facilidad. 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 cruces en muchas disciplinas distintas. Mencionaste que simplemente te comprometiste y te metiste de lleno y luchaste con eso hasta entenderlo. ¿Hay otros comportamientos o cosas que hace la gente que has visto y piensas «sí, se pusieron en posición de aprender»? Sí, muy bien.
Erik: Eh, mi... siempre he tratado de 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. Estaba viendo muchas películas, así que quería revisar cada una de esas películas y aprendí mucho de PHP y MySQL simplemente construyendo algo que quería construir. Porque entonces superas ese bache; si te topas con un obstáculo, tú... no quieres parar, quieres continuar, quieres arreglarlo, quieres que funcione. Y le he dado ese consejo a varias personas que empezaron a aprender a programar y les ha funcionado bien. Y hoy en día es tan distinto de cuando yo aprendía, con Stack Overflow, etc. Y hay tanto conocimiento que puedes encontrar en línea. También es difícil encontrar los recursos correctos. 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 una de las cosas con las que veo que la gente nueva batalla. Y también que existe esto... Casi nunca encuentras recursos donde realmente empieces desde cero. Por lo general, el público de Exercism ya sabe al menos un lenguaje. Y luego pasas a otros lenguajes o profundizas en ese lenguaje. Pero no es para gente que no tiene ninguna base de programación. O sea, no sabes qué es un bucle for. No sabes qué son las variables. Los strings son algo completamente distinto en tu mente. Sí, siempre me miran raro si mi esposa ve que estoy hablando de strings. Es otra cosa aquí en Países Bajos.
Jonathan: Sí. Voy a hacer algunas generalizaciones aquí. En los últimos años es probable que sea cierto que cada vez más gente se ha dado cuenta del código y la programación. En el pasado probablemente había un número menor de personas que sabían moverse en ese espacio. Obviamente, como esta industria crece y crece y crece a un ritmo bastante rápido, hay muchas opiniones y gente que todavía va abriéndose camino tratando de descubrir dónde se sitúan en ciertas cosas y ciertos temas. Todo este concepto de la colina por la que morirías es básicamente qué opinión sostienes que realmente defenderías o pelearías de forma sana, obviamente. Pero, ¿cuál es la única cosa que defenderías y querrías... clavarla y decir «no me muevo de este punto y tienes que defenderlo»? ¿Cuál sería? Ok.
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 conoces y prueba lenguajes muy distintos de los que ya sabes. Es muy fácil. Por ejemplo, si sabes C sharp, quédate con C sharp y está bien. Pero si logras encontrar el tiempo y la voluntad de probar otra cosa, por ejemplo, F sharp, o no sé, prueba Kotlin, simplemente haz algo distinto y ve cuáles son las diferencias. Vas a ser un programador mucho mejor. Estoy absolutamente 100% seguro de que aprender F sharp me hizo un mejor programador de C sharp, aunque son lenguajes distintos y tienen filosofías distintas. Pero hay tanto solapamiento entre los lenguajes hoy en día. Cuando los lenguajes eran todavía bastante jóvenes, por ejemplo, Lisp no se parecía en nada a C. Los lenguajes funcionales eran muy distintos de los imperativos. Pero los lenguajes modernos como C sharp, como Java, como Kotlin, como Rust, por ejemplo, también se inspiran en otros lenguajes, y también en los funcionales. Cuando yo estaba en la universidad, siempre era como el chiste recurrente: la programación funcional es genial, pero nadie la usa. Pero eso ya no es cierto. Aunque no estés trabajando en un lenguaje funcional, lo funcional está en todas partes. JavaScript tiene muchos conceptos funcionales. C sharp tiene coincidencia de patrones avanzada, hay link, hay muchísimo de lo funcional. Y lo que ves es que los lenguajes están tomando conceptos prestados por todas partes. Así que ya no está tan claro qué lenguaje es funcional y qué lenguaje es solo imperativo. Ahora es más una mezcla. Pero sigo pensando que hay mucho que ganar si empiezas a aprender un lenguaje nuevo. Algunas personas decían «aprende un lenguaje nuevo cada año». Yo intento hacerlo. Puedo imaginar que eso será molesto para algunas personas y que se sentirán abrumadas. Pero prueba al menos un lenguaje distinto y trata de que sea un lenguaje un poco fuera de tu zona de confort. Y te prometo que vas a aprender cosas, vas a aprender mucho y te vas a convertir en un mejor programador en general. Y también para el lenguaje con el que ya trabajas.
Jonathan: y también con el que ya trabajas. Obviamente la gente crea lenguajes nuevos para cubrir una necesidad específica. Y entonces dices que lo imperativo y lo funcional, los dos tipos, se están fusionando un poco. ¿Ves alguna vez una 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, lo cual está bien. Pero habrá árboles que se sacudan. Los populares, al final, probablemente perseverarán. No veo que Java o C sharp desaparezcan pronto. Pero, por ejemplo, C o C++ siempre han sido lenguajes enormes. Ahora vemos Rust, que es como una nueva forma de intentar 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 está abriéndose camino lentamente hacia lo mismo, porque la gente empieza a usarlo en lugar de C o C++, lo cual es algo muy bueno, en mi opinión. Por ejemplo, en Linux ahora puedes escribir tus controladores en Rust. Así que ves... siempre habrá C++. Pero ahora admiten hacer controladores en Rust. Eso fue un paso bastante grande. Así que creo que seguirá habiendo lenguajes porque no puedes hacer 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 situaciones distintas piden lenguajes distintos. Es como tratar un... ¿cómo es? ¿Usar un martillo como una sierra? No sé cuál es la expresión.
Jonathan: ¿La expresión? Es como, ok, necesitas una sierra, pero solo tienes un martillo. ¿Qué vas a hacer? Ok.
Erik: Sí, sí, algo así. Es una nueva... creo que es con un clavo y un martillo, algo así, pero no soy bueno con los refranes en inglés, y no te voy a molestar con la versión en neerlandés. Pero básicamente, si solo sabes C sharp, quizá exista la tentación de usar C sharp para todo, pero podría haber lenguajes mejores para hacer programación de sistemas o, no sé, IA, que C sharp, y aunque puedas hacerlo en C sharp, eso no significa que debas. Si sabes más lenguajes, probablemente estarás mejor preparado para tomar una buena decisión, más adecuada al dominio en el que trabajas.
Jonathan: Ok, entonces es divertido y es hermoso. En cuanto a la comunidad de Exercism, ¿qué recomendación le darías a la comunidad de Exercism esta semana que sugerirías firmemente que probaran? Y puede ser cualquier cosa, ya sabes, sal a caminar. Intenta hacer un pino. No sé. Puedes... y puedes tener más de una si quieres, puedes... ya sé lo que voy a decir, así que puedes tener tres recomendaciones.
Erik: Es divertido y es útil. Ya sé lo que voy a decir. Ok. Ok, la que se me ocurre es que revisen la pestaña Dig Deeper que ahora tenemos. Empezamos 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, puedes ver enfoques, que son las distintas maneras en que se puede resolver un ejercicio. Y así era básicamente como aprendía todo el mundo en Exercism v1, junto con los comentarios añadidos: mirando el código de otras personas y viendo cómo lo resolvieron. Así fue como aprendí mucho Haskell, aparte de mis comentarios mentales. Simplemente viendo «oh, puedes hacerlo así». Y luego lo probabas tú mismo y decías «oye, oh, esto es realmente elegante y puedo hacer más cosas con esto» y luego lo aplicabas a otros ejercicios. Poder encontrar estas distintas formas de hacer las cosas se remonta casi al arte de la programación, a la manera en que puedes resolver las cosas de distintas formas. Así que existen estos distintos enfoques. He escrito artículos y enfoques sobre invertir un string. Esa es una de las preguntas básicas que te hacen en las entrevistas de TI. ¿Cómo inviertes un string? En C sharp hay un par de formas idiomáticas distintas, pero son diferentes y tienen características de rendimiento distintas, y una de ellas se centra mucho en el rendimiento, pero es menos legible. Me gusta que en el sitio web, una vez que lo has resuelto de cierta forma, puedes decir «oye, también hay otras formas. Y estos son los beneficios de hacerlo así. Y estas son las compensaciones». Y no solo ves el enfoque distinto, también tratamos de escribir un documento de introducción donde te ayudamos a elegir entre ellos. Siempre hay compensaciones en TI. Nunca hay una solución que sea casi nunca la mejor sin más. Siempre puedes escribir las cosas de otra forma. A menudo, sí. La solución más legible no siempre es la de mejor rendimiento. Ayudarte a tomar las compensaciones, a entenderlas y a elegir entre distintos enfoques. Eso es también algo que tratamos de hacer con la pestaña Dig Deeper. Y he estado escribiéndolos en mi tiempo libre. Me divierto muchísimo escribiendo esta información y compartiéndola con la gente. Así que animaría mucho a la gente a probar a escribir enfoques o simplemente a leerlos. Sé que no todos los ejercicios los tienen. Empezamos con esta funcionalidad hace una semana. Así que estará bastante limitado a un par de ejercicios de C sharp, pero lo vamos a ampliar muchísimo. Y aceptamos PRs de la comunidad para este tipo de cosas. Y con gusto te ayudo a escribir y a que esto salga adelante, y puedes compartir tu conocimiento de tu lenguaje. Creo que eso es algo que siempre le gusta a la gente. Si les gusta un lenguaje, les gustaría que a otros también les gustara. Los enfoques son una forma muy bonita de mostrar lo que puede hacer tu lenguaje. Ve a echarle un vistazo. Sí.
Jonathan: Ve a echarle un vistazo. ¿Tienes alguna otra para esta semana?
Erik: Eh, bueno, con el riesgo de sonar como alguien muy enfocado en Exercism: 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 enfocada en tecnología que sea casi un espacio seguro donde puedas discutir cosas sin que otras personas te hagan sentir estúpido o sin llegar a discusiones o a un ambiente combativo. Me gusta mucho cómo tratamos, con el foro, de hacer de este 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 espacio de la programación. Y realmente disfruto leer lo que han escrito otras personas. Hay un hilo sobre cuáles son tus libros favoritos de programación. Y ya puse algunos libros en mi lista corta de libros por leer, porque simplemente... Sí, no te topas con todos los libros. Pero otras personas los han leído. Básicamente, puedes usar la sabiduría de la multitud.
Jonathan: la gente y luego podemos usar la sabiduría de la multitud... básicamente ese hilo y estoy seguro de que habrá algo de oro real que podamos extraer de ahí. Pero, digo, ya sabes, eso es realmente genial, Eric. Creo que si quieres dar una recomendación más, eres bienvenido, pero si no, empezaremos a ir cerrando un poco. Pero cualquier otro pensamiento o comentario... sí, sigamos compartiendo.
Erik: mhm Ja, das kommt in das Video. No, en realidad no. Estaba tratando de encontrar una tercera.
Jonathan: Y yo... siempre estoy tratando de encontrar una tercera. En ese caso, demasiado. Pero Eric, muchísimas gracias por este tiempo. Ha sido realmente genial escuchar tu historia, escuchar cómo eso se cruzó con la tecnología. En especial disfruté mucho escuchar un poco sobre historia, y quizá eso sea algo en lo que podrías 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 muchas gracias. Es genial tenerte en el equipo y definitivamente he aprendido, y seguiré aprendiendo, muchísimo de ti. Un gran saludo para ti porque pasaste los 100 000 puntos de reputación en el sitio web de Exercism. Sé que dirás que la razón por la que lo lograste es porque hiciste trampa, pero aun así lo tomaremos como un logro notable de todos modos. Así que muchas gracias. Y sí, si estás escuchando esto y no conoces Exercism, ve a echarle un vistazo a Exercism y estoy seguro de que encontrarás a Erik en algún punto de ese espacio. Pero Erik, gracias. Realmente lo aprecio. Y voy a pausar esta grabación y podemos hablar después de esto, pero gracias por tu tiempo. Y espero que lo hayas disfrutado tanto como yo. Ha sido genial.
Erik: No me importa si lo hago. Genial. Yo sí. Yo sí. Muchas gracias.
Escucha, aprende e inspírate con los miembros de nuestra comunidad.