¿Es CSS un lenguaje de programación?

Siento un verdadero disgusto por esta pregunta. Puede parecer una pregunta divertida para profundizar en la superficie, pero la forma en que ingresa al discurso público rara vez parece ser de buena fe. Hay motivos ocultos en juego que involucran respeto, emociones protectoras y deseos de romper o mantener el status quo.

Si alguien puede demostrar de alguna manera que CSS no es un lenguaje de programación (esta es un área tan gris que si ese fuera su objetivo, no sería muy difícil de lograr), entonces podrá seguir sintiéndose superior en su forma “real”. habilidades de programación y racionalizar el hecho de que (probablemente) se les paga más que un front-of-front-end especializado en CSS. Esto es mantener el status quo.

Lo contrario también puede ser cierto. Si puede demostrar que CSS es un lenguaje de programación, tal vez pueda cambiar su propia empresa o la industria en general hacia el mismo respeto y pago a los desarrolladores de front-end. Esto está rompiendo el status quo.

Digamos que todos podemos estar de acuerdo sobre un valor booleano trueo falsesi CSS es un lenguaje de programación. ¿Ahora que? Si true, ¿está normalizado el salario entre todos los trabajadores de la web? En caso afirmativo false, ¿merecen recortes salariales los especialistas de CSS? Si true, ¿todos empiezan a respetarse unos a otros de una manera que no lo hacen ahora? Si false, ¿la gente de CSS tiene que almorzar en la sala de calderas? Tengo dudas de que algo cambie; De ahí mi disgusto por la discusión.

Cualesquiera que sean los hechos, es poco probable que la mayoría de la gente acepte siquiera la posibilidad de que CSS sea un lenguaje de programación. Quiero decir, los programas se ejecutan, ¿no? Nadie duda de que JavaScript es un lenguaje de programación, porque se ejecuta. Escribe el código y luego ejecuta ese código. Quizás abras una ventana de terminal y escribas:

 node my-program.js

Seguro que los huevos son huevos, ese programa se ejecutará. Puedes hacer “¡Hola, mundo!” imprimir en la terminal con console.log("Hello, World!");.

¡CSS no puede hacer eso! Bueno, a menos que escribas body::after { content: "Hello, World!"; }en style.cssun archivo y abras una página web que cargue ese archivo CSS. Entonces CSS se ejecuta, a su manera especial. Es un lenguaje de dominio específico ( DSL ) en lugar de un lenguaje de propósito general ( GPL ). En el contexto del navegador, la forma en que se le indica que se ejecuta CSS ( linknormalmente) no es tan diferente de cómo se le indica que se ejecuta JavaScript ( scriptnormalmente).

Si buscas comparaciones entre la sintaxis CSS y los conceptos de programación, creo que las encontrarás. ¿Qué es un selector sino un tipo de ifdeclaración que ejecuta un bucle sobre coincidencias? ¿Qué es calc()sino una implementación directa de las matemáticas? ¿Qué es un grupo de consultas de medios si no un switch? ¿Qué es una propiedad personalizada sino un lugar para almacenar el estado? ¿Qué es :checkedsi no booleano? Eric señaló recientemente que CSS se escribe y, anteriormente, que CSS está repleto de funciones.

Para bien o para mal, tener una respuesta sobre si CSS es o no un lenguaje de programación que afecta a las personas. Un profesor universitario se había esforzado en decirles a los estudiantes que CSS no es Turing completo, pero ahora está reconsiderando esa posición al enterarse de que sí lo es. Cualquiera que sea la intención, creo que la industria se ve afectada por lo que los profesores de informática les dicen a los estudiantes de informática año tras año.

“Lara Schenck ha profundizado en el ángulo de Turing completo”. Si está tratando de resolver esto, la integridad de Turing es un buen indicador. Resulta que CSS básicamente es Turing completo (al resolver el ángulo del autómata celular de la Regla 110), pero no del todo por sí solo. Implica un uso algo complejo de selectores y :checked(sorpresa, sorpresa). Lara hace un comentario astuto:

Por sí solo, CSS no es Turing completo. ¡CSS más HTML más la entrada del usuario son Turing completo!

Aún así, di que no lo compras. Lo entiendes e incluso lo admites, está bien, CSS es esencialmente Turing completo, pero simplemente no sientes que CSS (o HTML para el caso) sea un lenguaje de programación para ti. Es demasiado declarativo. Demasiado específico de la aplicación. Sea lo que sea, sinceramente no te culpo. Lo que espero es que sea cual sea la conclusión a la que llegues, la respuesta no afecta cosas que realmente importan 1 , como el salario y el respeto.

El respeto está en orden, sin importar a qué recurramos en busca de respuesta. No considero a CSS un lenguaje de programación, pero eso no significa que piense que sea trivial o que mis compañeros de trabajo especialistas sean menos valiosos que mis compañeros de trabajo especialistas en Python. ¿No sería bueno? Creo que existe una distinción interesante entre los lenguajes de marcado declarativos y otros tipos de lenguajes, pero todos son código. Oh, basta, ya sabes cómo me hacen sonrojar las respuestas reflexivas.

Me gustaría ver muchos más comentarios matizados, respetuosos y sin agenda como ese cuando ocurren estas discusiones.


  1. Al igual que “sitio web” frente a “aplicación web”. Independientemente de si cree que existe una distinción o no, espero que las personas no tomen decisiones que afecten a los usuarios en función del grupo taxonómico en el que creen que se encuentra. ⮑

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir