00:00:08 Lenguajes específicos del dominio (DSL) y su diversidad.
00:01:36 Ejemplos de DSL: AMPL para programación matemática y HTML para páginas web.
00:03:00 Las ventajas de utilizar DSL en lugar de lenguajes de programación de propósito general para tareas específicas.
00:05:22 El uso de un DSL por parte de Lokad para la optimización de la cadena de suministro en diversas situaciones.
00:07:23 Los beneficios de utilizar un DSL para una configuración más rápida y confiable.
00:09:35 Limitaciones de un DSL y sus beneficios en la optimización de la cadena de suministro.
00:12:55 Implicaciones de seguridad de utilizar un DSL en comparación con lenguajes de programación generales.
00:13:01 El proceso de desarrollo de un DSL que consume mucho tiempo.
00:14:49 Consejos para las startups que consideran desarrollar su propio DSL.
00:16:01 La subexplotación de los DSL y las soluciones tradicionales que conducen a productos insatisfactorios.
00:17:26 El dilema de utilizar DSL en lugar de lenguajes de programación convencionales y sus resultados.
00:18:32 SQL y HTML como ejemplos exitosos de lenguajes específicos del dominio.
00:19:46 El potencial de los DSL en diversas industrias y su poder transformador.
00:21:19 Conclusión y posibles desarrollos futuros en el uso de DSL.

Resumen

En esta entrevista, Kieran Chandler discute los lenguajes específicos del dominio (DSL) con Joannes Vermorel, el fundador de la empresa de optimización de la cadena de suministro Lokad. Los DSL son lenguajes de programación diseñados para tareas específicas, a diferencia de los lenguajes de programación de propósito general como Java o Python. Vermorel explica que los DSL se utilizan en industrias como la automotriz, donde proporcionan un funcionamiento sin errores para componentes críticos como los sistemas de frenado antibloqueo. También se discute el desarrollo de su propio DSL, Envision, por parte de Lokad para optimizar la cadena de suministro. Vermorel destaca las ventajas de los DSL, como cálculos eficientes y personalización para dominios específicos, al tiempo que reconoce los desafíos y la naturaleza que consume mucho tiempo de su desarrollo.

Resumen Extendido

En esta entrevista, Kieran Chandler, el presentador, discute los lenguajes específicos del dominio (DSL) con Joannes Vermorel, el fundador de Lokad, una empresa de software especializada en la optimización de la cadena de suministro.

Los DSL son una clase específica de lenguajes de programación diseñados para resolver tipos muy particulares de problemas, a diferencia de los lenguajes de programación generales como Java o Python, que están destinados a abordar una gama más amplia de tareas. Los lenguajes de programación generales están diseñados para proporcionar una forma conveniente, productiva y eficiente de hacer todo lo que se puede hacer con computadoras, mientras que los DSL se centran en resolver problemas específicos. Algunos de los primeros lenguajes específicos del dominio, como AMPL, fueron creados para la programación matemática y otras tareas muy específicas.

Los DSL se utilizan en aplicaciones del mundo real para implementar componentes críticos en diversas industrias. Por ejemplo, en el sector automotriz, se podría utilizar un DSL para desarrollar el software que controla el sistema de frenado antibloqueo (ABS) de un automóvil. El objetivo es crear un sistema casi libre de errores, ya que una falla en este componente podría provocar una pérdida de capacidad de frenado. En cambio, los lenguajes de programación generales pueden no proporcionar el mismo nivel de certeza en la operación libre de errores.

Otro ejemplo de un DSL es HTML, que está diseñado para crear páginas web. HTML es más accesible y más simple que los lenguajes de programación generales, lo que lo hace adecuado para usuarios no técnicos o incluso estudiantes de primaria. Sin embargo, esta simplicidad tiene limitaciones, ya que HTML está limitado en sus capacidades, permitiendo a los usuarios controlar el diseño de una página web en lugar de habilitar tareas más complejas como controlar robots o desarrollar inteligencia artificial.

Cuando se le preguntó por qué se utilizan los DSL en lugar de lenguajes de programación generales más expresivos, Vermorel explica que utilizar un lenguaje de programación general para tareas que se adaptan mejor a un DSL complicaría el proceso. Por ejemplo, utilizar un lenguaje de programación general para el diseño de páginas web significaría controlar cada píxel en la pantalla, en lugar de utilizar elementos simples de lenguaje de marcado, como especificar el título, el tamaño de fuente o la justificación del texto, como es el caso de HTML.

Vermorel explica que los problemas de la cadena de suministro son diversos y ninguna empresa es exactamente igual a otra. Las empresas tienen paisajes de TI y paisajes aplicativos diferentes, y diversas combinaciones de ERPs, WMS y otros sistemas. Esta diversidad crea desafíos para las soluciones de software que intentan abordar la optimización de la cadena de suministro a través de un enfoque único. Los marcos de trabajo tradicionales que dependen de la configuración a menudo requieren una personalización y configuración extensas para cada cliente, lo que lleva mucho tiempo y es costoso.

Reconociendo que cada situación de cliente requiere un software diferente, Lokad buscó desarrollar un proceso más eficiente y confiable. Decidieron crear su propio DSL, Envision, para agilizar el proceso de configuración y hacerlo más rápido y productivo. Vermorel contrasta el uso de Envision con lenguajes de programación generales como C#, F# y TypeScript. Si bien ya están utilizando ampliamente estos lenguajes de programación genéricos, se descubrió que abordar las solicitudes de los clientes con ellos era lento y costoso. Envision fue diseñado para ser más ágil y más adecuado para las demandas únicas de la optimización de la cadena de suministro.

Vermorel destaca que una razón por la que muchas soluciones de software de la cadena de suministro se vuelven abultadas es porque intentan acomodar todas las características y casos de uso posibles. Lokad eligió un enfoque diferente, desarrollando un núcleo DSL altamente enfocado con el propio producto de software siendo Envision y sus capacidades. Esto les permite crear implementaciones personalizadas para cada cliente utilizando Envision, mientras que el compilador y el entorno para Envision se implementan en C#, F# y TypeScript.

Vermorel explica que el uso de un DSL puede introducir limitaciones, pero esto puede ser ventajoso en ciertas situaciones. Por ejemplo, al optimizar una cadena de suministro grande con un conjunto de datos considerable, puede ser difícil asegurar que los cálculos se completen dentro de un marco de tiempo específico utilizando lenguajes de programación genéricos. Un DSL con limitaciones adecuadas puede garantizar que los cálculos se completen a tiempo, evitando interrupciones en la cadena de suministro.

Sin embargo, desarrollar un DSL puede ser un proceso que consume mucho tiempo. Vermorel comparte que a su empresa le llevó casi una década desarrollar su propio DSL. Este largo tiempo de desarrollo puede estar en desacuerdo con la naturaleza acelerada de las startups. El desafío clave en el desarrollo de un DSL es repensar los problemas centrales que se deben resolver y definir las primitivas lógicas necesarias para resolverlos. Esto implica diseñar la sintaxis y los operadores del lenguaje de programación de manera que estén alineados con el problema en cuestión.

A pesar de los desafíos, Vermorel cree que el camino del DSL ha sido poco explorado y podría ser beneficioso para las startups. Desarrollar un DSL no reemplaza la necesidad de ingenieros de software o lenguajes de programación convencionales; de hecho, puede requerir aún más ingenieros de software. Sin embargo, al enfocarse en un dominio de problema específico, un DSL puede ofrecer ventajas en términos de eficiencia, seguridad y optimización.

Vermorel comienza discutiendo las limitaciones del software empresarial tradicional, que a menudo se vuelve abultado y difícil de gestionar. Luego introduce el concepto de DSL como una solución potencial a este problema. Los DSL son lenguajes de programación adaptados a dominios o industrias específicas, que ofrecen capacidades y optimizaciones especializadas.

Vermorel señala que muchos productos de software en el mercado hoy en día son insatisfactorios y tienden a parecerse a software empresarial grande, lo cual no es el resultado ideal. Proporciona el ejemplo de los sistemas de gestión de pedidos multicanal (MOMS), que han llegado a parecerse a los sistemas de planificación de recursos empresariales (ERP) con cientos de pantallas y miles de opciones. El objetivo inicial de diferenciarse de los ERPs se ha perdido y el producto resultante no es mucho mejor que el ERP original.

Argumenta que el uso de DSLs podría haber llevado a un producto más ágil y poderoso en el caso de los MOMS. Sin embargo, adoptar un DSL conlleva sus propios desafíos, como años de dolores de cabeza y limitaciones. Por otro lado, el uso de un lenguaje de programación más convencional podría permitir un crecimiento más rápido pero podría llevar a un producto inmanejable.

Un ejemplo exitoso de un DSL es SQL (Structured Query Language), un lenguaje de programación utilizado para gestionar bases de datos relacionales. Vermorel señala que cuando un DSL se vuelve muy exitoso, a menudo se olvida que es un DSL en primer lugar. Él cree que hay un potencial significativo para los DSL en diversas industrias, incluida la optimización de la cadena de suministro con Lokad.

Chandler pregunta sobre otras industrias donde los DSL podrían ser beneficiosos. Vermorel sugiere el marketing como una posibilidad, donde las empresas a menudo luchan con soluciones de software complejas que no son lo suficientemente poderosas para satisfacer sus necesidades. Los recursos humanos es otra área donde los DSL podrían ofrecer una solución a medida, ya que refleja la cultura única de cada empresa, lo que dificulta que los enfoques de talla única sean efectivos.

Transcripción completa

Kieran Chandler: Hoy vamos a descubrir un poco más sobre cómo se desarrollan y también entender por qué pueden ser ventajosos en comparación con algunos de los lenguajes de programación más convencionales. Entonces, Joannes, tal vez podrías comenzar contándonos un poco más sobre qué son realmente los DSL y cómo funcionan.

Joannes Vermorel: Los DSL son una clase específica de lenguajes de programación que, a diferencia de los lenguajes de programación generales como Java, Python y C++, no están diseñados para ser una solución para todo lo que se puede programar en una computadora. Los lenguajes de programación convencionales se tratan de brindarte la forma más conveniente, productiva y eficiente de hacer todo lo que puedes hacer con computadoras o muchas computadoras si quieres. Pero los lenguajes de programación específicos de dominio son algo completamente diferente. Es programación, por lo que viene con código, y es formal y abstracto, pero está diseñado para resolver problemas muy específicos. Por ejemplo, históricamente, los primeros lenguajes de programación específicos de dominio se trataban principalmente de cosas como AMPL, un lenguaje de programación matemática, diseñado para realizar tareas muy específicas.

Kieran Chandler: Entonces, ¿para qué tipo de problemas usarías un lenguaje específico de dominio y para qué se utilizan en el mundo real?

Joannes Vermorel: En el mundo real, una aplicación histórica sería implementar componentes críticos. Por ejemplo, quieres tener un software que vaya a controlar el ABS en tu automóvil, el sistema de frenos antibloqueo, y quieres tener la prueba de que esta cosa nunca se va a bloquear porque si se bloquea, tu automóvil de repente no tiene capacidad de frenado. Entonces, esa es una situación bastante grave, y pensarías, tratemos de no tener algo demasiado con errores aquí. Eso es en el lado integrado. Luego tienes problemas como HTML para páginas web, donde es un lenguaje de programación, pero quieres que esta cosa sea más accesible. Hay una buena razón por la cual puedes aprender HTML en la escuela primaria; es porque es muy simple. Los conceptos básicos son literalmente muy accesibles incluso para personas que no son técnicas. Pero el compromiso es que HTML te permite controlar el diseño de una página web; no te permite controlar un robot o hacer inteligencia artificial.

Kieran Chandler: Entonces, son muy simples y más limitados. Quiero decir, ¿por qué no usas lenguajes de programación más convencionales, que tienen más expresividad para estas tareas porque son capaces de hacerlo?

Joannes Vermorel: Si piensas en lo que significaría para las páginas web HTML, por ejemplo, en lugar de tener solo un lenguaje de marcado donde puedes decir “título”, “tamaño de fuente grande” y “cuerpo de texto”, “quiero que el texto esté justificado”, y cosas así: controles simples, tendrías que pensar: “Oh, voy a controlar cada píxel en mi pantalla”, y eso no es práctico.

Kieran Chandler: …sería lo que podrías obtener con un enfoque de nivel muy bajo, y si quieres ser aún más bajo nivel, dices, bueno, voy a controlar directamente mis tarjetas gráficas para tener un rendimiento súper alto, y eso es tal vez lo que, si estás construyendo un motor 3D para videojuegos, terminarías haciendo. Pero si solo quieres hacer algo simple, como una página web, simplemente tomaría una cantidad infinita de tiempo hacerlo de esa manera. A través de los videojuegos en 3D, es mucho más simple y directo pasar por IDs y cosas así como HTML. Ok, y es un tema con el que estamos muy familiarizados en Lokad, dado que generamos nuestro propio DSL. Entonces, ¿por qué fue algo tan interesante para nosotros como empresa de supply chain?

Joannes Vermorel: Lo que es un poco desquiciante en la cadena de suministro es que los problemas son tan diversos. Literalmente, no hay dos empresas iguales, quiero decir, no exactamente iguales. No tienen el mismo panorama aplicativo. Algunas empresas tienen un ERP; muchas tienen dos ERPs por malas razones. Tienen un WMS; tienen múltiples WMS. Tienen 10 ERPs diferentes porque operan en diez países diferentes con paisajes de TI diferentes. Tienen la plataforma de comercio electrónico que llegó después, que es algo separado. Tienen aceleradores adicionales. Entonces, el problema era que queríamos hacer optimización de la cadena de suministro, y me di cuenta durante los primeros años que literalmente, el enfoque clásico de tener un marco que se pudiera configurar simplemente no funcionaría. Quiero decir, las situaciones eran tan diversas que terminábamos con una enorme cantidad de personalización y configuración para cada cliente. Y literalmente, cuando empiezas a pensar en tener un software que está completamente listo para usar pero que solo lleva seis meses hacer alguna configuración con el software, ¿es realmente configuración? ¿No es como reinventar literalmente una nueva pieza de software? La realidad es que sí lo es. Y así, decidimos llevar este enfoque al siguiente paso lógico, que es, bueno, si cada vez que nos enfrentamos a una situación, se requiere un software que sea diferente, ¿qué tal si tenemos algo que respalde este proceso para que sea muy productivo, muy rápido, muy confiable? Y en realidad, ahí es donde surgió la idea de tener un DSL, un lenguaje específico del dominio.

Kieran Chandler: Entonces, si has usado un lenguaje de programación más convencional, esa configuración llevaría mucho más tiempo, mientras que tener ese tipo de entorno limitado significa que puedes hacer las cosas mucho más rápido.

Joannes Vermorel: Eso es interesante. Quiero decir, en Lokad, estamos usando lenguajes de programación genéricos. Desde el principio hemos estado usando C-sharp, C-sharp.NET, que es básicamente la pila de programación de Microsoft, y más tarde agregamos F-sharp y TypeScript para diversos propósitos. Así que ya estamos utilizando ampliamente lenguajes de programación genéricos, y estoy muy familiarizado con lo que se puede hacer con esos lenguajes. Pero nos dimos cuenta durante los primeros años de Lokad que abordar las solicitudes de los clientes con este tipo de lenguajes de programación era increíblemente lento y costoso. Entonces, necesitábamos algo mejor, y no era el problema de que no estuviéramos familiarizados con esos lenguajes de programación. Nos dimos cuenta de que pasar por ellos para cada situación de cliente era un poco pesadilla. Y por cierto, esa también es una razón por la que todas esas soluciones de software de cadena de suministro terminan siendo como monstruos gigantescos de software. Es porque intentan poner en su producto de software todo, y luego terminas con un monstruo de software. Entonces, decidimos decir, bueno, ¿qué tal si el producto de software fuera

Kieran Chandler: ¿Qué tal si el producto de software fuera solo un DSL y sus capacidades, algo que sería como un núcleo súper ajustado, y luego cuando vamos a un cliente, creamos una implementación personalizada implementada no en C-sharp sino en Envision, nuestro propio DSL? Pero el compilador y el entorno para Envision, en realidad no están implementados en Envision, están implementados en C-sharp, F-sharp y TypeScript.

Joannes Vermorel: Ok.

Kieran Chandler: Mencionaste que obviamente las cadenas de suministro son increíblemente diversas y cada cliente es increíblemente diferente. ¿El uso de un DSL introduce algún tipo de limitación? ¿Te impide implementar ciertas cosas?

Joannes Vermorel: Absolutamente, y ese es el punto, por sorprendente que parezca. Verás, por ejemplo, un problema muy básico al que te enfrentas es cuando tienes una cadena de suministro grande que deseas optimizar y terminas con un conjunto de datos bastante grande. Digamos que tienes un terabyte de datos. No es absolutamente enorme; puedes ir a un supermercado y comprar un disco duro de 1 terabyte por algo así como 100 euros, lo cual es bastante barato. Entonces, es una gran cantidad de datos, pero no gigantesca. Ahora, el problema es que tu conjunto de datos se actualizará todos los días y quieres, por ejemplo, hacer un recorrido por este conjunto de datos para tomar decisiones inteligentes de supply chain, como decisiones de reposición y decisiones de precios.

Ahora, el problema es que si tienes un lenguaje de programación genérico, ¿cómo te aseguras de que el cálculo se realice en menos de 60 minutos? Es muy difícil. Tan pronto como tienes bucles o construcciones arbitrarias, se vuelve muy difícil demostrar que tu ejecución se ajustará a un marco de tiempo específico, lo cual puede ser un problema si el cálculo que estás haciendo para tomar ciertas decisiones, como decisiones de reposición, necesita ajustarse a una secuencia de ejecución ajustada dentro de tus sistemas ERP. Realmente necesitas que esta ejecución se realice en 60 minutos; de lo contrario, interrumpes toda tu cadena de suministro porque el cálculo lleva demasiado tiempo.

Entonces, ese es típicamente el tipo de cosa donde los lenguajes de programación generales no pueden darte estas garantías porque precisamente puedes hacer todo con ellos, por lo que es muy difícil obtener cualquier tipo de garantía de esos lenguajes de programación. Pero con un DSL que tiene limitaciones adecuadas, hay otro ángulo en este momento: el diseño. En realidad, es muy difícil ofrecer un entorno de programación que sea completamente seguro con un lenguaje de programación genérico. Con lenguajes de programación genéricos como Java, Python o C-sharp, te expones a clases enteras de vulnerabilidades de seguridad. Si puedes hacer cualquier cosa con una computadora, puedes hacer cosas que son relativamente peligrosas desde una perspectiva de seguridad informática.

Nuevamente, tener un DSL significa que hay clases enteras de cosas a las que ni siquiera tienes acceso, como jugar con el sistema operativo, y así se eliminan clases enteras de problemas que ni siquiera te conciernen. Todo lo que te importa es la optimización de la cadena de suministro.

Kieran Chandler: Sí, y eso es de lo que hablamos en nuestro episodio de seguridad. Veamos tal vez el desarrollo de un DSL. Quiero decir, ¿cuánto tiempo realmente lleva desarrollar uno de estos lenguajes, en tu posición, cuánto tiempo llevó desarrollar Envision?

Joannes Vermorel: Esa es una buena pregunta. Literalmente lleva una década, lo cual es un poco insano. Así que cuando eres una startup, ya sabes, dices “muévete rápido y rompe cosas”, vamos a tener un producto mínimo viable que puedas vender en seis meses, y luego comienzas a crear tu propio DSL, y es como literalmente un proceso de

Kieran Chandler: Ciertamente, un esfuerzo de varios años y el desafío clave es que realmente tienes que repensar en el núcleo los problemas que estás resolviendo. Cuáles son los aspectos fundamentales de los problemas y cuáles deberían ser los primitivos lógicos que necesitan estar accesibles en tu mente para resolver esos problemas con computadoras. Es incluso peor que inventar nuevas palabras; es inventar primitivos lógicos para conectar conceptos de manera que puedas, al final, enmarcar clases enteras de soluciones en este lenguaje para obtener soluciones generadas de manera completamente automatizada por computadoras. Pero estás literalmente pensando en el lenguaje de programación en sí, su sintaxis, el tipo de operadores que tienes, lo cual es… y realmente quieres que esas cosas estén completamente alineadas con el problema que estás tratando de resolver. Entonces, si fueras una startup que comienza ahora, ¿recomendarías embarcarte en ese camino y desarrollar este lenguaje, que puede ser increíblemente consumidor de tiempo y bastante difícil de hacer, o más bien aconsejarías quedarte donde estás y trabajar con lenguajes de programación más convencionales?

Joannes Vermorel: Primero, crear tu DSL no es algo que usarás como sustituto de los lenguajes de programación más convencionales. Si eres una empresa de software y quieres crear este nuevo lenguaje como una forma de resolver una clase de problemas, como lo hacemos para la cadena de suministro, necesitarás un compilador y un tiempo de ejecución para ejecutar estos programas escritos en estos lenguajes de programación. Y este compilador se escribirá con un lenguaje de programación regular. Entonces, no es porque sigas el camino del DSL que no necesitarás ingenieros de software; todo lo contrario, necesitarás aún más ingenieros de software.

Considerando la pregunta para las startups, creo que es interesante porque el camino del DSL es tan ambicioso que ha sido significativamente subexplotado. Veo muchas empresas de software y startups tratando de abordar problemas de la manera clásica porque tienen prisa, y terminan con productos ligeramente insatisfactorios. Cuando veo el tipo de productos que están entregando al mercado, digo que es interesante, pero se dirigen directamente a convertirse en un gran software empresarial, que no es exactamente a donde quieres ir.

Un ejemplo sería lo que llamo “sistemas de gestión de pedidos multicanal”. Hay una ola de productos de software que siguieron ese camino, y los más grandes ahora se parecen bastante a los ERPs por sí mismos, con literalmente cientos de pantallas, miles de opciones, y lleva meses configurarlos correctamente. En realidad, no terminan en un lugar que sea mucho mejor que los ERPs que fueron el punto de partida para diferenciarse y tener productos más ágiles, más rápidos de implementar, y así sucesivamente. Diez años después, terminas con algo que es increíblemente similar a un ERP, y tal vez ese sea el tipo de problema donde usar un DSL habría marcado la diferencia.

Kieran Chandler: Estamos discutiendo las diferencias entre el uso de un lenguaje específico de dominio (DSL) y un lenguaje de programación convencional para el desarrollo de software. Con un DSL, podrías enfrentar años de dolores de cabeza pero eventualmente terminar con una solución poderosa y ágil. Por otro lado, el uso de un lenguaje de programación convencional podría llevar a un crecimiento más rápido pero podría resultar en un sistema inmanejable.

Joannes Vermorel: Es interesante destacar que uno de los primeros DSL exitosos fue SQL, el lenguaje de consulta para bases de datos. Hoy en día, cada proveedor de bases de datos vende básicamente un DSL, ya que la única forma de interactuar con una base de datos es a través de consultas escritas en un lenguaje específico de dominio. Cuando un DSL se vuelve increíblemente exitoso, la gente olvida que es un DSL. Por ejemplo, HTML se ha vuelto tan común que la gente no lo considera un DSL. Creo que hay mucho potencial para los DSL en diversas industrias, como la optimización de la cadena de suministro con Lokad.

Kieran Chandler: Aparte de la industria de la cadena de suministro, ¿en qué otras industrias crees que se podrían beneficiar del uso de un DSL?

Joannes Vermorel: El marketing es una industria que me viene a la mente. Veo muchas empresas luchando con soluciones de software complejas que no son lo suficientemente poderosas. Terminan haciendo mucho trabajo con Excel, lo cual es difícil de mantener y llevar a producción. Los recursos humanos es otra área donde los DSL podrían ser beneficiosos. La gestión de recursos humanos a menudo refleja la cultura de una empresa, lo que dificulta tener una solución única para todos. Creo que los DSL tienen el potencial de tener un impacto significativo en prácticamente todas las industrias, pero la forma en que se implementan puede variar mucho de un problema a otro.

Kieran Chandler: Nos quedamos con eso. Gracias por tu tiempo hoy, Joannes.

Joannes Vermorel: De nada.

Kieran Chandler: Eso es todo por hoy. Gracias por sintonizar, nos vemos la próxima vez. Hasta luego.