Uploaded avatar of iHiD

Entrevista con Erik Schierboom

@iHiD
hace Más de 7 años

Una entrevista con Erik Schierboom en la que él y Jeremy Walker hablan de programación funcional, del mantenimiento de tracks de Exercism y del próximo análisis estático de las soluciones de Exercism.

Hola, Erik. ¡Gracias por ser el protagonista del primer Contributor Spotlight de Exercism! Queríamos destacar tu trabajo porque da la sensación de que contribuyes a todos los rincones de Exercism y de que tienes ideas estupendas gracias a trabajar en todo el proyecto.

Y para ponernos un poco en contexto, ¿cómo empezaste a participar en Exercism?

En 2014 hice un curso de programación funcional que usaba Scala como lenguaje. Cuando lo terminé, busqué recursos para seguir mejorando mis conocimientos de Scala y encontré Exercism. No tardé mucho en engancharme y en empezar a hacer también otros tracks de lenguajes en Exercism. Como los comentarios que la gente dejaba en mis soluciones me habían ayudado muchísimo, empecé a comentar yo también soluciones en el track de C#. En algún momento me pidieron que fuera mantenedor del track de C#, y acepté encantado. Cinco años después, ahora soy mentor en los tracks de C# y F#, mantenedor de los tracks de C#, F# y Scala, y ayudo en el trabajo sobre las especificaciones de problemas compartidas entre tracks.

Qué bien. Así que te metiste en Exercism cuando aún daba sus primeros pasos. Para quienes no lo sepan, ¿podrías explicar qué significa ser mantenedor de Exercism?

Claro. En términos abstractos, un mantenedor de Exercism es responsable de la «salud» de un track. En la práctica, eso puede significar muchísimas cosas, como implementar ejercicios nuevos, actualizar los que ya existen o revisar los pull requests de otros mantenedores. Otro aspecto importante es ordenar correctamente los ejercicios del track para que los estudiantes disfruten de la mejor experiencia de aprendizaje posible. Ten en cuenta que ser mantenedor no significa tener que participar en todas las actividades mencionadas; es perfectamente válido que un mantenedor se centre solo en una o dos.

¡Gracias! Además de centrarte en C#, F# y Scala, has hecho prácticamente todos los tracks de lenguajes de Exercism. Desde el punto de vista de quien aprende, ¿tienes alguno favorito en especial?

Aunque he aprendido un montón con todos los tracks que he hecho, mi favorito tiene que ser el track de Haskell. No solo es un gran lenguaje con un montón de conceptos interesantes, sino que la calidad de sus mentores era sencillamente asombrosa. Otros favoritos son los tracks de Kotlin y F#, dos lenguajes extremadamente bien diseñados y pragmáticos con los que me encanta programar.

Sí, oigo maravillas de los mentores de Haskell. Me imagino que hacer tantos tracks te ha dado un montón de ideas interesantes sobre la programación. ¿Hubo algo concreto que aprendieras con esa experiencia?

¡Ah, sí, un montón de cosas! Trabajar con una gran variedad de lenguajes te expone a muchas formas distintas de abordar los problemas. Todos esos enfoques distintos han influido de algún modo en mi estilo de programación, aunque los lenguajes funcionales han sido probablemente los que más me han influido. Ahora me doy cuenta de que uso conceptos funcionales siempre que puedo, incluso en lenguajes no funcionales (que poco a poco van incorporando características funcionales).

También he aprendido que, aunque todos los lenguajes son distintos, muchos son en realidad bastante parecidos. Como resultado, aprender un lenguaje nuevo resulta mucho más fácil cuando ya conoces un par de ellos. Por ejemplo, saber Haskell significa que probablemente puedas aprender F# o Scala con relativa rapidez. Aprender lenguajes nuevos puede ser, por tanto, también una buena jugada para tu carrera, porque te permitirá cambiar de lenguaje con más facilidad.

Por último, he aprendido que tener mentores que te guíen mientras aprendes un lenguaje hace que el proceso sea mucho más ameno y eficaz.

A mí me pasa lo mismo. ¡Aprender de los demás multiplica muchísimo! Desde un punto de vista práctico, ¿cómo te las arreglabas con toda la configuración de los distintos lenguajes? A mí me da un poco de respeto solo de pensar en aprender un IDE nuevo. ¿Te mantenías fiel a un editor que ya conocías mientras hacías los distintos lenguajes, o ibas cambiando para intentar tener una experiencia más idiomática?

Para algunos lenguajes, montar un entorno de desarrollo nuevo solía ser un poco engorroso, pero hoy en día la mayoría son bastante fáciles de configurar. Después intento encontrar un IDE que me dé la mejor experiencia para ese lenguaje concreto. Como trabajo indistintamente en Windows y Mac OS, el IDE también tiene que ser multiplataforma. Un ejemplo de IDE estupendo y multiplataforma es Visual Studio Code, que uso para los tracks de Haskell, JavaScript, TypeScript, Elm y Elixir. Para los demás tracks, uso un IDE de JetBrains: Rider para C# y F#, IntelliJ IDEA para Java, Scala y Kotlin y, por último, RubyMine para Ruby (nota: estos IDE también son multiplataforma). Como ves, uso varios editores para conseguir la mejor experiencia con cada lenguaje (aunque los IDE de JetBrains son obviamente bastante parecidos).

Consejo: si eres colaborador principal de un proyecto de código abierto, JetBrains te permite solicitar una licencia gratuita de código abierto.

Eso es súper útil. ¡Gracias! Entonces eres mantenedor de C#, F# y Scala. ¿Qué es lo que más te atrae de esos lenguajes?

C# se convirtió en mi lenguaje favorito nada más salir, en 2002. Es un lenguaje bien diseñado y elegante, con unas herramientas y una documentación estupendas. Además, el lenguaje evoluciona muy rápido, lo que significa que siempre hay cosas nuevas que aprender. Una última ventaja: se ejecuta sobre el excelente framework .NET (Core).

F# también fue amor a primera vista. Con una sintaxis elegante y un rico conjunto de características (funcionales) del lenguaje, descubrí que podía hacer más con menos código, sobre todo al modelar dominios. También es un lenguaje muy pragmático, con características orientadas a objetos y una magnífica interoperabilidad con el código .NET existente (se ejecuta sobre el mismo framework .NET (Core) que C#). Otra de sus fortalezas son sus herramientas, que están entre las mejores disponibles para lenguajes funcionales. Y, como extra, cuenta con una de mis introducciones a un lenguaje favoritas de siempre, en el sitio web fsharpforfunandprofit.

Scala fue el lenguaje que me introdujo en la programación funcional, así que por eso ocupa un lugar especial en mi corazón. Igual que F#, es un lenguaje pragmático, por motivos muy parecidos. Gracias a su integración en el ecosistema de Java, ha contribuido de verdad a popularizar la programación funcional.

Es curioso que te iniciaras en la programación funcional con Scala, que seas mentor de F#, pero que consideres el track de Haskell el mejor. Para alguien que quiera lanzarse a la programación funcional en Exercism, ¿cuál de ellos le recomendarías probar primero?

¡Buena pregunta! Mi voto va para F#, porque me parece el lenguaje más fácil de aprender. Esto se debe principalmente a que F# es menos complejo que los otros dos. Las excelentes herramientas y documentación de F# también son un gran punto a favor cuando empiezas. Dicho esto, te recomiendo encarecidamente que, cuando termines el track de F#, te apuntes también al de Haskell, porque Haskell tiene características avanzadas fantásticas que F# no tiene.

Has tenido acceso a bastantes de nuestros planes para el futuro de Exercism. ¿Hay algo que te ilusione especialmente del proyecto?

De todas las mejoras que se están planeando, la que más me ilusiona es el análisis estático de las soluciones. La idea es montar un sistema que pueda comentar automáticamente las soluciones enviadas, analizando esas soluciones de forma programática en busca de problemas o sugerencias habituales. Esto debería ayudar mucho a los mentores, ya que dejarían de tener que comentar esos problemas o sugerencias habituales y podrían centrarse en cuestiones más interesantes.

Si te interesa, echa un vistazo a mi prototipo (todavía incipiente) de analizador para el track de C#, que usa la .NET Compiler Platform para analizar estáticamente código de C#.

Sí, el análisis estático es más o menos lo que más me entusiasma a mí también. Es genial ver que ya tienes un prototipo montado. Creo que las mejoras de velocidad que nos dará el análisis estático mejorarán muchísimo Exercism, y me hace mucha ilusión cómo podemos ampliarlo para enseñar a programar a quienes empiezan de cero. Creo que va a marcar un antes y un después.

Última pregunta: ¿tienes algún proyecto personal o alguna causa que te toque de cerca y a la que quieras dar un poco de visibilidad?

Para mí, participar en Exercism, contribuir a su base de código abierto y ejercer de mentor ha sido una experiencia increíblemente gratificante. He aprendido un montón de cosas, he conocido a gente estupenda y siento que he podido ayudar a mucha gente.

Me gustaría animar a la gente a que vea si también puede participar. Si hay algún lenguaje que te apasione y quieres ayudar a la gente a aprenderlo, apúntate como mentor en Exercism. Si prefieres escribir código, elige un proyecto de código abierto y contribuye. Te prometo que da mucho menos miedo de lo que parece y que te sentirás genial haciéndolo.

¡Genial! Gracias por sacar tiempo para charlar y por todo tu trabajo en Exercism.

21 de enero de 2019 · ¿Te ha resultado útil?