Video Original publicado el 28 de Diciembre de 2018:
Link a IOHK: Input Output - IOHK
Mucha gente esta haciendo blockchains, Cardano es el producto de IOHK, tiene un montón de funciones que a otros les falta, como por ejemplo el ser Prueba de Participación (Proof of Stake - PoS) en vez de Prueba de Work (Proof of Work - PoW). Desde Ethereum, lo que la gente busca en una blockchain son los contratos inteligentes. Plutus es el lenguaje de contratos inteligentes para la blockchain de Cardano. La mas antigua es Ethereum, la cual tiene grandes ideas incorporadas, pero también, de forma regular, pierde decenas de millones de dolares , parte de ello se debe a lenguaje pobre, que alguien como yo, proveniente de los lenguajes de programación lo detectaría, pero los scams se logran aprovechar de esta falla.
Hay cosas que todavía no entendemos del todo, sabemos un montón acerca de la construcción de sistemas confiables. Una cosa que creo ayuda un montón es construirlas es un lenguaje funcional, Plutus fue construido como un lenguaje funcional, es muy distinto, no a todos, pero a la mayoría. Esta construido en Haskell, donde hay 30 años de experiencia, creemos que hay mucho que se puede hacer, las instituciones financieras utilizan haskell porque creen que pueden escribir programas para analizar los mercados financieros de forma mucho mas rápida y confiable, los bancos lo utilizan mucho. Tiene sentido aplicar esto a las blockchain, sabemos un montón acerca de aplicar los Métodos Formales (ver mas información aquí) a los lenguajes funcionales, es decir, poner algo en un entorno y realizarle todos los ataques posibles y probar que ningún ataque, bajo cierto modelo, puede funcionar. Estamos en una posición de poder empezar a hacer esas cosas, me gustaría decirte que ya todo esta resuelto, de forma perfecta pero no, todavía esta para ser investigado por la comunidad.
Los lenguajes de programación tienen distintos niveles de poder, algunos son muy limitados, otros pueden hacer cualquier cosa que la computadora pueda hacer, su nombre técnico es "Turing complete", cualquier cosa que la computadora pueda hacer, cualquier lenguaje de programación que sea Turing complete, podrá realizarlo. Plutus es un lenguaje Turing complete, ese es mas poder del que necesitas, frecuentemente lo que quieres es lo que se denomina "domain specific language", algo que hace mas fácil hablar de las cosas en un dominio especifico, digamos escribiendo contratos financieros, una de las ventajas es que te permite realizar análisis. Se ha realizado mucho trabajo, particularmente en el área de programación funcional, Simon Peyton Jones, trabajando con algunos coautores, presentó un modelo muy sencillo de contratos financieros, conocí muy bien del documento, era el presidente de la conferencia, introduje una nueva categoría llamada Pearl, esto no es una nueva investigación, es una bonita aplicación a algo ya conocido, la cual ha sido de gran influencia, uno de los análisis que pueden hacerse al escribir el contrato es que los valores del mismo pueden depender de distintas cosas, como por ejemplo el precio semanal del Azúcar.
Es importante destacar que si tomamos los muy oscuros contratos que condujeron a la crisis de precios, programándolos de esta forma y analizándolos, podría haber habido menos problemas. Desafortunadamente, así como los bancos no tenían la debida regulación, tampoco hubo una implementación de estas ideas, como debería haber pasado. Pero las ideas han sido desarrolladas, puedes usarlas para valorar cosas y escribir acerca de las cosas. Lo bueno es que no necesitas a un programador para hacer esto. IOHK no es el único grupo siguiendo esto, tuvimos unas conversaciones con un par de grupos que están escribiendo contratos muy similares, también descendientes de los documentos originales de Simon Peyton Jones, han descubierto algo realmente importante, el hecho de no necesitar programadores para hacer esto, hacen que su gente hable con lo que ellos definen ingenieros financieros, quienes pueden ocuparse del mantenimiento de estos contratos, no necesitas un desarrollador de tiempo completo, puedes utilizar a alguien mas orientado a los negocios para que escriba lo que se requiera y confirmar que realiza lo deseado. Este tipo de lenguaje es muy valioso y Marlowe (ver emulador de Marlowe aquí)es nuestra contribución al espacio, básicamente esta usando las mismas ideas, pero tendrás que hacer algunas cosas para adaptarlo a la blockchain, mencioné que el contrato podía depender del precio del azúcar, ok ¿Como sabemos cual es el precio del azúcar si estamos en una blockchain? El nombre de esto es Oracle pero hay varias formas de hacerlo y en eso estamos trabajando. Marlowe ha sido diseñado tomando estas ideas y adaptándolas a la blockchain Cardano, creo que es una gran idea porque si bien me encanta el poder de los lenguajes de programación, no siempre lo necesitas, entonces si puedes basarte en un lenguaje de dominio especifico (domain specific language), esa será la cosa que querrás hacer. Es muy interesante que través de distintas piezas de trabajo se haya llegado a los mismos componentes. Las computadoras no son tan viejas, así como tampoco los programas de computación, los programas fueron desarrollados a finales de la segunda guerra mundial, muy interesantemente los modelos de computación fueron desarrollados apenas antes de eso, en los años 30, por Alan Turing, al mismo tiempo, un modelo distinto pero equivalente fue desarrollado por Alonzo Church, y ese fue el primer lenguaje de programación funcional llamado Cálculo Lambda. Una de las cosas que realmente me gusta del Cálculo Lambda es que es mas viejo que las computadoras, se estaba buscando formulaciones para la lógica simbólica y a pesar de que la lógica simbólica ha estado presente por 2000 años, desde los antiguos Griegos, la formulación que usamos ahora fue inventada en 1935, y sólo en 1969 nos dimos cuenta que lo inventado en 1932 por Church y lo inventado en 1935 son en realidad la misma cosa, pero nos tomó 50 años darnos cuenta de eso. Entonces, el hecho de que algo haya ocurrido independientemente dos veces para mi es realmente asombroso, sugiere que esto no es completamente arbitrario, si miras al lenguaje de Java o JavaScript, hay tanto en el que es arbitrario, el Cálculo Lambda es muy pequeño, nada en el es arbitrario, una evidencia de ello es que fue descubierto por dos personas distintas independientemente, es por ello que encuentro a los programas funcionales tan excitantes, no son arbitrarios, mas nos adentramos, mas poderoso parece ser.
Cuando comenzamos Haskell había un montón de diferentes lenguajes funcionales, éramos unas cuantas personas explorando las mismas técnicas y había dos grandes familias llamadas strict y lazy, estábamos trabajando en la familia lazy, había entre 6 y 12 grupos de investigación, cada uno haciendo su propio trabajo hasta que alguien dijo que quizás sería mejor si todos trabajaran juntos. Estos grupos se juntaron, se estandarizó un lenguaje al cual llamamos Haskell, había 4 editores del lenguaje, John Hughes, Paul Hudak, Simon Peyton Jones y yo y un grupo mayor que contribuia con ideas, fue extremadamente productivo. Gente trabajando en este rincón del espacio se ha vuelto extremadamente exitosa en términos académicos, pero es muy interesante que tu continúes haciendo algo por 30 años y te des cuenta que ya no es algo solamente académico, durante este tiempo le hemos enseñado a un montón de estudiantes, muchos de los cuales han salido al mundo y dicho que quieren utilizarlo para que las cosas realmente se hagan. Como ya mencioné, ahora es muy usado por los bancos, fué elegido por IOIK y por otras firmas de criptomonedas como forma de construir software del que puedes tener alta seguridad pero igualmente puedes construir rápido. La historia de hechos independientes que ocurren dos veces se repite a lo largo del tiempo, en este caso, en sucesos independientes se llegó a la siguiente extensión natural del Cálculo Lambda, que es lo que quisieras hacer si tuvieras un lenguaje tipificado (typed language), donde lo mas importante es poder parametrizar sobre esas tipificaciones, digamos que tienes una rutina de clasificación, es una lista de cosas, donde hay una relación de orden y eso clasifica la lista, ok ¿una lista de que? Se pueden parametrizar listas de editores, listas de listas, etc y es lo que se llama Cálculo Lambda Polimórfico (Polimorphic Lambda Calculus), es un sistema muy simple, como el Cálculo Lambda y eso es lo que usamos para Plutus Core, no hay nada mas, es exactamente el sistema que fue descubierto independientemente por dos personas distintas, hace 45 años atrás y podemos usar exactamente eso para lo que estamos haciendo.
Antes, las charlas eran solamente académicas, pero hace aproximadamente una década me encontré siendo invitado cada vez mas a conferencias de desarrolladores, para mi es muy excitante ver estas comunidades de gente interesadas en los lenguajes funcionales, con los que han realizado cosas asombrosas. El mundo técnico se remonta al Renacimiento, pero solo tenemos las computadoras entre nosotros hace menos de 100 años, es muy emocionante ver como esto empieza a salir al mundo y ver lo que la gente hace con ello. En este momento muy poca gente esta siendo entrenada en lenguajes de programación, pero todo el mundo lo será en el futuro. IOHK esta haciendo un fenomenal trabajo contribuyendo a estas comunidades, están dirigiendo un numero de escuelas, tuve la oportunidad de hablar en una de ellas en Barbados (ver link aquí), entrenando a una nueva generación de gente, pronto habrá otra en Etiopía, también es importante la comunidad específica que IOHK esta creando, las cuales interactuarán muy bien entre si, IOHK es un muy buen ciudadano de esta comunidad, contribuye mucho manteniendo a Haskell como un desarrollo en crecimiento, haciendo que sea mas fácil para la gente utilizarlo, tanto del lado de desarrollo técnico como de educación.