Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adiciona mensagem de boas vindas: Sim, HTML é uma linguagem de programação, ok? #61

Merged
merged 1 commit into from
Feb 21, 2023

Conversation

macabeus
Copy link
Contributor

@macabeus macabeus commented Dec 31, 2022

Esse PR adiciona a seguinte mensagem de boas vindas: Sim, HTML é uma linguagem de programação, ok?

Motivação

Apesar de já termos a mensagem oposta (Não, HTML não é uma linguagem de programação, ok?), dependendo do que se entende por o que seria uma linguagem de programação, HTML pode fazer parte do conjunto de linguagens de programação.

Vendo pelo lado da academia, o pesquisador Peter Van Roy escreveu um artigo apresentando e descrevendo diversos paradigmas de programação, o Programming Paradigms for Dummies: What Every Programmer Should Know. Nele, temos o seguinte diagrama:

image

Isto é, basta uma linguagem ter o conceito de records para ser uma linguagem de programação.
Vale ressaltar que ele faz uma divisão clara entre linguagens de programação turing complete vs não-turing complete, sendo que linguagens apenas com records não são turing complete.

Assim, seguindo esse entendimento, HTML é uma linguagem de programação.

Ademais, linguagens de marcação como HTML fariam parte de um subconjunto de linguagens de programação, tal como ilustrado nesse diagrama feito pela Quildreen Motta num post do Quora:

image

O primeiro diagrama foi inspirado no livro de Peter Van e Seif Haridi, Concepts, Techniques, and Models of Computer Programming. Curiosamente, eles abordam HTML algumas vezes no livro, como nessa parte descrevendo seus conceitos e onde aplicação deles é útil:

image

Num vídeo do canal Computerphile, o David Brailsford explica de porque, no entendimento dele, HTML é uma linguagem de programação, fazendo algumas comparações com linguagens imperativas.

Saindo já da academia e indo para a comunidade, numa talk apresentada pelo @coproduto ele também aborda, de forma bem ampla e didática, sobre porque HTML é linguagem de programação (e também de porque HTML normalmente as pessoas não o consideram que seja).

Outra pessoa da comunidade que segue o mesmo entendimento, mas trabalha com desenvolvimento de linguagens de programação, é o EduardoRFS. Não encontro alguma boa referência para usar aqui no post (pois a Twitch apaga vídeos antigos), mas tem pelo menos essa thread no Twitter.


Uma afirmativa recorrente é "linguagens de programação precisam ter if e variáveis, e não temos isso em HTML".
Porém, se for considerar essa definição bem restritiva, deixaria de fora linguagens como Prolog, que usualmente são consideradas linguagem de programação, porém, o if dele (e demais estruturas de controle de fluxo) são bem diferentes do que costumamos ver em linguagens como JS, assim como o conceito como "variável" em Prolog ser um primo distante do que temos em linguagens mais mainstream.

Outra afirmativa recorrente é "linguagem de programação precisa ser turing complete".
Porém, isso exclui linguagens comumente usadas para provar teoremas, como Agda e Coq, que intencionalmente buscam não ser turing complete - e ainda é possível criar programas úteis nessas linguagens. Mais nessa resposta do Stack Overflow.


Creio que o mais interessante na discussão não é responder se "HTML é ou não linguagem de programação?".
Ao invés disso, reformular a pergunta indo ir um passo atrás, e perguntar "o que é uma linguagem de programação?".

Eu não tenho uma resposta para essa pergunta.
Porém, na busca de uma, vale relembrar o glossário da ACM (Grace Hooper et al). Ele não chega a definir o que é "programming language", porém, a entrada de "intrusction code" é definido como "símbolos para executar rotinas no computador". Talvez pudessemos definir "programming language" do mesmo modo (e.g., "linguagens de progrmação definem símbolos e regras para executar rotinas no computador")? É uma definição bem generalista, mas, ao menos para mim, contempla bem a diversidade de linguagens que temos.
image

@macabeus macabeus changed the title add a welcome message: Sim, HTML é uma linguagem de programação, ok? Adiciona mensagem de boas vindas: Sim, HTML é uma linguagem de programação, ok? Dec 31, 2022
@VictorTaelin
Copy link

Low-effort commit. I think it should include a full λ-calculus interpreter in raw HTML before we accept it.

@macabeus
Copy link
Contributor Author

macabeus commented Dec 31, 2022

Acho que não será possível 😢

image

@Fryuni
Copy link

Fryuni commented Dec 31, 2022

linguagens de progrmação definem símbolos e regras para executar rotinas no computador

Por essa definição qualquer sequência de dados é uma linguagem de programação, pois ao passar por um parser os dados dessa sequência definem as rotinas do parser que serão executadas. O parser sendo o conjunto de regras e o dado são os símbolos.

Você pode descrever a AST de um código JavaScript em yaml e interpretar o que for lido desse yaml. Isso não torna YAML uma linguagem de programação.

O comportamento do ChatGPT é definido por um conjunto de regras e pelo pelo texto que passar na mensagem para ele, mas isso não torna português, inglês, nem nenhum outro idioma que ele entende uma linguagem de programação.

Achar uma única característica em comum com as linguagens de programação não torna HTML uma linguagem de programação. Principalmente se essa característica for tão ampla ao ponto de não ser restrita a linguens de programação.

@macabeus
Copy link
Contributor Author

macabeus commented Jan 1, 2023

@Fryuni

Por essa definição qualquer sequência de dados é uma linguagem de programação, pois ao passar por um parser os dados dessa sequência definem as rotinas do parser que serão executadas. O parser sendo o conjunto de regras e o dado são os símbolos.

Você pode descrever a AST de um código JavaScript em yaml e interpretar o que for lido desse yaml. Isso não torna YAML uma linguagem de programação.

O comportamento do ChatGPT é definido por um conjunto de regras e pelo pelo texto que passar na mensagem para ele, mas isso não torna português, inglês, nem nenhum outro idioma que ele entende uma linguagem de programação.

Sim, a definição que repercuti é bem abrangente.
Por ela, até mesmo protocolos de comunicação e formatos de arquivos seria considerado linguagens de programação... o que normalmente as pessoas não vêem como sendo.
Sobre YAML ser incluído, sim, YAML também é uma linguagem de programação, inclusive isso é esperado, uma vez que a definição do Van Roy deixa isso claro.

Vale lembrar que, ao você ter acidentalmente algo turing complete em formato de arquivos, isso pode inclusive representar falhas de segurança, como o @coproduto apresentou um caso real nessa talk. Nele, atacantes usaram intencionalmente o formato de arquivo como sendo linguagem de programação.

Sobre o ChatGPT, os pronts usados nessas novas ferramentas de IA (midjourney, ChatGPT, etc), até onde sei, tem ambiguidade (um input pode gerar N saídas válidas), o que já me causa estranheza na inclusão.
Por outro lado, eles servem para fazer o computador realizar um trabalho e gerar uma saída, tal como qualquer outra linguagem de programação, além de ser contruído de forma artesanal.

Achar uma única característica em comum com as linguagens de programação não torna HTML uma linguagem de programação. Principalmente se essa característica for tão ampla ao ponto de não ser restrita a linguens de programação.

Aí você já está usando um argumento circular.
Disse que X não pode ser Y porque Z não faz parte de X, mas não disse porque Z não faria parte de X.

Você ao menos abriu e leu rapidamente o artigo do Van Roy?

@Fryuni
Copy link

Fryuni commented Jan 2, 2023

Eu não discordo da conclusão que HTML é uma linguagem de programação. Não me importo o suficiente pra discordar.

Eu discordo do uso de uma definição tão vaga. Vaga ao ponto de poder chamar qualquer imagem de linguagem de programação, qualquer texto, qualquer sequência.

Nomes existem para diferenciar conceitos uns dos outros. Substituir um conceito de uma categoria de linguagem para algo tão amplo não acrescenta em nada.

É como defender que os neandertais são homo sapiens dizendo que a definição de "homo sapiens" deve ser expandida para "todo ser que respira".
Ótimo, agora neandertais são categorizadas como homo sapiens, mas não existe um termo para nos diferenciar dos outros animais, plantas e a maioria dos outros seres vivos, de que isso serviu?

@macabeus
Copy link
Contributor Author

macabeus commented Jan 2, 2023

Vaga ao ponto de poder chamar qualquer imagem de linguagem de programação, qualquer texto, qualquer sequência.

Você ao menos abriu e leu rapidamente o artigo do Van Roy, e/ou as demais referências que linkei?

@raulcorreia7
Copy link
Contributor

This is why we can't have nice things.

@Fryuni
Copy link

Fryuni commented Jan 2, 2023

Você ao menos abriu e leu rapidamente o artigo do Van Roy, e/ou as demais referências que linkei?

Sim, li. Alguns deles já conhecia inclusive. Isso não altera em nada minha posição, até porque o que eu não concordo é com a definição que você propôs, nada que foi proposto pelo Van Roy visto que, como você mesmo apontou originalmente:

Ele não chega a definir o que é "programming language", ...

@brandao07
Copy link

based

@hugopeixoto
Copy link
Member

Sendo o contexto uma mensagem de boas vindas no bot, acho fixe a ideia de ter ambas as mensagens, especialmente sendo uma cena tão parvamente controversa e muitas vezes usada como gatekeeping "ah só fazes HTML? n programas a sério".

Copy link
Member

@Alf0nso Alf0nso left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Penso que dado o esforço e tempo investido, seria de mau gosto rejeitar.

@IvoPereira
Copy link
Member

Este é provavelmente dos PRs mais completos que vi até hoje.

Dito isto, HTML é uma linguagem de programação. 🥳

@IvoPereira IvoPereira merged commit 1a4020a into devpt-org:main Feb 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants