Planilha é um paradigma de desenvolvimento de software

Ferramentas de planilha como o Excel são frequentemente usadas para criar aplicativos de negócios simples (e não tão simples). Este IDE, banco de dados e ferramenta de BI desse pobre homem é realmente muito comum em grandes empresas, então o preço provavelmente não é a única razão para usar planilhas.

Neste post, vou listar alguns prós e contras de usar Excel para desenvolvimento de software em comparação com a abordagem tradicional de usar uma linguagem de programação de propósito geral. Também introduzirei o CubeWeaver, um novo aplicativo de planilha que mitiga as desvantagens das planilhas modernas, como a propensão a erros e a duplicação de códigos. O CubeWeaver pode ser usado como um aplicativo de planilha multiusuário autônomo ou como um compilador, que produz modelos de Excel totalmente funcionais.

É possível desenvolver software com o Excel?

Um programa típico de computador coleta dados de entrada de um usuário, processa-os e apresenta os resultados de volta ao usuário. Um modelo típico de planilha tem folhas de entrada para coletar os dados, folhas intermediárias que fazem os cálculos e folhas de saída para apresentação dos resultados.

Existem exemplos de máquinas Turing baseados apenas em fórmulas do Excel, o que significa que qualquer algoritmo que possa ser implementado usando um computador também pode ser implementado no Excel. A conveniência prática e a eficiência de tal implementação podem variar de uma tarefa para outra.

Planilhas e linguagens de programação podem ser usadas para criar software. Vamos comparar essas duas abordagens de desenvolvimento de software:

Vantagens das planilhas

  1. Intuitivo e fácil de usar: As planilhas são projetadas para serem usadas por não profissionais. Um usuário final pode adicionar um pequeno recurso a um modelo de planilha em questão de minutos, em vez de abrir uma solicitação de alteração e esperar meses para que o departamento de TI o entenda e implemente. Isso pode ser um divisor de águas em muitas situações.
  2. Um estado transparente e estático é fácil de depurar: você normalmente tem que usar pontos de interrupção e passar por um programa para encontrar um bug. É difícil, porque o estado de um programa muda após cada linha de código. O estado de uma planilha é mais transparente e não muda após o término do cálculo. Basta procurar a primeira célula com um valor errado para encontrar um bug.
  3. Cálculos reativos e declarativos: apenas definimos fórmulas e digitamos valores de entrada, e o sistema recomuta as células dependentes na ordem correta por si só. Esse conceito, que recentemente se tornou popular no desenvolvimento de interface do usuário, tem sido a base de planilhas desde o início.
  4. Interface de usuário padronizada: muitos usuários são usados apenas para planilhas. Contadores, em particular, parecem pensar em termos de planilha. Mesmo software personalizado baseado em Java muitas vezes parece um clone de Excel ruim nos departamentos contábeis.

Desvantagens das planilhas

  1. Modelo de dados fracamente digitado e semiestruso: As planilhas usam uma matriz tridimensional de células não digitadas como modelo de dados. Isso é melhor do que texto não estruturado, mas pior do que uma estrutura de banco de dados relacional normalizada e fortemente digitada. Um usuário sempre pode salvar uma sequência em uma célula numérica. Não há distinção entre células de cabeçalho e valor. As dependências entre as tabelas são armazenadas de forma não óbvia dentro dos parâmetros da função VLOOKUP (e quebram se uma coluna for adicionada ou removida).
  2. Duplicação de código elevado: o princípio DRY (Não se repita) provou-se bem entre os programadores. As linguagens de programação oferecem muitas maneiras (como loops, funções ou genéricos) para reduzir a duplicação de códigos. As fórmulas da planilha são copiadas de célula para celular. Isso parece conveniente e fácil no início, mas esses modelos se tornam muito difíceis de suportar com o tempo.
  3. Escalabilidade ruim: modelos grandes simplesmente param de funcionar em algum momento. O documento fica muito lento. Um arquivo compartilhado sobre um compartilhamento de rede é bloqueado na maioria das vezes quando muitos usuários tentam acessá-lo simultaneamente.
  4. Falta de interatividade de interface: planilhas não permitem que você altere a forma como os dados são exibidos. Não é possível criar uma lógica pré-programada, acionada pressionando um botão, por exemplo.

Como o CubeWeaver resolve os problemas?

Aqui está uma lista de inovações que abordam as desvantagens, enquanto tentam manter os benefícios das planilhas:

Modelo de dados multidimensionais

O modelo de dados multidimensionais é amplamente utilizado em sistemas de Business Intelligence e OLAP. Em suma, os dados são armazenados dentro das células de um cubo multidimensional, com bordas rotuladas por nomes de objetos comerciais:

O aplicativo não exibe todo o cubo multidimensional, mas uma fatia 2D correspondente à combinação selecionada de filtros. Funciona da mesma forma que as tabelas pivôs do Excel.

Os sistemas de BI relacionais geralmente usam o esquema do floco de neve para armazenar dados multidimensionais. Os cubos são implementados por tabelas de fatos, e os rótulos de borda, juntamente com alguns dados adicionais, são armazenados em tabelas de dimensões. No CubeWeaver, os cubos são chamados de planilhas, e os rótulos nas bordas dos cubos são chamados de itensde lista .

O modelo de dados multidimensionais traz estrutura para uma planilha. Os itens da lista são, de fato, tabelas relacionais padrão com colunas fortemente digitado e integridade referencial. As células da planilha CubeWeaver também são fortemente digitadas. Um usuário não pode salvar uma sequência em uma célula numérica.

Referências celulares estáveis

Uma célula de uma planilha multidimensional é referenciada exclusivamente por uma combinação de itens de lista ao longo de cada dimensão da planilha. O valor 935, na imagem acima, é referenciado exclusivamente por: Bikes, 2020, Paris.

No CubeWeaver, os itens da lista têm um ID e um campo Caption. As referências celulares usam os IDs, e a referência celular acima pode ser assim: [PROD: 23, ANO: 2020, CIDADE: 24]

Tais referências são muito mais estáveis do que referências de planilhas ordinais como F783. Um novo ID exclusivo é gerado quando um novo item da lista é criado. Isso significa que o ID 23 ainda fará referência a “Bikes”, mesmo que um novo produto seja inserido antes dele.

Operações relacionais

As planilhas fazem uso da função VLOOKUP para executar operações simples de adesão entre tabelas. Como já mencionado anteriormente, as adesões do VLOOKUP são frágeis e intransparentes.

O CubeWeaver suporta relações explícitas entre itens da lista. Um item pode fazer referência a outros itens através de atributos de referência. Funciona como referências-chave estrangeiras entre tabelas relacionais. Uma lista de cidades poderia ter um atributo “COUNTRY”, que aponta para um item da lista do país. Um usuário veria um dropdown para cada linha da lista da cidade:

As fórmulas podem navegar nessas relações em ambas as direções usando a função join().

A área de efeito de uma fórmula

Cada fórmula cubeWeaver especifica uma parte de uma planilha onde a fórmula é aplicada. A área de efeito é especificada como um conjunto de itens para cada dimensão da planilha.

A fórmula do exemplo abaixo é aplicada à medida “Unidades vendidas”, a todos os anos, menos no ano “2021” e a todos os produtos. A área resultante é destacada em azul na planilha:

O conceito de “área de efeito” elimina a necessidade de copiar fórmulas. As fórmulas serão automaticamente aplicadas a novos itens da lista à medida que esses forem adicionados a uma lista.

Interatividade através de fórmulas

Além dos formatos de célula padrão (como números, datas e texto), o CubeWeaver também suporta alguns formatos interativos de células, como botões, caixas de seleção e dropdowns.

As fórmulas do CubeWeaver também são mais do que apenas uma maneira de calcular um valor de uma célula. As fórmulas podem ser usadas para alterar dinamicamente outras propriedades de uma célula, como formatação, cor e nível de acesso celular (oculto, somente leitura, editável).

Assim, por exemplo, uma caixa de seleção ou lista de seleção em uma folha pode mostrar, ocultar ou bloquear células em outra folha.

Botões celulares podem ser usados para criar operações bastante complexas com valores celulares. Cada botão tem um conjunto de operações de atualização anexadas a ele. Cada atualização consiste na faixa celular de destino e uma fórmula, que é executada uma vez para cada uma das células de destino.

Esses botões podem ser usados:

  • Para copiar valores de um item de lista para outro (f.e. de anterior para o próximo ano)
  • Para aumentar ou diminuir um conjunto de células em uma certa porcentagem
  • Para modelar ações unidiredas, como marcar algumas folhas como “submetidas”

Um compilador de planilhas

O Excel é um formato padrão de modelagem e emissão de relatórios de negócios. A maioria dos bancos, por exemplo, não aceitará um modelo de negócio em nenhum outro formato que não o Excel. Como consequência, sua popularidade também se tornou sua maldição. Ao contrário das linguagens de programação, as planilhas não mudaram muito nos últimos 30 anos (os princípios pelos quais as planilhas modernas funcionam foram introduzidos pela VisiCalc em 1979 e pela Boeing Calc em 1985).

Uma captura de tela de VisiCalc 1979

As linguagens de programação podem evoluir tão rápido, porque um compilador as traduz para código de máquina (como x86), que, por sua vez, é um padrão da indústria e não muda muito com o tempo. Assim como um compilador, o CubeWeaver pode traduzir um modelo de computação multidimensional em um arquivo de planilha simples. Um usuário pode especificar o pedido e a orientação das dimensões criando uma visualização de exportação para cada uma das planilhas. Depois disso, o . A caixa de diálogo de exportação XLSX pode ser usada para exportar dados e fórmulas para uma pasta de trabalho padrão do Excel.

Motivação por trás do projeto

Lotus Improv (lançado em 1991, descontinuado em 1996) foi a primeira planilha multidimensional. Atualmente, aplicativos com conceito semelhante são chamados de software de gestão de desempenho corporativo. As ferramentas com as qual trabalhei são relativamente complexas e caras, tornando-as não acessíveis para empresas e projetos menores. Além disso, a maioria dessas ferramentas são especializadas para determinadas tarefas, como orçamento ou previsão financeira. CubeWeaver é uma tentativa de criar uma ferramenta de propósito geral simples, acessível e amigável para modelagem multidimensional. Abaixo está uma lista de metas de design atuais e não-metas para CubeWeaver:

  • Simplicidade da estrutura: um pequeno número de conceitos de modelagem poderosos.
  • Escalabilidade: suporte para modelos grandes e complexos. Motor de computação baseado em .NET rápido, em memória.
  • Manutenção a longo prazo do modelo: características, que ajudam a evitar repetições excessivas dentro do modelo. Rastreamento de dependências de fórmulas (traços precedentes/dependentes). Maneiras de adicionar documentação a fórmulas, como comentários ou descrições.
  • Ferramenta de propósito geral: sem funcionalidade, que é especial apenas para determinadas áreas de aplicação. Todas as funcionalidades especiais podem ser modeladas dentro do sistema.
  • Extensibilidade: os desenvolvedores podem adicionar recursos usando uma API REST, funções definidas pelo usuário e possivelmente em um ponto posterior através de interfaces adicionais.
  • Disponibilidade: o software e a documentação são acessíveis sem registro.
  • Documentação: os recursos estão bem documentadosModelos de exemplo e recomendações de práticas recomendadas estão disponíveis.