Prefacio
Durante más de 30 años he venido explicando lo que hoy se conoce como Wolfram Language y, finalmente, decidí que era el momento de aplicar lo aprendido en ese proceso y escribir una introducción elemental que los lectores pudieran leer sin ayuda. El presente libro es el resultado de ese esfuerzo.
En el año 1988, cuando se hizo el primer lanzamiento de Mathematica, precursor de Wolfram Language, publiqué un libro que contenía un tutorial introductorio, así como la guía de referencia del sistema. Dicho libro alcanzó una gran popularidad y creo que se debió sustancialmente al pronto renombre de Mathematica. El libro, conocido luego como The Mathematica Book, logró cinco ediciones, a lo largo de las cuales fue creciendo en volumen hasta alcanzar cerca de 1500 páginas.
El libro The Mathematica Book se proponía cubrir de manera sistemática todos los aspectos de Mathematica. En 2007 se publicó una nueva edición que resultó de un tamaño tan grande que puso en claro que, de ahí en adelante, sería sencillamente imposible lograr su propósito en un solo libro. Por si fuera poco, la constante introducción de un gran número de nuevos ejemplos en la documentación en línea, habría hecho que una versión impresa alcanzara una extensión de más de 10 000 páginas.
En el año 2009, salió a la luz Wolfram|Alpha, cuya interfaz con lenguaje natural fue específicamente elaborada para permitir su utilización sin necesidad de mayor explicación ni documentación. Y de la amalgama de Mathematica y Wolfram|Alpha surgió Wolfram Language, que requirió nuevamente mayor explicación y documentación.
La documentación en línea para Wolfram Language, la cual en una versión impresa habría tenido más de 50 000 páginas, cumple con creces el objetivo de explicar detalladamente el uso de las múltiples capacidades del sistema. Sin embargo, especialmente para quienes se inician en el uso de Wolfram Language, se hace necesaria una presentación asequible de los principios del lenguaje, cuya coherencia y consistencia he procurado mantener, a través de los años, con gran esfuerzo.
Wolfram Language es singular entre los lenguajes de programación, con diferencias en muchos aspectos. Hace algún tiempo escribí un tutorial: Introducción rápida para programadores que, en unas 30 páginas, brinda a los programadores modernos los rudimentos básicos de Wolfram Language.
Sin embargo, ¿qué hacer con quienes no están familiarizados con la programación de computadoras? Wolfram Language brinda una oportunidad única, no solamente para introducir a cualquier persona a la programación, sino para llevarla rápidamente a la frontera de lo que, hoy por hoy, es posible hacer en computación.
Esto es consecuencia del esfuerzo realizado en los últimos treinta años para crear la tecnología de Wolfram Language. Me he propuesto desarrollar un lenguaje con el que cualquiera pueda especificar lo que quiera hacer, de la manera más sencilla posible y de forma tal que los detalles se atiendan automáticamente y de manera transparente para alcanzar el objetivo.
Wolfram|Alpha ofrece al usuario un proceso de preguntas y respuestas muy ágil, en el cual basta decir en lenguaje llano lo que se quiere hacer. Sin embargo, para ejecutar tareas complejas que requieran de una descripción más precisa está Wolfram Language.
¿Cómo se puede aprender Wolfram Language? Una posibilidad es mediante la inmersión, es decir, ubicándose en un ambiente de uso intensivo de Wolfram Language; estudiar ahí aquellos programas que funcionan y aprender de ellos. En mi experiencia, lo anterior es una buena estrategia, siempre y cuando se cuente con alguien bien dispuesto, aunque sea de vez en cuando, a explicar los principios y ayudar a resolver las dudas que se presenten.
Pero, ¿y si uno quisiera aprender de manera autónoma Wolfram Language? En ese caso sería de gran utilidad contar con un compendio sistemático que construya poco a poco, de un concepto al siguiente, y que conteste todas las preguntas obvias a medida que se progrese. Eso es lo que intento lograr en este libro.
El aprendizaje de Wolfram Language tiene similitudes con el de un lenguaje humano: es una mezcolanza de vocabulario y principios que deben ir aprendiéndose a la vez. Wolfram Language es mucho más sistemático que los lenguajes humanos, pues no existen, por ejemplo, verbos irregulares que requieran memorizarse; pero, por otro lado, comparte el mismo tipo de progresión hacia la soltura que solo se logra con la práctica.
Después de meditar sobre cómo escribir este libro llegué a la conclusión de hacerlo, más o menos, como los textos en latín que usaba en mi niñez: a diferencia de las lenguas vivas, es imposible aprender latín por inmersión y no hay más remedio que ir avanzando paso a paso, como lo hago en este libro.
En cierto modo, aprender a programar es parecido a aprender matemáticas. En ambos casos hay un cierto grado de precisión: las cosas son correctas o no lo son. Ahora bien, en Wolfram Language la programación es mucho más concreta: se puede observar lo que sucede en cada paso y comprobar si se va por el camino correcto. No hay conceptos ocultos que requieran una explicación abstracta desde fuera y que no puedan verse explícitamente.
Hay más de dos milenios de experiencia en la enseñanza de las matemáticas, y con ello se ha ido mejorando progresivamente la secuencia de la presentación de aritmética, álgebra y demás. En cambio, la enseñanza de Wolfram Language es algo completamente nuevo, que hay que ir desarrollando desde un principio. Y en ese sentido, la forma convencional de enseñar los lenguajes de programación no es de gran ayuda porque casi todo se refiere a tipos de estructuras de bajo nivel que en Wolfram Language ya están automatizadas.
Imagino este libro como un experimento: se trata de buscar una ruta específica para aprender Wolfram Language. No intento cubrirlo todo, porque quizás ello requeriría de más de 50 000 páginas. Más bien quiero explicar los principios del lenguaje mediante un número limitado de ejemplos específicos.
He escogido ejemplos interesantes y de utilidad práctica con los que logro cubrir la mayor parte de los principios centrales del lenguaje. Quien se familiarice con esos principios estará preparado para usar la documentación específica que permitirá entender a fondo cualquier otro aspecto particular de las capacidades del lenguaje.
Sobra decir que Wolfram Language tiene muchas posibilidades de gran sofisticación. Algunas de ellas, como la identificación de objetos en imágenes, son sofisticadas internamente, pero se pueden describir con facilidad. En cambio, otras, como la computación de bases de Groebner, son difíciles de explicar y, desde luego, requieren conocimientos avanzados de matemáticas o de ciencias de la computación.
Mi intención es que este libro sea autosuficiente, sin asumir nada fuera de los conocimientos convencionales cotidianos. He evitado el uso explícito de matemáticas fuera de la aritmética básica, aunque los lectores versados en matemáticas más avanzadas advertirán muchas conexiones entre los conceptos matemáticos y los que se ven en este libro.
Ciertamente no es esta la única introducción elemental que podría idearse para enseñar Wolfram Language, y ojalá se escriban muchas otras. En esta, se sigue una ruta específica —y, en algunos casos, arbitraria— a través de las vastas capacidades del lenguaje, haciendo énfasis en algunas de sus características, sin tocar otras que pudieran tener iguales méritos.
Espero que el poderío y belleza del lenguaje que he cultivado y cuidado durante más de la mitad de mi vida se hagan evidentes, y que muchos estudiantes y personas con formaciones diversas usen este libro para iniciarse en Wolfram Language y adentrarse en el tipo de pensamiento computacional que es cada vez más característico de nuestra época.
Stephen Wolfram
