Cleverton Bueno
← Voltar para todos os artigos

O Segredo da Produtividade – Como Construí um Gerador "Low-Code" nos Anos 90

Este artigo revela que o grande segredo da produtividade da empresa foi a criação de geradores de código internos, uma versão artesanal da filosofia "low-code" que automatizava a criação de novas aplicações.

Olá, pessoal!
Uma pergunta que talvez tenha ficado no ar ao longo da nossa jornada é: como uma pequena empresa como a CompCet conseguia desenvolver e entregar sistemas tão complexos e 100% customizados para tantos clientes em tempo recorde? Nós não tínhamos um exército de programadores. Na maior parte do tempo, a equipe de desenvolvimento era bem enxuta.
A resposta não estava em mais programadores, mas em uma ferramenta que eu criei, o meu "superpoder": um gerador de código. Hoje, o mercado de tecnologia fala muito em "Low-Code" e "No-Code", plataformas que permitem criar aplicações com pouca ou nenhuma programação. Pois bem, nos anos 90, por pura necessidade, eu construí a minha própria versão artesanal dessa filosofia.

A Dor Original: O Trabalho Manual em C para QNX

Como vimos, programar em C no ambiente QNX era incrivelmente poderoso. Mas também era laborioso. Cada novo cadastro de cliente, de médico, de exame, seguia uma receita repetitiva e demorada:

  • Definir a Estrutura: Criar a struct no arquivo de cabeçalho (.h) para representar os dados.
  • Definir os Índices: Criar as complexas estruturas IIDX e ISEG no outro arquivo .h para o C-tree.
  • Escrever a Biblioteca de Acesso: Programar, uma por uma, as funções para Get, Put, Del, Next, Previous para aquela tabela. O nosso GTPTFIC.C é um exemplo perfeito desse trabalho.
  • Desenhar a Tela: Criar a estrutura FormField para a biblioteca Formplus, posicionando cada campo, título e variável na tela.

Um sistema completo, com dezenas de tabelas, podia levar meses para ser desenvolvido do zero. Eu percebi que cerca de 80% desse trabalho era pura repetição. E se tem uma coisa que um bom programador odeia, é trabalho repetitivo.

A Primeira Invenção: O Gerador para QNX/C

Foi aí que tive a ideia: por que não criar um programa que escrevesse o código para mim?

Então, eu construí o meu primeiro gerador de código. Era uma aplicação onde eu, de forma interativa, "desenhava" a estrutura do banco de dados: nome da tabela, nome dos campos, tipos de dados, tamanhos, e quais campos seriam índices. Após fornecer essa "planta baixa", eu apertava um botão e a mágica acontecia. A minha ferramenta gerava automaticamente:

  • O arquivo .h com a struct da tabela.
  • O arquivo .h com toda a estrutura de índices do C-tree, pronta para usar.
  • O arquivo .c com a biblioteca de acesso completa, com todas as funções básicas de manipulação de dados.
  • O arquivo .c da aplicação principal, já com a estrutura do Formplus (struct FormField ff[]) montada, com todos os campos na tela, prontos para serem refinados.

O resultado foi uma revolução na nossa produtividade. O tempo de desenvolvimento do "esqueleto" de um sistema completo caiu de meses para uma semana. A partir daí, nosso trabalho era focar nos 20% que realmente importavam: as regras de negócio específicas do cliente e as funcionalidades complexas.

A Evolução: O Gerador para Clipper

Quando comecei a desenvolver em Clipper para atender o mercado de PMEs, enfrentei um paradoxo. A linguagem era, em teoria, "mais fácil" e de mais alto nível. Mas o processo de criar manualmente as telas com @...SAY...GET e a lógica de navegação ainda me parecia lento e artesanal.
A lição do QNX já estava aprendida. A solução não era trabalhar mais, era trabalhar de forma mais inteligente. Antes mesmo de me tornar um "expert" em Clipper, eu já estava pensando em como automatizá-lo.

Criei uma nova versão do meu gerador, desta vez para o mundo Clipper. A lógica era a mesma: a partir de uma definição da estrutura do banco de dados (.DBF), a ferramenta gerava os arquivos .PRG com:

  • As telas de cadastro completas, com todos os @...SAY...GET posicionados.
  • As rotinas de consulta e pesquisa, já com o código de TBrowse para exibir os dados em tabela.
  • A lógica para criar e gerenciar os arquivos de índice (.NTX).

Com uma linguagem de mais alto nível como o Clipper, o resultado foi ainda mais espetacular. Eu conseguia gerar a estrutura completa de uma aplicação de cadastros customizada em um único dia.

Mas na prática como era?

Meu gerador não era mágica. Ele só era possível por uma razão: eu criei e segui um padrão de desenvolvimento rigoroso para a CompCet. Todas as nossas telas tinham uma aparência consistente, a lógica de acesso a dados era sempre a mesma, a forma de tratar os erros era padronizada. O gerador era a materialização desse padrão. Ele não criava caos; ele criava ordem, garantindo que todo o código gerado fosse limpo, legível e, o mais importante, fácil de dar manutenção.

A Solução: Um Programa que Escreve Programas

A solução que encontrei foi criar um programa cujo único trabalho era escrever outros programas. Eu desenvolvi essa filosofia primeiro para o QNX/C e depois a aprimorei para o Clipper. O processo era dividido em duas etapas:

Etapa 1: O "Arquiteto" – Desenhando o Sistema em Clipper (CENTRAL_GERADOR.PRG)

Primeiro, eu rodava uma aplicação em Clipper que servia como a interface do meu gerador. Nela, eu "desenhava" a arquitetura do novo sistema:

  • Definição das Estruturas (Tabelas): Eu cadastrava cada "tabela" do sistema (Clientes, Produtos, etc.), definindo o nome do arquivo .DBF correspondente.
  • Definição das Variáveis (Campos): Para cada tabela, eu detalhava os campos: nome, tipo (Caractere, Numérico, Data), tamanho, casas decimais e a posição (linha e coluna) onde ele deveria aparecer na tela de cadastro.
  • Definição dos Índices: Eu especificava quais campos ou combinação de campos seriam usados para criar os arquivos de índice (.NTX), garantindo buscas rápidas.
  • Definição das Consultas (TBrowse): Eu também definia quais campos apareceriam nas telas de consulta em formato de tabela.

Todas essas definições eram salvas em um arquivo de configuração (.cbs), que era a "planta baixa" do novo sistema.

Etapa 2: O 'Engenheiro' – Um Robô em C que Escreve Clipper

Aqui entrava a parte mais poderosa e inusitada. Eu usei a linguagem C, que me dava mais controle para manipulação de arquivos e texto, para construir o GERPRG.C: um 'robô' cujo único trabalho era escrever código-fonte perfeito em Clipper. A função dele era simples e genial:

  • Ler a Planta Baixa: O programa em C lia o arquivo .cbs que eu havia gerado na etapa anterior.
  • Escrever o Código Clipper: Com base nas definições, ele começava a escrever, linha por linha, os arquivos .PRG do novo sistema. Ele gerava:
    • ABERTURA.PRG: Uma rotina que criava o código para abrir todos os arquivos .DBF e seus respectivos índices.
    • GRID.PRG: Gerava as funções de TBrowse, criando as telas de consulta tabular automaticamente.
    • NUCLEO.PRG: O programa principal, já com toda a estrutura da tela de cadastro (@...SAY...GET), as validações de campos e a lógica para chamar as funções de inclusão, alteração e exclusão.

O código em C era o meu "programador robô". Ele pegava minhas especificações e as transformava em um código-fonte Clipper limpo, padronizado e funcional.

O Impacto: De Meses para Dias

O resultado dessa automação foi uma revolução na nossa produtividade. O tempo de desenvolvimento de um sistema completo em C/QNX caiu de meses para uma semana. Com o gerador para Clipper, o resultado foi ainda mais espetacular: eu conseguia criar a estrutura completa de uma aplicação customizada em um único dia.
Isso nos permitia atender o mercado de pequenas empresas com uma agilidade que nenhum concorrente tinha. Enquanto outros levavam semanas para entregar a primeira tela, nós entregávamos o sistema "esqueleto" pronto para ser refinado com as regras de negócio específicas do cliente.

Conclusão: Criando as Próprias Ferramentas

O gerador de código foi o verdadeiro segredo da produtividade da nossa produtividade. Ele só foi possível porque eu criei e segui um padrão de desenvolvimento rigoroso, e a ferramenta era a materialização desse padrão.
Hoje, quando vejo as plataformas "Low-Code", dou um sorriso. Elas são a evolução natural da mesma ideia que, por necessidade, criei artesanalmente nos anos 90. A maior lição que aprendi não foi como programar em C ou Clipper. Foi que a ferramenta mais poderosa de um desenvolvedor é sua capacidade de criar suas próprias ferramentas para multiplicar sua força. Esse foi o verdadeiro segredo por trás da nossa capacidade de inovar e entregar valor.