lincolixavier / tretadev

Repositório criado com o intuito de centralizar as tretas semanais que acontecem na cena dev BR
506 stars 3 forks source link

HTML e CSS são linguagens de programação - "isso de novo não, here we go again" #66

Open terremoth opened 3 years ago

terremoth commented 3 years ago

"Todo mundo já tá cheio dessa merda, bicho"

rodrigogs commented 3 years ago

Essa já tem uma resposta bem convincente.

https://pt.stackoverflow.com/questions/35547/html-%C3%A9-uma-linguagem-de-programa%C3%A7%C3%A3o

obrennomartins commented 3 years ago

Se imprime "olá mundo!", é linguagem de programação.

<h1>Olá mundo!</h1>
terremoth commented 3 years ago

Essa já tem uma resposta bem convincente.

https://pt.stackoverflow.com/questions/35547/html-%C3%A9-uma-linguagem-de-programa%C3%A7%C3%A3o

nem um pouco convincente, parte do argumento dele é usar completude de turing pra afirmar que "é" uma linguagem de programação. Nem Peter Van Roy que é pesquisador na área de linguagens de programação e escritor do famoso livro "Concepts, Techniques and Models of Computer Programming" se dispôs a dar tal afirmação...

Não sei nem se as ISO/IEC's ou se o IEEE criaram alguma afirmação pra tal.

Eu gosto da definição simples e abstrata de que "linguagens de programação são linguagens que descrevem coisas para computadores fazerem", e baseado nisso, HTML e CSS tornam-se linguagens de programação, mas de domínio específico (DSL's). Mas essa é só a definição que tenho pra mim.

rodrigogs commented 3 years ago

Essa já tem uma resposta bem convincente. https://pt.stackoverflow.com/questions/35547/html-%C3%A9-uma-linguagem-de-programa%C3%A7%C3%A3o

nem um pouco convincente, parte do argumento dele é usar completude de turing pra afirmar que "é" uma linguagem de programação. Nem Peter Van Roy que é pesquisador na área de linguagens de programação e escritor do famoso livro "Concepts, Techniques and Models of Computer Programming" se dispôs a dar tal afirmação...

Não sei nem se as ISO/IEC's ou se o IEEE criaram alguma afirmação pra tal.

Eu gosto da definição simples e abstrata de que "linguagens de programação são linguagens que descrevem coisas para computadores fazerem", e baseado nisso, HTML e CSS tornam-se linguagens de programação, mas de domínio específico (DSL's). Mas essa é só a definição que tenho pra mim.

Mas HTML e CSS não tem operador lógico algum. Elas apenas exibem coisas de forma estática até que um JS da vida se meta. Sentar tijolo e pintar uma parede não é programar.

terremoth commented 3 years ago

Essa já tem uma resposta bem convincente. https://pt.stackoverflow.com/questions/35547/html-%C3%A9-uma-linguagem-de-programa%C3%A7%C3%A3o

nem um pouco convincente, parte do argumento dele é usar completude de turing pra afirmar que "é" uma linguagem de programação. Nem Peter Van Roy que é pesquisador na área de linguagens de programação e escritor do famoso livro "Concepts, Techniques and Models of Computer Programming" se dispôs a dar tal afirmação... Não sei nem se as ISO/IEC's ou se o IEEE criaram alguma afirmação pra tal. Eu gosto da definição simples e abstrata de que "linguagens de programação são linguagens que descrevem coisas para computadores fazerem", e baseado nisso, HTML e CSS tornam-se linguagens de programação, mas de domínio específico (DSL's). Mas essa é só a definição que tenho pra mim.

Mas HTML e CSS não tem operador lógico algum. Elas apenas exibem coisas de forma estática até que um JS da vida se meta. Sentar tijolo e pintar uma parede não é programar.

E quem que instituiu que pra ser uma linguagem de programação tem de ter operador lógico? Onde tem essa definição? Quem escreveu? com base em quê?

terremoth commented 3 years ago

uma tag \<noscript> por exemplo tem por baixo dos panos um IF, tal qual linguagens funcionais fazem pra escolher coisas com pattern-matching sem ter if's, e nem por isso linguagens funcionais deixam de ser linguagens de programação.

CSS tem seletores que por baixo dos panos fazem iterações e seleção junto (nth-child por exemplo)... então a programação não mora em sintaxe e gramática, mas sim no que um computador/interpretador consegue fazer com um conjunto de códigos e computar informação com aquilo.

rodrigogs commented 3 years ago

Essa já tem uma resposta bem convincente. https://pt.stackoverflow.com/questions/35547/html-%C3%A9-uma-linguagem-de-programa%C3%A7%C3%A3o

nem um pouco convincente, parte do argumento dele é usar completude de turing pra afirmar que "é" uma linguagem de programação. Nem Peter Van Roy que é pesquisador na área de linguagens de programação e escritor do famoso livro "Concepts, Techniques and Models of Computer Programming" se dispôs a dar tal afirmação... Não sei nem se as ISO/IEC's ou se o IEEE criaram alguma afirmação pra tal. Eu gosto da definição simples e abstrata de que "linguagens de programação são linguagens que descrevem coisas para computadores fazerem", e baseado nisso, HTML e CSS tornam-se linguagens de programação, mas de domínio específico (DSL's). Mas essa é só a definição que tenho pra mim.

Mas HTML e CSS não tem operador lógico algum. Elas apenas exibem coisas de forma estática até que um JS da vida se meta. Sentar tijolo e pintar uma parede não é programar.

E quem que instituiu que pra ser uma linguagem de programação tem de ter operador lógico? Onde tem essa definição? Quem escreveu? com base em quê?

Acho que a questão é: faz algum sentido chamar de linguagem de programação uma linguagem que não executa nenhum operador lógico?

Um CSV pode ser interpretado das mais inúmeras formas por algum programa que vai ler ele. Mas isso torna o CSV uma linguagem de programação? No seu exemplo do CSS e HTML, quem tá fazendo o if é o browser, a linguagem só definiu o markup mesmo. Qualquer estrutura de dados pode ser interpretada por um programa externo que executa alguma função com base nisso, mas nem todas as estruturas expressam lógica propriamente dita.

terremoth commented 3 years ago

Uma máquina de Turing, lê e escreve 0's e 1s baseados em instruções de 0's e 1's. Dá pra facilmente afirmar que 0's e 1's são uma linguagem de programação para a máquina de Turing.

terremoth commented 3 years ago

Acho que a questão é: faz algum sentido chamar de linguagem de programação uma linguagem que não executa nenhum operador lógico?

Faz, ué. De novo eu te pergunto: de onde tirasse tal definição?

Um CSV pode ser interpretado das mais inúmeras formas por algum programa que vai ler ele. Mas isso torna o CSV uma linguagem de programação?

Se o CSV for usado por um interpretador pra computar de alguma forma alguma informação, sim, o CSV irá se tornar uma linguagem de programação de domínio específica para aquele interpretador. Qual o problema nisso?

rodrigogs commented 3 years ago

O problema é que CSV não é uma linguagem de programação, é apenas um arquivo de valores separados por vírgula.

Partindo desse princípio, meio que qualquer coisa pode ser uma linguagem de programação.

rodrigogs commented 3 years ago

Resumindo mais ainda:

Uma linguagem de programação deveria ser capaz de representar lógica por si só, não é o compilador quem define o negócio.

Uma linguagem de markup deveria ser capaz de representar uma estrutura para um interpretador, e neste caso o negócio está no interpretador.

Diferença existe.

terremoth commented 3 years ago

O problema é que CSV não é uma linguagem de programação, é apenas um arquivo de valores separados por vírgula.

Isso não me parece um problema, mas okay se pra ti parece kkkk

Partindo desse princípio, meio que qualquer coisa pode ser uma linguagem de programação.

Sim, desde que haja um interpretador pra fazer algo com aquilo, sim? Assim como a máquina de Turing é com 0's e 1's. A máquina de turing calcula, computa, seleciona e reproduz apenas com 0's e 1s.

Dá uma olhada nisso: https://turingmachine.io/

terremoth commented 3 years ago

Um exemplo: na maioria dos dialetos de Assembly não tem while/for nem if's muito menos variáveis. Eles lidam direto com registradores, e pra iterar usam jmp'se pra selecionar usam comparadores de registro, e as tais variáveis em assembly são hexadecimais diretos nos registradores. Assembly passa a não ser uma linguagem de programação? Você não consegue escrever programas em assembly? Não faz sentido dizer que dialetos de assembly não são linguagens de programação.

terremoth commented 3 years ago

Outro exemplo: máquinas de tear que usavam cartões perfurados pra fazer operações nos fios/linhas. Dá pra dizer que a máquina era um interpretador de cartões perfurados (binários - furado ou não-furado), e os cartões eram as instruções pras máquinas. Cadê operadores lógicos, ifs, while, variáveis? A máquina de tear simplesmente computa no fio a informação cuja qual ela foi destinada a ler nos cartões.

rodrigogs commented 3 years ago

Parece mais ginástica mental do que argumento.

Assembly não é uma linguagem de markup, e os dialetos também expressam a lógica do programa que fica na linguagem e não no compilador. No caso do HTML, por exemplo, quem define o que acontece com o elemento é o browser, você só diz qual é a estrutura(e não dá pra fazer nenhum jump algum com isso).

Existem diferenças bem nítidas entre as duas abordagens.

rodrigogs commented 3 years ago

Não que seja um problema dizer que as duas são linguagens de programação. Mas que fazem coisas extremamente diferentes, fazem... e isso deveria no mínimo ficar claro para quem está fazendo a pergunta.

Se vamos simplesmente falar que é tudo linguagem de programação e mais nada, isso no máximo vai causar confusão e problemas de interpretação. Você não tem como fazer só com HTML o que consegue fazer com Assembly, e isso é fundamental para quem fez a pergunta.

terremoth commented 3 years ago

Não existem diferenças entre as abordagens quando você pensa: "são códigos e são interpretados por algum interpretador para fazerem tarefas". HTML, CSS, Assembly, Máquina de Turing, Máquina de Tear, todos acabam se encaixando nessa definição. Só faltaria mesmo dizer que máquina de turing não computa e não faz programas kkkkk pq ele criou justamente pra provar isso.

...quem define o que acontece com o elemento é o browser

Sim, o browser é o interpretador da linguagem.

Existem diferenças bem nítidas entre as duas abordagens.

Sim, por isso HTML, CSS, JSON por exemplo, são linguagens de domínio específicas. https://en.wikipedia.org/wiki/Domain-specific_language

Não quer dizer que pq vc não vê "for/while/if/variavel" que aquilo deixa de ser uma linguagem de programação. Como reitero: assembly, linguagens puramente funcionais, são linguagens de domínio geral (general purpose languages) e mesmo assim computam, calculam, selecionam. Maquina de Turing, HTML, CSS são de domínio específico, e todas elas o interpretador itera/seleciona/computa coisas. A jogada é: onde mora o processamento: na instrução no interpretador ou na instrução? nas de dominio geral geralmente é na instrução, e nas de domínio específicas geralmente é no interpretador.

rodrigogs commented 3 years ago

Bom, sim, e isso torna a coisa tão diferente que com uma você consegue fazer algo e com a outra não...

Bora calcular Fibonacci com HTML. É aí que as coisas ficam absolutamente diferentes, com HTML você não faz mais do que o seu browser permite, o nível de abstração é tão alto que você não consegue programar algo de fato.

Como eu disse alí em cima, simplesmente dizer que são todas linguagens de programação vai no máximo vai confundir uma pessoa que tenha esta dúvida.

rodrigogs commented 3 years ago

E não é como se "ah, mas qualquer linguagem tem suas limitações".

Calma lá... o exemplo que dei alí de Fibonacci já tá de bom tamanho. Com qualquer linguagem de programação você consegue fazer isso, no entanto não consegue em nenhuma linguagem de markup(a não ser que você crie um pra fazer isso).

São todas linguagens? Sim.

São todas fluentes em lógica? Não.

terremoth commented 3 years ago

Bom, sim, e isso torna a coisa tão diferente que com uma você consegue fazer algo e com a outra não...

Bora calcular Fibonacci com HTML. É aí que as coisas ficam absolutamente diferentes.

Mas calcular fibonacci é algo que está fora do domínio de HTML, lembra que HTML é uma linguagem de dominio específica?

podia-se muito bem criar uma DSL baseada baseada em SGML/XML que tivesse instrução assim: \<fibonacci min="3" max="500"> . \</fibonacci>

E o interpretador desenhasse a sequencia de fibonacci baseada no min e max. A instrução morou onde? No interpretador, não no código, mas ele iterou e criou pra vc. Assim como quando você coloca o size="" ou range nos input's de HTML

Já visse a linguagem Coldfusion? Era da Adobe, acho que descontinuaram. Era tipo um XML com variáveis, condicionais, arrays, loops e tal.

Coldfusion: image

image

Basicamente eles generalizaram o domínio de SGML e criaram interpretador pra processar o coldfusion: https://pt.wikipedia.org/wiki/ColdFusion

rodrigogs commented 3 years ago

Mas então você defende mesmo que simplesmente chamemos HTML de linguagem de programação?

Se sim, sua resposta pode até fazer sentido pra mim. Mas se alguém te perguntou isso mesmo, com dúvida, uma resposta tão simplória é "misleading".

terremoth commented 3 years ago

Como eu disse alí em cima, simplesmente dizer que são todas linguagens de programação vai no máximo vai confundir uma pessoa que tenha esta dúvida.

Me parece que dizer que "a maioria" é linguagem de programação por descrever coisas pra computadores/interpretadores fazerem está mais próximo da "verdade" do que ficar (aí sim) fazendo ginástica mental pra entrar em todos os pormenores pra explicar como computação funciona.

terremoth commented 3 years ago

Mas então você defende mesmo que simplesmente chamemos HTML de linguagem de programação?

Sim!

rodrigogs commented 3 years ago

Não me parece muita ginástica mental explicar que com uma você consegue programar a lógica que você precisa e com a outra não, mas tudo bem.

terremoth commented 3 years ago

Não me parece muita ginástica mental explicar que com uma você consegue programar a lógica que você precisa e com a outra não, mas tudo bem.

Programar a lógica? qual lógica? Lógica de Predicados? Lógica Difusa? Lógica Modal? Lógica Proposicional? Lógica é um termo originário na Filosofia, não na programação. Cuidado ao pôr/misturar a palavra lógica com programação. Isso cai na outra thread lá de "lógica de programação é um termo que não existe"; O que existem são linguagens de programação que dão suporte pra alguns tipos de lógica dentro! (como a de predicados e proposicional que são as mais comuns). HTML não tem instruções de lógicas, Python/Ruby/Java/C++ tem, por exemplo.

terremoth commented 3 years ago

Pra enriquecer um pouco a discussão, vai um chart aí do Peter Van Roy sobre a taxonomia das linguagens:

vanroy programming languages taxonomy

rodrigogs commented 3 years ago

Whatever, a lógica do que você precisar fazer. O HTML não contempla nenhuma de qualquer forma, e não estamos falando sobre filosofia mas sobre programação, então acho que não é necessário explicar de "qual lógica" eu estou falando.

A questão é simples demais, com HTML você só vai conseguir fazer o que você quer se não envolver instrução lógica alguma. E isso separa ela igual azeite das linguagens de programação como Python, Ruby, JS, Java, C# e etc...

Colocar tudo no mesmo balaio é dar uma informação incompleta para a pessoa que fez a pergunta. Ela poderia tentar programar a sequencia de Fibonacci em HTML depois desta resposta, e não iria conseguir...

terremoth commented 3 years ago

Eu entendi teu ponto. É só explicar pra pessoa que linguagens são como ferramentas: cada uma é MAIS adequada pra certos tipos de cenários, e HTML serve apenas pra um domínio. Basta dizer que com HTML você não consegue instruir pra fazer cálculos.

Esse assunto é mais extenso e complexo do que parece ser, cara. Existem livros, estudos, palestras e papers em cima destes temas.