No post sobre Escreva sua própria DSL eu falei sobre os benefícios em criar uma linguagem que seja útil para facilitar o desenvolvimento de sistemas dentro do contexto de negócio que você está situado. Queria levar essa ideia um passo além e incluir APIs e como o conceito de "crie sua própria linguagem" faz parte do dia-a-dia de qualquer programador e o quanto antes você perceber isso melhor.
APIs podem ser o maior ativo de uma empresa ou o maior fardo que a empresa vai carregar a ponto de impedir o avanço do seu próprio negócio.
Uma API tem as mesmas características de uma linguagem qualquer que é prover um mecânismo de comunicação entre partes que desejam se relacionar. No computador essa linguagem tem dois públicos-alvos distintos: 1) o computador e 2) os humanos.
Quando definimos uma camada de API o que está em jogo é a criação de operadores que combinados produzem algum significado e causam algum efeito. Para auxiliar no entendimento dessa construção, a linguagem pode ser dividida entre sua sintaxe e sua semântica:
APIs podem ser o maior ativo de uma empresa ou o maior fardo que a empresa vai carregar a ponto de impedir o avanço do seu próprio negócio.
Uma API tem as mesmas características de uma linguagem qualquer que é prover um mecânismo de comunicação entre partes que desejam se relacionar. No computador essa linguagem tem dois públicos-alvos distintos: 1) o computador e 2) os humanos.
Quando definimos uma camada de API o que está em jogo é a criação de operadores que combinados produzem algum significado e causam algum efeito. Para auxiliar no entendimento dessa construção, a linguagem pode ser dividida entre sua sintaxe e sua semântica:
- definição de sintaxe:
- Linguistica:
- componente do sistema linguístico que determina as relação formais que interligam os constituintes da sentença, atribuindo-lhe uma estrutura.
- Linguistica:
- definição de semântica:
- Linguística:
- componente do sentido das palavras e da interpretação das sentenças e dos enunciados.
- Linguística:
Considerar os públicos-alvos e essa distinção entre sintaxe e semântica é muito importante porque o computador não entende nada sobre o significado da linguagem que está sendo criada, porém os humanos estão pouco preocupados com a estrutura da linguagem quando o significado é claro. A falta de atenção para essa dicotomia resulta em linguagens que não atendem devidamente nenhum objetivo inicial.
Uma boa linguagem/API deveria ser:
- fácil de aprender
- fácil de usar (mesmo sem documentação)
- difícil de usar de forma equivocada
- suficientemente poderosa para satisfazer os requisitos propostos
- fácil de evoluir
- apropriada para audiência
Certamente esses critérios não são exaustivos principalmente quando estamos falando de códigos em computadores que são mantidos por programadores porque o aspecto técnico de como esse código está organizado por trás de uma API pública também importa muito. Porém, são aspectos razoáveis para conseguir criar uma forma de comunicação saudável entre as partes.
Eu também diria que uma linguagem/API ruim possivelmente apresenta:
- excesso de suporte técnico para tirar dúvidas quanto ao uso da linguagem
- operadores ambíguos (lembre-se que o computador não interpreta significado)
- re-definir operadores constantemente (significa que eu vou precisar re-aprender a linguagem)
- operadores fora do domínio da audiência
- transmite/executa apenas parcialmente um requisito
- não permite que os usuários combinem os operadores para construir novas sentenças
No final, pensar sobre a criação de API como a construção de uma linguagem pode facilitar que as perguntas corretas sobre o código sejam feitas e que as ferramentas certas sejam utilizadas. Se você utiliza uma ferramenta que dificulta a criação de uma boa linguagem certamente estará em desvantagem no mercado.
Ok, legal mas eu como programador não crio apenas rotas de APIs para expor meu sistema via algum protocolo como o HTTP, eu também crio funções, métodos, classes, interfaces, protocolos, etc Como isso tudo me ajuda? Pois bem, eu utilizei o termo API até aqui no seu mais amplo significado possível:
- API (Application Programming Interface):
- Conjunto de rotinas e padrões estabelecidas por um software para a utilização das suas funcionalidades por aplicativos que não pretendem se envolver em detalhes da implementação do software, mas apenas usar seus serviços.
Note que dentro dessa definição os módulos que seu sistema é subvidido também fornece interfaces de comunicação com outros módulos internos.
O seu sistema é uma grande linguagem que você desenvolve todos os dias. Acredito que seja benéfico prestar atenção se você está desenvolvendo uma linguagem críptica como o latin, simples com suas ambiguidades como o inglês, cheia de regras e exceções como o português, com ou sem rigor, etc.
E não se esquecer que as linguagens tem um efeito imenso em como enxergamos o mundo portanto a preocupação dos programadores deve ir muito além das trivialidades que sua ferramenta para construir linguagens impõe sobre você.