Tengo 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 hacer), entonces podrá seguir sintiéndose superior en su “real” habilidades de programación y racionalizar el hecho de que (probablemente) se les paga más que a los que se especializan 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-of-the-front-end. Esto está rompiendo el status quo.
Digamos que todos podríamos estar de acuerdo en un booleano true
o false
sobre si CSS es un lenguaje de programación. ¿Ahora que? Si true
, ¿el salario está normalizado entre todos los trabajadores web? Si false
, ¿los especialistas en CSS merecen recortes salariales? Si true
, ¿todos comienzan 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.
Independientemente de los hechos, es poco probable que la mayoría de la gente acepte incluso 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. Escribes código y luego ejecutas ese código. Quizás abres una ventana de terminal y escribes:
> node my-program.js
Seguro que como huevos son huevos, ese programa se ejecutará. Puedes hacer “¡Hola, mundo!” imprimir en el terminal con console.log("Hello, World!");
.
¡CSS no puede hacer eso! Um, bueno, a menos que escribas body::after { content: "Hello, World!"; }
en style.css
y abra una página web que cargue ese archivo CSS. Entonces CSS se ejecuta, de una manera especial. Es un lenguaje de dominio específico (DSL) en lugar de un lenguaje de propósito general (GPL). En ese contexto de navegador, la forma en que se le dice a CSS que se ejecute (<link>
, por lo general) ni siquiera es tan diferente de cómo se le dice a JavaScript que se ejecute (<script>
, por lo general).
Si está buscando comparaciones de la sintaxis CSS con los conceptos de programación, creo que las encontrará. ¿Qué es un selector sino un tipo de if
declaración que ejecuta un bucle sobre las coincidencias? Qué es calc()
si no es una implementación directa de las matemáticas? ¿Qué es un grupo de consultas de medios si no switch
? ¿Qué es una propiedad personalizada si no es un lugar para almacenar el estado? Qué es :checked
si no es booleano? Eric señaló recientemente que CSS se escribe, y antes, que CSS está repleto de funciones.
Para bien o para mal, tener una respuesta sobre si CSS es un lenguaje de programación 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 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 se ha adentrado 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 establecer el ángulo del autómata celular de la Regla 110), pero no del todo por sí mismo. Implica un uso algo complejo de selectores y :checked
(sorpresa sorpresa). Lara hace un punto astuto:
Solo, CSS no es Turing completo. ¡CSS más HTML más la entrada del usuario es Turing completo!
Aún así, digamos que no lo compra. Lo entiendes e incluso concedes, está bien, CSS es esencialmente Turing completo, pero simplemente no parece 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, honestamente no te culpo. Lo que espero es que sea cual sea la conclusión a la que llegue, la respuesta no afecte las cosas que realmente importan1, como la paga y el respeto.
El respeto está en orden, no importa lo que pidamos cada uno de nosotros en busca de una respuesta. No considero CSS como un lenguaje de programación, pero eso no significa que crea 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 agradable? Creo que hay una distinción interesante entre los lenguajes de marcado declarativos y otros tipos de lenguajes, pero todos son código. Oh, detente, sabes cómo las respuestas reflexivas me hacen sonrojar.
Me gustaría ver comentarios mucho más matizados, respetuosos y sin agenda como ese cuando ocurran estas discusiones.
- Al igual que “sitio web” frente a “aplicación web”. Ya sea que crea o no que hay una distinción, espero que las personas no tomen decisiones que afecten a los usuarios en función del grupo taxonómico en el que cree que va lo suyo ⮑