Há algum tempo, deparei-me com o conceito de usar planilhas (quero dizer células e fórmulas, não código de macro) como uma maneira de especificar a lógica de programação. A ideia é:
crie uma planilha com um fluxo de cálculos bem definido (que às vezes é mais adequado ao paradigma "fluxo de dados" das planilhas em vez de estilos de programação procedurais ou orientados a objetos)
definir células de entrada
definir células de saída
compilar tudo em uma classe executável autônoma (ou função, procedimento, ...)
use-o no código normal em um projeto de software mais amplo
use a planilha como código-fonte para ser mantida ao longo do tempo
A idéia é usar essa técnica para problemas que realmente se encaixam no modelo e que isso levaria a um código naturalmente bem documentado e fácil de manter. Estou interessado em saber se você experimentou o uso da técnica e para quê. Um exemplo de aplicativo que me veio à mente são as calculadoras de tarifas de seguros, que são tipicamente elaboradas, criadas e validadas por atuários em planilhas do Excel e codificadas apenas posteriormente (é um processo doloroso) em uma lógica de programação difícil de manter.
fonte
Respostas:
Embora não seja exatamente o estilo de "criar uma planilha, compilá-la no código" sobre o qual você estava perguntando, a extensão de fluxo de dados Cells no CLOS usa um modelo semelhante: que fórmulas que expressam fluxos e transformações de dados sejam a representação "material de origem" / " of record "para design de objeto / classe. Considere isso como uma maneira alternativa de criar o que você estava perguntando.
E apenas por diversão: macro de planilha
fonte
Honestamente, mal consigo pensar em cálculos do mundo real onde isso se aplica. A programação "Dataflow" pode ser feita facilmente com muitas linguagens de programação modernas (veja o LINQ no mundo .NET, ou os operadores de processamento de listas do Perl e Python) e, para minha experiência, isso resulta em um código muito mais sustentável do que um monte de "fórmulas de planilhas" com referências de célula difíceis de manter.
Por outro lado, eu e meus colegas criamos muitos aplicativos baseados em planilhas (MS-Excel, para ser mais preciso), nos quais o Excel era usado como uma ferramenta amigável para inserir dados de entrada / criar máscaras de entrada muito rapidamente, ou para criar saída formatada, ou ambos. Em todos esses casos, o cálculo ou o processamento desses dados não foi feito (ou apenas parcialmente) pelas fórmulas do Excel, mas pelo código do programa, pois as fórmulas do Excel não eram poderosas o suficiente ou a ferramenta completamente errada (e acredite, temos um muito conhecimento do que é possível com fórmulas do Excel e do que não é).
fonte
Desde que li este artigo , estive pensando sobre o conceito. Eu acho que definitivamente há um uso para isso.
Uma coisa sobre otimizar isso, uma planilha é muito semelhante ao espaço de memória. Também é muito semelhante ao espaço de exibição e impressão (como em x, y). Muitos benefícios lá também.
Quando você observou a manutenção, isso abriu muitas idéias para mim. Eu não sei o que há para compilar com recursos reais e de linguagem, bibliotecas etc. pode ser uma grande dor. Ainda assim, poderia haver um futuro em algum lugar.
Na verdade, escrevi apenas scripts VB para planilhas, livros de notas e "software" de contabilidade principalmente. Nunca criou aplicativos executáveis com base em qualquer planilha, exceto a interface de arquivo excel de um aplicativo C ++.
fonte
Sim, no entanto, penso nisso mais como "teste de planilha" em vez de "programação de planilha". Por exemplo, recentemente eu estava trabalhando em um recurso para o nosso projeto que envolve a realização de um cálculo em um grande número de registros do banco de dados. O cálculo era relativamente simples, mas importante e, portanto, necessitava de uma atenção especial nos testes. Além disso, a fórmula que estávamos usando exigia uma pequena quantidade de adaptação para ser aplicável à nossa situação.
Realizei alguns cálculos manualmente para escrever meus testes de unidade, enquanto o testador com o qual eu estava trabalhando criou uma planilha como você descreveu para uso em seus testes de ponta a ponta. Devido à adaptação da fórmula de origem, não tínhamos dados de teste independentes para comparação, portanto, a planilha forneceu uma espécie de verificação de estilo de "contabilidade de entrada dupla" que nos deu confiança de que o código estava correto.
Então, sim, considero essa técnica muito útil como fonte de dados de teste para casos em que os cálculos envolvidos são fáceis de implementar em uma planilha, mas precisam ser implementados em código. No entanto, essa planilha não deve ser usada para "especificar lógica de programação", mas apenas o (s) resultado (s) final (is) necessário (s).
fonte
Planilha "programação" é um tipo de programação de fluxo de dados.
Temos um problema linguístico, não devemos chamá-lo de "programação", porque é muito menos do que chamamos de programação, mas é definitivamente mais do que inserir dados em um programa.
A programação de fluxo de dados é uma arquitetura e disciplina, onde o aplicativo é uma rede de módulos independentes, eles enviam mensagens (dados) um ao outro. Esse modelo não é aplicável a todos os problemas, apenas aos que têm dados ou fluxo de origem (ou mais), que passam pela rede de processamento e produzem dados / fluxos de saída. Veja a lista abaixo.
A programação de fluxo de dados tem vários tipos, vamos ver alguns:
Voltando à sua pergunta: acho que sim, é uma boa ideia publicar um aplicativo de fluxo de dados como um aplicativo independente. Eu já fiz isso. Duas vezes .
Eu e um amigo meu criamos um protótipo de sistema DF para automação residencial. Não temos editor de gráfico; portanto, o aplicativo não é editável pelo usuário, alguns parâmetros são armazenados em um arquivo de configuração, mas nada mais. Temos uma linguagem de script DF, "compilada" no código C ++ (uma lista de criação de componentes e definições de mensagens), que é compilada em um executável nativo. Os módulos são classes C ++ (outras classes, apenas para obter algumas informações sobre nosso sistema: Mensagem, Dispathcer, Componente (resumo), Porta (resumo), ConsumerPort, ProducerPort).
Além disso, ficamos impressionados com as vantagens de um sistema DF: criamos um aplicativo sniffer serial em 2 minutos ou criamos um programa de teste no local , que pisca as lâmpadas um por um (não havia documentação em IDs de hardware). Criamos componentes MIDI e joypad apenas por diversão, também criei um órgão leve (consulte http://homeaut.com/under_construction/ ).
Só vejo uma dificuldade no caso de planilhas: como todo número e fórmula (potencialmente: toda célula) é um componente, seu gráfico não é final. Quando você adiciona uma linha ao seu aplicativo sum () simples, isso significa que o gráfico do fluxo de dados é alterado. Portanto, você deve "reprogramar" o gráfico em tempo de execução, ou devemos chamá-lo de "metaprogramação". No Excel, uma macro faria o trabalho, mas perdemos a pureza do fluxo de dados.
Eu tenho uma solução não muito ruim, mas não perfeita. Eu fiz uma planilha, um aplicativo AJAX com backend PHP. O eixo vertical é o tempo (dias), as linhas são componentes. Existem componentes, como entrada (a linha pode ser editada pelo usuário), média vertical, média / soma horizontal e alguns cálculos estatísticos específicos do domínio. Há apenas um problema: é "unidimensional". Desde que eu queira apenas somar, avg e tudo o mais, posso adicionar novas linhas e criar o componente, que calcula o material. Mas há uma forte restrição: as colunas são sempre dias (criei "visualizações" semana e mês, que exibem dados diários como soma / média, mas ainda são unidimensionais. Não posso mostrar, é colaborativo e requer que a tarefa de back-end do PHP seja executada em 24/7, não é suportada pelo meu provedor de hospedagem.
Portanto, meu modelo (que pode ser melhor descrito como: "dias na horizontal") não é capaz de lidar com outros tipos de problemas.
Eu tenho uma idéia, como resolver este problema: abas .
Quando você fica preso no Excel e precisa criar outra tabela, pode usar uma área distinta na mesma guia ou abrir outra guia. Além disso, a referência entre guias é desconfortável, eu prefiro o primeiro método. Eu acho que as guias devem ser exibidas na mesma tela, como janelas sem sobreposição.
Toda tabela deve ter seu eixo crescente: vertical, horizontal ou fixo. As tabelas verticais crescentes têm componentes de linha (como minha planilha diária), onde todas as colunas têm a mesma fórmula, os componentes horizontais têm componentes de colunas, as tabelas de tamanho fixo são como qualquer planilha.
Portanto, quando o usuário adiciona uma nova linha / coluna, a nova linha / coluna terá a mesma fórmula.
Além disso, nas planilhas, eu odeio o fato de precisar copiar as mesmas fórmulas 1000 vezes, se tiver 1000 linhas. É uma fonte de bugs (mantendo a versão antiga da fórmula em algumas linhas), desperdício de memória (armazenando a mesma fórmula 1000x).
Talvez eu esteja errado, e há erros de conceito nesse modelo, mas espero que tenha sido uma boa idéia.
fonte
Meu pensamento seria usar a planilha para definir a lógica dos cálculos e, ao fazer isso, tentar configurá-la de maneira a torná-la mais amigável para a linguagem de programação. Por amigável, quero dizer -> usando intervalos / referências de nomes em vez de coordenadas cellXY e dividindo as fórmulas em pedaços menores.
fonte