☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta programacao cobol. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta programacao cobol. Mostrar todas as mensagens

segunda-feira, 1 de junho de 2026

☕💣 DÍVIDA TÉCNICA: O MONSTRO INVISÍVEL QUE ESTÁ COMENDO O SEU COBOL DESDE O SÉCULO PASSADO

 

Bellacosa Mainframe e o monstro da divida tecnica 

☕💣 DÍVIDA TÉCNICA: O MONSTRO INVISÍVEL QUE ESTÁ COMENDO O SEU COBOL DESDE O SÉCULO PASSADO

"O sistema funciona perfeitamente. Só ninguém sabe como."

Se você trabalha com Mainframe há algum tempo, provavelmente já ouviu frases como:

  • "Não mexe nisso que funciona."

  • "Esse programa está em produção há 20 anos."

  • "Só o João sabe alterar esse módulo."

  • "Depois a gente documenta."

  • "Precisamos entregar hoje."

Parabéns.

Você acabou de encontrar alguns dos maiores sintomas de uma das doenças mais comuns da tecnologia moderna:

A Dívida Técnica.

E não, ela não acontece apenas em Java, Python ou aplicações web modernas.

Na verdade, muitos dos maiores casos de dívida técnica do planeta estão rodando neste exato momento em sistemas COBOL responsáveis por bancos, seguradoras, governos, companhias aéreas e bolsas de valores.

Vamos entender o que é, como identificar, controlar e principalmente como sobreviver a ela.


O QUE É DÍVIDA TÉCNICA?

A definição mais simples é:

Dívida Técnica é o custo futuro gerado quando escolhemos uma solução rápida hoje em vez da melhor solução possível.

Imagine que você recebeu uma demanda urgente.

O gerente aparece correndo:

"Precisamos colocar essa alteração em produção amanhã."

Você sabe que o correto seria:

  • revisar a arquitetura;

  • atualizar documentação;

  • criar casos de teste;

  • revisar impactos;

  • atualizar fluxogramas.

Mas o prazo não permite.

Então você faz um ajuste rápido.

Entrega.

Todo mundo feliz.

Até que seis meses depois alguém precisa alterar novamente aquele trecho.

Agora ninguém entende mais nada.

A dívida venceu.

E os juros começaram a ser cobrados.


A ANALOGIA COM O CARTÃO DE CRÉDITO

A comparação mais famosa é com uma dívida financeira.

Quando você compra algo parcelado:

Você ganha agora.

Mas paga depois.

Na dívida técnica acontece exatamente o mesmo.

Você ganha:

  • velocidade;

  • prazo;

  • entrega rápida.

Mas paga depois com:

  • bugs;

  • retrabalho;

  • manutenção cara;

  • incidentes de produção.

Quanto mais tempo passa, maiores ficam os juros.


O COBOL NÃO CRIA DÍVIDA TÉCNICA

Essa é uma das maiores injustiças da informática.

Muitos dizem:

"Cobol é dívida técnica."

Errado.

COBOL não é dívida técnica.

COBOL mal mantido é dívida técnica.

Existem programas COBOL escritos há 30 anos que continuam:

  • legíveis;

  • documentados;

  • organizados;

  • eficientes.

E existem aplicações modernas escritas há seis meses que já parecem um filme de terror.

A linguagem não é o problema.

A disciplina é.


COMO A DÍVIDA TÉCNICA NASCE

Ela normalmente surge de quatro formas.

1. Pressão por prazo

O caso mais comum.

"Entrega primeiro."

"Arruma depois."

O problema é que o depois quase nunca chega.


2. Falta de documentação

O desenvolvedor conhece tudo.

Então ele pensa:

"Não preciso documentar."

Dois anos depois ele muda de empresa.

Agora ninguém entende o programa.


3. Correções emergenciais

Produção caiu.

Cliente está ligando.

Diretoria está nervosa.

O objetivo vira apenas:

"Faça voltar."

Nesse momento quase ninguém pensa em qualidade.


4. Sistemas legados

Bibliotecas antigas.

COPYBOOKs herdados.

Macros esquecidas.

JCLs copiados durante décadas.

Tudo isso acumula dívida.


EXEMPLO REAL DE DÍVIDA TÉCNICA EM COBOL

Imagine um cálculo de desconto.

Versão original:

IF CLIENTE-VIP
   COMPUTE DESCONTO = VALOR * 0.15
END-IF

Simples.

Legível.

Agora passam dez anos.

Novas regras surgem.

Resultado:

IF CLIENTE-TIPO = 'A'
...
ELSE
IF CLIENTE-TIPO = 'B'
...
ELSE
IF CLIENTE-TIPO = 'C'
...

Mais tarde:

IF CLIENTE-TIPO = 'A'
...
ELSE
IF CLIENTE-TIPO = 'B'
...
ELSE
IF CLIENTE-TIPO = 'C'
...
ELSE
IF REGIAO = 'S'
...

Depois de centenas de mudanças:

Ninguém sabe mais como o cálculo funciona.

O programa funciona.

Mas ninguém entende.

Isso é dívida técnica.


OS SINTOMAS MAIS PERIGOSOS

Se você encontrar estes sinais, ligue o alerta.

Programas gigantes

Mais de 10.000 linhas.

COPYBOOKs duplicados

A mesma estrutura em vários lugares.

JCLs clonados

Mudam apenas o nome do JOB.

Falta de comentários

Tudo depende da memória dos analistas.

Testes manuais

Ninguém consegue validar rapidamente.

Dependência de uma pessoa

"O Carlos sabe."

Quando você ouve isso, existe dívida técnica.


O EFEITO JUROS COMPOSTOS

Aqui está a parte assustadora.

Dívida técnica cresce de forma parecida com juros compostos.

Um bug gera:

  • remendo;

  • novo remendo;

  • ajuste do remendo;

  • correção da correção.

Depois de alguns anos ninguém consegue alterar sem medo.

O custo explode.


COMO MAPEAR DÍVIDA TÉCNICA

Primeiro passo:

Pare de adivinhar.

Crie um inventário.

Faça uma planilha simples.

Colunas:

  • Sistema

  • Programa

  • Problema

  • Impacto

  • Complexidade

  • Prioridade

Exemplo:

ProgramaProblemaImpacto
COBCLI01Sem documentaçãoAlto
COBFAT0212.000 linhasAlto
COBPAG03Sem testesMédio

Agora a dívida virou algo visível.


MÉTRICAS IMPORTANTES

Um programador júnior deve aprender a medir.

Algumas métricas úteis:

Número de ABENDs

Se cresce continuamente:

há algo errado.


Tempo de correção

Quanto tempo leva para corrigir um incidente?

Quanto maior, maior a dívida.


Quantidade de módulos sem documentação

Métrica simples e poderosa.


Cobertura de testes

Quanto mais baixa, maior o risco.


FERRAMENTAS ÚTEIS NO MAINFRAME

Muitos iniciantes acham que Mainframe não possui ferramentas modernas.

Possui.

E muitas.

IBM Application Discovery

Mapeia dependências.

Excelente para sistemas gigantes.


IBM ADDI

Application Discovery and Delivery Intelligence.

Mostra relacionamentos entre:

  • COBOL

  • JCL

  • DB2

  • CICS


IBM Debug Tool

Ajuda a entender comportamento de programas complexos.


IBM Fault Analyzer

Investiga ABENDs.


IBM File Manager

Analisa arquivos rapidamente.


IBM Dependency Based Build

Automação moderna para pipelines Mainframe.


COMO REDUZIR A DÍVIDA

Agora vem a parte prática.


Passo 1 – Pare de criar dívida nova

Antes de pagar a antiga.

Evite criar mais.

Parece óbvio.

Mas é onde tudo começa.


Passo 2 – Refatore pequenos trechos

Não tente reescrever tudo.

Ataque pequenas áreas.

Exemplo:

  • nomes ruins;

  • IFs excessivos;

  • parágrafos gigantes.


Passo 3 – Documente enquanto aprende

Cada descoberta vira documentação.

Não espere um projeto oficial.


Passo 4 – Automatize testes

Mesmo testes simples ajudam.

Menos medo de alterar.

Mais velocidade.


Passo 5 – Padronize

Defina padrões.

Por exemplo:

  • nomenclatura;

  • comentários;

  • estrutura de programas;

  • organização de COPYBOOKs.


O ERRO MAIS COMUM DOS JUNIORES

Achar que refatorar significa reescrever tudo.

Não.

Refatoração significa melhorar sem alterar comportamento.

Você limpa.

Organiza.

Simplifica.

Sem mudar resultado.


O SEGREDO DOS ANALISTAS SENIORES

Muitos iniciantes acreditam que profissionais experientes sabem tudo.

Não sabem.

A diferença é que eles:

  • documentam mais;

  • investigam melhor;

  • evitam atalhos perigosos;

  • controlam a dívida técnica.

O conhecimento não está apenas no código.

Está na disciplina.


EASTER EGG DOS MAINFRAMEIROS

Se encontrar um comentário parecido com:

* NÃO REMOVER
* FUNCIONA ASSIM DESDE 1994

Você provavelmente encontrou um artefato arqueológico corporativo.

Trate com respeito.

Mas investigue.

Porque muitas vezes ele esconde uma dívida técnica histórica.


A REGRA DOS 5 MINUTOS

Uma dica poderosa.

Se você gastou cinco minutos para entender algo complicado:

documente.

O próximo desenvolvedor agradecerá.

E talvez esse próximo desenvolvedor seja você daqui a seis meses.


COMO EVOLUIR NA CARREIRA ATRAVÉS DA DÍVIDA TÉCNICA

Os melhores profissionais não são os que criam mais código.

São os que reduzem complexidade.

Quando você aprende a:

  • mapear problemas;

  • documentar;

  • simplificar;

  • automatizar;

  • refatorar;

você deixa de ser apenas um programador.

Você passa a ser um engenheiro de software.


CONCLUSÃO

Dívida técnica não é um bug.

Não é um ABEND.

Não é um programa COBOL antigo.

Ela é o resultado de decisões acumuladas ao longo do tempo.

Algumas são necessárias.

Outras são perigosas.

O segredo não é eliminar toda dívida técnica.

Isso é impossível.

O segredo é conhecê-la, monitorá-la e pagá-la antes que ela assuma o controle do sistema.

Porque, no final das contas, o verdadeiro problema não é aquele programa COBOL de 1987.

O problema é ninguém mais entender por que ele ainda funciona.

E quando esse dia chega...

o próximo chamado de produção costuma acontecer às 03:17 da manhã de um domingo.

Aproveite e conheça BACKLOG

https://eljefemidnightlunch.blogspot.com/2025/01/backlog-o-arquivo-secreto-que-separa-um.html

Backlog


quarta-feira, 27 de maio de 2026

☕🚀 IMS: O DINOSSAURO IMORTAL QUE AINDA MOVE O MUNDO

 

Bellacosa Mainframe apresenta o banco de dados hieraquico ISM

☕🚀 IMS: O DINOSSAURO IMORTAL QUE AINDA MOVE O MUNDO

A incrível história do sistema criado na era Apollo que continua processando bilhões de transações todos os dias

Se você é um programador COBOL júnior e começou recentemente a ouvir palavras como IMS, DL/I, PCB, PSB ou GU, talvez tenha pensado:

“Meu Deus… isso parece tecnologia alienígena dos anos 70.”

E sinceramente?

Você não está totalmente errado. 😄

O IMS é uma das tecnologias mais antigas ainda em operação no planeta. Mas existe um detalhe importante:

Ele também é uma das mais resilientes, rápidas e lucrativas da história da computação corporativa.

Enquanto centenas de tecnologias desapareceram, o IMS sobreviveu.

E não apenas sobreviveu.

Ele continua processando:

  • cartões de crédito

  • ATM bancário

  • sistemas de companhias aéreas

  • seguros

  • telecom

  • operações financeiras globais

em volumes absurdos.

Sim… existe uma chance enorme de você já ter usado IMS hoje sem perceber.


🌕 A Origem do IMS — NASA, Apollo e o Homem na Lua

O IMS nasceu em 1968.

Naquela época, a IBM e a Rockwell trabalhavam no projeto Apollo da NASA.

O problema era gigantesco.

A NASA precisava controlar milhares de componentes do foguete Saturn V:

  • peças

  • logística

  • engenharia

  • rastreamento

  • montagem

E os bancos de dados tradicionais da época simplesmente não conseguiam entregar a performance necessária.

Então nasceu o IMS:

Information Management System

Inicialmente criado para gerenciamento hierárquico de informações críticas do projeto Apollo.

Ou seja:

Existe uma ligação histórica real entre o IMS e a corrida espacial.

☕ Easter Egg Mainframe:

Muita gente brinca dizendo:

“O homem chegou à Lua graças ao COBOL, ao mainframe e ao café.”

E honestamente… não é tão exagerado assim.


🌳 O Grande Diferencial do IMS

Diferente do DB2 ou Oracle, o IMS NÃO é relacional.

Ele trabalha com:

Banco de dados hierárquico

Imagine uma árvore:

CLIENTE
 └── CONTA
      └── CARTAO
           └── MOVIMENTO

No IMS os dados possuem:

  • pai

  • filho

  • caminho de navegação

Isso deixa o acesso extremamente rápido.

Enquanto um banco relacional precisa pensar em:

  • JOIN

  • optimizer

  • plano de acesso

  • estatísticas

o IMS normalmente já sabe exatamente onde navegar.

É quase como um labirinto secreto onde o programa já conhece o caminho.


⚡ Por Que o IMS é Tão Rápido?

Porque ele foi criado numa época brutalmente limitada.

Nos anos 60 e 70:

  • CPU era caríssima

  • disco era lento

  • memória era minúscula

Então a IBM projetou o IMS para minimizar ao máximo o número de acessos físicos ao disco.

O resultado?

Uma arquitetura extremamente otimizada.

O IMS utiliza:

  • ponteiros físicos

  • navegação direta

  • acesso hierárquico

  • estruturas previsíveis

Em vez de perguntar:

“Como encontrar o dado?”

o IMS trabalha com:

“Eu já sei exatamente onde ele está.”


💾 Como os Dados São Gravados Fisicamente?

Aqui entra uma das partes mais fascinantes do IMS.

Fisicamente os dados normalmente são armazenados em datasets z/OS usando:

  • VSAM

  • OSAM

Mas o IMS NÃO grava tabelas como um banco relacional.

Ele grava:

Segmentos hierárquicos

Exemplo:

CLIENTE
   ↓ ponteiro físico
CONTA
   ↓ ponteiro físico
MOVIMENTO

Os segmentos ficam ligados fisicamente por ponteiros internos.

Isso permite uma navegação extremamente rápida entre os registros.

É quase como se o banco tivesse túneis secretos ligando os dados.


🧠 O Que é DL/I?

Se existe um coração no IMS…

Esse coração é o:

DL/I — Data Language One

O DL/I é a interface usada pelos programas COBOL para conversar com o IMS.

No DB2 usamos:

SELECT
INSERT
UPDATE
DELETE

No IMS usamos comandos como:

  • GU

  • GN

  • GNP

  • ISRT

  • REPL

  • DLET

Tudo via:

CALL 'CBLTDLI'

Ou seja:

O programa COBOL literalmente navega pela árvore do banco.


👨‍💻 Exemplo Simples de Acesso IMS

Imagine que queremos localizar um cliente.

A chamada clássica seria:

CALL 'CBLTDLI'
     USING 'GU  '
           DB-PCB
           CLIENTE-AREA
           CLIENTE-SSA.

O comando:

GU

significa:

Get Unique

O IMS então:

  1. usa o índice

  2. localiza o segmento

  3. posiciona o ponteiro

  4. devolve o registro

Tudo absurdamente rápido.


🔑 PCB, PSB e SSA — As Siglas Misteriosas

Quando alguém começa IMS pela primeira vez, parece que caiu num filme cyberpunk dos anos 70.

As siglas assustam.

Mas a lógica é simples.

PCB

Program Communication Block

Define o acesso ao banco.

PSB

Program Specification Block

Define quais bancos e PCBs o programa pode usar.

SSA

Segment Search Argument

É quase um “WHERE” do IMS.

Exemplo:

CLIENTE(COD=00001)

📜 IMS e JCL

No mundo IMS, o JCL também ganha superpoderes.

Um programa batch IMS normalmente roda com:

//STEP01 EXEC PGM=DFSRRC00,
// PARM='DLI,PROGIMS,PSBTEST'

O famoso:

DFSRRC00

é praticamente o “portal mágico” do batch IMS.

☕ Curiosidade Bellacosa Mainframe:

Quando um iniciante vê um JCL IMS pela primeira vez, normalmente reage assim:

“Isso é um JCL… ou um ritual arcano da IBM?”

😄


⚔️ IMS vs DB2

Essa é uma guerra clássica.

O IMS possui:

✅ performance monstruosa
✅ baixo overhead
✅ TPS absurdamente alto

Mas o DB2 possui:

✅ SQL flexível
✅ analytics
✅ joins
✅ consultas ad-hoc

Por isso muitos bancos usam:

IMS + DB2 juntos

IMS processa o core transacional.

DB2 faz relatórios e analytics.

É como:

IMS = motor Fórmula 1
DB2 = cérebro analítico

🤖 IMS Moderno — Sim, Ele Continua Evoluindo

Muita gente pensa que IMS ficou preso nos anos 70.

Errado.

Hoje o IMS conversa com:

  • APIs REST

  • JSON

  • Java

  • OpenShift

  • Cloud híbrida

  • Mobile banking

  • z/OS Connect

Ou seja:

Seu aplicativo de banco no celular pode estar conversando com um software criado há mais de 50 anos.

Isso é simplesmente absurdo.

E incrível.


💼 Vale a Pena Aprender IMS?

Para um programador COBOL júnior?

SIM. MUITO.

Porque existem poucos especialistas.

E muitos profissionais IMS estão se aposentando.

O mercado procura gente que entenda:

  • COBOL

  • IMS

  • JCL

  • VSAM

  • CICS

  • DB2

Essa combinação continua extremamente valorizada.

Especialmente em:

  • bancos

  • seguradoras

  • telecom

  • aviação

  • governo


☕ O Dinossauro Que Nunca Morreu

O IMS é um paradoxo fascinante.

Ele nasceu antes da internet moderna.

Antes do Windows.

Antes do Linux.

Antes do SQL dominar o mundo.

E mesmo assim continua vivo.

Mais do que vivo.

Continua movimentando bilhões de dólares diariamente.

Porque no fim das contas, empresas gigantes não querem apenas “tecnologia nova”.

Elas querem:

  • estabilidade

  • velocidade

  • segurança

  • confiabilidade

E nisso o IMS ainda é um verdadeiro monstro.

Ou como muita gente brinca no mundo mainframe:

“Tecnologia antiga não significa tecnologia ultrapassada.”

Especialmente quando ela ainda move o planeta.

domingo, 6 de novembro de 2022

Rambo e as Quatro Divisões — O Caminho das Pedras para Escrever seu Primeiro Programa COBOL sem Voltar do Vietnã para uma América Desconhecida

 

Bellacosa Mainframe e o Rambo codificando programas cobol mainframe

☕ Um Café no Bellacosa Mainframe

Rambo e as Quatro Divisões — O Caminho das Pedras para Escrever seu Primeiro Programa COBOL sem Voltar do Vietnã para uma América Desconhecida

Ou: você já sabe entrar no TSO, abrir o ISPF, submeter JCL e reconhecer um S0C7; falta descobrir que um programa COBOL não nasce inteiro — ele é montado, uma decisão pequena por vez.

Há um momento estranho na vida de quem começa COBOL no z/OS.

O aluno já entra no TSO. Abre o ISPF. Encontra um membro numa PDS. Submete um JOB. Vai ao SDSF, vê CC 0000, vê ABEND, talvez até saiba que o compilador fica em algum lugar atrás daquele JCL aparentemente escrito em sânscrito administrativo.

Então o instrutor diz: “agora escreva um programa”. E a tela fica vazia como uma estrada à noite.

Não é falta de inteligência nem de vontade. É que até aqui ensinaram os cômodos da fábrica; ninguém mostrou como uma peça nasce. O iniciante recebe palavras enormes — IDENTIFICATION DIVISION, arquivo, PERFORM, WORKING-STORAGE, compilação — antes de aprender a primeira disciplina de sobrevivência: um programa é uma sequência explícita de perguntas e ações.

John Rambo entenderia a sensação. O sujeito voltou de uma guerra, trouxe competência real, mas aterrissou num lugar cujas regras não reconhece. O aluno COBOL também: conhece comandos isolados, mas ainda não tem o mapa para transformar um problema em fonte executável.

Vamos construir esse mapa. Sem magia, sem “copie este monstro de 800 linhas e reze”. No fim haverá um programa compilado, executado e observável no SDSF.

Missão do laboratório: ler dois números inteiros fornecidos pelo SYSIN, somá-los e informar o resultado. Se a entrada não for numérica, terminar de forma controlada.

É um problema pequeno de propósito. Se você não consegue explicar cada linha de um programa de 70 linhas, um programa de 7 mil linhas só é uma floresta maior.



1. Antes de abrir o editor: Rambo não atira no escuro

O erro clássico é começar pela primeira linha de COBOL e tentar “pensar dentro da sintaxe”. Isso é como começar a construir uma ponte escolhendo o parafuso.

Primeiro escreva, em português comum, o contrato do programa:

PerguntaResposta desta missão
Qual é a entrada?Dois números inteiros, um por linha, recebidos no SYSIN.
Qual é a saída?Uma mensagem com a soma, enviada ao SYSOUT.
O que pode dar errado?A linha não contém número ou falta uma das linhas.
Qual regra será aplicada?Só soma quando as duas entradas são numéricas.
Como saberei que funcionou?No JESMSGLG/SYSOUT, aparece a soma; o job fecha com CC 0000.

Agora reduza a lógica a pseudocódigo:

receber primeiro valor
receber segundo valor
se ambos são números
    somar
    mostrar resultado
senão
    mostrar mensagem de erro
    encerrar com código 8
fim-se
encerrar normalmente

Esse papel é o primeiro “programa”. COBOL será apenas a tradução disciplinada dele.

O truque que salva o iniciante

Antes de escrever uma instrução, complete a frase: “eu preciso guardar…”.

Para esta missão, precisamos guardar:

  • o texto bruto que chegou do SYSIN;

  • os dois valores convertidos para número;

  • o resultado;

  • uma forma de saber se a entrada é válida.

Pronto: você acabou de descobrir quase toda a DATA DIVISION.



2. As quatro divisões: quatro placas na trilha

COBOL não é uma língua que começa a contar uma história logo na primeira linha. Ele organiza o programa em quatro áreas. Pense nelas como as placas que Rambo fincaria na mata para não andar em círculos.

DivisãoPergunta que respondeNesta missão
IDENTIFICATION DIVISIONQuem é este programa?Nome do programa.
ENVIRONMENT DIVISIONCom que ambiente/dispositivos ele conversa?SYSIN e SYSOUT.
DATA DIVISIONQuais dados existem e como são descritos?Entradas, números e resultado.
PROCEDURE DIVISIONO que acontece, em qual ordem?Ler, validar, somar, exibir e terminar.

Uma dica de leitura para o resto da carreira:

Dados não fazem nada; procedimentos não guardam nada.

Quando você se perde, pergunte: “estou descrevendo uma coisa ou mandando executar uma ação?” Coisa vai para DATA; ação vai para PROCEDURE.




3. Primeiro marco: dar identidade ao recruta

Todo programa começa assim:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SOMA001.

PROGRAM-ID é o nome pelo qual o programa será conhecido pelo compilador e, em geral, pelo ambiente de execução. Use um nome que respeite a convenção local. Aqui, SOMA001 é curto, didático e cabe nas convenções tradicionais.

Não coloque regra de negócio aqui. Não declare variáveis aqui. Não tente impressionar o compilador. Esta divisão responde apenas: “quem se apresentou para a missão?”



4. Segundo marco: ligar a estrada de entrada e saída

Num programa batch simples, o JCL entrega recursos ao programa por DDNAME. SYSIN costuma ser a entrada padrão e SYSOUT a saída de mensagens. O COBOL precisa declarar que usará esses nomes.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT ENTRADA ASSIGN TO SYSIN
               ORGANIZATION IS LINE SEQUENTIAL.
           SELECT SAIDA ASSIGN TO SYSOUT
               ORGANIZATION IS LINE SEQUENTIAL.

Traduzindo sem fumaça:

  • SELECT ENTRADA: dentro do COBOL, chamaremos esse fluxo de ENTRADA;

  • ASSIGN TO SYSIN: no JCL, ele será conectado ao DD chamado SYSIN;

  • LINE SEQUENTIAL: vamos tratar uma linha por vez, ideal para o exercício;

  • o mesmo raciocínio vale para SAIDA/SYSOUT.

Agora descrevemos os registros desses fluxos na DATA DIVISION.



5. Terceiro marco: a mochila de dados (DATA DIVISION)

A DATA DIVISION tem seções. Para este laboratório, usaremos duas:

  • FILE SECTION: como é cada linha lida ou gravada nos arquivos lógicos;

  • WORKING-STORAGE SECTION: a mochila do programa, onde ficam os dados de trabalho enquanto ele está em execução.

       DATA DIVISION.
       FILE SECTION.
       FD  ENTRADA.
       01  REG-ENTRADA                 PIC X(20).

       FD  SAIDA.
       01  REG-SAIDA                   PIC X(80).

       WORKING-STORAGE SECTION.
       01  WS-PRIMEIRO-TEXTO           PIC X(20).
       01  WS-SEGUNDO-TEXTO            PIC X(20).
       01  WS-PRIMEIRO-NUMERO          PIC 9(9).
       01  WS-SEGUNDO-NUMERO           PIC 9(9).
       01  WS-RESULTADO                PIC 9(10).
       01  WS-RESULTADO-EDITADO        PIC Z(9)9.

Como ler uma declaração COBOL

Pegue esta linha:

       01  WS-PRIMEIRO-NUMERO          PIC 9(9).
  • 01 é o nível: um item independente;

  • WS-PRIMEIRO-NUMERO é o nome escolhido por nós; WS- é uma convenção comum para Working-Storage;

  • PIC 9(9) reserva nove posições numéricas, sem sinal e sem casas decimais.

O texto de entrada é PIC X(20) porque, quando a linha chega, ela é apenas texto. Antes de fazer conta, nós perguntaremos se ela é numérica e só então a moveremos para um campo numérico.

Esse detalhe evita o famoso S0C7: tentar tratar lixo como número. O S0C7 não é um fantasma; é normalmente a máquina dizendo, com pouca delicadeza, “você prometeu que havia dígitos aqui”.

WS-RESULTADO-EDITADO usa Z(9)9: os Z suprimem zeros à esquerda na apresentação. Assim, em vez de mostrar 0000000042, mostramos 42.



6. Quarto marco: transformar o roteiro em PROCEDURE DIVISION

Agora o programa ganha vida. Em COBOL, é saudável criar pequenos parágrafos com nomes que expliquem a intenção. Não escreva um único bloco de 400 linhas chamado MAIN. Isso é o equivalente corporativo de entrar na mata sem bússola.

       PROCEDURE DIVISION.
       0000-PRINCIPAL.
           PERFORM 1000-RECEBER-DADOS
           PERFORM 2000-VALIDAR-E-PROCESSAR
           PERFORM 9000-ENCERRAR
           .

Leia em voz alta: “execute receber dados; execute validar e processar; execute encerrar”. Se a leitura parece português burocrático, está no caminho certo.

O ponto final após o último comando encerra o parágrafo. Em código real, a convenção da equipe pode ser diferente, mas o princípio é o mesmo: seja consistente.

Receber dados

       1000-RECEBER-DADOS.
           READ ENTRADA
               AT END
                   MOVE SPACES TO WS-PRIMEIRO-TEXTO
               NOT AT END
                   MOVE REG-ENTRADA TO WS-PRIMEIRO-TEXTO
           END-READ

           READ ENTRADA
               AT END
                   MOVE SPACES TO WS-SEGUNDO-TEXTO
               NOT AT END
                   MOVE REG-ENTRADA TO WS-SEGUNDO-TEXTO
           END-READ
           .

Aqui há uma disciplina importante: READ lê para REG-ENTRADA, o registro definido na FILE SECTION. Em seguida copiamos para o campo de trabalho correspondente. A segunda leitura sobrescreverá REG-ENTRADA, e isso é normal.

Se não existir linha, colocamos espaços no campo. Mais adiante, a validação o rejeitará. Isso é muito melhor do que fingir que a linha existe.

Validar, converter, somar ou terminar com erro controlado

       2000-VALIDAR-E-PROCESSAR.
           IF FUNCTION TEST-NUMVAL(WS-PRIMEIRO-TEXTO) = 0
              AND FUNCTION TEST-NUMVAL(WS-SEGUNDO-TEXTO) = 0
               COMPUTE WS-PRIMEIRO-NUMERO =
                   FUNCTION NUMVAL(WS-PRIMEIRO-TEXTO)
               COMPUTE WS-SEGUNDO-NUMERO =
                   FUNCTION NUMVAL(WS-SEGUNDO-TEXTO)
               ADD WS-PRIMEIRO-NUMERO
                   WS-SEGUNDO-NUMERO
                   GIVING WS-RESULTADO
               MOVE WS-RESULTADO TO WS-RESULTADO-EDITADO
               MOVE SPACES TO REG-SAIDA
               STRING 'SOMA = ' DELIMITED BY SIZE
                      WS-RESULTADO-EDITADO DELIMITED BY SIZE
                 INTO REG-SAIDA
               END-STRING
               WRITE REG-SAIDA
           ELSE
               MOVE 'ERRO: INFORME DOIS NUMEROS INTEIROS.'
                 TO REG-SAIDA
               WRITE REG-SAIDA
               MOVE 8 TO RETURN-CODE
           END-IF
           .

Há cinco ferramentas essenciais aqui:

  • IF ... END-IF: escolhe um caminho. Sempre prefira o terminador explícito END-IF; ele evita que um ELSE perdido faça estrago mais à frente.

  • FUNCTION TEST-NUMVAL: verifica se o texto pode representar um número. Resultado 0 significa que é válido; ela aceita os espaços que normalmente acompanham uma linha curta recebida pelo SYSIN.

  • FUNCTION NUMVAL: converte o texto validado para valor numérico. A regra de ouro permanece: nunca converta antes de validar.

  • ADD ... GIVING: faz a soma e coloca o resultado no destino.

  • WRITE: envia o registro preparado para o fluxo de saída.

E entra um veterano importante: RETURN-CODE. Ele é uma área especial usada para devolver o resultado da execução ao z/OS/JES. 0 costuma significar sucesso; 8, erro de negócio ou entrada inválida neste exercício. Os significados formais dependem da política do seu ambiente, mas a ideia é universal: não esconda falhas.

Encerrar não é um detalhe

       9000-ENCERRAR.
           CLOSE ENTRADA
                 SAIDA
           GOBACK
           .

CLOSE finaliza os arquivos. GOBACK devolve o controle a quem chamou o programa — no nosso caso, o ambiente batch. Um programa que “parece ter terminado” mas não fecha recursos corretamente vira uma pequena dor de cabeça que cresce em produção.





7. O programa completo: uma peça que você consegue explicar

Crie um membro, por exemplo SOMA001, na PDS usada para fontes COBOL e coloque o código abaixo. Em ambientes de cartão fixo, respeite a coluna 8 para início do código; no editor ISPF, a numeração à esquerda normalmente já o mantém no lugar. Se sua instalação usa formato livre, siga o padrão definido por ela.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SOMA001.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT ENTRADA ASSIGN TO SYSIN
               ORGANIZATION IS LINE SEQUENTIAL.
           SELECT SAIDA ASSIGN TO SYSOUT
               ORGANIZATION IS LINE SEQUENTIAL.

       DATA DIVISION.
       FILE SECTION.
       FD  ENTRADA.
       01  REG-ENTRADA                 PIC X(20).

       FD  SAIDA.
       01  REG-SAIDA                   PIC X(80).

       WORKING-STORAGE SECTION.
       01  WS-PRIMEIRO-TEXTO           PIC X(20).
       01  WS-SEGUNDO-TEXTO            PIC X(20).
       01  WS-PRIMEIRO-NUMERO          PIC 9(9).
       01  WS-SEGUNDO-NUMERO           PIC 9(9).
       01  WS-RESULTADO                PIC 9(10).
       01  WS-RESULTADO-EDITADO        PIC Z(9)9.

       PROCEDURE DIVISION.
       0000-PRINCIPAL.
           OPEN INPUT ENTRADA
                OUTPUT SAIDA
           PERFORM 1000-RECEBER-DADOS
           PERFORM 2000-VALIDAR-E-PROCESSAR
           PERFORM 9000-ENCERRAR
           .

       1000-RECEBER-DADOS.
           READ ENTRADA
               AT END
                   MOVE SPACES TO WS-PRIMEIRO-TEXTO
               NOT AT END
                   MOVE REG-ENTRADA TO WS-PRIMEIRO-TEXTO
           END-READ

           READ ENTRADA
               AT END
                   MOVE SPACES TO WS-SEGUNDO-TEXTO
               NOT AT END
                   MOVE REG-ENTRADA TO WS-SEGUNDO-TEXTO
           END-READ
           .

       2000-VALIDAR-E-PROCESSAR.
           IF FUNCTION TEST-NUMVAL(WS-PRIMEIRO-TEXTO) = 0
              AND FUNCTION TEST-NUMVAL(WS-SEGUNDO-TEXTO) = 0
               COMPUTE WS-PRIMEIRO-NUMERO =
                   FUNCTION NUMVAL(WS-PRIMEIRO-TEXTO)
               COMPUTE WS-SEGUNDO-NUMERO =
                   FUNCTION NUMVAL(WS-SEGUNDO-TEXTO)
               ADD WS-PRIMEIRO-NUMERO
                   WS-SEGUNDO-NUMERO
                   GIVING WS-RESULTADO
               MOVE WS-RESULTADO TO WS-RESULTADO-EDITADO
               MOVE SPACES TO REG-SAIDA
               STRING 'SOMA = ' DELIMITED BY SIZE
                      WS-RESULTADO-EDITADO DELIMITED BY SIZE
                 INTO REG-SAIDA
               END-STRING
               WRITE REG-SAIDA
           ELSE
               MOVE 'ERRO: INFORME DOIS NUMEROS INTEIROS.'
                 TO REG-SAIDA
               WRITE REG-SAIDA
               MOVE 8 TO RETURN-CODE
           END-IF
           .

       9000-ENCERRAR.
           CLOSE ENTRADA
                 SAIDA
           GOBACK
           .

Pare antes de compilar e faça a prova Rambo: aponte para cada bloco e responda o que ele guarda ou faz. Se não consegue responder, não é hora de decorar mais comandos; é hora de reduzir o trecho até compreendê-lo.



8. O JCL: o caminhão que leva o recruta até o campo de teste

Cada empresa possui procedure, bibliotecas e padrões próprios. Por isso, não copie cegamente os nomes de bibliotecas abaixo. Use o PROC de compilação que sua turma ou instalação já fornece. O objetivo é entender a estrutura.

Um JCL didático pode ter este desenho:

//SOMAJOB  JOB (ACCT),'ALUNO',CLASS=A,MSGCLASS=H,NOTIFY=&SYSUID
//COMPILE  EXEC IGYWCL,PGM=SOMA001
//COBOL.SYSIN DD DSN=SEU.USUARIO.COBOL(SOMA001),DISP=SHR
//GO.SYSIN     DD *
12
30
/*
//GO.SYSOUT    DD SYSOUT=*

O que interessa aqui:

ParteTradução humana
EXEC IGYWCLChama uma procedure de compilar, linkeditar e executar COBOL. O nome pode variar na sua instalação.
PGM=SOMA001Indica o nome do módulo/programa.
COBOL.SYSINEntrega o membro-fonte ao passo de compilação. Alguns PROCs usam outro DDNAME; confira o padrão local.
GO.SYSIN DD *Entrega dados de teste diretamente no JCL ao passo de execução.
GO.SYSOUTPede que as mensagens produzidas pelo programa sejam direcionadas para a saída do job.

Em muitos laboratórios, a procedure já faz compile + link + go, mas com nomes diferentes, como COBCLG, IGYWCLG ou um PROC local. O procedimento certo é o que existe no seu ambiente, não o que alguém colou num fórum em 2009.

Se a sua procedure só compila e linkedita, faça dois JOBs: primeiro construa o load module; depois execute-o com um passo EXEC PGM=SOMA001, acrescentando ao STEPLIB a load library indicada pelo instrutor.



9. Do SUB ao SDSF: onde procurar primeiro

Depois de salvar fonte e JCL, submeta o job. A rotina de investigação do iniciante deve ser sempre a mesma:

  1. No ISPF, confirme que salvou o membro certo.

  2. Digite SUB no comando primário do editor JCL ou use a opção de submit disponível.

  3. No SDSF, abra ST e localize seu job.

  4. Veja o resultado geral: CC 0000 é a luz verde; qualquer ABEND ou CC inesperado pede leitura.

  5. Abra primeiro JESMSGLG: ele conta a história cronológica do job.

  6. Abra a listagem do compilador (SYSPRINT, SYSOUT ou nome equivalente) se a compilação falhou.

  7. Abra o SYSOUT do passo de execução para procurar SOMA = 42.

Para o teste com 12 e 30, a saída esperada é:

SOMA = 42

E o job deve fechar com CC 0000.

Faça também o teste de falha:

12
RAMBO

Agora a saída deve trazer a mensagem de erro, e o passo de execução deve terminar com CC 0008. Isto é sucesso do teste: o programa identificou uma entrada inválida sem cair num abend.



10. Quando der errado: o que a trilha está tentando dizer

SintomaSuspeita inicialPrimeira ação
Erros na compilaçãoPonto faltando, palavra reservada, colunas/formato ou estrutura incompletaLeia a primeira mensagem de erro do compilador; as seguintes podem ser consequência dela.
S0C7Campo não numérico usado em operação numéricaVerifique onde houve MOVE, ADD, COMPUTE ou comparação; valide a entrada antes.
S806Programa não foi encontrado para executarConfira link-edit, nome do PGM, STEPLIB/JOBLIB e load library.
S013 ou erro de arquivoDCB/atributos ou modo de abertura incompatíveisConfira o DD no JCL, OPEN INPUT/OUTPUT e o formato esperado.
CC 0000, mas nada apareceVocê escreveu em uma saída diferente da que está olhando, ou não executou o caminho do WRITEConfira o GO.SYSOUT e adicione uma mensagem simples de rastreio temporária.

O comando tático é: leia a primeira causa, não a última explosão. Um ponto ausente pode criar vinte mensagens do compilador; consertar a vigésima é combater fumaça.





11. Os sete hábitos de quem deixa de apenas “saber comandos”

  1. Comece pelo contrato, não pelo teclado. Entrada, saída, regra e erro antes da sintaxe.

  2. Faça uma versão minúscula funcionar. Primeiro leia e dê DISPLAY; depois some; depois valide; só então enfeite.

  3. Dê nomes que contem a história. WS-VALOR-ORIGEM é melhor que WS-A; 2000-CALCULAR-TOTAL é melhor que ROT2.

  4. Separe dados de ações. Campo na DATA DIVISION; decisão e processamento na PROCEDURE DIVISION.

  5. Valide bordas. Entrada vazia, letra em campo numérico, zero, valor máximo: os incidentes moram nas fronteiras.

  6. Compile cedo e frequentemente. Não escreva 300 linhas antes do primeiro compile. Entregue pequenas etapas ao compilador.

  7. Use o SDSF como painel, não como tribunal. Ele não está ali para humilhar ninguém; mostra o que de fato foi submetido e executado.



12. A próxima missão: aumentar só uma pedra por vez

Depois que SOMA001 funcionar, não pule direto para CICS, Db2 e um cadastro de clientes com 40 telas. Evolua em degraus:

  1. Troque a soma por subtração e multiplicação.

  2. Leia vários pares até fim de arquivo; aí você descobrirá PERFORM UNTIL e uma chave de fim de arquivo.

  3. Grave um relatório de saída com cabeçalho e totalizador.

  4. Leia um arquivo sequencial real no JCL, em vez de DD *.

  5. Crie uma rotina para validar dados e outra para calcular.

  6. Só então avance para VSAM, Db2, CICS ou chamadas de programas.

Cada degrau reaproveita a mesma gramática mental: receber → validar → processar → produzir saída → encerrar. Muda o recurso, não muda o raciocínio.



13. Checklist antes de chamar o instrutor

Antes de dizer “não funciona”, faça esta inspeção honesta:

  • Qual é a entrada exata que forneci?

  • Qual saída eu esperava?

  • Em que membro está o fonte? E em que membro está o JCL?

  • O PROGRAM-ID é o mesmo nome usado no build/exec?

  • O job chegou a executar ou morreu na compilação/linkedição?

  • Qual é a primeira mensagem relevante no SDSF?

  • Se há cálculo, os campos envolvidos são realmente numéricos?

  • Eu consigo explicar, em português, o caminho entre a leitura e a saída?

Se levar essas respostas, você não chega ao instrutor com “deu erro”. Chega com material de diagnóstico — e aprende dez vezes mais depressa.



Epílogo — Rambo não decorou a selva; ele aprendeu a ler rastros

Escrever COBOL não é conhecer todas as cláusulas da linguagem. É pegar um problema confuso e dividi-lo até que cada parte tenha uma resposta simples:

  • quem é o programa;

  • de onde vêm e para onde vão os dados;

  • o que precisa ficar guardado;

  • quais passos acontecem e em que ordem;

  • como o programa termina quando tudo vai bem — e quando não vai.

O aluno que voltou do “Vietnã” de TSO, ISPF, JOB e JCL não está atrasado. Ele já conhece o terreno e as ferramentas. Falta transformar ferramentas em método.

Abra um membro vazio. Escolha um problema de uma frase. Escreva o contrato. Monte as quatro divisões. Compile antes de o medo crescer. E, quando o SDSF mostrar o primeiro CC 0000 de um programa escrito por você, guarde o recibo: não foi sorte. Foi a primeira vez que você atravessou a trilha inteira.

E a partir daí, padawan, a floresta continua grande — mas já não é desconhecida.



Para ir mais longe

Conheça diversos laboratorios praticos para dominar o COBOL e ir mais longe na carreira de DEV Mainframe

https://eljefemidnightlunch.blogspot.com/2026/07/laboratorio-pratico-primeiros-passos-no.html

https://eljefemidnightlunch.blogspot.com/2024/01/laboratorio-pratico-testes-de.html

https://eljefemidnightlunch.blogspot.com/2025/06/laboratorio-pratico-de-cobol-mainframe.html

https://eljefemidnightlunch.blogspot.com/2025/10/lab-1-laboratorio-pratico-db2-para.html

https://eljefemidnightlunch.blogspot.com/2025/10/laboratorio-pratico-03-comandos-display.html

https://eljefemidnightlunch.blogspot.com/2026/07/comp-4-e-comp-5-sem-misterios-parte-ii.html

sexta-feira, 27 de março de 2015

☕🔥 BOAS PRÁTICAS COBOL — A DIFERENÇA ENTRE “CÓDIGO QUE FUNCIONA” E “CÓDIGO QUE SOBREVIVE 30 ANOS”

 

Bellacosa Mainframe e as Boas praticas em cobol

☕🔥 BOAS PRÁTICAS COBOL — A DIFERENÇA ENTRE “CÓDIGO QUE FUNCIONA” E “CÓDIGO QUE SOBREVIVE 30 ANOS”

O material enviado é excelente porque toca num dos assuntos mais importantes do mundo Enterprise:

COBOL não é só linguagem.
COBOL é engenharia de continuidade operacional.

E isso muda completamente a maneira de programar.

No mercado bancário, seguradoras, adquirentes, cartões, previdência, governo e clearing houses…

o programa COBOL NÃO é feito para durar meses.

Ele é feito para durar décadas.

Muitos sistemas bancários críticos hoje ainda possuem módulos escritos entre:

  • 1978

  • 1986

  • 1992

  • 1999

e continuam processando:

  • PIX

  • TED

  • SWIFT

  • cartão

  • folha

  • empréstimo

  • câmbio

  • risco

  • antifraude

  • compensação

  • open finance

com volumes absurdos.


☕ O GRANDE SEGREDO DO COBOL CORPORATIVO

Em sistemas Enterprise:

O custo da MANUTENÇÃO é MUITO maior que o custo da implementação inicial.

Em bancos:

  • 70% a 90% do trabalho é manutenção

  • não projeto novo

Então o verdadeiro objetivo do COBOL é:

  • previsibilidade

  • legibilidade

  • estabilidade

  • rastreabilidade

  • auditabilidade

  • recuperação

  • facilidade de troubleshooting

e NÃO “código bonito”.


☕ O QUE DIFERENCIA UM JÚNIOR DE UM PROGRAMADOR COBOL ENTERPRISE?

Junior:

  • “funciona”

Senior:

  • “isso vai sobreviver 20 anos?”

Especialista banco:

  • “isso vai sobreviver 20 anos SEM derrubar batch?”

Arquiteto:

  • “isso vai sobreviver auditoria BACEN?”


☕ 1 — IDENTIFICATION DIVISION NÃO É ENFEITE

O texto fala algo extremamente importante:

Muita gente ignora IDENTIFICATION DIVISION.

No mundo real isso é gravíssimo.

Porque em bancos:

  • programas possuem milhares de versões

  • dezenas de equipes

  • auditorias

  • SOX

  • BACEN

  • LGPD

  • rastreabilidade


EXEMPLO CORPORATIVO REAL

IDENTIFICATION DIVISION.
PROGRAM-ID. CRD0450.

AUTHOR. V BELLACOSA.
INSTALLATION. BANK XYZ.
DATE-WRITTEN. 2026-05-21.

REMARKS.
* PROCESSA BAIXA DE PARCELAS
* MODULO UTILIZADO NO FECHAMENTO D+1
* INTEGRADO COM CICS E DB2
* CHAMADO PELO SCHEDULER CA7

☕ POR QUE ISSO É IMPORTANTE?

Imagine:

Batch falhou às 02:15 da manhã.

Operação liga para suporte.

O operador precisa descobrir:

  • o que o programa faz

  • qual sistema impactado

  • qual cadeia batch

  • quem mantém

  • dependências

Sem IDENTIFICATION adequada:

  • caos

Com documentação:

  • troubleshooting rápido


☕ 2 — COMENTÁRIOS NÃO DEVEM EXPLICAR “O QUE”

Esse trecho do artigo é ouro puro.

Programador ruim comenta:

* SOMA VALOR
ADD WS-VALOR TO WS-TOTAL

Isso é inútil.

O COBOL já é quase inglês.


☕ O QUE DEVE SER COMENTADO?

REGRA DE NEGÓCIO

Exemplo bancário:

* BACEN CIRCULAR 4588
* JUROS DEVEM SER ESTORNADOS
* QUANDO LIQUIDACAO OCORRER EM D-1
* CHAMADO 458921 - TIME RISCO

IF WS-DT-LIQ < WS-DT-VENC
   SUBTRACT WS-JUROS
      FROM WS-SALDO
END-IF

Isso salva vidas em produção.

Porque explica:

  • por que existe

  • quem pediu

  • qual regra

  • qual auditoria

  • qual legislação


☕ 3 — NOMENCLATURA EM COBOL É CIÊNCIA

O texto explica muito bem padrões de nomes.

Em sistemas bancários grandes:

nomenclatura é arquitetura.


☕ EXEMPLO RUIM

01 X.
01 Y.
01 TOTAL1.
01 CONT.

Isso destrói manutenção.


☕ EXEMPLO ENTERPRISE

01 WS-VR-TOTAL-PAGAMENTO    PIC S9(13)V99 COMP-3.
01 WS-QT-PARCELAS-ATRASO    PIC 9(05) COMP.
01 WS-DT-LIQUIDACAO         PIC 9(08).
01 WS-ST-CLIENTE-INAD       PIC X(01).

Agora qualquer pessoa entende:

  • VR = valor

  • QT = quantidade

  • DT = data

  • ST = status


☕ PADRÃO BANCÁRIO MAIS COMUM

Prefixos clássicos

PrefixoSignificado
WSWorking-Storage
LKLinkage
DFHCICS
SQLDb2
INEntrada
OUTSaída
ACAcumulador
CTContador
FLGFlag

☕ 4 — EVALUATE É UMA DAS MAIORES ARMAS DO COBOL MODERNO

O artigo mostra um IF gigantesco.

Isso é MUITO comum em sistemas antigos.


☕ O PROBLEMA DOS IFs GIGANTES

Eles causam:

  • difícil manutenção

  • bugs

  • nesting infernal

  • scope errado

  • END-IF perdido

  • regressão


☕ COMO BANCOS MODERNIZAM ISSO?

Com:

EVALUATE WS-TP-MOVIMENTO

   WHEN '01'
      PERFORM 100-CREDITO

   WHEN '02'
      PERFORM 200-DEBITO

   WHEN '03'
      PERFORM 300-ESTORNO

   WHEN OTHER
      PERFORM 900-ERRO

END-EVALUATE

☕ BENEFÍCIOS

1. Legibilidade absurda

2. Menos bugs

3. Fácil inclusão de novas regras

4. Melhor debugging

5. Melhor análise de fluxo


☕ 5 — END-IF SALVOU O MAINFRAME

O artigo cita delimitadores de escopo.

Isso foi uma revolução.

Antes:

IF A = B
   IF C = D
      MOVE 1 TO X.

O ponto encerrava TUDO.

Isso gerava:

  • bugs monstruosos

  • IF acidentalmente fechado

  • corrupção lógica


☕ BOA PRÁTICA MODERNA

IF WS-SALDO > ZERO

   IF WS-LIMITE > ZERO
      PERFORM 100-LIBERA
   END-IF

END-IF

☕ REGRA DE OURO DOS BANCOS

NUNCA dependa de ponto para fechar escopo.

Sempre:

  • END-IF

  • END-EVALUATE

  • END-PERFORM

  • END-READ

  • END-EXEC


☕ 6 — CÓDIGO MORTO É VENENO CORPORATIVO

O artigo fala sobre código comentado antigo.

Isso é uma praga em mainframe.


☕ EXEMPLO REAL

* COMPUTE WS-JUROS = WS-SALDO * 0.12
MOVE ZERO TO WS-JUROS

10 anos depois:

  • ninguém sabe qual regra vale

  • auditoria confunde

  • manutenção vira inferno


☕ MELHOR PRÁTICA

Use:

  • ChangeMan

  • Endevor

  • Git

  • ISPW

Versionamento existe para isso.


☕ O CÓDIGO DEVE REPRESENTAR:

o presente

Não o passado arqueológico do sistema.


☕ 7 — COPYBOOKS: O DNA DO MAINFRAME

O artigo comenta reuso moderado.

Esse é um dos temas mais importantes do COBOL bancário.


☕ O QUE É COPYBOOK?

É um INCLUDE reutilizável.


☕ EXEMPLO

COPY CLIENTE.
COPY DFHAID.
COPY SQLCA.

☕ PRINCIPAIS COPYBOOKS BANCÁRIOS

1. Layouts de arquivos

CNAB:

  • 240

  • 400


2. Áreas CICS

DFHCOMMAREA

3. Estruturas Db2

DCLGEN

4. APIs corporativas

PIX
SWIFT
Open Finance


☕ PERIGO DO EXCESSO DE COPYBOOK

Já vi programas com:

  • 120 COPYs

  • impossível entender fluxo

Isso gera:

  • compilação lenta

  • impacto gigante

  • acoplamento monstruoso


☕ BOA PRÁTICA

Reuse:

  • layouts

  • APIs

  • estruturas comuns

  • tratamento corporativo

NÃO reuse:

  • lógica besta

  • MOVE ZERO

  • regras triviais


☕ 8 — COMP, COMP-3 E PERFORMANCE

O artigo toca num ponto extremamente avançado.

Muita gente não entende isso.


☕ DISPLAY vs COMP vs COMP-3

DISPLAY

PIC 9(10)

Armazenado:

  • caractere por caractere

Mais lento.


☕ COMP

PIC S9(9) COMP

Binário.

Muito mais rápido.

Ideal:

  • contadores

  • loops

  • índices


☕ COMP-3

PIC S9(11)V99 COMP-3

Packed decimal.

Perfeito para:

  • financeiro

  • bancos

  • dinheiro

Porque:

  • precisão decimal exata


☕ POR QUE BANCOS AMAM COMP-3?

Porque dinheiro NÃO pode ter erro binário.

Exemplo clássico:

Floating Point

0.1 + 0.2 = 0.3000000000004

Em banco:

  • isso seria catastrófico


☕ COBOL RESOLVE ISSO

Com decimal packed:

01 WS-VALOR PIC S9(09)V99 COMP-3.

Precisão decimal real.


☕ 9 — NÍVEL 88 É SUBESTIMADO

O artigo comenta condition names.

Isso é uma maravilha do COBOL.


☕ SEM NÍVEL 88

IF WS-ST-CLIENTE = 'A'

'A' significa o quê?


☕ COM NÍVEL 88

01 WS-ST-CLIENTE PIC X(01).

   88 CLIENTE-ATIVO VALUE 'A'.
   88 CLIENTE-BLOQUEADO VALUE 'B'.
   88 CLIENTE-INADIMPLENTE VALUE 'I'.

Agora:

IF CLIENTE-INADIMPLENTE

Fica quase inglês.


☕ 10 — PRINCIPAIS SOLUÇÕES BANCÁRIAS COBOL

Agora vamos entrar no mundo REAL Enterprise.


☕ ARQUITETURA MAIS COMUM EM BANCOS

ONLINE

CICS + COBOL + Db2

Processa:

  • saldo

  • PIX

  • TED

  • cartão

  • ATM

  • mobile


☕ BATCH

JCL + COBOL + SORT + IDCAMS + Db2 Utilities

Processa:

  • fechamento

  • extrato

  • billing

  • juros

  • risco

  • liquidação


☕ MIDDLEWARE

MQ
Kafka
IBM Integration Bus
z/OS Connect

Integra:

  • APIs

  • microsserviços

  • nuvem

  • mobile


☕ SEGURANÇA

RACF

Controla:

  • datasets

  • transações

  • usuários

  • APIs


☕ ALTA DISPONIBILIDADE

Sysplex
GDPS
Parallel Sysplex


☕ MONITORAMENTO

OMEGAMON
MainView
SYSVIEW


☕ DEVOPS MAINFRAME

Endevor
ISPW
Git + DBB
Jenkins
UrbanCode


☕ EXEMPLO REAL — TRANSAÇÃO PIX

PASSO A PASSO


1 — APP MOBILE

Cliente envia PIX.


2 — API GATEWAY

Chama:

  • z/OS Connect

  • MQ

  • CICS


3 — CICS

Executa transação COBOL.


4 — COBOL

Valida:

  • saldo

  • limite

  • antifraude

  • horário

  • BACEN


5 — Db2

Atualiza:

  • saldo

  • ledger

  • histórico


6 — MQ/Kafka

Publica evento.


7 — Batch Noturno

Concilia:

  • compensação

  • liquidação

  • auditoria


☕ O QUE ISSO ENSINA?

Que COBOL moderno NÃO vive isolado.

Ele é:

  • coração transacional

  • motor financeiro

  • camada de consistência


☕ CONCLUSÃO

O artigo enviado aborda algo fundamental:

boas práticas COBOL não existem para “embelezar código”.

Elas existem para:

  • manter sistemas vivos

  • reduzir risco operacional

  • evitar incidentes bancários

  • facilitar auditoria

  • garantir continuidade

  • permitir manutenção segura

E isso é exatamente o motivo pelo qual:

  • bancos

  • bolsas

  • seguradoras

  • governos

  • adquirentes

continuam confiando bilhões de dólares ao COBOL diariamente.


sexta-feira, 16 de agosto de 2013

☕🔥 EIBRESP no CICS — O “DNA” dos Erros e Respostas do Mainframe

 



☕🔥 EIBRESP no CICS — O “DNA” dos Erros e Respostas do Mainframe

No universo CICS, existe uma verdade absoluta:

“Se você não trata RESP e RESP2… o CICS tratará você.”

O campo EIBRESP é um dos mecanismos mais importantes do ambiente transacional IBM Mainframe.

Ele informa:

  • se o comando executou corretamente

  • qual erro ocorreu

  • qual condição excepcional aconteceu

  • se houve problema de terminal

  • erro de VSAM

  • problema de comunicação

  • rollback

  • timeout

  • lock

  • storage

  • autorização

  • spool

  • task

  • map

  • TSQ

  • TDQ

  • intersystem

  • e dezenas de outros cenários


☕ O que é EIBRESP?

O EIBRESP pertence ao:

EXEC CICS HANDLE CONDITION

e principalmente ao:

RESP()
RESP2()

Exemplo clássico:

EXEC CICS READ
     FILE('CLIENTE')
     INTO(WS-REGISTRO)
     RIDFLD(WS-CHAVE)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

Após o comando:

  • WS-RESP recebe o código principal

  • WS-RESP2 traz detalhes adicionais


☕ Por que isso é tão importante?

Porque no CICS:

Nem todo erro gera ABEND.

Na verdade:

  • a maioria dos problemas retorna EIBRESP

  • e o programa CONTINUA

Ou seja:

se você não tratar…

o sistema segue em frente silenciosamente.

Isso é perigosíssimo.


☕ Exemplo clássico de desastre

Imagine:

EXEC CICS READ FILE('CLIENTE')
END-EXEC

Registro não existe.

O CICS retorna:

RESP = 13 (NOTFND)

Mas o programador ignorou.

Resultado:

  • dados inválidos

  • tela lixo

  • cálculos incorretos

  • SQL errado

  • corrupção lógica

Sem abend.
Sem dump.
Sem aviso.

O erro fica “fantasma”.


☕ Arquitetura Interna do EIB

O EIB é:

EXEC Interface Block

Área automática criada pelo CICS para cada task.

Contém:

  • EIBRESP

  • EIBRESP2

  • EIBTRNID

  • EIBTASKN

  • EIBTIME

  • EIBDATE

  • EIBAID

  • EIBCALEN

  • EIBFN

  • etc.

É literalmente o “contexto vivo” da transação.


☕ O fluxo REAL do CICS

Internamente:

Programa envia comando EXEC CICS
↓
Translator converte para CALL DFHEI1
↓
Kernel EXEC Interface processa
↓
Resource Manager executa
↓
Retorno é gravado em EIBRESP
↓
Programa decide o que fazer

Ou seja:

EIBRESP é praticamente o “status code” do kernel CICS.


☕ As categorias dos EIBRESP

Os códigos podem ser agrupados em:

CategoriaExemplos
Arquivo VSAMNOTFND, DUPKEY, ENDFILE
ComunicaçãoTERMERR, SYSIDERR
StorageNOSTG
SegurançaNOTAUTH
QueueQZERO, QBUSY
MAP/BMSMAPFAIL
ProgramasPGMIDERR
TransaçõesTRANSIDERR
SyncpointROLLEDBACK
InterSystemISCINVREQ

☕ Os códigos MAIS IMPORTANTES do mundo real


🔥 01 — ERROR

Erro genérico.

Normalmente significa:

  • comando falhou

  • condição inesperada

  • sem tratamento específico

Exemplo:

IF WS-RESP = DFHRESP(ERROR)

Curiosidade:

Muitos dumps antigos de CICS começam aqui.


🔥 13 — NOTFND

O mais famoso de todos.

Registro não encontrado.

Exemplo:

EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(WS-ID)
     RESP(WS-RESP)
END-EXEC

Se chave não existir:

RESP = 13

☕ Analogia real

É o equivalente mainframe de:

SELECT * FROM TABELA
WHERE ID=999

Sem linhas retornadas.


☕ Dica profissional

TODO READ deveria tratar:

EVALUATE WS-RESP
   WHEN DFHRESP(NORMAL)
      CONTINUE

   WHEN DFHRESP(NOTFND)
      MOVE 'N' TO WS-EXISTE

   WHEN OTHER
      PERFORM 9000-ERRO
END-EVALUATE

🔥 14 — DUPREC

Registro duplicado.

Muito comum em ESDS/RRDS.


🔥 15 — DUPKEY

Chave duplicada no KSDS.

Clássico de cadastro.

Exemplo:

EXEC CICS WRITE
     FILE('CLIENTE')

Tentou inserir chave já existente.


☕ Curiosidade

Em muitos bancos:

  • o COBOL captura DUPKEY

  • e transforma em mensagem amigável:

CLIENTE JÁ CADASTRADO

Sem o usuário perceber que foi um erro VSAM.


🔥 16 — INVREQ

“Invalid Request”.

Talvez o erro MAIS traiçoeiro do CICS.

Significa:

“Você pediu algo inválido para ESTE contexto.”

Exemplos:

  • READ sem arquivo aberto

  • START inválido

  • LINK incorreto

  • COMMAREA errada

  • comando proibido


☕ Easter Egg técnico

Grande parte dos:

AEI*

internamente começa com INVREQ.


🔥 17 — IOERR

Erro físico/lógico de I/O.

Pode indicar:

  • VSAM corrompido

  • CI quebrado

  • erro disco

  • problema buffer

  • catálogo inconsistente

Quando aparece:

⚠️ operadores começam a ficar nervosos.


🔥 18 — NOSPACE

Sem espaço.

Pode ocorrer em:

  • TSQ

  • TDQ

  • datasets

  • spool

  • buffers

Muito comum em ambientes mal dimensionados.


🔥 22 — LENGERR

Erro de tamanho.

Lenda absoluta do CICS.

Exemplo clássico:

EXEC CICS RECEIVE
     MAP('TELA1')
     INTO(WS-AREA-100)
END-EXEC

Mas o mapa possui 120 bytes.

Boom:

LENGERR

☕ O terror do COBOL antigo

Copys desatualizadas.

O mapa mudou.
O programa não recompilou.

Resultado:

RESP=22

🔥 25 — QBUSY

Queue ocupada.

Muito comum em concorrência pesada.


🔥 27 — PGMIDERR

Programa não encontrado.

Causas:

  • PPT errado

  • programa não instalado

  • nome incorreto

  • loadlib ausente

Exemplo:

EXEC CICS LINK
     PROGRAM('PGMXYZ')

Se não existir:

PGMIDERR

☕ Curiosidade histórica

Nos anos 80:

PGMIDERR era um dos erros mais comuns em produção noturna.

Especialmente após promotes manuais.


🔥 28 — TRANSIDERR

Transação inexistente.

Exemplo:

EXEC CICS START
     TRANSID('ABCD')

Se não existir no PCT:

TRANSIDERR

🔥 29 — ENDDATA

Fim de dados.

Muito comum em:

  • TSQ

  • TDQ

  • browse

Equivalente ao EOF lógico.


🔥 36 — MAPFAIL

Talvez o mais famoso do BMS.

Ocorre quando:

  • usuário pressionou ENTER sem dados

  • MDT desligado

  • campo vazio

  • RECEIVE não trouxe informação


☕ Exemplo REAL

Usuário entra na tela:

CPF: ________

Pressiona ENTER vazio.

CICS:

MAPFAIL

☕ Dica profissional importantíssima

Nunca trate MAPFAIL como erro fatal.

É fluxo normal de tela.


🔥 40 — OVERFLOW

Overflow de armazenamento/dados.

Pode ocorrer em:

  • TSQ

  • COMMAREA

  • buffers


🔥 42 — NOSTG

Sem storage.

Extremamente sério.

O CICS está sem memória suficiente.

Operações podem começar a degradar rapidamente.


☕ Bastidores

Quando NOSTG aparece em sequência:

  • SOS condition

  • short-on-storage

  • risco de região cair

É situação crítica.


🔥 44 — QIDERR

Queue inexistente.

Muito comum em TSQ/TDQ.


🔥 53 — SYSIDERR

Erro de sistema remoto.

Clássico em:

  • MRO

  • ISC

  • IPIC

  • APPC

O sistema remoto:

  • caiu

  • não respondeu

  • não existe

  • sessão falhou


🔥 70 — NOTAUTH

Falha de autorização.

O RACF disse:

NO.

☕ Integração CICS + RACF

Aqui ocorre:

  • verificação de transação

  • FILE

  • TDQ

  • TSQ

  • PROGRAM

  • SURROGAT

  • resources


🔥 73 — WRONGSTAT

Estado inválido.

Muito comum em sessões/APPC.


🔥 76 — CCERROR

Erro de controle de comunicação.


🔥 77 — MAPERROR

Erro estrutural de mapa.

Diferente de MAPFAIL.

MAPERROR normalmente significa:

  • definição inconsistente

  • estrutura inválida

  • problema BMS


🔥 80 — NOSPOOL

Sem spool.

Muito comum em ambientes JES saturados.


🔥 81 — TERMERR

Erro terminal/dispositivo.

Pode indicar:

  • sessão caiu

  • VTAM problemático

  • LU desconectada

  • timeout terminal


🔥 82 — ROLLEDBACK

Rollback executado.

Um dos mais importantes do mundo transacional.

Significa:

SUAS ALTERAÇÕES FORAM DESFEITAS

☕ Cenário clássico

UPDATE CONTA A
UPDATE CONTA B
ERRO NO FINAL
SYNCPOINT ROLLBACK

CICS:

ROLLEDBACK

🔥 84 — DISABLED

Recurso desabilitado.

Pode ser:

  • FILE

  • TRANSACTION

  • TERMINAL

  • PROGRAM

  • CONNECTION


☕ A diferença entre RESP e RESP2

RESP:

erro genérico

RESP2:

detalhamento interno

Exemplo:

RESP  = INVREQ
RESP2 = 8

Cada RESP2 possui significado específico.

É aí que mora o troubleshooting avançado.


☕ Exemplo profissional completo

EXEC CICS READ
     FILE('CLIENTE')
     RIDFLD(WS-CHAVE)
     INTO(WS-REG)
     RESP(WS-RESP)
     RESP2(WS-RESP2)
END-EXEC

EVALUATE WS-RESP

   WHEN DFHRESP(NORMAL)
      CONTINUE

   WHEN DFHRESP(NOTFND)
      MOVE 'CLIENTE INEXISTENTE'
        TO WS-MSG

   WHEN DFHRESP(NOTAUTH)
      MOVE 'SEM AUTORIZACAO'
        TO WS-MSG

   WHEN OTHER
      DISPLAY 'RESP=' WS-RESP
      DISPLAY 'RESP2=' WS-RESP2
      PERFORM 9999-ABEND

END-EVALUATE

☕ Dica de arquiteto CICS

Os melhores sistemas enterprise:

✅ tratam TODOS os RESP
✅ logam RESP2
✅ possuem tabelas de tradução
✅ transformam erro técnico em mensagem funcional
✅ evitam abends desnecessários


☕ Curiosidade histórica

Antes do uso massivo de:

RESP()

muitos programas dependiam de:

HANDLE CONDITION

Isso tornava o fluxo:

  • difícil de rastrear

  • cheio de GO TO

  • quase impossível de debugar

RESP revolucionou o tratamento moderno.


☕ Easter Egg Mainframe

Veteranos conseguem identificar problemas olhando apenas:

AEI9
AEY9
ASRA
MAPFAIL
INVREQ
PGMIDERR

É quase uma linguagem secreta do CICS.


☕ Regra de ouro do CICS

“O comando EXEC CICS nunca deve ser confiado cegamente.”

Sempre:

  • RESP

  • RESP2

  • HANDLE CONDITION

  • HANDLE ABEND

Porque no mundo transacional:

o programa pode continuar funcionando…

mesmo completamente errado.

sexta-feira, 11 de maio de 2012

Red Sonja : Quando um Programador Descobre que a Guerreira de Cabelos Rubros Também Ensina Arquitetura, Resiliência e a Arte de Nunca Depender de uma Única Ferramenta

 

Bellacosa Mainframe apresenta Red Sonja

☕ Um Café no Bellacosa Mainframe

Red Sonja sem Mistérios para Programadores COBOL

Quando um Programador Descobre que a Guerreira de Cabelos Rubros Também Ensina Arquitetura, Resiliência e a Arte de Nunca Depender de uma Única Ferramenta

"Há profissionais que vencem porque possuem a melhor tecnologia. Outros vencem porque aprenderam a sobreviver quando toda a tecnologia falha."


Introdução – Existe uma Red Sonja em Todo Ambiente Mainframe

Se você perguntar para um fã de fantasia quem é Red Sonja, provavelmente ouvirá uma resposta rápida:

"A guerreira ruiva da espada."

Mas essa definição é tão incompleta quanto dizer que COBOL é apenas uma linguagem de programação.

Red Sonja representa muito mais.

Ela simboliza independência.

Disciplina.

Treinamento.

Resiliência.

Capacidade de adaptação.

Coragem diante do impossível.

Curiosamente...

Essas também são algumas das características que diferenciam um programador COBOL comum de um verdadeiro especialista em sistemas críticos.

No universo do Bellacosa Mainframe, Red Sonja não é apenas uma personagem de espada e feitiçaria.

Ela representa o profissional que nunca espera que alguém resolva seus problemas.

Ela aprende.

Treina.

Cai.

Levanta.

Estuda novamente.

E volta ainda melhor.

Essa filosofia acompanha o mundo do mainframe desde seus primeiros dias.


Antes de Tudo: Quem é Red Sonja?

Aqui existe uma curiosidade histórica que costuma gerar confusão.

A Red Sonja famosa dos quadrinhos não foi criada diretamente por Robert E. Howard.

Howard escreveu, em 1934, um conto histórico chamado The Shadow of the Vulture.

Nele aparece uma personagem chamada Red Sonya de Rogatino.

Ela era uma guerreira do século XVI, durante o Cerco de Viena.

Décadas depois, em 1973, o roteirista Roy Thomas e o artista Barry Windsor-Smith, trabalhando para a Marvel Comics, adaptaram essa ideia e criaram Red Sonja, ambientando-a no universo da Era Hiboriana de Conan.

Foi uma transformação brilhante.

Mantiveram:

  • os cabelos vermelhos;

  • a personalidade feroz;

  • a habilidade incomum com espadas.

Mas transportaram tudo para um universo de fantasia heroica.

Resultado?

Nascia uma das personagens femininas mais importantes da história dos quadrinhos.


Easter Egg nº 1

Muita gente acredita que Red Sonja nasceu junto com Conan.

Na realidade, a personagem moderna é uma adaptação inspirada em Red Sonya de Rogatino, criada por Robert E. Howard, mas desenvolvida como heroína da Era Hiboriana por Roy Thomas e Barry Windsor-Smith.

É um excelente exemplo de como uma boa arquitetura pode ser expandida por outras gerações sem perder sua essência.


O Que Red Sonja Ensina ao Programador COBOL?

Conan normalmente resolve problemas pela força.

Kull pela liderança.

Solomon Kane pela investigação.

Red Sonja pela preparação.

Ela jamais entra em combate sem conhecer:

  • o terreno;

  • o inimigo;

  • seus próprios limites.

Isso lembra imediatamente um bom profissional de produção.

Antes de alterar um programa COBOL ele pergunta:

  • Existe impacto em outros JOBs?

  • Quem consome este COPYBOOK?

  • Existe alguma interface MQ?

  • O Db2 possui índices adequados?

  • O VSAM é compartilhado?

  • Há janela de processamento suficiente?

Essas perguntas evitam inúmeros desastres.


A Espada é Apenas uma Ferramenta

Existe um erro comum.

Imaginar que Red Sonja vence porque possui uma espada.

Não.

Ela vence porque sabe utilizá-la.

No mundo da tecnologia acontece exatamente o mesmo.

IDE.

Git.

VS Code.

ISPF.

IDz.

Python.

Java.

COBOL.

Tudo isso são ferramentas.

Ferramentas não substituem conhecimento.

Um profissional excelente usando um editor simples normalmente produz mais do que um iniciante cercado pelas tecnologias mais modernas.


A Armadura Não Faz o Guerreiro

Ao longo das décadas, Red Sonja tornou-se conhecida também por sua armadura icônica.

Visualmente é marcante.

Mas narrativamente ela nunca depende da armadura.

Depende do treinamento.

Isso lembra um fenômeno comum em TI.

Muitos acreditam que determinada ferramenta "garante qualidade".

Não garante.

Quem garante qualidade é o profissional.

Ferramentas apenas potencializam competências já existentes.


Easter Egg nº 2

Barry Windsor-Smith, um dos artistas responsáveis pelas primeiras aventuras de Conan e Red Sonja na Marvel, revolucionou o visual da fantasia heroica nos quadrinhos, influenciando ilustradores por décadas.

Seu traço inspirou inúmeros artistas europeus, americanos e japoneses.


O Treinamento Nunca Termina

Uma característica marcante de Red Sonja é que ela nunca considera seu aprendizado concluído.

Cada adversário ensina algo.

Cada derrota revela uma fraqueza.

Cada vitória mostra um novo desafio.

Esse talvez seja o maior ensinamento para quem trabalha com COBOL.

O profissional que acredita saber tudo começa a envelhecer tecnicamente.

O veterano verdadeiro continua aprendendo.

Hoje estuda:

  • APIs REST;

  • z/OS Connect;

  • Ansible;

  • Git;

  • Jenkins;

  • IA aplicada ao desenvolvimento;

  • observabilidade;

  • DevOps.

Não porque abandonou COBOL.

Mas porque COBOL continua evoluindo junto com o restante da arquitetura.


A Independência Técnica

Red Sonja raramente depende de um grupo.

Ela coopera quando necessário.

Mas sabe caminhar sozinha.

No mundo corporativo isso possui enorme valor.

Imagine alguém capaz de:

  • analisar um dump;

  • entender um JCL;

  • revisar SQL;

  • interpretar SMF;

  • investigar RACF;

  • localizar gargalos em CICS.

Esse profissional torna-se extremamente valioso.

Não porque faz tudo sozinho.

Mas porque compreende o ecossistema inteiro.


O Campo de Batalha é Produção

Nos contos de fantasia o combate acontece em florestas, fortalezas e ruínas.

No mainframe o campo de batalha possui outro nome:

Produção.

É ali que aparecem:

ABEND S0C7.

Deadlocks.

Timeouts.

Problemas de lock.

Fila MQ congestionada.

VSAM corrompido.

Plano Db2 inválido.

Nenhum treinamento substitui a experiência adquirida enfrentando produção real.


Easter Egg nº 3

Assim como Conan, Red Sonja passou por diversas editoras ao longo das décadas.

Marvel, Dynamite Entertainment e outras publicaram fases diferentes da personagem, mantendo-a viva para novas gerações de leitores.


A Disciplina da Espadachim

Howard e, depois, Roy Thomas apresentam uma característica interessante.

Red Sonja raramente vence pela impulsividade.

Ela observa.

Calcula.

Espera o momento correto.

Pense em um programador experiente.

Ele não altera imediatamente um IF.

Primeiro verifica:

qual módulo chama o programa;

quem consome o arquivo;

quais JOBs dependem da alteração;

quais interfaces serão afetadas.

Essa disciplina evita incidentes gigantescos.


Os Vilões Nunca São Apenas Monstros

Nas boas histórias de Red Sonja, os inimigos não são apenas criaturas fantásticas.

São também:

tiranos;

mercadores corruptos;

feiticeiros manipuladores;

governantes incompetentes;

chefes militares arrogantes.

Isso lembra muito projetos de software.

Pouquíssimos sistemas falham por culpa da linguagem.

Normalmente falham por:

requisitos mal definidos;

falta de comunicação;

pressa;

ausência de testes;

má governança.

O monstro raramente é o COBOL.


Curiosidades Pouco Conhecidas

A personagem histórica existiu?

Red Sonya de Rogatino foi inspirada em eventos históricos reais ligados ao Cerco de Viena de 1529, embora a personagem literária seja ficcional.


Red Sonja e Conan nem sempre caminharam juntos

Apesar de frequentemente associados, cada um possui histórias próprias, personalidade distinta e objetivos diferentes.


A personagem tornou-se um ícone

Durante décadas Red Sonja foi uma das protagonistas femininas mais importantes da fantasia heroica, influenciando inúmeras guerreiras em RPGs, videogames e quadrinhos.


A influência chegou aos games

Diversos jogos inspirados em fantasia medieval herdaram elementos visuais e narrativos associados à personagem: heroínas independentes, espadachins habilidosos e protagonistas que enfrentam impérios inteiros.


A Filosofia da Guerreira

Existe algo profundamente moderno em Red Sonja.

Ela nunca espera condições perfeitas.

Nunca diz:

"Vou aprender quando tiver tempo."

"Vou estudar quando a empresa pagar."

"Vou começar quando comprar um computador melhor."

Ela começa.

Com o que possui.

É exatamente assim que muitos veteranos do mainframe construíram suas carreiras.

Aprenderam em terminais 3270.

Consultando manuais impressos.

Perguntando aos mais experientes.

Errando.

Corrigindo.

E evoluindo.


A Espada e o Código

Uma espada precisa ser constantemente afiada.

O conhecimento também.

Quem para de estudar perde velocidade.

Quem deixa de praticar esquece detalhes importantes.

Quem acredita que já domina tudo normalmente é surpreendido pela próxima tecnologia.

O mesmo vale para COBOL.

Ele continua recebendo novas funcionalidades.

Integrações.

Boas práticas.

Ferramentas modernas.

Quem acompanha essa evolução permanece relevante.


O Legado para o Mainframe

Em ambientes IBM Z existe uma figura conhecida por todos.

É aquela pessoa que enfrenta qualquer incidente sem entrar em pânico.

Primeiro analisa.

Depois testa.

Confirma.

Documenta.

Resolve.

Red Sonja provavelmente faria exatamente isso.

Ela nunca luta por impulso.

Ela luta preparada.


Easter Egg nº 4

Enquanto muitos personagens da fantasia heroica representam força física, Red Sonja tornou-se símbolo de competência conquistada por treinamento. Essa diferença explica por que continua relevante mais de cinquenta anos após sua criação moderna.


O Verdadeiro Tesouro

No fim das contas, Red Sonja nunca buscou riqueza acima de tudo.

O verdadeiro prêmio sempre foi a liberdade.

No universo da tecnologia acontece algo semelhante.

O maior patrimônio de um programador não é o notebook.

Nem a IDE.

Nem o cargo.

Nem o salário.

É o conhecimento acumulado.

Esse ninguém consegue retirar.


Conclusão – A Espadachim do Mainframe

Quando observamos a trajetória de Red Sonja sob a ótica de um profissional COBOL, percebemos que sua história nunca foi apenas sobre batalhas.

Ela é uma metáfora sobre preparação.

Sobre disciplina.

Sobre competência construída diariamente.

Conan nos ensina coragem diante do desconhecido.

Kull nos ensina liderança quando a responsabilidade aumenta.

Solomon Kane nos ensina investigação antes da ação.

Red Sonja acrescenta um quarto pilar essencial: excelência obtida por treinamento contínuo.

Em um ambiente mainframe, onde uma única alteração pode impactar milhões de transações, essa filosofia faz toda a diferença. O profissional que revisa, testa, documenta e entende profundamente o contexto de cada mudança raramente depende da sorte. Ele confia na prática, no estudo e na experiência acumulada.

Talvez seja esse o verdadeiro elo entre uma guerreira da Era Hiboriana e um programador COBOL.

Ambos sabem que ferramentas mudam.

Espadas enferrujam.

Frameworks envelhecem.

Editores de código são substituídos.

Mas conhecimento sólido, disciplina e capacidade de adaptação continuam atravessando gerações.

E é justamente por isso que Red Sonja permanece viva na cultura pop e o COBOL continua sustentando alguns dos sistemas mais importantes do planeta.

Porque tanto uma grande guerreira quanto um grande programador descobrem, cedo ou tarde, a mesma verdade:

a vitória nunca pertence à melhor espada. Ela pertence à mente mais preparada para utilizá-la.

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...