Ya antes he escrito sobre lenguajes de programación y lenguajes de scripting (AWK, JavaScript, Applescript). Personalmente no consideraba mayor distinción entre ellos, mas que el hecho de muchos de éstos últimos son principalmente de naturaleza interpretada (o que se caracterizan por ello).
Si preguntan a la mayoría de la gente (incluso entre programadores profesionales y experimentados) al respecto de lo que es «programar» o «programación», la mayoría de las respuestas dirán que se trata de la actividad o la forma mediante la que se da órdenes o instrucciones a una computadora para hacer algo (ya sea que ese «algo» lo consideren como un programa o aplicación). Para algunos incluso es la interacción que se hace a través de aplicaciones o entornos (de programación o no) que nos permiten obtener respuesta rápidas a cálculos (hojas de cálculo o aplicaciones científicas) o consultas (como aquellas usadas con bases de datos); algunos incluirán la interacción de la línea de comando (la famosa CLI, por sus siglas en inglés).
Así, en consecuencia, el consenso popular dirá que «lenguaje de programación» es el conjunto de palabras y las reglas de como éstas se arreglan o usan para expresar esa instrucciones y su orden (serie de instrucciones). De aquí es de donde se desprenden algunas aclaraciones y explicaciones para hacer algunas diferenciaciones.
Primero, es importante señalar la existencia del modelo o paradigma del cual el lenguaje de programación parte. El más común y difundido es el que se llama imperativo. Este nombre implica una naturaleza impositiva y de órdenes que deben ser dadas y acatadas, y que concuerda con la percepción de la mayoría de las personas (es el modelo bajo el que fueron diseñados o surgieron lenguajes como COBOL, Fortran, Pascal, Algol, C, etcétera). Ésta es la razón por la que es fácil encontrar una similitud entre las palabras clave, símbolos o estructuras de control de ellos (como la famosa equivalencia que a uno le enseñaban cuando, después de aprender Pascal, lo pasaban a uno a aprender C y le explicaban: «en el primero usas BEGIN
y END
para abrir y cerrar bloques, en el segundo usas {
y }
, y así).
Sin embargo, hay otros lenguajes que si bien siguen ese enfoque imperativo, muestran una estructura y funcionamiento ligera o marcadamente muy diferente (como pueden ser Lisp, Forth, Simula, C++, por mencionar algunos). Es entonces en que se empieza a hablar de enfoques o modelos procedimentales (o «procedurales«), funcionales, orientados a objetos, y un largo etcétera, etcétera, etcétera. Así, nos damos cuenta que no sólo hay muchos más modelos sino también criterios de clasificación, siendo dos de ellos quizás los más comunes: el operacional y el definicional1. Veremos entonces que hay más lenguajes empleados con las computadoras que no necesariamente están enfocados en la programación, pero esto es un tema que va más allá del alcance de esta entrada.
Bien, así entonces, antes de regresar a la pregunta de fondo, veremos que la programación de un computador es, en general, el lograr que éste ejecute una serie de instrucciones previamente consideradas para o en el seguimiento de un procedimiento previamente diseñado (o al menos pensado, es decir, no hablamos de una interacción inmediata a algo no planificado, como puede hacerse a través de la línea de comandos). Lo que, en general, valida esa percepción popular mencionada al inicio.
Ahora, ¿qué hay respecto a scripting? Bien, considérese el asunto de las órdenes que se dan a través de la línea de comando. Pudieran parecer que su uso lo hacemos esporádico y sin planificación, hasta que comenzamos a ver que se trata de una tarea repetitiva. Momento en el que se considerará tener un programa que las ejecute ya sin nuestra intervención. Y, para no tener que desarrollar un programa en el que tenemos que declarar tipos de datos y estructuras de control, es que se proporcionan los elementos (principalmente de control) para poder conjuntar todas esas instrucciones en un guión (que es precisamente lo que que busca reflejar con la palabra script) como si se tratara de una obra de teatro ensayada y que se presentará todas las noches. Este tipo de facilidad no está limitada ni es exclusiva de la línea de comando. Todos esos lenguajes que reciben su nombre, en muchos casos, del programa que los encierra la poseen (como es el caso de los intérpretes de comandos, también llamados shells, como es el ZSH, BASH, Korn, PowerShell, CSH, CMD de DOS y demás; como es el caso también de programas de comunicaciones que permiten crear archivos para ejecutar en batch diversas series de instrucciones en un módem o o router; como es el caso de programas que permiten interactuar con una base de datos y crear stored procedures; programas de diseño que permiten automatizar acciones en el procesamiento de imágenes, etcétera, etcétera, etcétera).
Scripting es también programar, sólo que de una forma más simple y holgada, donde lo que importa es facilitar una tarea repetitiva o que no puede ser siempre atendida pero donde no es importante una precisión de resultados numéricos, uso de recursos de cómputo o velocidad de ejecución. Se trata esencialmente de colocar una serie de instrucciones para su ejecución sin intervención del usuario, de forma muy similar a trabajar en batch.
Referencias
- Allen L. Ambler, Margaret M. Burnett & Betsy A. Zimmerman, «Operational Versus Definitional: A Perspective on Programming Paradigms«, Computer, IEEE, September 1992, pp. 28-43. URL: https://eravila.files.wordpress.com/2010/02/computer1992090028.pdf.