HTML é (ou não) linguagem de programação?

Existe um debate que desanima muita gente logo no começo da carreira. Vamos entender de verdade o que é o HTML e como encarar essa questão.


Existe uma situação que se repete muito com quem está começando. O cara decide aprender programação, pesquisa por onde começar, e descobre o HTML. Parece acessível, tem bastante material, e em poucas horas já está criando a primeira página. Ele fica empolgado, mostra para um amigo programador, e aí ouve a frase: "isso não é programação, HTML não é linguagem de programação."

E aí trava.

Vamos entender o que está acontecendo de verdade aqui, tanto do ponto de vista técnico quanto do ponto de vista prático.

O que é o HTML tecnicamente

HTML significa HyperText Markup Language, que em português seria algo como Linguagem de Marcação de Hipertexto. Então a palavra linguagem já está no nome.

Mas a discussão é sobre o tipo de linguagem. Dentro do universo das linguagens, existe uma divisão importante: linguagens imperativas e linguagens declarativas.

Linguagens imperativas são o que a maioria das pessoas imagina quando pensa em programação. PHP, JavaScript, Java, C++. Você escreve instruções que dizem ao computador o que fazer passo a passo, define variáveis, processa dados, usa condicionais para dizer que se uma coisa acontecer, outra coisa deve ser feita.

Linguagens declarativas funcionam diferente. Em vez de dizer como fazer, você diz como deve ser o resultado. O HTML é um exemplo claro disso. Quando você escreve HTML, você está dizendo como aquela página deve estar estruturada. Mas quem faz o processamento real não é o HTML, é o navegador que lê esse HTML e monta a página na tela.

O HTML em si não processa dados. Não tem variáveis. Não tem condicionais. Não tem lógica no sentido tradicional da palavra.

Por isso a comunidade, de forma geral, não considera o HTML uma linguagem de programação. Não porque ele seja inferior, mas porque ele cumpre uma função diferente.

Arquivos de configuração também são declarativos

Só para ampliar o contexto: arquivos de configuração de servidores também funcionam dessa forma declarativa. Eles dizem como determinada ferramenta deve se comportar, como um firewall por exemplo, mas não têm variáveis nem condicionais dentro deles. Também são considerados linguagens declarativas. Ninguém discute se quem escreve esses arquivos é programador ou não.

O ponto é que a categoria "declarativa" existe e é legítima. A questão é que por convenção, quando a comunidade fala em "linguagem de programação" sem qualificação, geralmente está se referindo às linguagens imperativas.

O que isso muda na prática

Na prática, quase nada.

O HTML é a porta de entrada para a programação web. Todos os cursos de desenvolvimento web começam por ele. E dentro de qualquer framework web moderno, em React, em Vue, em qualquer tecnologia voltada para front-end, você vai encontrar HTML. Às vezes embutido direto no JavaScript, às vezes em templates, mas vai estar lá.

Então o cara que aprende HTML está aprendendo algo que vai usar em toda a sua carreira como desenvolvedor web. Isso não é pouca coisa.

O problema não é o HTML. O problema é receber esse comentário logo no começo, quando a pessoa ainda está construindo confiança, e usar isso para diminuir o que ela está fazendo. É desnecessário e não ajuda ninguém.

O que você deveria pensar

Se você está começando e aprendendo HTML agora: você está no caminho certo. HTML é o primeiro degrau da programação web, e um degrau real, não um desvio.

Tecnicamente, HTML é uma linguagem de marcação e se encaixa na categoria das linguagens declarativas. Por convenção, a comunidade não o chama de linguagem de programação porque ele não processa dados nem tem condicionais.

Mas isso não muda o fato de que você está aprendendo a criar coisas, que é exatamente o que programação é. E logo você vai adicionar CSS, depois JavaScript, e vai perceber que o HTML que você aprendeu é a base de tudo.

O que você não precisa fazer é deixar uma discussão de nomenclatura te tirar do foco.