(00:00) Intro
(00:38) El commit misterioso
(03:19) El JS que dolía
(05:08) El autor misterioso
(09:29) Diseño y filosofía del lenguaje
(14:30) El auge
(16:03) La revelación
(18:52) Outro
El mundo de web dev en 2009 era muy distinto a lo que conocemos hoy en día. Un lenguaje misterioso nacería de un "thought experiment" durante principios de la seguna década del nuevo milenio y aquí te presentamos un poco del origen de esta tecnología que llegó a ser extremadamente popular, y aunque 15 años después muy pocas veces es nombrada, podríamos decir que ha trascendido y dejó un legado muy importante en el desarrollo de aplicaciones basadas en JS.
Sources:
https://github.com/jashkenas/coffeescript/commit/8e9d637985d2dc9b44922076ad54ffef7fa8e9c2
Changelog Interviews #29 (2010): https://changelog.com/podcast/29
JSConf 2011 – “CoffeeScript as a JS/Next”: https://www.youtube.com/watch?v=QTj6Q_zV1yg
FutureJS 2014 – “JS.Next and CoffeeScript”: https://www.youtube.com/watch?v=TiLJKpzlOeY
Admin Magazine (2012) – “CoffeeScript: A Replacement for JavaScript?”: https://www.admin-magazine.com/Articles/CoffeeScript-A-Replacement-for-JavaScript
RubyInside (2010) – “CoffeeScript: A New Language With A Pure Ruby Compiler”: https://rubyinside.com/coffeescript-a-new-language-with-a-pure-ruby-compiler-2921.html
Lista de lenguajes que compilan a JS (GitHub wiki de CoffeeScript): https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS
Redes Sociales:
Patreon: patreon.com/cw/mytypeofradio
Buy me a coffee: buymeacoffee.com/mytypeofradio
Bluesky: @mytypeof.dev
Twitter: @mytypeofradio
Facebook: My typeof Radio
Instagram: @mytypeofradio
YouTube: @mytypeofradio
Mastodon: @mytypeofradio@mastodon.online
LinkedIn: @mytypeofradio
Nuestra página web:
https://mytypeof.dev
Mándanos un correo:
hello@mytypeof.dev
[0:09] Axel: Esto es... My typeof Radio. Un podcast de desarrollo web en español. Con Axel Martínez
[0:38] Axel: 13 de diciembre de 2009. En GitHub aparece un repositorio nuevo.
[0:45] Axel: No hay blog post, no hay anuncio en Twitter, solo 10 archivos modificados de código con extensiones .rb y .jaa. El primer commit dice textualmente: Initial Commit of the Mystery Language.
[1:05] Axel: o commit inicial del lenguaje misterioso.
[1:09] Autor Misterioso: I've had this kind of idea kicking around in the back of my head for a long time about, you know, what would JavaScript look like if it could look like anything you wanted it to look like, you know, if it hadn't been basically stuck in a place where you had all the browsers trying to having to agree on what JavaScript would be in order to make any progress. If it had been a language that had evolved, what could it look like? And it was just for fun sort of, and it still is, it's for fun. I'm not trying to sell it or to build a business out of it or to persuade you to use it. It's a thought experiment about what JavaScript could look like, potentially.
[1:45] Axel: No es una gran empresa, no es un laboratorio de investigación, es una sola persona trabajando en algo que parece un experimento. Nadie imagina que dentro de unos años ese experimento va a estar en miles de proyectos y que dentro de 15 años más casi nadie va a recordar su nombre.
[2:09] Axel: 11 días después del primer commit, el 24 de diciembre de 2009, esa persona lanza la primera versión etiquetada y documentada, la 0.1.0.
[2:21] Axel: El compilador en ese momento está escrito en Ruby, un lenguaje de programación que nació en los 90, conocido por su sintaxis limpia y legible, muy popular en el desarrollo web de esa época, especialmente con el framework Ruby on Rails. Dos meses después, el 21 de febrero de 2010, lanza la versión 0.5, y ahí pasa algo interesante, el compilador se reescribe a sí mismo en este lenguaje. otras palabras, el lenguaje ahora se compila a sí mismo. Es self-hosted.
[2:59] Axel: Un año después, el 24 de diciembre de 2010, anuncia la versión 1.0.0 estable. Y la sube a Hacker News.
[3:09] Axel: ¿Y tú ya sabes de qué lenguaje estamos hablando?
[3:19] Axel: Para entender por qué alguien se pondría a crear un lenguaje nuevo en 2009, hay que recordar cómo era JavaScript en ese momento.
[3:28] Axel: Javascript en 2009 podía llegar a ser largo y repetitivo. Funciones descritas con la palabra reservada function, el infame e impredecible this, una herencia por prototipos confusa, no había clases, no había módulos, no había arrow functions y tampoco template strings. Si venías de Ruby o Python, escribir Javascript se sentía como pasar de un idioma con gramática a otro donde todo el mundo inventa las reglas sobre la marcha. Era, como muchos decían por entonces, tierra de nadie.
[4:02] Axel: Y sin embargo, ese era el lenguaje de la web, el único que corría en todos los navegadores, el único que podías usar si querías hacer algo interactivo en el navegador.
[4:15] Axel: En ese mundo nace nuestro lenguaje misterioso con una promesa implícita, JavaScript como te hubiera gustado que fuera.
[4:23] Axel: No es un reemplazo de JavaScript y tampoco un lenguaje que compite con JavaScript, es más bien una capa encima, una forma más limpia de escribir lo mismo.
[4:35] Axel: Compila a JavaScript, eso sí, comparte la mayoría de las piezas del lenguaje, pero con una sintaxis más ajustada. Y la idea es que el código generado sea fácil de leer, que pase el JavaScript Lint, que no cause errores de sintaxis ni warnings, que funcione en cualquier runtime donde JavaScript ya lo hace, y que sea al menos tan rápido como el código JavaScript escrito a mano.
[5:08] Axel: La persona detrás de este lenguaje no es un académico de lenguajes, no es alguien que pasó años estudiando compiladores en la universidad, es una persona que en 2009 trabaja en dos frecuencias.
[5:22] Autor Misterioso: I work at the New York Times. I've been physically there working for about five years now with one year off for good behavior and I usually work in the newsroom on the graphics team these days. So working on sort of fun fiddly interactive graphics and visualizations and working with databases.
[5:45] Axel: Por un lado, en el equipo de interactive news del New York Times, un equipo que se encarga de crear visualizaciones interactivas, explicaciones, mapas, todo eso que ves en la web del New York Times y que te ayuda a entender noticias complejas.
[6:02] Autor Misterioso: So basically, I'm working on this project that is to make an online repository of primary source documents that news organizations contribute and the journalists get to use to do their document-based research. And when they're done writing their story, they put the documents online alongside the story for extra context. And so that's a large JavaScript application. And we're doing a ton of client-side JavaScript to show the entities that are present in the documents and to show the dates that are present on timeline.
[6:30] Autor Misterioso: And I've been using JavaScript heavily on the client side for a long time. And I'm very excited about, about what's going to happen when we can start using the same language on both the server side and the client side. And, you know, not only is it going to be the same language, but it's also going to be a very nice language and it's going to be very fast language.
[6:49] Axel: Por otro lado, en Document Cloud, una herramienta para ayudar a organizaciones de noticias a analizar y publicar documentos fuente. En ese tiempo, esta persona tenía una cantidad enorme de trabajo en su escritorio, y con entusiasmo publicó en rápida sucesión varias versiones de un nuevo lenguaje, con el objetivo de que fuera más fácil de leer que JavaScript, pero que se tradujera
[7:20] Axel: ¿Por qué haría alguien eso? ¿Por qué ponerse a crear un lenguaje nuevo en medio de tanto trabajo?
[7:27] Axel: La respuesta está en el tipo de trabajo que hacía.
[7:32] Autor Misterioso: With a graphic, often the code needs to work for about one day. And after that 24 hours, you're never going to touch it again. And you don't have to worry about it. If it's a big mess, if it's a big hairball, that's OK. So the rules are a little bit different. But I think it's fun to have both influences when you work on things, keeping in mind the longer term aspects, but also just blank slate. You have 24 hours before the deadline hits. What can you do with this data set in 24 hours? go. And if you don't finish, then it doesn't matter because the story is gone and it's too late past that point.
[8:11] Axel: En una visualización, el código funciona por un día y después no tienes que preocuparte por él. Así que no se trataba de escribir el código perfecto que durara 10 años, se trataba de entregar algo que funcionara mañana, que le demostrara al usuario lo importante, y después, si era un desastre.
[8:31] Axel: En ese contexto, un lenguaje más limpio, más legible, más rápido de escribir.
[8:37] Axel: Todo esto no era un lujo, era una herramienta de supervivencia.
[8:44] Axel: Si tienes 24 horas para entregar una visualización, cada minuto cuenta. Y si puedes escribir el mismo código en menos tiempo con menos errores...
[8:54] Axel: eso no solo es más cómodo.
[8:58] Axel: es más práctico también.
[9:03] Axel: Este lenguaje entonces no nace de un deseo abstracto de hacer un lenguaje mejor.
[9:09] Axel: nace de una necesidad concreta, escribir javascript más rápido con menos dolor en un entorno donde el tiempo es escaso.
[9:29] Axel: Comencemos por decir que nuestro autor misterioso tiene un background de Ruby y JavaScript.
[9:36] Axel: También mencionar que el lenguaje nuevo no es solo JavaScript con menos caracteres, es una serie de decisiones de diseño conscientes. Toma JavaScript y reemplaza algunas partes complejas con las abreviaturas más legibles, y los asona con Haskell y Ruby.
[9:54] Axel: Es importante que sea source to source, es decir, que el código del nuevo lenguaje tenga un nivel de abstracción muy similar al del lenguaje que compila, o más adecuadamente transpila. En un momento hablamos más de esto. El JS que aparece debería ser el código más parecido a lo que hubieras escrito a mano. En enero de 2010, apenas semanas después de esta primera versión estable, Ruby Inside, uno de los blogs de Ruby más leídos entre 2006 y 2012, escribió un artículo en el que citó al creador del lenguaje.
[10:28] Axel: El creador lo llama el hermano menos ostentoso de JavaScript.
[10:34] Axel: Un año después, en 2011, nuestro autor misterioso sube al escenario de la JSConf, y no sube solo. Invita al creador de JavaScript, Brendan Eich, a hablar del futuro del lenguaje. En esta charla se mencionan dos ideas que van a ser clave para entender todo lo que viene después, los transpilers y los source maps.
[10:56] Brendan Eich: The word of the day I want to leave you with is transpiler, which is another one of these neologisms or trans compiler, I suppose is nicer. But if you have like level languages, you're not lowering to machine code, this term makes some sense because there are differences between having to write a compiler that generates arbitrary transformations and requires arbitrary runtime machinery versus it's just syntax, it's just JavaScript. There's a big difference in fact. It's a theoretical computer science difference.
[11:25] Axel: sobre los transpilers, también conocidos como transcompiler. Al usar lenguajes de niveles similares y no tener que bajar a código máquina,
[11:35] Axel: No debes crear un compilador para generar toda una maquinaria necesaria para crear nuevo código, a diferencia de lo que logra este lenguaje, que sigue siendo...
[11:49] Brendan Eich: People then say, oh, but I can't debug my primary source. Well, we're working on that. There are proposals, and I think the VNA guys are on board to work on this, to make it so that you can have a concise mapping to the original line number and column number in your primary source. So when you're debugging and planning break points, you're not working on your generated JavaScript.
[12:07] Axel: En los source maps en 2011 la idea apenas está trabajando, en esa charla se menciona como algo en desarrollo, para entonces depurar el código que el navegador está ejecutando no se hace sobre el código fuente, sino sobre el código que fue generado a partir de este. Años después los source maps también se convertirán en una realidad y nuestro lenguaje misterioso estaría soportado.
[12:31] Axel: En esa misma charla de 2011 se describe la filosofía de este lenguaje, un pequeño lenguaje que compila a JS y trata de exponer las partes buenas mientras pone debajo de la alfombra las partes más incómodas, hasta donde lees posible sin cambiar la semántica del runtime.
[12:49] Axel: ¿Qué pasaría si, además de obviar el punto y coma, pudieras obviar las llaves? Si pudieras trabajar de manera sencilla con la herencia? Si tomamos un lenguaje que ya tiene un modelo de objetos muy bello, limpio y simple, con una estructura altamente dinámica como lo es JavaScript, que tiene funciones First Class, pero hay una limitación fundamental, y la persona detrás de este lenguaje lo sabe muy bien. Aos 10 años después de esa charla en la JSConf, sube a otro escenario en 2014, esta vez en Barcelona, en el Future JS, a explicar cómo convive con esta limitación.
[13:30] Autor Misterioso: Often if you read through some of the TC39, the committee that works on the JavaScript spec, if you read through some of the minutes where they're discussing features, frequently don't break the web. You know, oh, we'd love to do that, but we can't break the web is a big concern.
[13:49] Axel: El TC39 termina muchas de sus minutas con Oh, nos encantaría hacer eso, pero no podemos romper la web.
[13:58] Axel: En otras palabras, no puedes cambiar JavaScript directamente, no puedes decir vamos a romper esto para hacerlo mejor, porque la web entera depende de que lo que funciona hoy, funcione también mañana.
[14:12] Axel: Así que la única opción es crear una capa encima, un lenguaje que compile a JavaScript, que mantenga las mismas reglas de comportamiento pero que sea más fácil de leer y de escribir.
[14:30] Axel: El tiempo siguió su curso y el lenguaje fue adoptado por muchas más personas, como queda descrito en la charla que dio el creador en el FutureJS de 2014 en Barcelona.
[14:42] Autor Misterioso: This is all now, you know, three years ago, four years ago, and when I would first talk about it, it was totally hypothetical. I'm like, all right, we put out this compiler, it's all documented and broken apart, hopefully someone will play with it, and you know, you don't really have expectations, anyone's gonna actually take the time to do that, but amazingly, it's pretty incredible the number of alternative approaches and both existing languages and experimental languages and conceptual languages that folks are building to compile the JavaScript.
[15:17] Axel: Let a thousand flowers bloom. El compilador está abierto. Si en un punto alguien quiere reintroducir Shadowing y los Assignments de las variables, podría tomar el compilador y modificarlo para que esto suceda.
[15:31] Axel: Hace 4 años era completamente hipotético, documentamos y anotamos todo el código del compilador y lo compartimos, realmente sin esperar mucho. Ahora hay un número grandísimo de lenguajes que compilan a JS con forks de compilador de este lenguaje.
[15:47] Axel: Unos años después de su creación, es uno de los repositorios con más estrellas de GitHub. Se usa en proyectos de Ruby on Rails, en startups, en grandes sitios, en herramientas de build y generators.
[16:03] Axel: Este lenguaje se llama CoffeeScript y su creador es Jeremy Ashkenas.
[16:09] Axel: El 13 de diciembre de 2009, Ashkenas hizo el primer commit de CoffeeScript con el comentario Initial Commit of the Mystery Language. 11 días después, la primera versión. Dos meses después, el compilador se escribe a sí mismo en este lenguaje. Un año después, la versión 1.0. Y 15 años después, este lenguaje sigue vivo en miles de líneas de código legacy. Pero si escribes JavaScript moderno, con arrow functions, classes, destructuring, módulos, en realidad estás usando varias de las ideas que este lenguaje popularizó.
[16:46] Axel: Antes de irnos, quiero dejarte un cachito de la última parte de su talk en 2011, que me pareció una gran manera de cerrar.
[16:57] Jeremy Ashkenas: Don't wait for browsers to give you the language that you want. Don't wait for ECMA International to give you the language that you want You can give yourself the language that you want right now And I think that this is kind of important above and beyond just JavaScript, right? Because JavaScript is too important of a thing to f*** around with, right? It's too important to be left to the experts and With all due respect and credit to Brendan and the rest of the TC39 committee, right? The web is the most important cultural artifact of our time and JavaScript is kind of its pulse and we can't afford to let it stagnate for another decade we can't afford to let a corporation tell us how it's going to go and JavaScript needs your ideas your libraries your languages I look forward to seeing more of them in the coming year
[17:42] Axel: No esperes a que los navegadores te den el lenguaje que quieres.
[17:46] Axel: No esperes a que ECMA International te de el lenguaje que quieres.
[17:51] Axel: JS es demasiado importante para dejarlo en manos de los expertos. La web es el artefacto cultural más importante de nuestro tiempo y JavaScript es su pulso. No podemos permitirnos dejarlo estancado durante otra década más. JavaScript necesita tus ideas, tus librerías, tus lenguajes.
[18:14] Axel: En el próximo episodio seguiremos con esta historia del lenguaje misterioso que se convirtió en una de las tecnologías más influyentes de la última década y que al mismo tiempo bien podríamos preguntar:
[18:28] Axel: Oigan... Y... CoffeeScript?
[18:52] Axel: Gracias por acompañarme hasta el final de esta instancia. No te olvides de suscribirte en tu plataforma favorita como Apple Podcasts, Spotify, Amazon Music, entre muchas otras. Tenemos Patreon donde hay un poco de contenido extra especial y también una cuenta en BuyMeACoffee por si quieres echarnos una mano.
[19:10] Axel: Nos podemos saludar por ahí en las redes sociales en general con el handle arroba mytypeofradio todo junto: BlueSky, Twitter, Facebook, Instagram, Threads, Mastodon y hasta LinkedIn ¿Deberíamos abrir cuenta en TikTok?
[19:25] Axel: Puedes encontrar el canal de YouTube donde siempre te agradeceré dejar tus comentarios. Visita la web del proyecto en mytypeof.dev donde también puedes dejar reseñas y mandar tu feedback.


