Aguarde...

13 de maio de 2021

CSS é uma linguagem de programação?

CSS é uma linguagem de programação?

Tenho uma verdadeira aversão a esta questão. Pode parecer uma pergunta divertida de se aprofundar na superfície, mas a maneira como entra no discurso público raramente parece ser de boa fé. Existem segundas intenções em jogo, envolvendo respeito, emoções protetoras e desejos de quebrar ou manter o status quo.

Se alguém pode de alguma forma provar que CSS não é uma linguagem de programação (esta é uma área cinzenta que se esse fosse seu objetivo, não seria terrivelmente difícil de fazer), então eles continuarão se sentindo superiores em seu “real” habilidades de programação e racionalizar o fato de que eles são (provavelmente) pagos mais do que um front-of-the-front-ender especializado em CSS. Isso é manter o status quo.

O inverso também pode ser verdadeiro. Se você pode provar que CSS é uma linguagem de programação, talvez você possa mudar sua própria empresa ou o setor como um todo para o respeito igual e pagar aos desenvolvedores front-of-the-front-end. Isso está quebrando o status quo.

Digamos que todos concordemos em um booleano trueou falsese CSS é uma linguagem de programação. E agora? Em caso afirmativo true, o pagamento é normalizado entre todos os web workers? Se false, os especialistas em CSS merecem cortes salariais? Se true, todos começam a respeitar uns aos outros de uma maneira que não fazem agora? Se false, o pessoal do CSS tem que almoçar na sala da caldeira? Tenho dúvidas de que algo vai mudar; daí minha aversão pela discussão.

Quaisquer que sejam os fatos, é improvável que a maioria das pessoas aceite até mesmo a possibilidade de que CSS seja uma linguagem de programação. Quer dizer, os programas são executados , não é? Ninguém duvida que JavaScript é uma linguagem de programação, porque executa. Você escreve o código e, em seguida, executa esse código. Talvez você abra uma janela de terminal e escreva:

> node my-program.js

Claro, como ovos são ovos, esse programa será executado. Você pode fazer “Hello, World!” imprima para o terminal com console.log("Hello, World!");.

CSS não pode fazer isso! Bem, a menos que você escreva body::after { content: "Hello, World!"; }no style.cssarquivo e abra uma página da web que carregue o arquivo CSS. Portanto, o CSS é executado, em sua própria maneira especial. É uma linguagem de domínio específico ( DSL ) em vez de uma linguagem de uso geral ( GPL ). Nesse contexto de navegador, a maneira como o CSS deve ser executado ( <link>geralmente) não é nem tão diferente de como o JavaScript deve ser executado ( <script>geralmente).

Se você estiver procurando por comparações entre a sintaxe CSS e os conceitos de programação, acho que você as encontrará. O que é um seletor senão um tipo de ifinstrução que executa um loop sobre as correspondências? O que é calc()senão uma implementação direta da matemática? O que é um grupo de consultas de mídia senão um switch? O que é uma propriedade customizada senão um local para armazenar o estado? O que é :checkedsenão booleano? Eric afirmou recentemente que o CSS é digitado e, antes, que o CSS é repleto de funções .

Para melhor ou pior, ter uma resposta para saber se CSS é ou não uma linguagem de programação afeta as pessoas. Um professor universitário fez questão de dizer aos alunos que o CSS não é Turing completo, mas agora está reconsiderando essa posição ao descobrir que é. Seja qual for a intenção, acho que a indústria é afetada pelo que os professores de ciência da computação dizem aos alunos de ciência da computação ano após ano.

Lara Schenck investigou o ângulo do Turing-completo . Se você está tentando resolver isso, a integridade de Turing é um bom proxy. Acontece que CSS basicamente é o Turing completo (estabelecendo o ângulo do autômato celular da Regra 110), mas não inteiramente por si só. Envolve um uso um tanto complexo de seletores e :checked(surpresa, surpresa). Lara faz uma observação astuta:

Sozinho, o CSS não  é  Turing completo. CSS mais HTML mais entrada do usuário é Turing completo!

Mesmo assim, digamos que você não compre. Você entende e até admite, tudo bem, CSS é essencialmente Turing completo, mas simplesmente não parece que CSS (ou HTML, nesse caso) seja uma linguagem de programação para você. É muito declarativo. Muito específico do aplicativo. Seja o que for, eu honestamente não culpo você. O que espero é que, seja qual for a conclusão a que você chegue, a resposta não afete coisas que realmente importam 1 , como pagamento e respeito.

Respeito está em ordem, não importa aonde qualquer um de nós venha para obter uma resposta. Não considero CSS uma linguagem de programação, mas não significa que seja trivial ou que meus colegas especialistas sejam menos valiosos do que meus colegas especialistas em Python. Isso não seria bom? Acho que há uma distinção interessante entre linguagens de marcação declarativa e outros tipos de linguagens, mas todas são códigos. Oh, pare com isso, você sabe como as respostas atenciosas me fazem corar.

Eu gostaria de ver muito mais comentários matizados, respeitosos e sem agenda como esse quando essas discussões acontecerem.

Postado em Blog
Escreva um comentário