☕ 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 DFSORT. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta DFSORT. Mostrar todas as mensagens

domingo, 1 de março de 2026

☕ Se você NÃO domina SORT em COBOL… o Batch vai te dominar

 

Bellacosa Mainframe dominando o sort em COBOL mesmo sem usar

☕ “Se você NÃO domina SORT em COBOL… o Batch vai te dominar”

O poder silencioso que move o coração do Mainframe (Guia para Padawans 🛰️)

“Ordenar dados não é detalhe. É infraestrutura invisível.”

Se você está começando no mundo do mainframe — jovem Padawan — prepare-se para descobrir uma das habilidades mais subestimadas e mais poderosas do COBOL clássico: File Sorting 💾🏛️.

Antes de bancos distribuídos, Spark, Data Lakes e buzzwords da moda…

👉 O mundo corporativo rodava — e ainda roda — sobre arquivos ordenados.

E no z/OS, isso é uma arte.


🧠 Por que SORT é tão importante?

Porque quase todo processamento batch depende disso:

🏦 Extratos bancários
💰 Fechamento contábil
📊 Consolidação de dados
📦 ETL legado
🧾 Billing
📡 Integração entre sistemas

Sem ordenação, você não consegue:

✔ Agrupar dados
✔ Detectar duplicidades
✔ Fazer merges eficientes
✔ Produzir relatórios sequenciais
✔ Atualizar arquivos mestre

Sorting é a base do processamento sequencial.


🏛️ O Modelo Sagrado dos 3 Arquivos

Todo Padawan deve decorar isto:

Input file → Sort work file → Output file
PapelDescriptor COBOLFunção
📥 EntradaFDDados brutos
🛠️ TrabalhoSDÁrea interna do sort
📤 SaídaFDDados ordenados

👉 O work file usa SD — Sort Description, não FD.

💡 Easter egg histórico: SD existe desde os primórdios do COBOL, muito antes do COBOL-85.


⚙️ Exemplo mínimo — SORT básico

🧱 Definições

FD Unsorted-Sales-File.
01 Unsorted-Sales-Record PIC X(100).

FD Sorted-Sales-File.
01 Sorted-Sales-Record PIC X(100).

SD Sort-Work-File.
01 Sort-Work-Record.
02 SalesClerk-ID PIC 9(6).
02 Filler PIC X(94).

🚀 O comando SORT

SORT Sort-Work-File
ON ASCENDING KEY SalesClerk-ID
USING Unsorted-Sales-File
GIVING Sorted-Sales-File.

Simples. Poderoso. Antigo. E ainda imbatível.


🔥 USING e GIVING — a força do fluxo

CláusulaSignificado
USINGArquivo de entrada
GIVINGArquivo de saída

👉 O SORT abre e fecha esses arquivos automaticamente.

💡 Curiosidade: você pode usar múltiplos arquivos em USING ou GIVING.


🧩 O verdadeiro poder: Sort Procedures

Quando você evolui de Padawan para Jedi Batch, descobre isto:

👉 Você pode controlar o sort antes e depois.


📥 INPUT PROCEDURE — o produtor

Fluxo:

Input file → Input Procedure → Sort

Serve para:

✔ Filtrar registros
✔ Combinar múltiplos arquivos
✔ Converter layouts
✔ Gerar dados dinamicamente

🔑 Comando obrigatório: RELEASE

MOVE Input-Record TO Sort-Work-Record
RELEASE Sort-Work-Record

Sem RELEASE → o sort não recebe nada.


📤 OUTPUT PROCEDURE — o consumidor

Fluxo:

Sort → Output Procedure → Output file

Serve para:

✔ Formatar saída
✔ Criar múltiplos arquivos
✔ Calcular totais
✔ Produzir relatórios

🔑 Comando obrigatório: RETURN

RETURN Sort-Work-File
AT END MOVE 'Y' TO EOF
NOT AT END
MOVE Sort-Work-Record TO Output-Record
WRITE Output-Record
END-RETURN

⚡ Regra Jedi: RELEASE vs RETURN

AçãoComando
Enviar ao sortRELEASE
Receber do sortRETURN

Se inverter isso… o Batch vai punir você.


🧪 Exemplo completo com procedures

SORT Sort-Work-File
ON ASCENDING KEY Customer-ID
INPUT PROCEDURE IS Load-Records
OUTPUT PROCEDURE IS Write-Records

🧠 Insight profundo: o SD é o “formato interno”

O sort não usa diretamente os layouts dos arquivos.

Fluxo real:

Input record(s)
↓ (movidos/construídos)
Sort-Work-Record (SD)

Ordenação pelas chaves do SD

Output record(s)

👉 Por isso as chaves devem existir no SD.


💎 Curiosidades que impressionam em entrevistas

✔ SORT COBOL usa o utilitário do sistema (DFSORT/SYNCSORT)
✔ Pode lidar com volumes absurdos de dados
✔ Muitas vezes supera soluções modernas em throughput sequencial
✔ É determinístico e confiável
✔ Existe há mais de 60 anos

💡 Easter egg: DFSORT já fazia “Big Data” quando esse termo nem existia.


🏆 Quando usar SORT COBOL vs DFSORT JCL?

SituaçãoMelhor opção
Sort simples e reutilizávelDFSORT no JCL
Lógica complexa no programaSORT COBOL
Transformações avançadasProcedures
Performance máxima puraDFSORT externo

Na vida real de produção:

👉 A maioria dos sorts massivos é feita fora do COBOL.


🧘 Conselhos do Mestre Bellacosa para Padawans

☕ “Aprenda SORT cedo. Você vai usá-lo mais do que imagina.”

✔ Domine SD vs FD
✔ Entenda USING/GIVING
✔ Memorize RELEASE/RETURN
✔ Saiba quando usar procedures
✔ Pense em fluxo sequencial


🛰️ Conclusão — O poder invisível

Sorting não aparece em demos bonitas.

Não vira post viral.

Não tem hype.

Mas sem ele…

👉 O batch não roda
👉 O fechamento não fecha
👉 O banco não fecha o dia
👉 O sistema não entrega resultados

SORT é infraestrutura silenciosa.

E quem domina isso domina o processamento de dados no mainframe.

sexta-feira, 20 de fevereiro de 2026

🔥 “Pandas: O ‘SORT’ do Python que Vai Fazer Você Repensar Tudo que Sabe sobre Arquivos Sequenciais”

 

Bellacosa Mainframe apresenta Pandas a Biblioteca poderosa do Python

🔥 “Pandas: O ‘SORT’ do Python que Vai Fazer Você Repensar Tudo que Sabe sobre Arquivos Sequenciais”


Se você vem do mundo COBOL, prepare-se: este não é apenas mais um artigo sobre Python.

É um choque de paradigma.

É como sair do SORT FIELDS=(...) no JCL e descobrir que você pode fazer tudo isso… e mais… em uma única linha de código.

Hoje vamos falar da biblioteca pandas — mas no estilo Bellacosa Mainframe: com história, bastidores, comparações práticas com COBOL, exemplos reais e até alguns easter eggs que vão te surpreender.


☕ 1. A Origem do Pandas — Não, Não Tem Nada a Ver com o Animal 🐼

O nome pandas vem de:

PANel DAta Structure

Criada em 2008 por Wes McKinney, a biblioteca nasceu dentro de um problema real:

👉 manipular dados financeiros de forma eficiente (algo que qualquer sistema em COBOL faz há décadas).

Ou seja…

💡 Pandas nasceu resolvendo problemas que você já resolve no mainframe.

A diferença?

👉 Ele fez isso com uma abordagem muito mais dinâmica e interativa.


🧠 2. O “choque cultural” para quem vem do COBOL

Se você trabalha com:

  • Arquivos VSAM
  • Sequential files
  • SORT / ICETOOL
  • DFSORT
  • DB2 queries

Então o pandas vai parecer… estranho no começo.

Mas depois:

🔥 viciante

Veja essa comparação:

COBOL / JCLPandas
SORT FIELDSsort_values()
READ FILEread_csv()
WRITE FILEto_csv()
IF / EVALUATEfiltros (query / loc)
FILE LAYOUTDataFrame

👉 O DataFrame é o seu novo “registro + tabela + dataset + tudo junto”


📊 3. O coração do Pandas: DataFrame

Imagine isso:

01 CLIENTE.
05 ID PIC 9(05).
05 NOME PIC X(30).
05 SALDO PIC 9(10)V99.

Agora pense nisso como uma tabela inteira carregada na memória.

👉 Isso é um DataFrame

Exemplo em Python:

import pandas as pd

dados = {
"ID": [1, 2, 3],
"NOME": ["ANA", "JOAO", "CARLA"],
"SALDO": [1500.50, 230.00, 9999.99]
}

df = pd.DataFrame(dados)

print(df)

Resultado:

ID NOME SALDO
0 1 ANA 1500.50
1 2 JOAO 230.00
2 3 CARLA 9999.99

💡 Pense assim:

👉 Você carregou um arquivo inteiro na WORKING-STORAGE… mas com superpoderes.


⚡ 4. Filtrando dados — o “IF” mais poderoso que você já viu

COBOL:

IF SALDO > 1000
DISPLAY CLIENTE
END-IF

Pandas:

df[df["SALDO"] > 1000]

Sim.

Só isso.

🔥 Sem loop. Sem READ. Sem controle manual.


🔀 5. Ordenação — adeus SORT JCL?

JCL:

SORT FIELDS=(SALDO, D)

Pandas:

df.sort_values(by="SALDO", ascending=False)

👉 Em memória
👉 Instantâneo
👉 Encadeável com outras operações


🧩 6. JOIN (sim, tipo DB2)

COBOL tradicional sofre aqui…

Mas pandas:

df1.merge(df2, on="ID", how="inner")

💡 É como um:

SELECT *
FROM A, B
WHERE A.ID = B.ID

🧠 7. Agrupamento (o famoso SUM + BREAK logic)

COBOL:

  • Sort
  • Control break
  • Acumuladores
  • Mil linhas de código 😅

Pandas:

df.groupby("NOME")["SALDO"].sum()

🔥 Isso substitui um programa inteiro de batch.


🥚 8. Easter Eggs do Pandas (sim, existem!)

🐼 1. Representação visual amigável

O pandas automaticamente formata tabelas no estilo “relatório bonito”.

👉 Parece um mini-ISPF tabular 😄


🧪 2. Você pode encadear tudo

df[df["SALDO"] > 1000] \
.sort_values(by="SALDO") \
.head(2)

💡 Isso seria:

  • filtro
  • sort
  • limitar registros

👉 tudo em pipeline


🧙 3. Pandas aceita dados de tudo

  • CSV (sequencial)
  • Excel
  • JSON
  • SQL
  • APIs

👉 É como se o COBOL lesse qualquer formato… sem FD.


🏛️ 9. Curiosidade histórica (nível mainframe)

Enquanto o mundo distribuído evoluía…

👉 o mainframe já fazia:

  • processamento massivo
  • batch
  • ETL
  • consistência

O pandas basicamente trouxe essa filosofia para o mundo Python.

💡 Em outras palavras:

Pandas é o “mini-mainframe” do desenvolvedor moderno


🚀 10. Onde isso muda sua carreira

Se você domina COBOL e aprende pandas:

🔥 você vira um profissional híbrido raríssimo

Você passa a atuar em:

  • Engenharia de dados
  • Data analytics
  • Integração legado + moderno
  • Automação de processos batch fora do mainframe

👉 E o melhor:

Você não joga fora seu conhecimento COBOL.

Você expande ele.


🧠 11. Mentalidade nova (o pulo do gato)

COBOL:

👉 Processamento linha a linha

Pandas:

👉 Processamento em conjunto (vetorizado)

Esse é o maior shift.


☕ Conclusão no estilo Bellacosa

Se o COBOL te ensinou disciplina…

Se o JCL te ensinou controle…

Se o SORT te ensinou performance…

Então o pandas vai te ensinar:

🔥 liberdade

Mas cuidado…

Depois que você fizer um groupby().sum() em uma linha…

👉 você nunca mais vai olhar um control-break da mesma forma.

sábado, 30 de março de 2024

JCL e USS: Eu Sabia Fazer... Até Descobrir que Precisava Aprender de Novo

 

Bellacosa Mainframe jcl e uss eu sabia fazer ate que li esse artigo

☕ Um Café no Bellacosa Mainframe

Eu Sabia Fazer... Até Descobrir que Precisava Aprender de Novo

JCL, USS e a maior lição que um Programador Mainframe pode aprender na era da Modernização

"O conhecimento verdadeiro não está em decorar comandos. Está em reconhecer padrões, independentemente da linguagem utilizada."


Existe um momento curioso na carreira de praticamente todo profissional de tecnologia.

Não importa se você programa em COBOL, Java, Python ou C.

Não importa se trabalha em Linux, Windows ou IBM z/OS.

Mais cedo ou mais tarde você olha para uma tarefa simples — algo que faz há vinte anos — e pensa:

"Espera... como é mesmo que faz isso aqui?"

A primeira reação costuma ser de frustração.

"Será que estou esquecendo?"

Na maioria das vezes, não.

Você continua sabendo exatamente o que precisa ser feito.

O problema é que o ambiente mudou.

E quando o ambiente muda, a maneira de conversar com ele também muda.

Foi exatamente isso que aconteceu quando muitos profissionais Mainframe conheceram o USS (Unix System Services).

Eles não estavam aprendendo um novo trabalho.

Estavam aprendendo uma nova língua.

E, curiosamente, isso costuma ser muito mais difícil.

Pegue uma xícara de café.

Hoje vamos conversar sobre uma das maiores armadilhas da modernização do IBM Z.


Quando o piloto entra em outro avião

Imagine um comandante com trinta anos de experiência pilotando um Boeing 737.

Um belo dia ele recebe treinamento para voar um Airbus A320.

Ele esqueceu como voar?

Claro que não.

Ele continua entendendo:

  • sustentação

  • velocidade

  • meteorologia

  • navegação

  • segurança

Tudo isso continua igual.

O que muda é:

  • onde fica cada botão;

  • como os sistemas conversam;

  • quais procedimentos devem ser executados.

Durante alguns dias ele parece um iniciante.

Mas ele não voltou ao zero.

Ele apenas precisa reconstruir seus reflexos.

É exatamente isso que acontece quando um programador experiente em JCL começa a trabalhar no USS.


O erro mais comum dos iniciantes

Quando um programador júnior aprende COBOL, tudo é novidade.

Ele aceita naturalmente ser iniciante.

Mas existe um problema curioso com profissionais experientes.

Quando entram em um ambiente parecido...

...eles esperam que tudo funcione igual.

E aí começam as comparações.

"Cadê o EXEC PGM?"

"Cadê o DD?"

"Cadê o DSN?"

"Cadê o DISP?"

"Cadê o SYSIN?"

A resposta é simples.

Eles continuam existindo...

...mas não da forma que você espera.


O IBM z/OS possui dois universos

Muitos iniciantes imaginam que existe um único ambiente Mainframe.

Na verdade existem dois mundos convivendo harmoniosamente.

Mundo tradicional

  • Batch

  • JES2/JES3

  • JCL

  • DFSORT

  • IDCAMS

  • IEBGENER

  • TSO/ISPF

  • Dataset

É o universo clássico.

É onde o Mainframe cresceu.


Mundo USS

Agora imagine colocar um Unix inteiro dentro do z/OS.

Foi exatamente isso que a IBM fez.

O USS oferece:

  • Shell

  • Bash

  • Diretórios

  • Arquivos

  • Scripts

  • Permissões POSIX

  • OpenSSH

  • Python

  • Git

  • Java

  • Node.js

  • Zowe CLI

Sem sair do z/OS.

Esse detalhe é importantíssimo.

O USS não substitui o Mainframe.

Ele amplia o Mainframe.


O maior equívoco sobre o USS

Muita gente pensa:

"Agora o Mainframe virou Linux."

Não.

Nem perto disso.

O Kernel continua sendo o z/OS.

O gerenciamento de memória continua sendo do z/OS.

O Workload Manager continua sendo do z/OS.

O RACF continua protegendo recursos.

O JES continua executando Batch.

O USS apenas fornece outra interface para conversar com o sistema operacional.

É como trocar o painel de instrumentos de um carro.

O motor continua o mesmo.


Dataset não morreu

Uma das primeiras confusões acontece aqui.

Durante décadas escrevemos:

CLIENTE.VENDAS.ARQUIVO

No USS passamos a enxergar algo como:

/u/vagner/clientes/vendas.txt

A primeira impressão é:

"Agora só existem arquivos."

Não.

Os datasets continuam existindo.

Inclusive é possível acessá-los a partir do USS.

Da mesma forma, programas Batch conseguem trabalhar com arquivos do USS.

Os dois mundos conversam.

E isso é fantástico.


DD Statements versus Pathnames

Durante anos aprendemos:

//INPUT DD DSN=CLIENTE.INPUT,DISP=SHR

O programa COBOL nunca conhecia o nome físico do dataset.

Ele apenas dizia:

SELECT CLIENTES
ASSIGN TO INPUT.

O JCL fazia a ligação.

Isso separava infraestrutura do programa.

No USS isso muda.

Agora normalmente fazemos:

programa entrada.txt saida.txt

Ou

fopen("/u/input/clientes.txt")

É outra filosofia.

Não melhor.

Não pior.

Diferente.


EXEC PGM virou comando

No Batch.

//STEP01 EXEC PGM=COBPROG

No USS.

./cobprog

Ou

cobprog

A intenção continua exatamente igual.

Executar um programa.

Mas agora o pensamento é imperativo.

Você manda executar imediatamente.

Enquanto o JCL descreve um processo inteiro.


Ordenação: o exemplo perfeito

Durante décadas utilizamos DFSORT.

//STEP EXEC PGM=SORT

Depois:

SORT FIELDS=(1,10,CH,A)

No USS tudo parece diferente.

Agora temos:

sort arquivo.txt

Ou:

syncsort

Ou pipelines:

cat clientes.txt | sort

Ou:

sort clientes.txt > clientes_ordenados.txt

Você continua ordenando.

Mas agora conversa diretamente com o sistema operacional.


Copiar arquivos

Batch.

IEBGENER.

PGM=IEBGENER

USS.

cp origem destino

Uma linha.

Fim.


Excluir arquivos

Batch.

DELETE CLIENTE.ARQ

USS.

rm arquivo

Mesma ação.

Outra gramática.


O verdadeiro desafio é psicológico

Essa talvez seja a parte mais interessante.

Quando tudo é completamente novo...

Nosso cérebro aceita aprender.

Mas quando algo parece familiar...

Tentamos usar nossos velhos reflexos.

É aí que começamos a tropeçar.

É como trocar de carro.

Você continua sabendo dirigir.

Mas procura o limpador de para-brisa no lugar errado.


O cérebro funciona por padrões

Programadores experientes não decoram comandos.

Eles criam padrões mentais.

Por exemplo.

Quando alguém fala:

"Preciso copiar dados."

Seu cérebro já responde:

IEBGENER.

Isso virou memória muscular.

Agora imagine trocar isso por:

cp

Não é difícil.

Mas o cérebro insiste em procurar o antigo caminho.


O mesmo acontece em outras tecnologias

COBOL → Java

Você continua escrevendo lógica.

Mudam:

  • sintaxe;

  • paradigma;

  • bibliotecas.


DB2 → PostgreSQL

SQL continua sendo SQL.

Mas:

  • utilitários;

  • administração;

  • backup;

  • tuning;

mudam completamente.


ISPF → VS Code

Você continua editando programas.

Mas os atalhos mudam.

A organização muda.

O fluxo muda.


JCL → Shell Script

Você continua automatizando processos.

Mas agora usa:

  • variáveis;

  • loops;

  • funções;

  • pipelines;

  • redirecionamento;

  • permissões.


Shell pensa diferente

JCL é declarativo.

Você descreve.

Quero executar isso.

Depois usar esse dataset.

Depois gravar ali.

Depois liberar espaço.

O sistema organiza tudo.

Shell é imperativo.

Você diz:

faça isso

agora isso

agora aquilo

agora copie

agora compacte

agora envie

Parece uma conversa.


A revolução silenciosa

Pouca gente percebe.

Hoje praticamente todas as ferramentas modernas do IBM Z passam pelo USS.

Git.

Python.

OpenSSH.

OpenSSL.

Java.

Node.js.

Ansible.

Docker Build Tools.

Make.

Maven.

Gradle.

VS Code.

Zowe CLI.

IBM Dependency Based Build.

Open Enterprise SDK.

Tudo isso vive ou conversa intensamente com o USS.

Quem domina USS ganha acesso ao universo moderno do Mainframe.


Curiosidade #1

O USS segue os padrões POSIX.

Isso significa que muito software originalmente criado para Unix pode ser recompilado para z/OS com poucas adaptações.

É um dos motivos pelos quais Python, Git e OpenSSH funcionam tão bem no IBM Z.


Curiosidade #2

Você pode acessar datasets tradicionais usando caminhos especiais dentro do USS.

Algo parecido com:

//CLIENTE.INPUT

Ou utilizando APIs específicas do z/OS.

É uma ponte entre os dois mundos.


Curiosidade #3

O comando ls mostra arquivos.

Mas também pode mostrar permissões POSIX.

Enquanto datasets continuam possuindo atributos completamente diferentes como:

  • RECFM

  • LRECL

  • BLKSIZE

  • DSORG

São dois modelos coexistindo.


Curiosidade #4

Muitos programas COBOL modernos conseguem trabalhar simultaneamente com:

  • datasets tradicionais;

  • arquivos USS;

  • bancos DB2;

  • APIs REST;

  • filas MQ.

Tudo no mesmo programa.

Essa integração é uma das maiores forças do IBM Z atual.


Dicas para o Programador Júnior

Não tente decorar comandos

Aprenda conceitos.

Quem entende conceitos aprende comandos rapidamente.


Entenda o objetivo

Antes de perguntar:

"Qual comando faz isso?"

Pergunte:

"O que eu quero fazer?"

A resposta quase sempre será:

  • copiar;

  • ordenar;

  • executar;

  • pesquisar;

  • transformar.

Depois descubra como cada ambiente expressa essa ideia.


Aprenda os dois mundos

Não escolha entre JCL e USS.

Aprenda ambos.

O mercado procura profissionais híbridos.


Pratique pequenos scripts

Faça scripts simples.

Copie arquivos.

Liste diretórios.

Ordene textos.

Execute programas.

Quanto mais prática, menos estranhos parecerão os comandos.


Leia JCL antigo

Muita lógica de negócio ainda vive em Batch.

Conhecer esse mundo é um enorme diferencial.


Explore o USS sem medo

Abra um shell.

Digite:

pwd
ls
cd
mkdir
cp
mv
rm
cat
grep
sort
find

São comandos simples.

Mas representam uma mudança enorme na forma de pensar.


Easter Egg do Bellacosa ☕

Existe uma frase famosa entre administradores Unix:

"Everything is a file."

No mundo Mainframe poderíamos adaptá-la para:

"Everything is a dataset... até você conhecer o USS."


Easter Egg Mainframe Nerd 🤓

Repare na sequência dos utilitários clássicos:

  • IEBGENER copia.

  • IEBCOPY copia PDS.

  • IDCAMS administra VSAM e datasets.

  • DFSORT organiza dados.

Agora observe os equivalentes Unix:

  • cp

  • mv

  • rm

  • sort

Quatro comandos substituem dezenas de utilitários especializados. Isso não significa que um modelo seja superior ao outro; significa apenas que cada ecossistema evoluiu para atender necessidades diferentes. O z/OS privilegiou controle, rastreabilidade e processamento corporativo em larga escala. O Unix priorizou simplicidade, composição de ferramentas e interatividade.


Conclusão: Aprender de Novo Não é Recomeçar

Existe uma enorme diferença entre recomeçar do zero e reconstruir seus referenciais.

Quando um desenvolvedor COBOL aprende Java, ele não esquece lógica de programação.

Quando um DBA DB2 aprende PostgreSQL, ele não esquece bancos de dados.

Quando um especialista em JCL aprende USS, ele não desaprende Batch.

Ele apenas descobre uma nova maneira de conversar com o mesmo sistema.

E talvez essa seja a maior lição da modernização do IBM Z: a tecnologia evolui, as interfaces mudam, as ferramentas se renovam, mas os princípios fundamentais permanecem. Quem entende esses princípios consegue atravessar décadas de inovação sem perder sua essência técnica.

No fim das contas, a verdadeira competência não está em decorar comandos como EXEC PGM, cp, sort ou rm. Ela está em compreender o problema, reconhecer padrões e adaptar-se rapidamente a novas formas de expressar soluções.

É por isso que os melhores profissionais de Mainframe não são aqueles que conhecem apenas o legado, nem os que dominam apenas as ferramentas modernas. São aqueles capazes de caminhar com naturalidade entre o JCL e o Bash, entre o ISPF e o VS Code, entre o dataset e o pathname, entre o Batch e o DevOps.

Porque, no IBM Z, existem dois mundos. E o profissional do futuro é aquele que fala fluentemente os dois.


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