O futuro do Markdown

Markdown é um linguagem de marcação simples e humana baseada em convenções de texto simples testadas ao longo do tempo nos últimos 40 anos de computação.

Ou seja, se o senhor digitar isso… …o senhor recebe isso!
Lightweight Markup Languages
============================
According to **Wikipedia**:
> A [lightweight markup language](http://is.gd/gns)
is a markup language with a simple syntax, designed
to be easy for a human to enter with a simple text
editor, and easy to read in its raw form.
Some examples are:
* Markdown
* Textile
* BBCode
* Wikipedia
Markup should also extend to _code_:
10 PRINT "I ROCK AT BASIC!"
20 GOTO 10

Linguagens de marcação leves

De acordo com o Wikipedia:

A linguagem de marcação leve é uma linguagem de marcação com uma sintaxe simples, projetada para ser fácil de ser digitada por um ser humano com um editor de texto simples e fácil de ser lida em sua forma bruta.

Alguns exemplos são:

  • Markdown
  • Têxtil
  • BBCode
  • Wikipedia

A marcação também deve se estender a código:

10 PRINT "I ROCK AT BASIC!"
20 GOTO 10

O senhor pode pensar no Markdown como uma forma radicalmente simplificada e muito mais legível de HTML. Nos últimos anos, passei a gostar muito do Markdown. Se o senhor é um programador de qualquer forma, tamanho ou cor, não pode realmente evitar usar Markdown, pois ele é essencial para o GitHub e o Stack Overflow. Por falar nisso, meu novo projeto também usa Markdown.

O Markdown é uma ferramenta maravilhosa, mas sofre um pouco com a falta de liderança de projeto. A chamada “especificação” é tudo menos isso, e há dezenas de versões diferentes de Markdown por aí, todas com diferenças na maneira como se comportam. Embora sejam amplamente compatíveis, o Stack Overflow e o GitHub ajustaram o Markdown de maneiras que podem atrapalhar se você estiver familiarizado com um, mas não com o outro; compare Sabor do GitHub com Sabor do Stack Overflow.

É por isso que fiquei tão empolgado ao receber este e-mail de David Greenspan há alguns dias:

Sou o criador do EtherPad (um editor WYSIWYG colaborativo), agora trabalhando no Meteor. No Meteor, estamos tentando “pavimentar a Web” para os desenvolvedores, escrevendo componentes melhores. Por exemplo, acabamos de lançar botões de login universais que se comunicam por WebSockets e são conectados à tabela de usuários do banco de dados do aplicativo. Como o Markdown é cada vez mais onipresente para escrever conteúdo, ele fará parte da cadeia de ferramentas do Meteor. Não me surpreenderia se acabássemos lançando um componente como o editor do Stack Overflowcom o padrão “Meteor” completo de qualidade de código, para que ninguém tenha que desenvolver seu próprio código novamente. Hoje, usamos Markdown em nossa geração de documentos de API e vamos escrever cada vez mais conteúdo nele, o que é um pensamento assustador.

Acho que o senhor e eu compartilhamos alguma preocupação (horror?) sobre A falta de especificações e testes do Markdown. Além disso, o código é feio. Estender ou personalizar o Markdown é complicado (já temos alguns hacks e eles são terríveis), e eu me preocupo com a “podridão de bits” do conteúdo se o formato não tiver uma especificação. Estou avaliando a possibilidade de recomeçar com uma nova implementação associada a uma especificação real e a um conjunto de testes, e tenho pensado muito sobre como analisar uma linguagem como o Markdown de uma forma baseada em princípios. A propósito, sou bastante destemido com relação a analisadores; escrevi um analisador completo de ECMAScript em uma semana como um projeto paralelo.

Quero que essa nova linguagem – cujo nome provisório é “Rockdown” – seja vista como Markdown com uma especificação e, portanto, só se desvie do comportamento do Markdown de forma discreta. Ela deve ser basicamente um substituto que cubra os problemas e as ambiguidades do Markdown. Estou tentando traçar uma linha entre o comportamento que é importante preservar e o que não é.

Fiquei empolgado porque, assim como David, eu me amor Markdown. Gosto tanto dele que quero vê-lo ter sucesso e florescer nos próximos 20 anos. Acredito que a melhor maneira de atingir esse objetivo é que os sites mais populares que usam Markdown se unam e se apropriem dele como um padrão. Proponho que o Stack Exchange, o GitHub, o Meteor, o Reddit e qualquer outra empresa com muito tráfego e um investimento estratégico em Markdown trabalhem juntos para criar uma especificação oficial do Markdown e conjuntos de testes padrão para validar as implementações do Markdown. Todos nós estamos trabalhando com propósitos diferentes há muito tempo, fragmentando acidentalmente o Markdown enquanto o popularizamos.

Como qualquer pretendente obediente e bem-intencionado, primeiro precisamos pedir permissão aos pais para esse namoro. Assim Estou perguntando aos senhores, John Gruber: como criador original do Markdown, o senhor abençoaria essa empreitada? Além disso, como um aparte totalmente não relacionado, já mencionei que o senhor é um enorme Yankees fã que eu sou? Derek Jeter é um dos melhores de todos os tempos.

Logotipo dos Yankees

Sei que o diabo está nos detalhes, mas, na maioria das vezes, o que eu quero ver em um Padrão Markdown é o seguinte:

  1. Uma padronização das convenções básicas existentes do Markdown, conforme documentado por John Gruberem uma especificação de linguagem formal.
  2. Tornar as três “pegadinhas” mais comuns do mundo real nas escolhas do Markdown com padrões mais simples: ênfase intrapalavra (desativada), hiperlink automático (ativado), quebra de linha automática baseada em retorno (ativado).
  3. Um conjunto formal de testes que qualquer pessoa pode usar para validar uma implementação do Markdown.
  4. Algumas limpezas e ajustes para casos ambíguos que existem no Markdown devido à falta de uma especificação formal.
  5. Um registro de variantes de sabores conhecidos, com algum possível lobby futuro para adicionar somente as variantes mais ampla e fortemente suportadas (estou pensando nos blocos de código no estilo GitHub, que são muito bons) para futuras versões do Markdown.

E é só isso, na verdade. Não quero estender o Markdown adicionando toneladas de novas funcionalidades malucas, ou mudar radicalmente a maneira como ele funciona atualmente, ou algo do gênero. Eu me oporia a essas mudanças. Quero apenas solidificar e padronizar a versão simples e útil do Markdown que está funcionando tão bem para todos no momento. Quero que haja um padrão básico e inequívoco que todos que usam o Markdown possam esperar que funcione da mesma forma em todos os sites do mundo quando começarem a digitar.

Marca do Markdown

Eu realmente preferiria não bifurcar a linguagem; eu preferiria muito mais ajudar coletivamente a levar a bandeira do Markdown para o futuro, com a bênção de John Gruber e em colaboração com outros sites populares que usam Markdown.

Então… quem está comigo?