Consejos y trampas para aprender XSLT y la programación funcional "real"
functional-programming (4)
Hasta hace poco, mi conocimiento de XSLT era suficiente para mis necesidades simples y directas. Pero un requisito más avanzado me envió al material de referencia cuando "solo intenté cosas" no funcionó. En realidad fue divertido comenzar de nuevo desde el principio. Inicialmente aprendí XSLT en medio de la presión del plazo y en 20/20, en retrospectiva, "trabajar" era claramente más importante que "entender".
Me sorprendió leer en la página 33 del libro de Michael Kay que XSLT tiene sus raíces en Scheme. Wikipedia dice,
Scheme es uno de los dos dialectos principales del lenguaje de programación Lisp.
Quizás sé (o pronto sabré) más sobre programación funcional de lo que pensé que era. ¿Buscar SO para publicaciones como Is XSLT es un lenguaje de programación funcional? y siguiendo sus enlaces de trabajo muestran que hay varias opiniones sobre si XSTL es o no un lenguaje funcional. De la publicación ¿Qué lenguaje de programación funcional debería elegir como primer lenguaje de programación funcional? Obtuve el consejo de aprender F # primero porque vengo de .NET y me gusta acceder a programas útiles rápidamente.
Mi primera pregunta es, si alguien conoce XSLT 2.0 muy bien, ¿qué parte de un lenguaje de programación funcional "real" como F #, Lisp o Haskell hace que la persona ya sepa antes de aprender F #, Lisp o Haskell? A los efectos del debate, supongamos que una persona que "conoce muy bien XSLT 2.0" aprende muy pocos conceptos nuevos la primera vez que lee el libro de cocina XSLT . En cambio, su reacción ante información desconocida es: "Por supuesto que es una buena forma de hacerlo. ¡Debería haber pensado en eso!"
La segunda pregunta es, ¿hay partes de XSLT 2.0 / XPATH 2.0 que debería asegurar que entiendo muy bien para facilitar el aprendizaje de F # / Lisp / Haskell?
En tercer lugar, ¿hay partes de XSLT que se ignoran mejor si se planea eventualmente aprender F # / Lisp / Haskell / etc.? Es decir, ¿XSLT tiene conceptos análogos a GOTO, ALTER y ON ERROR RESUME NEXT que no son apropiados en lenguajes de programación funcionales "reales"?
Las respuestas breves están bien porque aprender un lenguaje de programación funcional es un proyecto futuro no programado para mí.
PS Varios hipervínculos eliminados por falta de reputación. ¡Drat! ;-)
Creo que XSLT es, de hecho, un buen primer lenguaje funcional puro: http://blogs.msdn.com/ashleyf/archive/2007/04/11/xslt-a-pure-functional-language.aspx
He jugado un poco con XSLT, y he profundizado en los lenguajes funcionales Lisp, Scheme y Haskell. Por lo poco que he visto, no estoy seguro de que XSLT, como se usa comúnmente, le enseñe mucho sobre los lenguajes funcionales. Puede aprender algunos trucos, pero en mi opinión, JavaScript es una mejor analogía de lo que verá en los lenguajes funcionales sin tipo.
Wikipedia me respalda en este:
Como lenguaje, XSLT está influenciado por lenguajes funcionales y por lenguajes de patrones basados en texto como SNOBOL y awk. Su predecesor más directo fue ISO DSSSL, un lenguaje que realizaba la misma función para SGML completo que XSLT realiza para XML. Muchos de los comités de estándares que desarrollaron XSLT habían trabajado previamente en DSSSL, incluido James Clark. XSLT también se puede considerar procesador de plantillas Turing-completo.
En otras palabras, toma mucho de los lenguajes funcionales, pero también toma prestados lenguajes de plantillas como awk y SGML. Entonces sí, es un lenguaje funcional, de la misma manera no completamente obvia que las plantillas de C ++ son un lenguaje funcional . Pero no hay una línea fácilmente mapeada desde el aprendizaje de XSLT hasta Scheme o Haskell.
Además, no subestime cómo diferentes lenguajes funcionales pueden ser el uno del otro. Lisp y Scheme están escritos tan vagamente que se sienten esencialmente sin tipo. Creo que estos lenguajes son como el chino mandarín de los lenguajes de programación, con una sintaxis esencialmente fluida y basada en el contexto. Haskell, por otro lado, está tan fuertemente tipado que confunde incluso a los programadores experimentados. También va más allá de sus raíces de cálculo lambda para tomar prestados los conceptos del álgebra abstracta y la teoría de categorías, lo que hace que sea un poco alucinante aprender para los tipos no matemáticos.
Pero nada de esto tiene la intención de desanimarte. Por supuesto, aprenda un lenguaje funcional. Cambiarán su enfoque de programación de formas que nunca sospecharía.
Mi consejo sería no apoyarse demasiado en XSLT cuando esté aprendiendo su primer segundo lenguaje funcional. Esto es lo que estoy pensando:
En la actualidad hay muchas buenas "rampas" para varios lenguajes funcionales que no presuponen conocimiento y experiencia previos. Si su experiencia con XSLT le permite viajar más rápido en la rampa, todos estamos sorprendidos y complacidos, pero no es necesario.
Los programadores funcionales se preocupan mucho por la sintaxis. Los programadores de XSLT están obligados a usar la sintaxis XML. Por lo tanto, existe un gran límite en las normas y valores de la comunidad entre las dos comunidades.
El lenguaje funcional típico no solo es funcional, sino que tiene algo especial que le preocupa, lo que le da al lenguaje un sabor único. Algunos ejemplos (en orden alfabético):
- A Erlang le preocupa mucho la fiabilidad y el cómputo paralelo / distribuido.
- F # se preocupa por interoperar muy bien con el framework .NET y el sistema de tipo.
- A Haskell le importa la pureza, los tipos sexys y una concepción de la sintaxis hermosa
- Scheme se preocupa por la extensibilidad y por una concepción completamente diferente de la bella sintaxis.
- A XSLT le importa el emparejamiento de patrones y el procesamiento de XML.
Hay mucho material sobre SO y en otros lugares sobre cómo elegir un lenguaje funcional para aprender; si lo desea, puede ver lo que piensa un programador funcional políglota . Elija un idioma, cualquier idioma, y siéntese, póngase a trabajar y disfrute del vuelo.
No estoy tan calificado como estoy seguro que algunos respondedores serán. He usado Haskell, Scheme y XSLT, aunque los aprendí en el orden opuesto: Scheme, luego Haskell, y luego uso XSLT para cosas básicas. Descubrí que los procesos de pensamiento que aprendí usando Scheme y más tarde Haskell definitivamente me ayudaron a comprender los conceptos de alto nivel de la programación XSLT. Todos los detalles, por supuesto, todavía tenían que ser dragados de las guías de referencia y demás.
Imagino que encontrarás el mismo efecto al revés.
(También encontré que XSLT, al igual que otros lenguajes de programación en XML, es una forma dolorosa de procesar un archivo XML, y que simplemente escribir un script en Python era más fácil, más rápido y más flexible).