Executando verificação de segurança...
6

HTML é uma linguagem de programação?

Não.

HTML é uma linguagem de marcação como o próprio nome diz. Hyper Text Markup Language. Mais amplamente pode ser considerada uma linguagem de dados. HTML apenas encapsula dados e descreve o que fazer com eles, não como fazer. Está definido na Wikipedia em inglês.

A web browser can read HTML files and compose them into visible or audible web pages. The browser does not display the HTML tags, but uses them to interpret the content of the page. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language rather than a programming language.

Ela não é linguagem de programação porque não é Turing complete. Ou seja, ela precisaria ter algumas características específicas para poder "programar um dispositivo". Você não pode executar o HTML, por isto é que precisa do JavaScript para fazer algumas coisas, esta sim uma linguagem de programação. Ambas podem até serem consideradas linguagens computacionais, mas para por aí.

Semântica: você programa e/ou codifica em JavaScript mas só codifica em HTML (você cria um código que declara uma forma de apresentação).

Máquina de Turing

HTML está longe de ter a completude de Turing. Ela precisaria ter todas estas capacidades:

  • fazer cálculos;
  • mudar informações contidas em algum tipo de memória;
  • tomar decisões;
  • mudar o fluxo de execução.

Alan Turing criou uma máquina teórica mínima que permite fazer estas operações e passou-se considerar que qualquer linguagem de programação precisa ser capaz de fazer todas as operações desta máquina universal.

Estas linguagens que não são de programação ajudam instruir dispositivos (computadores com softwares, por exemplo) a realizar alguma tarefa, mas uma linguagem de marcação tem sua capacidade de fazer isto bem limitada, não consegue fazer todas operações da máquina de Turing.

Além disto uma linguagem de marcação sozinha não faz nada. Em tese você poderia até criar uma máquina que "entenderia" uma linguagem de marcação e fazer alguma coisa mas duvido que isto teria alguma utilidade real. Na prática, na tecnologia atual, estas linguagens só funcionam porque são interpretadas por softwares que foram criados com... linguagens de programação.

Por que adotamos a máquina de Turing como parâmetro para definir o que é uma linguagem de programação?

Você precisa estabelecer um corte, dar uma linha onde tem cada coisa, caso contrário qualquer coisa poderia ser uma linguagem de programação, até mesmo a tabela ASCII pode ser considerada assim porque há um conjunto de regras e o seu uso instrui de forma limitado como um computador deve operar. Pode-se alegar que a definição é arbitrária, mas ela faz sentido, é útil para classificação, foi inventada no início na computação moderna e não traz problemas.

Pode-se inventar outro critério? Claro que pode, mas para que? Existe quem alega que 1 mais 1 não é 2. Pode ser verdade, mas que ganho teremos em mudar este conceito? Como exercício de pensamento pode ser interessante, mas não tem motivação prática, por isso quem insiste nisso beira a insanidade.

A classificação sobre linguagens que se faz hoje atende bem a comunidade. Pessoas que querem questionar são bem-vindas, porém se a pessoa quer mudar o que foi estabelecido e estabelecer uma nova norma, precisa convencer as pessoas, dar dados concretos, mostrar pesquisas sérias que mudam isto e dão motivação para a mudança. Isto é diferente de apenas corrigir um entendimento errado por parte de algumas coisas e que documentos oficiais dizem o contrário, como eu fiz em https://pt.stackoverflow.com/q/269089/101.

Outras linguagens

Em geral linguagens que terminam com ML são linguagens de marcação, vide XML. Claro que isto é apenas uma ideia inicial, existe uma linguagem de programação chamada ML (Meta Language) e várias derivadas delas (SML, CAML, OCAML, etc.). Embora não esteja no nome da maioria das linguagens de programação a sigla PL acaba sendo associada a elas de alguma forma. Um caso onde o nome tem a sigla é o PL/SQL que obviamente é uma linguagem de programação.

Então SQL deve ser uma linguagem de programação, certo? Não, pelo menos na sua versão ANSI ela não é Turing complete. As extensões fornecidas pelos principais sistemas de banco de dados do mercado, principalmente para trabalhar com stored procedures, são mais completas e aí sim podem ser consideradas Turing equivalent (apenas um nome alternativo/sinônimo).

CSS é uma linguagem de estilos e também não é uma linguagem de programação.

XSLT (Extensible Stylesheet Language Transformations) é uma linguagem declarativa como a maioria das linguagens de marcação mas é uma linguagem de programação já que permite fazer todas computações da máquina abstrata de Turing.

Tanto linguagens de programação quanto de marcação podem ser declarativas ou imperativas. São conceitos diferentes. Pode haver confusão porque é mais comum as PLs serem imperativas e as MLs serem declarativas.

Lua é uma PL que é usada como marcação em algumas situações. Claro que é o uso de apenas um subset, mas ela pode ser usada como uma forma muito parecida com JSON que também é ML baseada em JavaScript que é uma PL. Certamente existem outras linguagens que possuem uma sintaxe que facilitam ter uso como linguagem de marcação.

Já se considerar HTML5+CSS3 como uma linguagem única aí fica mais complicado dizer se isto pode ser considerada uma linguagem de programação. Certamente seria uma PL bem estranha de usar mas pode fazer todas computações mínimas, certo? Veja a Rule 110.

Por que saber isto é importante?

Porque computação é uma ciência exata, quando você não liga para a exatidão das coisas você está no caminho errado para realizar este trabalho. Além de saber se comunicar melhor com seus pares de profissão (aqui inclusive), há um efeito cognitivo importante quando procura fazer e definir as coisas da maneira correta. Você é reflexo do que você pratica. Ninguém é musculoso sem fazer esforço físico (nem tomando bomba). Ninguém vai se "comunicar com o computador" adequadamente se não exercita a comunicação precisa em tudo na vida. Não estou dizendo que você precisa saber tudo, que não pode errar, o que seria ingênuo, mas precisa se esforçar e ter isto sempre em mente. Desconheço uma chavinha no cérebro que liga ou desliga a capacidade e necessidade de comunicação correta, que só queria ter um compilador para me ajudar indicar meus erros quando não estou programando :) .

Excel é uma linguagem de programação?

Note que estou falando do Excel em sim, não de linguagens que podem usar para automatizar algo que estão embutidas nele.

Vamos fazer uma enquete? Vote em um dos 2 comentários que falam que é ou não. Se quiser responda abaixo por que acha que é ou não é.

Coloquei no GitHub para referência futura.

Carregando publicação patrocinada...
3

Sim, Excel é uma linguagem de programação porque ela é Turing complete. Apesar de ser uma linguagem um pouco estranha para programadores, mas só é estranha porque estão acostumados com outra coisa.

5

Mais uma questão onde a divisória é muito tênue. :D

Votei sim mas acho que precisaria embasar o meu raciocínio.

O Excel (ou a maioria das planilhas eletrônicas acho que desde o visicalc) poderiam ser consideradas uma linguagem de programação? O Smalltalk é uma IDE euma linguagem de programação. Scratch é uma IDE? e uma linguagem de programação. Emacs é um editor/ide mas a linguagem de programação é elisp.

Mas é possível fazer um sistema em uma planilha como o Excel apenas utilizando os recursos mesmo sem utilizar VBA.

Sobre o Excel (ou outras planilhas) e ignorando o VBA e qualquer outra finalidade.

  • é possível fazer cálculos? : sim e é uma das finalidades básicas de uma planilha.
  • é possível mudar informações contidas em algum tipo de memória? ; acho que o que mais acontece
  • é tomar decisões : sim; tem if e outras comparações
  • é mudar o fluxo de execução : sim

Estudo de caso

  • Indústria com um sistema em excel. Planilha com quase 8MiB. Nenhuma linha de VBA.
  • Proposta inicial. Converter para um programa GUI com uma versão para a engenharia/vendas e outra para clientes.

Como o meu ambiente de desenvolvimento é Linux...

  • Dificuldade para abrir o arquivo (LibreOffice causava alguns erros; WPS abriu legal)
  • Como não sou muito familiarizado com planilhas, levei um tempo mas é chato converter aquele monte de fórmulas, If, Lookup, etc., para uma linguagem de programação e pegar a lógica da coisa.

Resultado

  • Primeira versão ficou ótima.
  • Mais funcionalidades e facilidade que o excel.
  • Integração com outros sistemas da empresa.
  • Ainda estou melhorando.
4

Legal, a ideia é essa. De fato não é uma unanimidade, mas eu percebo que a maioria das pessoas usam esse critério porque se considerar de outra forma fica aberto demais, e até ficaria sem sentido direfenciar HTML como uma linguagem de marcação.

O Donald Knuth, um acadêmico dos melhores na área da computação, desses que rarmente aparece um, com lucidez incrível, já escreveu que considera HTML uma linguagem de programação (já recebi negativo na postagem provavelmente porque a pessoa também acha que é, mas não quis dizer nada). Quem sou eu para contestar o Donald Knuth, mas isso mostra que nem tudo que uma determinada pessoa falou seja provado como verdade.

Vou dar o exemplo do Winston Churchil que tem uma famosa frase:

A democracia é péssima, mas é melhor que as outras formas

Até pode ser verdade, mas o argumento que as pessoas usam para afirmar isso é que ele falou, esse argumento não é válido, mesmo que a premissa seja verdadeira.

Então estou dizendo que o Don Knuth está errado? Claro que não, apenas que ele usou outro critério. Nos escritos dele está lá o argumento. Ele diz que qualquer linguagem usada que mande o computador executar algo é uma linguagem de programação. Ok, é um critério.

Por esse critério o português pode ser uma linguagem de programação, ainda mais com IA. Porque na definção dele não importa o quão complexa é a tradução para um computador executar, se tem que usar um LLM e agentes para o computador executar, e pior ainda se for falado, tem que fazer o reconhecimento da voz.

Então o HTML seria uma PL porque diz ao computador como apresentar dados na tela do computador (ou de outra forma). Não deixa de ser uma forma de programar. Ele não está errado, mas está adotando um critério mais aberto que complica a classificação e não é o´que eu vejo como prevalente. O Turing complete parece ser o critério quase universal. E eu tenho quase certeza que se perguntar para ele se usando o critério de TC, HTML não é um PL. E se por acaso ele discordar ele nos dará um belo ensinamento com argumentos fundamentados.

Obviamente que pelo critério dele Excel é uma PL.

Um amigo meu perguntou: se fizer uma continha simples no Excel, você está programando? Eu respondi com outra pergunta, se você escrever um Hello World em Python ou Java, está programando? Então importa o que você faz ou a capacidade que a linguagem tem?

Claro que usei o Excel como exemplo, poderiam ser outras planilhas e provavelmente o Visicalc em alguma versão era Turing complete, mas acho que não nas primeiras.

É isso aí, o exemplo é perfeito.

Se alguém disser que HTML ou Excel não é uma PL, ok a pessoa pode estar certa, só gostaria que ela falasse qual é o critério que usou, até para ajudar outras pessoas a aprender mais sobre isso.

Obrigado pela oportunidade de eu dar mais detalhes.

2

Conteúdo com uma alta qualidade e nível de detalhes exemplar, exprimindo até mesmo nos comentários questionamentos relevantes e úteis para construir software de qualidade. Foi muito prazerosa a leitura e esclarecedora.

2

Cara, gostei da proposta e do desenvolvimento que você trouxe. Maaas nem precisa ir tão longe a ponto de discutir se Excel é ou não linguagem de programação. Tenho me pegado refletindo sobre algo que parece ainda mais “programável”: o PowerShell.

Olha só, de acordo com os critérios mencionados como ser Turing complete, ter controle de fluxo, suporte a variáveis, funções, capacidade de cálculo e manipulação de memória — o PowerShell preenche todos esses requisitos. Dá até pra ir além: ele carrega assemblies do .NET e manipula objetos via pipeline. Ou seja, se a gente for se apegar à definição puramente técnica, dá pra dizer que ele é uma linguagem de programação.

A Máquina de Turing é um critério técnico, mas ele mesmo admite que é uma convenção, um ponto de corte arbitrário e pragmático. O ponto é: ser Turing complete é condição suficiente, mas talvez não seja necessária pra gente, na prática, reconhecer algo como linguagem de programação.

Se a gente pensar que programar envolve projetar, abstrair, criar soluções genéricas, estruturar código para reuso e manutenção... aí o PowerShell começa a parecer mais com um instrumento de script do que uma linguagem "de verdade". Dá pra fazer umas mágicas com ele? Dá. Mas também dá com Excel, XSLT, ou até com CSS usando hacks. A questão é: vale a pena? Foi pra isso que ele nasceu?

1

PowerShell é claramente uma linguagem de programação quase por qualquer critério que use, não seria por algum bem exótico, ou querer que para ser TC pecisa da infinitude, que é impossível de realizar.

Não há dúvidas que a máquina de Turing é uma convenção arbitrária e não algo natural.

Um instrumento de script me parece ser uma programação, e novamente, precisamos nos apoiar em algum critério, e achque que ser TC pode ser ao mais adequado, outros que tornam quase tudo inviável ou quase tudo é programação não me parece adequado.

Não concordo que programar envolve os aspectos que listou, ainda que eles são desejáveis em sistemas profissionais feitos para durar, eu chamo isso que descrevou mais de engenharia de software, que apenas uma parte é a programação.

Com CSS sozinha há fortes limitações do que dá para fazer.

Não importa para que nasceu, importa se faz ou não faz. O mecanismo de templates de C++ é TC, portanto ele sozinho, mesmo sem o resto do C++ é uma PL por si só, e ele não nasceu para isso, demorou anos para descobrir que ele tinha essa capacidade.

2

Quanto ao Excel;

Parece que você está se referindo ao Excel sem o VBA, é isso mesmo?
o Excel tem o if portanto pode realizar decisões dentro das fórmulas.
mas até aonde eu sei o fluxo de execução é sempre o mesmo; eu gostaria muito de saber se houver uma maneira de alterar o fluxo de execução em tempo de execução.

1

Sim, é isso mesmo, ou sem Python ou sem C# e outras linguagens que podem ser usadas nele.

A recursão é uma forma de mudar o fluxo, ou seja o Excel seria do paradigma declarativo funcional. goto, while , for, e até o if são formas imperativas de controle de fluxo.

Boa parte da mudança de controle de fluxo que você verá é interna ao Excel, assim como a mudança real do fluxo de forma imperativa é interna ao processador.

Pode ajudar: https://pt.stackoverflow.com/q/444793/101.

1

Desculpa amigo; mas eu preciso de mais explicações para aceitar que é possível controlar o fluxo apenas com as fórmulas da planilha.

Mesmo usando o if todas as células são calculadas e sempre no mesmo sentido; das mais dependentes para as que tem mais dependência.

O Excel possue maneiras de acelerar os cálculos evitanto recalcular algumas celulas que não tem alteração de valor e isso pode ser alterado nas configurações do Excel; mas não nas fórmulas da planilha.

Também não conheço uma maneira de fazer algo semelhante a um goto, for ou gosub.
Dá para fazer com relação aos valores que uma célula vai usar; mas novamente todas as células continuam sendo calculadas com a mesma ordem de execução.

Existe uma maneira de fazer uma Máquina de Turing dentro de uma planilha do Excel?

1

Seria necessário um contexto melhor. Tipo exemplos de como fazer alguma coisa que exige goto, gosub e/ou for que não possa ser feito apenas com as possibilidades disponíveis em uma planilha.

goto
Conforme Dijkstra, goto é considerado prejudicial. :D
Depois que eu sai do BASIC, COBOL e Assembly, acho que usei uma vez o goto em Pascal.

gosub
Se for uma chamada que retorna um valor, seria o equivalente a referenciar diretamente a célula que contém o valor. Também nunca mais usei ON n GOTO/GOSUB [...]

for
Pode ser usada uma faixa tipo A1..A50. De qualquer forma, não é possível retornar mais de um resultado no mesmo cálculo. Pode ser necessário copiar a fórmua para diversas celulas, cada uma retornando um valor.

Brinquei aqui com o Gnumeric e resolvi fazer uma calculadora básica com as 4 operações. A programação ficou assim:

=switch(B1;
"+";A1+C1;
"-";A1-C1;
"*";A1*C1;
"/";if(C1=0;"Divisão por zero 😭️";A1/C1);
"B1 apenas  +-*/ 🤪️")

O resultado:

gnumeric

1

Você acabou de explicar, as mais dependentes já mostra que o fluxo não é sequencial, conforme você mexe na planilha. Cada célula é uma função, é uma chamando a outra, ou você acha que função não é uma forma de mudança de fluxo? Se acvha isso como as linguagens puramente funcionais fazem? Ou acha que elas não são Turing complete?

Quando você faz um código ele semper executa no mesmo sentido, na mesma ordem, até que mude o código, exatamente igual uma planilha, o sentido não precisa ser sequencial e issoque importa. Na verdade, o sequencial já é um fluxo. Quando você copia fórmulas de uma célula para outra está fazendo uma repetição, e pode ver mais sobre isso no link que eu passei*. Um fornão é aleatório, ele tem uma ordem que o programador estabelecer, assim como o programador do Excel estabelecer criando as dependências entre fórmulas.

Se você tivesse lido o que eu te passei não estarei achando que só um goto ou for é que muda fluxo. Ou mesmo lendo não conseguiu perceber isso, aí eu não sei como argumentar de outra forma agora, pode ser que depois me surja uma maneira, mas não estou com tempo para me dedicar a isso agora, é algo básico e posso um dia escrever mais sobre, pode ser ideia até para um vídeo meu. Eu até entendo que as pessoas estão acostumadas com uma coisa e tenham deificuldade de ver que é a mesma coisa, só não é tão visível quanto é em um código feito em texto, mas isso é oque eu semrpe falo, falta dos fundamentos, a pessoa sabe como é o mecanismo, mas não sabe porque ele existe, porque não é de outro jeito, como ele é executado., etc.

Para dar mais informação, ainda que não ajude tanto nessa resposta, mas ajuda entender melhor o desvio tradicional condicional (que o Excel só usa com um if() ou outra função decisõria: https://pt.stackoverflow.com/q/420854/101. Tudo isso ocrre dentro do Excel, mas você não vê, como não vê em Haskell, Ocaml, Lisp, etc. Por isso que é bom se expor nas mais variadas linguagens, para entender o todo da computação.

O Excel é a máquina de Turing. Claro que não 100%, a máquina de Turing não pode ser feita de verdade, ela é um conceito teórico, então aceita-se que pelo menos uma ideia dela não seja contemplada. E muita gente diz que se algo é PL só ser for Turing complete, então nada é PL, porque isso é imposível no mundo em que vivemos, e estritamente a pessoa está certa, mas deixa-se de lado a infinitude para que tenha efeito prático.

1

Sim eu li os teus links e obrigado pela sua dedicação em responder.
Eu realmente estou interessado em avançar mais nessa conversa; então se também for interessante para você, poderemos prosseguir mais.

Quanto a máquina de Turing podemos ignorar a memória infinita, bastaria construir uma máquina de Turing com memória suficiente para que durante a execução das tuplas não fosse alcançado os limites da memória.

Uma das implicações da máquina de Turing é que é possível uma máquina de Turing simular outra máquina de Turing.
Dessa forma em qualquer linguaguem de programação é possível construir um interpretador de tuplas que lê e escreve em uma memória.

Pelo que eu lí dos seus posts, presumo que você seja um professor universitário com mestrados e doutorados e que você tem um conhecimento muito amplo e profundo sobre programação.

Eu não conheço linguagens puramente funcionais; então talvez eu também não tenha os requisitos suficientes para me aprofundar nessa discução contigo; mas isso é você quem vai dizer...
As linguagens que eu conheço são mais antigas; Cobol, BASIC, C e Assembly.
A minha área de atuação não é a mesma que a maioria do pessoal.

0

Não. Excel é só um software que faz contas e apresenta dados de diversas formas, mas não podemos considerar isso como uma linguagem de programação que não é um texto como estamos acostumados.