Idioma de princípios de design
bem-domínio-específico de linguagem, ou de uma linguagem em geral, capacita as pessoas com a capacidade de expressar seus pensamentos de uma forma rápida e concisa, bem como entender a resposta de feedback facilmente. É especialmente importante para a pesquisa porque afeta diretamente a rapidez com que você pode iterar — testar novas ideias e entender resultados intermediários. Iterações rápidas tornam possível testar uma gama mais ampla de parâmetros, incluindo aqueles que não devem funcionar à primeira vista, permitindo que você entenda muito melhor o domínio que você está investigando. Assim, o design de linguagem afeta diretamente não só o tempo total necessário para resolver um problema de uma forma não-linear, muitas vezes é a chave para encontrar a solução em tudo.uma questão importante emerge-o que é uma boa língua? Existem algumas diretrizes que cada idioma específico de domínio deve seguir? Pensamos que há dois princípios básicos:
- as pessoas precisam de uma conexão imediata com o que estão fazendo
Este princípio foi introduzido publicamente por Brett Victor, um visionário de Interação Humano-Computador, Durante sua palestra inventando por princípio. Qualquer violação deste princípio afasta o usuário dos problemas reais que ele está tentando resolver, o que consequentemente diminui a compreensão e aumenta o número de erros. - as pessoas não podem ser limitadas pela ferramenta que estão usando
As pessoas tendem a rejeitar qualquer ferramenta que obviamente limita a sua expressividade. Esta é a razão exata por que tantas soluções WYSIWYG, como criadores de sites, criadores de jogos ou linguagens de programação visual, nunca alcançam. Qualquer DSL mais complexo do que um editor de texto WYSIWYG pode facilmente violar este princípio, fornecendo aos seus utilizadores um conjunto muito limitado de componentes predefinidos de alto nível. Mesmo que estes componentes possam ser estendidos por escrita de código, a necessidade de recorrer a alguma linguagem de programação subjacente estraga o design e torna-o inutilizável para um público menos técnico.
violação de princípio
violação de qualquer destes princípios sempre leva a uma solução subóptima. Vamos considerar o design gráfico novamente. Usar o Photoshop é sempre melhor do que escrever código HTML, Sass e JavaScript? Indiscutivelmente. Estas soluções violam o primeiro e o segundo princípio, respectivamente. O Photoshop fornece uma tela digital WYSIWYG com um conjunto limitado de ferramentas predefinidas e dificilmente extensíveis. HTML, Sass e JavaScript, por outro lado, fornecem uma interface de texto, e assim, alienam o usuário de sua criação real, mas não estabelecem uma restrição apertada sobre a expressividade. Vamos considerar dois casos de uso:
- um projeto do site. Há cinco itens uniformemente organizados na barra de menu. Se você quiser adicionar um novo item e mudar a paleta de cores do site, tudo que você tem que fazer é modificar uma única linha em HTML e uma variável de cores em Sass. Não importa quão complexo seja o site, cada elemento será atualizado automaticamente. A fazer o mesmo no Photoshop requer várias ordens de magnitude mais tempo criar um novo item de menu, use uma ferramenta de alinhamento para organizar os elementos, alterar manualmente as cores e, provavelmente, voltar a aplicar algumas transformações e filtros mais complexos website áreas.uma pintura artística. Usar HTML, SVG e Sass dentro de um editor de texto para expressar uma visão artística dificilmente seria possível. Quanto mais criativo e descobrível o processo é, mais importante o conjunto de ferramentas WYSIWYG e ciclo de feedback instantâneo se tornam.seria possível fundir ambas as abordagens? Não só é possível, como já existem soluções que vão na direcção certa. Pense em Sketch, que se tornou o conjunto de ferramentas de design para Mac OS. Por que tantas pessoas preferem isso ao Photoshop? A resposta é surpreendentemente simples-Sketch limita sua expressividade de usuário menos do que Photoshop. Ele permite que você crie elementos de design reutilizáveis e, em seguida, atualizar seus parâmetros, assim como Sass, mas em um ambiente interativo WYSIWYG. Existem muitas outras maneiras de melhorar ainda mais a experiência do designer. Veja outra palestra de Brett Victor, desenhando visualizações dinâmicas, para mais inspiração.
The curse of DSLs
If we know the very basic principles for a perfect domain specific-language, why are the available domain specific tools not there yet? Porque não vivemos num mundo WYSIWYG ilimitado?enquanto as linguagens específicas do domínio fornecem uma forma incomparável de manipular e entender dados, elas também contrabandeiam silenciosamente padrões de design de software estragado. A existência de muitos, pequenos DSLs que não podem falar uns com os outros leva em uma perspectiva longa a um mundo de software disfuncional, fragmentado.
no mundo real, há uma cooperação constante entre domínios. A manipulação de imagens é muitas vezes utilizada para as necessidades de aprendizagem de máquinas e bioinformática, que por sua vez se tornam cada vez mais uma ferramenta importante para arquitetura e design de veículos. O rápido desenvolvimento da IoT resulta em dispositivos menores e mais autônomos, o que abre um novo mundo para detecção precoce de doenças, sistemas de monitoramento de saúde ou cidades inteligentes.
no entanto, não há quase nenhuma cooperação no mundo do software. Os desenvolvedores de Software estão escrevendo o mesmo código repetidamente, o que leva a altos custos de desenvolvimento e estagnação da inovação. Você não pode simplesmente tomar um editor de forma de seu software gráfico favorito, afinar-lo para as suas necessidades, colá-lo com máquinas ferramentas de aprendizagem e criar uma ferramenta de modelagem 3D assistida por AI para as necessidades de Impressão 3D. Em vez de horas, você atualmente precisa de dias ou meses para realizar tal tarefa. Mesmo se você encontrar bibliotecas que implementam funcionalidades semelhantes, uma enorme quantidade de trabalho tem que ser feito antes que ele siga o princípio “sem limites” e fornecer um ambiente verdadeiramente flexível, para que seus usuários possam afinar como o modelo é construído. Como resultado, em vez de melhorar componentes existentes ou inventar novas formas de manipular dados, os desenvolvedores re-implementam soluções conhecidas a partir do zero em cada nova aplicação.
Luna, a linguagem
as orientações para as línguas específicas do domínio a seguir o primeiro princípio são claras. A fim de fornecer a conexão imediata entre as pessoas e sua criação, linguagens específicas de domínio precisam combinar a visualização rica de dados e manipulação intuitiva de dados em uma única e suave experiência. Não há, no entanto, nenhuma regra de ouro como fazê-lo corretamente. Depende fortemente do domínio particular e das preferências do usuário, o que torna o segundo paradigma, a capacidade de personalizar componentes, ainda mais importante.
seguindo o segundo princípio, no entanto, é mais complicado. Como podemos projetar uma linguagem e ter certeza de que ela não limita a expressividade das pessoas? Como podemos permitir que os usuários tanto criar componentes reutilizáveis personalizados e profundamente modificar os existentes ainda manter a interface simples e não exigir que eles sejam programadores? A idéia é permitir que o USUÁRIO mude gradualmente a perspectiva. Em vez de recorrer a uma linguagem de programação subjacente, podemos permitir literalmente mergulhar em cada componente e usar a mesma (ou muito similar) linguagem para descrever como os sub-componentes se comunicam. Mergulhar ainda mais em componentes aninhados permite que os usuários avancem gradualmente de níveis altos para baixos de abstração a pedido.isto é exatamente o que Luna faz. Foi construído sobre três conceitos principais:
- Data visualization and manipulation environment
From the highest perspective, Luna allows you to visualize and manipulate data using interactive and extensible WYSIWYG components. Além disso, o Luna oferece uma maneira de definir facilmente novos componentes, modificar os existentes e compartilhá-los com a comunidade. - Data flow graph
você pode literalmente reduzir para ver como os componentes de alto nível estão conectados formando um grafo de fluxo de dados. Você pode reescrevê-los ou inserir novos componentes para redefinir como o grafo funciona. Luna fornece componentes que se espalham por todos os níveis de abstração, de alto a baixo. Da pintura de uma tela sobre Funções estatísticas para operadores bitwise - gráficos de fluxo de dados aninhados e representação de código
Cada componente em Luna é construído a partir de outros componentes, sem exceção. Você sempre pode mergulhar todo o caminho até o nível desejado de abstração e afinar-lo para as suas necessidades. Você também pode colapsar vários componentes conectados em um novo, mais poderoso e compartilhá-lo com outros. Além disso, Luna fornece aos seus usuários uma capacidade muito única para mudar entre representações — do grafo de fluxo de dados para o código e vice-versa. Implica uma verdade muito importante – o grafo é tão poderoso quanto o código.Luna foi projetado como um ambiente unificado para construir e hospedar linguagens visualmente ricas em domínios específicos. Ele confunde os limites entre domínios, permitindo que Ferramentas de diferentes campos se comuniquem e coexistam perfeitamente.
- Data visualization and manipulation environment