Translate

Mostrar mensagens com a etiqueta Código Legado. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Código Legado. Mostrar todas as mensagens

quinta-feira, 30 de abril de 2026

💾🔥 HLASM: O “MICROCÓDIGO HUMANO” QUE DOMA O MAINFRAME — DIRETO DO FERRO PARA A HISTÓRIA 🔥💾

 

Bellacosa Mainframe apresenta o HLASM

💾🔥 HLASM: O “MICROCÓDIGO HUMANO” QUE DOMA O MAINFRAME — DIRETO DO FERRO PARA A HISTÓRIA 🔥💾

Se tem uma linguagem que não conversa com o sistema… ela conversa com o hardware. E faz isso com elegância brutal. Bem-vindo ao universo do HLASM — onde cada instrução é praticamente um pulso elétrico com intenção.


🧬 ORIGEM: DO ASM/360 AO HLASM

A história do HLASM começa lá atrás, com o lendário IBM System/360 (1964). Na época, o assembler era o ASM/360, evoluindo depois para:

  • Assembler F
  • Assembler H
  • Assembler XF
  • E finalmente o HLASM

📅 Lançamento do HLASM: década de 1990 (oficialmente por volta de 1992–1994), acompanhando a evolução dos sistemas z/OS

👉 A ideia foi clara:
Manter o poder do assembler, mas adicionar recursos “high level” como:

  • macros mais poderosas
  • melhor diagnóstico
  • estruturação mais legível
  • integração moderna com o ambiente z/OS

⚙️ O QUE TORNA O HLASM DIFERENTE?

HLASM não é “baixo nível raiz”. Ele é um assembler evoluído, com inteligência embutida.

💡 Destaques:

  • Macros sofisticadas (quase uma metalinguagem)
  • Controle avançado de fluxo
  • Suporte a debug e listagens detalhadas
  • Integração com ferramentas modernas IBM
  • Performance absurda (nível hardware)

👉 Em resumo:
Você escreve assembler… mas com superpoderes.


🏛️ COMPATIBILIDADE: A RELÍQUIA QUE NUNCA MORRE

HLASM mantém compatibilidade com décadas de código legado.

Isso significa:

  • Código dos anos 70 ainda roda hoje 😳
  • Integra com:
    • CICS
    • DB2
    • IMS
  • Funciona perfeitamente nos atuais IBM Z

👉 Isso não é retrocompatibilidade…
É imortalidade corporativa.


🧠 FILOSOFIA: QUANDO VOCÊ PENSA COMO O PROCESSADOR

Programar em HLASM é entender:

  • registradores
  • endereçamento
  • instruções de máquina
  • pipeline do processador

É quase como conversar direto com a CPU:

“Carregue isso. Compare aquilo. Salte agora.”

Sem intermediários. Sem abstrações.


⚔️ HLASM vs ASSEMBLY DO MUNDO PC

Agora começa a parte divertida 😄

🖥️ x86 / x64 (PC, Windows, Linux, macOS)

  • Usado em NASM, MASM
  • Arquiteturas:
    • 8 bits (8080, 8085)
    • 16 bits (8086)
    • 32 bits (80386)
    • 64 bits (x86-64)

👉 Características:

  • Forte dependência de registradores limitados
  • Segmentação histórica (16 bits)
  • Instruções mais “bagunçadas” (CISC complexo)

🧊 HLASM (Mainframe)

  • Arquitetura limpa e consistente desde o System/360
  • Registradores bem definidos (R0–R15)
  • Endereçamento poderoso
  • Foco em processamento massivo e confiabilidade

👉 Diferença brutal:

AspectoHLASMx86/x64
EstabilidadeDécadas sem rupturaMudanças constantes
LegadoTotalmente preservadoParcial
ClarezaAlta consistênciaMuitas exceções
PerformanceOtimizado para I/O e batchOtimizado para geral

🧪 CURIOSIDADES QUE POUCA GENTE SABE

💡 HLASM é usado até hoje em:

  • Núcleos bancários
  • Sistemas de pagamento
  • Processamento de milhões de transações por segundo

💡 Muitas rotinas críticas em COBOL chamam HLASM por baixo

💡 Algumas empresas NUNCA reescreveram seus códigos assembler… só foram evoluindo

💡 HLASM é tão eficiente que às vezes substitui C/C++ em partes críticas


🛠️ DICAS DE OURO (ESTILO BELLACOSA 😎)

🔥 1. Aprenda registradores como extensão do seu cérebro
R1 não é número… é propósito.

🔥 2. Domine macros
Macro em HLASM = produtividade + elegância

🔥 3. Leia listagens (LISTING)
É ali que você vira mestre.

🔥 4. Entenda o fluxo de execução real
Branch errado = desastre silencioso

🔥 5. Combine com COBOL
COBOL + HLASM = performance + legibilidade


🧾 COMENTÁRIO REALISTA (SEM ROMANTIZAR)

HLASM não é para iniciantes.

Ele exige:

  • disciplina
  • atenção absurda
  • entendimento profundo do sistema

Mas em troca?

👉 Você ganha controle TOTAL.


🧠 ANALOGIA FINAL

Se linguagens modernas são:

  • Java = carro automático
  • Python = carro elétrico
  • C = carro manual esportivo

👉 HLASM é:

um caça supersônico com painel analógico.

Você não dirige…
Você pilota.


🚀 FECHAMENTO

O HLASM não é só uma linguagem.

É um legado vivo.
Uma ponte entre 1964 e o futuro.
Um lembrete de que, às vezes…

👉 o caminho mais direto ainda é o mais poderoso.


segunda-feira, 1 de janeiro de 2024

COBOL : O mundo depende de um código de quase 65 anos que ninguém conhece mais

Bellacosa Mainframe e o cobol um codigo de 65 anos que continua na ativa

☕ Um Café no Bellacosa Mainframe

COBOL: O Mundo Depende de um Código de Quase 65 Anos que Ninguém Conhece Mais

Quando os programadores abriram o sarcófago do sistema legado, descobriram que o cadáver continuava processando a folha de pagamento

Naquela madrugada, o último programador COBOL da empresa recebeu uma ligação.

O sistema central havia parado.

Milhares de pagamentos estavam presos. As agências não conseguiam consultar contas. Os arquivos da compensação aguardavam processamento. Na sala de crise, dezenas de especialistas examinavam painéis modernos, APIs coloridas e dashboards brilhantes.

Mas ninguém sabia abrir o programa que controlava tudo.

O código havia sido escrito antes de muitos daqueles profissionais nascerem.

O telefone tocou novamente.

Do outro lado da linha, uma voz perguntou:

— Ainda existe alguém que entende COBOL?

O velho programador olhou para o terminal verde.

E respondeu:

— Existe. Mas vocês passaram trinta anos fingindo que não precisavam de nós.*


O monstro que deveria ter morrido

As revistas de terror dos anos 1950 adoravam histórias sobre criaturas que se recusavam a permanecer enterradas.

Um cientista encontrava um cadáver.

Aplicava eletricidade.

A criatura abria os olhos.

O laboratório pegava fogo.

E, na última página, o leitor descobria que o verdadeiro monstro não era o cadáver ressuscitado.

Era a arrogância do cientista.

A história do COBOL possui algo dessa atmosfera.

Durante décadas, consultorias, jornalistas, fornecedores e futuristas anunciaram sua morte. A cada nova geração tecnológica aparecia alguém disposto a escrever o epitáfio definitivo:

“Agora o COBOL será substituído.”

Vieram as linguagens estruturadas.

Vieram os computadores pessoais.

Vieram os sistemas cliente-servidor.

Veio a internet.

Vieram Java, .NET, os microsserviços, a computação em nuvem, os containers e a inteligência artificial.

O COBOL ouviu todos os discursos.

Depois voltou ao trabalho.

Em 2026, o COBOL não tem “quase 65 anos”. Sua criação começou em 1959, o que significa que sua história já atravessa aproximadamente 67 anos. A primeira versão da linguagem foi disponibilizada em 1960. Ela nasceu de um esforço colaborativo ligado ao CODASYL, inspirado parcialmente no FLOW-MATIC de Grace Hopper e voltado ao processamento comercial portátil entre diferentes computadores. (IBM)

Esse detalhe torna a história ainda mais impressionante.

O mundo não depende simplesmente de uma linguagem antiga.

Depende de uma linguagem criada quando:

  • computadores ocupavam salas inteiras;

  • programas eram frequentemente introduzidos por cartões perfurados;

  • não existiam microprocessadores;

  • a internet moderna não existia;

  • a chegada do homem à Lua ainda estava no futuro;

  • grande parte da população mundial jamais havia visto um computador.

E, apesar disso, inúmeros sistemas escritos ou evoluídos a partir dessa tradição continuam executando atividades críticas.

O cadáver não apenas abriu os olhos.

Ele continua fechando o movimento financeiro da madrugada.


Capítulo I — A cidade moderna construída sobre catacumbas

Imagine uma pessoa utilizando um aplicativo bancário.

Ela abre o celular.

Consulta o saldo.

Paga uma conta.

Faz uma transferência.

Compra uma passagem.

Contrata um seguro.

Recebe o salário.

Tudo parece novo.

A interface possui ícones modernos, animações suaves, reconhecimento biométrico e notificações instantâneas.

Mas a aparência do aplicativo não revela necessariamente onde a lógica central do negócio está sendo executada.

Por trás da tela pode existir uma cadeia semelhante a esta:

CLIENTE
   │
   ▼
APLICATIVO MÓVEL
   │
   ▼
API GATEWAY
   │
   ▼
SERVIÇO JAVA / MICROSSERVIÇO
   │
   ▼
IBM MQ OU OUTRA CAMADA DE INTEGRAÇÃO
   │
   ▼
CICS OU IMS
   │
   ▼
PROGRAMA COBOL
   │
   ▼
DB2, VSAM OU IMS DB
   │
   ▼
REGRA CENTRAL DO NEGÓCIO

O cliente enxerga apenas o andar mais recente do edifício.

O COBOL pode estar nas fundações.

Essa é a primeira grande revelação da nossa revista de horror: modernização visual não significa necessariamente substituição do núcleo transacional.

Uma empresa pode criar aplicativos modernos, APIs REST, portais Web, assistentes de inteligência artificial e experiências móveis sem remover imediatamente os programas que conhecem as regras mais profundas do negócio.

O aplicativo sabe exibir um botão.

O programa central sabe se aquela operação pode ou não acontecer.


Capítulo II — “Ninguém conhece mais” é verdade?

A frase é propositalmente assustadora:

“O mundo depende de um código que ninguém conhece mais.”

Mas ela precisa ser examinada com cuidado.

Não é verdade que literalmente ninguém conheça COBOL.

Existem milhares de profissionais, comunidades, empresas, universidades, cursos e iniciativas de capacitação. O Open Mainframe Project, por exemplo, mantém um curso aberto de programação COBOL com material educacional e experiências práticas utilizando ferramentas modernas. (Open Mainframe Project)

O problema real é mais sutil — e talvez mais perigoso.

Muitas organizações possuem sistemas que:

  • foram construídos durante décadas;

  • receberam alterações de centenas de profissionais;

  • incorporaram regras que não estão totalmente documentadas;

  • dependem de programas, arquivos, transações e rotinas interligadas;

  • perderam parte dos especialistas que acompanharam sua evolução;

  • são conhecidos profundamente por um grupo cada vez menor de pessoas.

Portanto, o horror não é a ausência total de programadores COBOL.

O horror é a perda do conhecimento contextual.

Conhecer a sintaxe da linguagem não significa conhecer o sistema.

Um estudante pode aprender rapidamente que este comando soma um valor:

ADD WS-VALOR TO WS-TOTAL.

Mas somente a experiência com a aplicação revelará:

  • de onde vem WS-VALOR;

  • o que representa WS-TOTAL;

  • quais exceções comerciais se aplicam;

  • se o valor está em reais ou centavos;

  • quais programas dependem desse resultado;

  • quais arquivos serão atualizados;

  • qual transação chamou o módulo;

  • quais controles de auditoria devem ser registrados;

  • o que acontece em caso de rollback;

  • quais consequências surgem se o cálculo estiver errado.

A sintaxe é o mapa da entrada.

O conhecimento do negócio é o mapa das catacumbas.


Capítulo III — O código não envelhece como um corpo humano

Existe uma ideia enganosa segundo a qual software envelhece exatamente como máquinas físicas.

Um automóvel de 1959 sofre ferrugem.

Peças se desgastam.

Mangueiras racham.

O motor perde compressão.

Código-fonte não envelhece dessa forma.

Uma instrução não se desgasta porque foi executada um bilhão de vezes.

Considere:

IF SALDO-DISPONIVEL >= VALOR-SOLICITADO
    PERFORM AUTORIZAR-OPERACAO
ELSE
    PERFORM RECUSAR-OPERACAO
END-IF.

Se essa regra está correta, testada e atende ao negócio, sua idade cronológica não a torna automaticamente defeituosa.

O que envelhece ao redor do código?

  • os requisitos;

  • as interfaces;

  • os formatos de dados;

  • os compiladores;

  • as práticas de desenvolvimento;

  • as dependências;

  • a documentação;

  • o conhecimento das equipes;

  • a facilidade de manutenção;

  • a arquitetura em que o programa está inserido.

Portanto, o problema não é simplesmente dizer:

“Este programa tem quarenta anos.”

A pergunta correta é:

“Este programa ainda atende ao negócio, pode ser mantido com segurança, está bem testado e possui uma arquitetura sustentável?”

Um programa antigo pode estar sólido.

Um microsserviço escrito na semana passada pode ser um desastre.

Juventude não é sinônimo de qualidade.

Idade não é sinônimo de obsolescência.


Capítulo IV — O segredo dentro do sarcófago: regras de negócio

Quando uma empresa observa milhões de linhas de COBOL, pode acreditar que está olhando apenas para código.

Não está.

Está olhando para história institucional condensada.

Dentro daqueles programas podem existir regras como:

  • cálculo de tarifas;

  • incidência de juros;

  • processamento de impostos;

  • critérios de elegibilidade;

  • limites de crédito;

  • períodos de carência;

  • contratos antigos;

  • exceções regulatórias;

  • tratamento de feriados;

  • arredondamentos financeiros;

  • regras específicas para determinados clientes;

  • mudanças legais acumuladas ao longo de décadas.

Imagine uma seguradora com um programa criado originalmente nos anos 1980.

Ao longo dos anos, ele foi alterado para acomodar:

1984 — nova categoria de contrato
1988 — mudança constitucional
1994 — nova moeda
1999 — alteração tributária
2002 — produto adicional
2008 — nova regra de risco
2015 — adequação regulatória
2020 — operação emergencial
2024 — integração com API
2026 — análise assistida por IA

Ao final desse processo, o sistema não contém apenas algoritmos.

Ele contém a arqueologia da empresa.

Substituí-lo exige mais do que converter comandos de uma linguagem para outra.

É necessário descobrir o significado de cada regra, inclusive daquelas que ninguém mais se lembra de ter solicitado.


Capítulo V — O programa que ninguém ousava apagar

Em algum ponto de toda grande aplicação existe uma rotina semelhante à sala proibida de uma mansão.

Todos sabem que ela existe.

Ninguém gosta de alterá-la.

A documentação diz apenas:

“Não modificar sem consultar a equipe responsável.”

O problema é que a equipe responsável deixou de existir em 1998.

O programa continua sendo executado.

Talvez ele tenha um nome como:

PGMCL093

Ninguém sabe exatamente por que o número 93 foi escolhido.

Dentro dele aparece:

IF WS-TIPO-CLIENTE = '7'
   AND WS-CODIGO-ESPECIAL NOT = 'X'
   AND WS-DATA-BASE < 19940701
      MOVE 'S' TO WS-ISENCAO
END-IF.

O jovem programador pergunta:

— Por que clientes do tipo 7 recebem isenção antes de 1º de julho de 1994?

Silêncio.

Alguém responde:

— Sempre funcionou assim.

Esse é o momento em que a manutenção deixa de ser apenas programação e se transforma em investigação.

O código apresenta o que.

Nem sempre explica o porquê.

Remover aquela condição pode parecer uma limpeza.

Mas talvez ela proteja contratos antigos, decisões judiciais, benefícios adquiridos ou registros históricos.

Uma linha aparentemente inútil pode ser a última testemunha de uma regra que a organização esqueceu.


Capítulo VI — A maldição da reescrita total

Quando executivos encontram sistemas antigos, uma ideia surge como o plano perfeito do cientista ambicioso:

“Vamos reescrever tudo do zero.”

Em uma apresentação, o plano parece impecável:

COBOL ANTIGO
     ↓
ANÁLISE AUTOMÁTICA
     ↓
CONVERSÃO
     ↓
JAVA, C# OU NUVEM
     ↓
PROBLEMA RESOLVIDO

Mas sistemas críticos não são simples blocos de texto.

Uma reescrita precisa preservar:

  • resultados;

  • regras;

  • arredondamentos;

  • formatos;

  • tempos de processamento;

  • integrações;

  • sequências de atualização;

  • tratamento de falhas;

  • segurança;

  • auditoria;

  • recuperação;

  • compatibilidade com dados históricos;

  • comportamento em situações excepcionais.

Considere um cálculo financeiro:

COMPUTE VALOR-LIQUIDO ROUNDED =
        VALOR-BRUTO - TAXA - IMPOSTO.

Uma tradução sintaticamente correta para outra linguagem não garante comportamento idêntico.

Pode haver diferenças em:

  • representação decimal;

  • precisão;

  • arredondamento;

  • overflow;

  • tratamento de sinal;

  • campos compactados;

  • conversão de caracteres;

  • ordenação;

  • datas;

  • valores ausentes.

O programa convertido compila.

Os testes básicos passam.

Mas uma diferença de um centavo aparece somente em determinada combinação de contrato, data e categoria.

Multiplique um centavo por milhões de operações.

O pequeno fantasma ganha corpo.


Capítulo VII — COBOL não trabalha sozinho

Outro erro comum é imaginar que preservar profissionais COBOL resolve todo o problema.

Não resolve.

Uma aplicação Mainframe costuma depender de uma stack inteira:

COBOL
  ├── JCL
  ├── CICS
  ├── IMS
  ├── Db2
  ├── VSAM
  ├── IBM MQ
  ├── RACF
  ├── SORT
  ├── JES2
  ├── SDSF
  ├── SMF
  ├── WLM
  ├── DFSMS
  └── z/OS

O programador pode dominar a lógica COBOL e ainda assim precisar entender:

  • como o job foi submetido;

  • qual dataset foi utilizado;

  • qual versão do módulo está carregada;

  • qual package do Db2 foi associado;

  • qual plano está executando;

  • qual fila recebeu a mensagem;

  • qual transação CICS iniciou o programa;

  • qual autorização RACF foi negada;

  • qual step retornou código diferente de zero;

  • qual arquivo VSAM sofreu contenção;

  • qual política do WLM alterou a prioridade;

  • qual mudança de produção introduziu o problema.

COBOL é um cômodo da mansão.

O profissional precisa conhecer os corredores.


Capítulo VIII — O mundo depende do COBOL ou das aplicações?

Aqui precisamos separar a propaganda da engenharia.

O mundo não depende de cada programa COBOL existente.

Há programas desnecessários, duplicados, mal projetados, pouco utilizados ou prontos para aposentadoria.

Também existem sistemas COBOL que podem ser substituídos com segurança.

A afirmação mais correta é:

Partes importantes da economia e da administração corporativa ainda dependem de aplicações críticas construídas, mantidas ou evoluídas em COBOL.

A própria IBM descreve o COBOL como uma linguagem orientada aos negócios utilizada em operações econômicas cotidianas invisíveis e em processos de missão crítica. O Enterprise COBOL para z/OS continua sendo oferecido como compilador empresarial destinado à modernização de aplicações críticas. (@ibmdeveloper)

Essa distinção é importante.

Não devemos transformar COBOL em religião.

Também não devemos tratá-lo como sucata apenas por causa de sua idade.

A decisão precisa considerar:

  • custo;

  • risco;

  • criticidade;

  • capacidade de manutenção;

  • estratégia empresarial;

  • disponibilidade de profissionais;

  • qualidade dos testes;

  • acoplamento;

  • volume de processamento;

  • metas de modernização.

Em alguns casos, manter é sensato.

Em outros, modernizar gradualmente é melhor.

Em certos sistemas, substituir será necessário.

O erro está nas decisões automáticas.


Capítulo IX — Por que as novas gerações não aprenderam?

O desaparecimento gradual do conhecimento COBOL não aconteceu por acidente.

Durante anos, muitos estudantes ouviram:

“Não aprenda isso. Está morrendo.”

As universidades reduziram o espaço dedicado ao processamento corporativo clássico.

Os cursos rápidos preferiram tecnologias que produziam interfaces visuais em poucas aulas.

As empresas deixaram de formar profissionais internamente.

Especialistas experientes se aposentaram.

Documentações permaneceram desatualizadas.

Projetos de substituição foram anunciados, adiados e novamente anunciados.

O resultado foi um paradoxo:

EMPRESAS DIZEM QUE COBOL NÃO TEM FUTURO
                  +
EMPRESAS CONTINUAM EXECUTANDO COBOL
                  +
EMPRESAS DEIXAM DE TREINAR PESSOAS
                  =
FALTA DE PROFISSIONAIS

A escassez não prova que a linguagem seja impossível de aprender.

Prova que o pipeline de formação foi negligenciado.

Nenhuma tecnologia sobrevive apenas por possuir bons compiladores.

Ela precisa de pessoas.


Capítulo X — O último programador não é um feiticeiro

Existe uma tendência perigosa de transformar o especialista veterano em figura mística.

Ele é chamado quando:

  • o fechamento falha;

  • o arquivo não fecha;

  • o saldo fica inconsistente;

  • o batch ultrapassa a janela;

  • uma transação recebe ABEND;

  • ninguém entende determinada regra.

O veterano observa três mensagens, consulta um dump e identifica o problema.

Todos ficam impressionados.

Mas aquilo que parece magia geralmente é conhecimento acumulado:

  • convenções de nomes;

  • histórico de incidentes;

  • padrões recorrentes;

  • arquitetura;

  • regras comerciais;

  • relações entre programas;

  • comportamento do ambiente.

O objetivo de uma organização madura não deve ser manter um feiticeiro indispensável.

Deve ser transformar o conhecimento individual em capacidade coletiva.

Isso exige:

  • documentação;

  • revisão de código;

  • mentoria;

  • programação em pares;

  • mapas de dependências;

  • inventário de aplicações;

  • testes automatizados;

  • gravação de sessões técnicas;

  • rotação de responsabilidades;

  • comunidades internas;

  • formação contínua.

Quando apenas uma pessoa sabe como o sistema funciona, o problema não é o COBOL.

É a governança.


Capítulo XI — Inteligência artificial: o novo caçador de fantasmas

A inteligência artificial pode ajudar a investigar grandes bases COBOL.

Ela pode apoiar tarefas como:

  • explicar trechos de código;

  • resumir parágrafos;

  • sugerir documentação;

  • identificar dependências;

  • gerar casos de teste;

  • localizar padrões repetidos;

  • auxiliar conversões;

  • relacionar programas e copybooks;

  • produzir diagramas;

  • acelerar a integração de novos profissionais.

Mas existe uma diferença entre explicar a estrutura de uma rotina e compreender completamente sua intenção empresarial.

Uma IA pode observar:

IF DATA-CONTRATO < DATA-CORTE
    MOVE TAXA-ANTIGA TO TAXA-APLICADA
ELSE
    MOVE TAXA-NOVA TO TAXA-APLICADA
END-IF.

Ela provavelmente explicará:

“O programa seleciona uma taxa com base na data do contrato.”

Correto.

Mas ainda restam perguntas:

  • quem definiu a data de corte?

  • a regra decorre de uma lei?

  • existem exceções?

  • contratos renegociados mantêm a taxa antiga?

  • a data está em calendário local?

  • o comportamento foi validado pelo setor jurídico?

  • outros programas repetem a mesma lógica?

A IA acende uma lanterna poderosa.

Ela não substitui automaticamente o mapa do castelo.


Capítulo XII — Como impedir que o conhecimento desapareça

Uma organização que depende de COBOL precisa tratar conhecimento como ativo estratégico.

1. Inventariar

Descobrir:

  • quantos programas existem;

  • quais são executados;

  • quais estão abandonados;

  • quais são críticos;

  • quais copybooks compartilham;

  • quais tabelas e arquivos acessam;

  • quais sistemas os chamam.

2. Mapear dependências

Criar relações como:

JOB FATURA01
   └── STEP010
       └── PROGRAMA FATC100
           ├── COPYBOOK CLI001
           ├── DB2 TABELA CLIENTE
           ├── DB2 TABELA FATURA
           └── MQ FILA NOTIFICACAO

3. Documentar regras

Não apenas:

“Este parágrafo calcula juros.”

Mas:

“Calcula juros para contratos anteriores à mudança regulatória de determinada data, preservando a metodologia prevista no produto original.”

4. Automatizar testes

Antes de alterar um programa, registrar seu comportamento esperado.

Casos comuns.

Casos extremos.

Valores nulos.

Datas críticas.

Limites.

Erros.

Reprocessamentos.

5. Formar sucessores

Um especialista sem aprendiz representa conhecimento com data de expiração.

6. Modernizar ferramentas

COBOL pode ser desenvolvido com:

  • editores modernos;

  • Git;

  • pipelines;

  • testes automatizados;

  • análise estática;

  • integração contínua;

  • APIs;

  • observabilidade.

Preservar a linguagem não exige preservar todos os métodos de trabalho de 1975.


Capítulo XIII — O estudante diante da porta proibida

Para um jovem universitário, COBOL pode parecer uma escolha estranha.

Seus colegas falam sobre:

  • inteligência artificial;

  • Python;

  • aplicações móveis;

  • jogos;

  • realidade virtual;

  • startups;

  • nuvem.

Então ele encontra uma vaga mencionando:

COBOL
JCL
CICS
DB2
VSAM
IBM MQ
z/OS

Parece uma mensagem enviada por outra época.

Mas ali existe uma oportunidade rara.

Aprender COBOL pode ensinar algo que muitos cursos rápidos não mostram:

  • processamento de grandes volumes;

  • precisão decimal;

  • estruturas de registros;

  • transações;

  • integridade;

  • recuperação;

  • batch;

  • segurança;

  • desempenho;

  • sistemas de missão crítica;

  • responsabilidade operacional.

O estudante não precisa abandonar tecnologias modernas.

Ele pode se tornar a ponte.

COBOL + APIs
COBOL + JAVA
COBOL + PYTHON
COBOL + CLOUD
COBOL + DEVOPS
COBOL + IA

O profissional mais valioso não será necessariamente aquele que vive apenas no passado.

Será aquele capaz de conectar décadas diferentes sem destruir o que mantém a empresa funcionando.


Arquivo secreto: três mitos enterrados no cemitério

Mito 1 — “COBOL é lento”

A velocidade de uma aplicação depende de diversos fatores:

  • algoritmo;

  • acesso a dados;

  • compilação;

  • arquitetura;

  • I/O;

  • SQL;

  • volume;

  • configuração;

  • contenção.

Uma aplicação mal projetada pode ser lenta em qualquer linguagem.

Mito 2 — “Migrar COBOL significa traduzir comandos”

Não.

Migrar envolve reconstruir comportamento, integrações, dados, operações, segurança e conhecimento de negócio.

Mito 3 — “Manter COBOL significa rejeitar inovação”

Também não.

Uma aplicação COBOL pode ser:

  • exposta por APIs;

  • integrada com eventos;

  • incluída em CI/CD;

  • observada por ferramentas modernas;

  • acessada por aplicações móveis;

  • conectada a serviços de IA.

Modernização não é sinônimo obrigatório de reescrita.


Easter egg — A lápide que errou o enterro

Durante o desenvolvimento do COBOL, o integrante Howard Bromberg produziu uma lápide humorística, antecipando que a linguagem não teria futuro. A peça tornou-se parte da coleção do Computer History Museum. O epitáfio falhou de maneira espetacular: décadas depois, COBOL continuava presente em sistemas críticos. (CHM)

Talvez essa seja a maior piada interna da história da programação.

A linguagem recebeu uma lápide antes mesmo de viver plenamente.

Depois sobreviveu a muitos dos sistemas que deveriam substituí-la.


Conclusão — O verdadeiro horror não está no código

Na última página da revista, a equipe finalmente desce ao subsolo do edifício.

Encontra armários, diagramas, fitas, manuais e milhares de programas.

No centro da sala existe um terminal ainda ligado.

Na tela, uma mensagem:

PROCESSAMENTO CONCLUÍDO COM SUCESSO
RETURN CODE = 0000

O jovem programador se aproxima.

— Então o sistema ainda funciona?

O veterano responde:

— Funciona.

— E por que todos estão com medo?

O velho profissional aponta para uma estante vazia.

— Porque ali ficava a documentação.

O terror do COBOL não está em sua idade.

Não está em sua sintaxe.

Não está nas colunas antigas, nos parágrafos ou nos nomes escritos em letras maiúsculas.

O verdadeiro horror nasce quando uma sociedade depende de sistemas que conhece apenas superficialmente.

Nasce quando empresas mantêm aplicações críticas, mas deixam de formar pessoas.

Quando substituem documentação por memória individual.

Quando confundem interface moderna com arquitetura moderna.

Quando acreditam que uma ferramenta automática pode reconstruir décadas de regras empresariais sem investigação, testes e participação humana.

O COBOL começou a ser desenvolvido em 1959 e continua sendo utilizado porque resolveu — e ainda resolve — problemas fundamentais do processamento corporativo. (IBM)

Ele não é um morto-vivo.

É uma linguagem que envelheceu junto com as instituições que ajudou a construir.

O problema nunca foi o código antigo.

O problema é o conhecimento que permitimos desaparecer ao redor dele.

Quando o último especialista apagar a luz e fechar a porta do CPD, o sistema provavelmente continuará funcionando.

Por algum tempo.

Executará jobs.

Atualizará contas.

Processará contratos.

Calculará valores.

Responderá transações.

Até a noite em que algo inesperado acontecer.

Então os telefones tocarão.

As telas ficarão vermelhas.

A sala de crise será aberta.

E alguém fará a pergunta que nenhuma empresa deveria esperar para responder:

“Quem ainda conhece este código?”

Do fundo da Torre Invisível, talvez venha apenas o ruído dos discos, o brilho verde de um terminal abandonado e uma última mensagem piscando na escuridão:

PROGRAMMER NOT FOUND.

 --------------------------------------------------------------------------------------------


Uma parcela alarmantemente grande dos sistemas empresariais e financeiros do mundo funciona em COBOL, e apenas uma pequena comunidade de programadores sabe disso. A IBM acha que o Watson pode ajudar, mas não é garantido.

domingo, 20 de agosto de 2023

Esquecer Sintaxe Nunca Foi o Problema : O Verdadeiro Desafio é Compreender um Sistema que Sobreviveu aos Próprios Criadores

 

Bellacosa Mainframe onde esquecer sintaxe nunca foi o problema

☕ Um Café no Bellacosa Mainframe

Esquecer Sintaxe Nunca Foi o Problema

O Verdadeiro Desafio é Compreender um Sistema que Sobreviveu aos Próprios Criadores

Imagine que você acabou de entrar em uma empresa para trabalhar como programador COBOL.

Você recebeu seu usuário TSO, uma senha temporária, acesso ao ISPF e uma documentação de quarenta páginas que aparentemente foi impressa durante o período em que os dinossauros ainda preenchiam cartões perfurados.

Seu líder aponta para a tela e diz:

“Precisamos fazer uma pequena alteração nesse programa.”

A expressão “pequena alteração”, no universo dos sistemas legados, deve ser tratada com o mesmo cuidado que a frase “parece tranquilo” em um filme de ficção científica.

Normalmente significa que ninguém sabe exatamente o que será alterado, quais outros programas dependem daquilo, quem escreveu a lógica original ou por que existe um campo chamado WS-IND-ESP-07-B.

Você abre o programa COBOL.

São 14 mil linhas.

Existem 27 COPYBOOKS, quatro acessos ao Db2, três arquivos VSAM, duas chamadas para programas que não aparecem em nenhuma documentação e um comentário histórico extremamente esclarecedor:

      * ALTERADO CONFORME SOLICITACAO

Solicitação de quem?

Quando?

Por quê?

Qual regra mudou?

O comentário permanece em silêncio.

É nesse momento que o jovem programador percebe uma verdade fundamental:

O maior desafio de um sistema antigo não é lembrar sua sintaxe.
É compreender sua história.

Não entre em pânico.

Pegue sua toalha, abra o ISPF, prepare o café e venha conosco nesta viagem pelo universo dos sistemas legados.


Capítulo 1 — A ilusão do programador enciclopédia

No início da carreira, muitos programadores acreditam que precisam decorar tudo.

Decoram comandos COBOL.

Decoram parâmetros de JCL.

Decoram opções do DFSORT.

Decoram códigos SQL.

Decoram comandos TSO.

Decoram transações CICS.

Decoram até o nome daquele utilitário misterioso que apareceu uma única vez em um job de fechamento mensal.

A lógica parece simples:

Quanto mais coisas eu memorizar, melhor programador serei.

Essa ideia não é completamente absurda. Ter familiaridade com a linguagem ajuda. Conhecer comandos frequentes acelera o trabalho. Entender estruturas básicas é obrigatório.

O problema começa quando confundimos conhecimento com memorização.

Um programador pode decorar:

       MOVE WS-NOME TO LK-NOME

Pode lembrar perfeitamente que:

//ARQSAI DD DSN=EMPRESA.CLIENTES.SAIDA,
//          DISP=(NEW,CATLG,DELETE),
//          UNIT=SYSDA,
//          SPACE=(CYL,(10,5),RLSE)

Pode conhecer a sintaxe de:

EXEC SQL
   SELECT NOME, SALDO
     INTO :WS-NOME, :WS-SALDO
     FROM CLIENTE
    WHERE COD_CLIENTE = :WS-COD-CLIENTE
END-EXEC.

Mas nada disso garante que ele compreenda:

  • por que o arquivo é criado;

  • quem consome esse arquivo;

  • por que o saldo é calculado daquela maneira;

  • qual área de negócio depende do programa;

  • qual legislação motivou determinada condição;

  • o que acontece se a regra for removida;

  • por que o sistema não pode simplesmente ser “reescrito”.

Memorizar a sintaxe permite escrever instruções.

Compreender o sistema permite tomar decisões.

E sistemas não costumam quebrar porque alguém esqueceu uma vírgula que poderia ser consultada no manual.

Eles quebram porque alguém alterou uma regra sem compreender suas consequências.


Capítulo 2 — O cérebro não é uma biblioteca de referência

Seu cérebro é uma ferramenta extraordinária.

Mas ele não foi projetado para funcionar como uma central de documentação IBM contendo todas as versões de COBOL, CICS, Db2, DFSORT, IDCAMS, RACF, JCL, IMS, MQ e z/OS.

Mesmo profissionais experientes consultam documentação.

Aliás, profissionais experientes costumam consultar ainda mais, justamente porque sabem que a memória pode falhar.

Um iniciante pode pensar:

“Tenho certeza de que DISP=(NEW,CATLG,DELETE) faz isso.”

Um veterano pensa:

“Tenho quase certeza. Portanto, vou confirmar antes de mexer em produção.”

Essa diferença parece pequena, mas representa anos de maturidade.

O exemplo do DISP

Observe:

//ARQSAI DD DSN=EMPRESA.RELATORIO.DIARIO,
//          DISP=(NEW,CATLG,DELETE)

O parâmetro DISP possui três posições principais:

DISP=(status, normal, abnormal)

Neste exemplo:

NEW     → o dataset será criado;
CATLG   → se o step terminar normalmente, será catalogado;
DELETE  → se o step terminar de forma anormal, será excluído.

Você pode esquecer isso.

Pode consultar rapidamente.

O manual devolve a resposta.

Mas agora surge uma pergunta muito mais importante:

Por que o dataset deve ser excluído em caso de falha?

Talvez porque um arquivo incompleto nunca possa ser processado pelo job seguinte.

Talvez porque uma versão parcial provoque duplicidade.

Talvez porque um sistema externo interprete sua existência como sinal de processamento concluído.

Talvez porque o dataset contenha informações financeiras e não deva permanecer disponível após uma falha.

Talvez porque alguém, em 1998, encontrou um erro catastrófico provocado por um arquivo incompleto e decidiu adicionar aquele DELETE.

A sintaxe explica o que acontece.

A história explica por que precisa acontecer.

O manual resolve a primeira dúvida.

A segunda talvez não esteja escrita em lugar algum.


Capítulo 3 — Todo programa legado é um sítio arqueológico

Quando você entra em um programa antigo, não está apenas lendo código.

Está realizando arqueologia digital.

Cada trecho pode representar uma camada histórica.

Veja:

       IF WS-DATA-MOVIMENTO < 20000101
          PERFORM 5000-TRATAR-REGRA-ANTIGA
       ELSE
          PERFORM 5100-TRATAR-REGRA-NOVA
       END-IF

A pergunta superficial é:

O que esse IF faz?

A resposta é simples: ele escolhe duas rotinas com base em uma data.

A pergunta correta é:

O que aconteceu no ano 2000 para que o sistema precisasse de duas regras?

Pode ter ocorrido uma mudança tributária.

Uma alteração contratual.

Uma migração de moeda.

Uma incorporação empresarial.

Uma nova política de tarifas.

Uma adaptação ao bug do milênio.

O código é um fóssil de decisões anteriores.

Comentários arqueológicos

Sistemas antigos frequentemente possuem comentários como:

      * AJUSTE JOAO 03/98

Ou:

      * NAO REMOVER - PROBLEMA PRODUCAO

Ou ainda:

      * ALTERACAO EMERGENCIAL

Esses comentários são equivalentes a encontrar uma placa em uma nave abandonada dizendo:

“Não pressione o botão vermelho.”

O problema é que ninguém explicou o que o botão faz.

Você pode remover a rotina e o programa continuar compilando.

Pode passar pelos testes unitários.

Pode funcionar durante semanas.

Até chegar o fechamento anual, quando aquela condição esquecida deveria impedir que uma transação extremamente rara fosse processada duas vezes.

Então o universo envia um pequeno lembrete em forma de incidente crítico.


Capítulo 4 — A diferença entre entender código e entender sistema

Um programa COBOL iniciante pode ser relativamente simples:

       IF WS-SALDO >= WS-VALOR-COMPRA
          SUBTRACT WS-VALOR-COMPRA FROM WS-SALDO
          MOVE 'APROVADA' TO WS-STATUS
       ELSE
          MOVE 'RECUSADA' TO WS-STATUS
       END-IF

Um iniciante entende rapidamente a lógica.

Saldo suficiente: aprova.

Saldo insuficiente: recusa.

Mas um sistema real pode conter:

       IF WS-SALDO-DISPONIVEL >= WS-VALOR-COMPRA
          IF WS-IND-BLOQUEIO NOT = 'S'
             IF WS-LIMITE-DIARIO >= WS-VALOR-ACUMULADO
                IF WS-COD-PAIS NOT = 999
                   PERFORM 7000-VALIDAR-RISCO
                END-IF
             END-IF
          END-IF
       END-IF

Agora entram regras de negócio.

  • O que é saldo disponível?

  • Qual a diferença entre saldo contábil e saldo disponível?

  • Quem determina o limite diário?

  • Por que o país 999 possui tratamento especial?

  • O bloqueio é financeiro, judicial ou antifraude?

  • A validação de risco é síncrona?

  • O que acontece quando o serviço de risco está indisponível?

  • Uma compra recusada deve gerar registro?

  • Existe reversão?

  • O processo precisa ser idempotente?

Compreender as instruções não significa compreender o sistema.

O programa é apenas uma peça.

O sistema inclui:

  • arquivos;

  • tabelas;

  • filas;

  • jobs;

  • transações;

  • operadores;

  • usuários;

  • contratos;

  • integrações;

  • janelas de processamento;

  • procedimentos de recuperação;

  • regras legais;

  • exceções históricas.

Um MOVE isolado é fácil.

Descobrir o efeito daquele MOVE em uma cadeia de cinquenta programas é outra aventura.


Capítulo 5 — O conhecimento tribal e os guardiões do sistema

Em muitas empresas, parte significativa do conhecimento não está nos manuais.

Está nas pessoas.

Esse conhecimento é frequentemente chamado de conhecimento tribal ou conhecimento tácito.

Ele aparece em frases como:

“Pergunte para o Carlos. Ele conhece esse processamento.”

“A Maria sabe por que o arquivo precisa chegar antes das 22 horas.”

“O operador do turno da noite já viu esse problema.”

“Esse programa foi feito pelo Roberto, que se aposentou.”

“Ninguém mexe nessa rotina sem falar com a área de faturamento.”

Essas pessoas são verdadeiros bancos de dados vivos.

Elas lembram de incidentes que nunca foram documentados.

Sabem quais mensagens podem ser ignoradas.

Conhecem os horários críticos.

Entendem exceções aparentemente absurdas.

Conseguem explicar por que uma solução considerada “feia” ainda é necessária.

A dica secreta da imagem

A imagem que inspira esta reflexão apresenta uma mensagem perfeita:

“Converse com os antigos.”

Essa é uma das melhores recomendações para quem trabalha com sistemas legados.

Não trate o profissional veterano como alguém que “apenas conhece tecnologia antiga”.

Ele pode ser o único elo restante entre o código atual e as decisões que originaram o sistema.

Pergunte:

  • Qual problema esse programa resolveu originalmente?

  • Quais são as situações mais perigosas?

  • Que alteração já provocou incidente?

  • Existe algum período em que não devemos mexer?

  • Quais programas dependem da saída?

  • Qual área de negócio deve validar a mudança?

  • Que regra parece inútil, mas não pode ser removida?

  • Quais mensagens indicam falha real?

  • Como o processo é recuperado?

  • Quem acompanha o processamento?

E, principalmente:

Registre as respostas.

Conhecimento oral que não é documentado está sempre a uma aposentadoria de distância do desaparecimento.


Capítulo 6 — O nível secreto chamado compreensão do negócio

Em um RPG técnico, o programador pode possuir várias habilidades:

Sintaxe COBOL ........ Nível 72
Comandos TSO ......... Nível 65
JCL .................. Nível 70
DFSORT ............... Nível 61
Db2 SQL .............. Nível 63
CICS .................. Nível 58

Tudo parece excelente.

Então aparece a habilidade mais importante:

Compreensão do negócio ... Nível 34

E ela evolui lentamente.

Muito lentamente.

Isso acontece porque tecnologia pode ser estudada de maneira estruturada.

Você pode fazer um curso de COBOL.

Pode estudar JCL.

Pode executar laboratórios de CICS.

Pode aprender SQL.

Mas compreender profundamente um negócio exige exposição ao sistema real.

Exige acompanhar incidentes.

Conversar com usuários.

Participar de testes.

Ler regras.

Conhecer exceções.

Entender o calendário operacional.

Observar como áreas diferentes interagem.

Descobrir que duas pessoas usam a mesma palavra com significados completamente diferentes.

Exemplo: “cliente ativo”

Parece um conceito simples.

Mas “cliente ativo” pode significar:

  • possui contrato válido;

  • movimentou a conta nos últimos 90 dias;

  • não está bloqueado;

  • possui saldo;

  • possui produto ativo;

  • não foi encerrado;

  • teve faturamento no mês;

  • está regular perante determinado cadastro.

O programador precisa descobrir qual definição vale naquele contexto.

O sistema pode utilizar diferentes definições em programas distintos.

Então surge uma rotina:

       IF CAD-SITUACAO = 'A'
          AND CAD-DATA-ULT-MOV >= WS-DATA-LIMITE
          AND CAD-IND-BLOQUEIO = 'N'
             MOVE 'S' TO WS-CLIENTE-ATIVO
       END-IF

A sintaxe é elementar.

A regra de negócio, não.


Capítulo 7 — Passo a passo para compreender um programa antigo

Agora vamos transformar a reflexão em método.

Você recebeu um programa que nunca viu.

Por onde começar?

Passo 1 — Descubra quem executa o programa

Localize o JCL, PROC, transação CICS, chamada dinâmica ou processo que inicia a execução.

Procure por:

//STEP010 EXEC PGM=PGMCLIENT

Ou no CICS:

       EXEC CICS
            LINK PROGRAM('PGMCLIENT')
            COMMAREA(WS-COMMAREA)
            LENGTH(WS-TAMANHO)
       END-EXEC

Ou em outro programa:

       CALL 'PGMCLIENT' USING LK-DADOS

Pergunte:

  • O programa é batch ou online?

  • É executado sob demanda?

  • Roda diariamente?

  • Participa de fechamento?

  • É chamado por outros programas?

  • Possui dependências externas?

Passo 2 — Mapeie as entradas

Liste tudo que entra no programa:

  • arquivos sequenciais;

  • datasets VSAM;

  • tabelas Db2;

  • COMMAREA;

  • canais e containers;

  • filas MQ;

  • parâmetros;

  • SYSIN;

  • dados recebidos de outros programas.

Exemplo:

//ENTRADA DD DSN=EMPRESA.CLIENTES.DIARIO,DISP=SHR

Descubra quem cria essa entrada.

Um arquivo nunca “simplesmente aparece”.

Existe um produtor.

E todo produtor possui suas próprias regras.

Passo 3 — Mapeie as saídas

Liste:

  • arquivos gerados;

  • tabelas alteradas;

  • mensagens enviadas;

  • relatórios;

  • códigos de retorno;

  • chamadas a outros módulos;

  • atualizações em VSAM;

  • registros de auditoria.

Pergunte:

Quem depende dessa saída?

Essa pergunta frequentemente revela o verdadeiro alcance da alteração.

Passo 4 — Leia a estrutura antes dos detalhes

Em COBOL, observe primeiro:

  • IDENTIFICATION DIVISION;

  • ENVIRONMENT DIVISION;

  • arquivos;

  • WORKING-STORAGE;

  • LINKAGE SECTION;

  • fluxo da PROCEDURE DIVISION;

  • principais PERFORM;

  • tratamento de erros;

  • encerramento.

Não comece lendo linha por linha.

Crie um mapa mental.

Algo como:

1000-INICIALIZAR
2000-LER-ENTRADA
3000-PROCESSAR
4000-GRAVAR-SAIDA
9000-FINALIZAR
9990-TRATAR-ERRO

Depois aprofunde cada área.

Passo 5 — Identifique regras e exceções

Procure:

IF
EVALUATE
88-LEVEL
SEARCH
COMPUTE
ADD
SUBTRACT
EXEC SQL
CALL

Cada condição pode representar uma regra.

Marque perguntas como:

Por que esse código é tratado separadamente?
Por que essa data é fixa?
Por que esse valor possui teto?
Por que essa condição ignora determinados registros?

Passo 6 — Observe o tratamento de falhas

Procure:

  • RETURN-CODE;

  • SQLCODE;

  • RESP e RESP2;

  • FILE STATUS;

  • chamadas de erro;

  • ABEND;

  • mensagens;

  • rollback;

  • arquivos de rejeição.

Exemplo:

       IF WS-FILE-STATUS NOT = '00'
          MOVE 12 TO RETURN-CODE
          PERFORM 9990-TRATAR-ERRO
       END-IF

Pergunte:

  • O processamento para?

  • Continua?

  • Rejeita o registro?

  • Pode ser reexecutado?

  • Existe risco de duplicidade?

  • Existe checkpoint?

Passo 7 — Converse com pessoas

Fale com:

  • analistas veteranos;

  • usuários;

  • operadores;

  • DBAs;

  • equipe de suporte;

  • segurança;

  • responsáveis por sistemas consumidores.

O código mostra o comportamento previsto.

As pessoas contam o que realmente acontece.

Passo 8 — Teste suas hipóteses

Não confunda interpretação com certeza.

Escreva hipóteses:

Acredito que o arquivo temporário existe para impedir que o job seguinte leia dados incompletos.

Depois valide.

Pode ser verdade.

Pode ser completamente falso.

O sistema legado aprecia humildade.

Passo 9 — Documente o que descobriu

Crie uma documentação mínima contendo:

  • finalidade;

  • entradas;

  • saídas;

  • dependências;

  • regras principais;

  • tratamento de erros;

  • recuperação;

  • contatos;

  • riscos;

  • histórico conhecido.

Você não precisa escrever uma enciclopédia.

Uma página clara já pode salvar horas futuras.

Passo 10 — Altere o mínimo necessário

Evite aproveitar a correção para “modernizar tudo”.

Uma alteração pequena deve permanecer pequena.

Separar refatoração de mudança funcional reduz riscos.

O velho conselho continua válido:

Primeiro compreenda. Depois preserve. Só então transforme.


Capítulo 8 — Dicas para o programador COBOL Padawan

Use folhas de referência

Crie ou mantenha referências rápidas para:

  • DISP;

  • SPACE;

  • DCB;

  • códigos SQL;

  • FILE STATUS;

  • abends comuns;

  • comandos TSO;

  • comandos SDSF;

  • opções DFSORT;

  • respostas CICS.

Não há vergonha em consultar.

A vergonha técnica seria adivinhar em produção.

Crie mapas de dependência

Mesmo um diagrama simples ajuda:

ARQCLIENT
    |
    v
PGM010
    |
    +--> Db2 CLIENTE
    |
    +--> PGM020
    |
    v
ARQSAIDA
    |
    v
JOBFATUR

Essa visão vale mais que decorar centenas de linhas.

Leia os logs

JES, SYSOUT, mensagens CICS, Db2 e relatórios de execução contam histórias.

Um programa pode parecer simples no código, mas os logs revelam:

  • volume real;

  • tempo de execução;

  • rejeições;

  • warnings;

  • dependências;

  • comportamento em falhas.

Use nomes de negócio em suas anotações

Não registre apenas:

Campo 47 recebe valor 3.

Registre:

O campo 47 indica transação cancelada após autorização, código 3.

Contexto transforma dado em conhecimento.

Desconfie de números mágicos

Exemplo:

       IF WS-CODIGO = 17

Pergunte imediatamente:

O que significa 17?

Crie um nome:

       88 OPERACAO-REVERSAO VALUE 17.

Agora o código começa a falar.


Capítulo 9 — Curiosidades do universo legado

Curiosidade 1 — Muitos bugs são decisões históricas fossilizadas

Nem todo comportamento estranho é um erro técnico.

Às vezes é uma regra antiga que continua existindo porque algum processo externo ainda depende dela.

Curiosidade 2 — Código feio pode proteger uma operação crítica

Uma rotina duplicada pode ter sido criada para isolar uma regra emergencial.

Antes de “limpar”, descubra por que foi separada.

Curiosidade 3 — O programa mais simples pode ser o mais perigoso

Um programa de 200 linhas que atualiza uma tabela central pode ser mais crítico do que outro de 20 mil linhas que apenas gera relatórios.

Complexidade técnica e criticidade operacional não são a mesma coisa.

Curiosidade 4 — O operador conhece o sistema de uma maneira diferente

Desenvolvedores conhecem o código.

Operadores conhecem o comportamento durante a madrugada, quando arquivos atrasam, jobs falham e sistemas externos ficam indisponíveis.

Escute-os.

Curiosidade 5 — O nome do arquivo pode esconder um contrato

Um dataset pode ser consumido por sistemas que você nem sabe que existem.

Excluir uma coluna “não utilizada” pode quebrar uma integração mantida por outra empresa.


Capítulo 10 — Os easter eggs escondidos na nave COBOL

Todo grande sistema possui mensagens secretas deixadas por seus antigos tripulantes.

Algumas aparecem como comentários.

Outras como nomes curiosos.

Outras como rotinas aparentemente inúteis.

Easter egg 1 — A condição impossível

       IF WS-CODIGO = 9999
          PERFORM ROTINA-ESPECIAL
       END-IF

Ninguém encontra o código 9999 nos arquivos atuais.

Então alguém decide remover.

Meses depois, descobre-se que ele é enviado apenas durante a recuperação de desastre.

Easter egg 2 — O arquivo vazio obrigatório

Um job cria um arquivo mesmo quando não possui registros.

Parece desperdício.

Mas o job seguinte verifica a existência do dataset como sinal de conclusão.

Sem o arquivo vazio, a cadeia para.

Easter egg 3 — O campo não usado

Um campo do copybook nunca é lido pelo programa.

Então parece seguro removê-lo.

Porém um sistema externo lê o registro completo pela posição.

Ao diminuir o layout, todos os campos seguintes se deslocam.

Parabéns: você encontrou o monstro secreto do LRECL.

Easter egg 4 — A rotina do dia 29 de fevereiro

Ela quase nunca executa.

Talvez a equipe nem consiga reproduzi-la facilmente.

Mas a cada quatro anos ela acorda.

Como um chefe final que segue calendário próprio.

Easter egg 5 — O comentário “não alterar”

Comentários assim nem sempre são superstição.

Frequentemente são cicatrizes de incidentes.

Trate-os como pistas, não como explicações definitivas.


Capítulo 11 — O que realmente merece ser lembrado

Você não precisa lembrar todos os parâmetros.

Mas algumas coisas merecem permanecer em sua memória profissional.

Lembre-se de perguntar:

  • Qual problema estamos resolvendo?

  • Quem depende desse processamento?

  • O que acontece em caso de falha?

  • A operação pode ser repetida?

  • Existe risco de duplicidade?

  • Quem valida a regra?

  • Qual é a fonte oficial da informação?

  • Existe uma exceção histórica?

  • Como voltar atrás?

  • O que precisa ser documentado?

Essas perguntas são mais valiosas do que decorar a sintaxe completa de cinquenta utilitários.

A tecnologia muda.

As boas perguntas continuam úteis.


Capítulo 12 — A evolução real do desenvolvedor

O programador iniciante se orgulha de lembrar comandos.

O intermediário se orgulha de resolver problemas.

O sênior se preocupa em não criar novos problemas.

O especialista compreende que software é um sistema sociotécnico: código, infraestrutura, negócio, pessoas, história e riscos.

A evolução pode ser vista assim:

Nível 1 — Sintaxe

Você aprende a escrever:

       PERFORM PROCESSAR-REGISTRO

Nível 2 — Estrutura

Você entende como organizar o programa.

Nível 3 — Dados

Você compreende arquivos, bancos, layouts e interfaces.

Nível 4 — Execução

Você entende JCL, CICS, filas, transações e dependências.

Nível 5 — Arquitetura

Você enxerga o programa dentro do ecossistema.

Nível 6 — Operação

Você compreende disponibilidade, performance, recuperação e suporte.

Nível 7 — Negócio

Você entende por que o sistema existe.

Nível 8 — História

Você compreende como ele chegou ao estado atual.

Nível 9 — Evolução segura

Você consegue transformá-lo sem destruir as razões pelas quais sobreviveu.

Esse é o verdadeiro caminho do Mestre Jedi do Mainframe.


Conclusão — Não entre em pânico, mas também não altere o IF sem perguntar

Esquecer sintaxe nunca foi o grande problema.

A sintaxe pode ser pesquisada.

O manual pode ser aberto.

Uma folha de referência pode ser consultada.

Um exemplo pode ser testado.

A memória técnica é útil, mas não é o recurso mais raro de um desenvolvedor.

O recurso mais raro é a capacidade de dedicar atenção suficiente para compreender um sistema complexo.

Compreender:

  • sua finalidade;

  • suas regras;

  • suas dependências;

  • suas falhas;

  • suas cicatrizes;

  • seus usuários;

  • sua história.

Um sistema legado não é apenas um conjunto de programas antigos.

É uma cápsula do tempo contendo decisões de negócio acumuladas ao longo de décadas.

Cada IF pode representar uma reunião.

Cada COPYBOOK pode representar um contrato.

Cada arquivo pode representar uma integração.

Cada código fixo pode representar uma exceção.

Cada comentário misterioso pode representar um incidente esquecido.

Por isso, quando receber sua próxima “pequena alteração”, não comece modificando o código.

Comece fazendo perguntas.

Localize o fluxo.

Mapeie entradas e saídas.

Descubra os consumidores.

Converse com os usuários.

Procure os veteranos.

Leia os logs.

Teste as hipóteses.

Registre as respostas.

E só então toque no programa.

No Guia do Viajante das Galáxias, a resposta para a vida, o universo e tudo mais era 42.

No Mainframe, a resposta costuma ser um pouco diferente:

“Depende da regra de negócio.”

E, em algum lugar do data center, existe um antigo analista que sabe exatamente qual regra é essa.

Talvez seja uma boa ideia convidá-lo para um café antes que alguém decida substituir o sistema inteiro por uma aplicação escrita às pressas em uma tecnologia que também será considerada legada daqui a vinte anos.

Porque linguagens envelhecem.

Plataformas evoluem.

Sintaxes mudam.

Mas sistemas continuam existindo enquanto resolverem problemas importantes.

E o melhor desenvolvedor não é aquele que carrega todos os manuais na cabeça.

É aquele que sabe onde encontrar a sintaxe, com quem conversar, quais perguntas fazer e, principalmente, o que jamais deve ser esquecido.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...