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

quarta-feira, 18 de fevereiro de 2026

🔥 NumPy: O “PACKED DECIMAL” do Python que Vai Explodir sua Cabeça COBOL

 

Bellacosa Mainframe apresenta a biblioteca matematica do Python

🔥 NumPy: O “PACKED DECIMAL” do Python que Vai Explodir sua Cabeça COBOL

Se você veio do mundo COBOL, onde cada byte importa, cada campo tem propósito e cada processamento precisa ser eficiente… então prepare-se: você está prestes a conhecer o coração matemático do Python — a biblioteca NumPy.

E sim… ela é MUITO mais próxima do seu mundo do que você imagina.


☕ O choque de realidade: Python puro vs processamento “mainframe-like”

No COBOL, você já sabe:

  • COMPUTE é rápido
  • PERFORM VARYING é controlado
  • Estruturas são previsíveis

Agora veja isso no Python “cru”:

lista = [1, 2, 3, 4]
resultado = [x * 2 for x in lista]

Funciona… mas não é exatamente eficiente nível mainframe, certo?

Agora entra o NumPy:

import numpy as np

array = np.array([1, 2, 3, 4])
resultado = array * 2

💥 BOOM.

Você acabou de fazer processamento vetorial, algo muito mais próximo de um:

“loop implícito otimizado em assembler por baixo dos panos”

Sim… isso cheira a z/Architecture.


🧠 Origem: quando cientistas reinventaram o “processamento batch”

O NumPy nasceu oficialmente em 2006, mas sua raiz vem de duas bibliotecas:

  • Numeric
  • Numarray

Ambas criadas para resolver um problema clássico:

“Python era bom… mas lento para matemática pesada”

A fusão virou NumPy — e trouxe um conceito poderoso:

👉 Arrays homogêneos de alta performance

Se você pensa em:

  • tabelas VSAM
  • buffers de memória
  • áreas de trabalho

Você já entendeu metade do NumPy.


⚙️ O conceito que muda tudo: ndarray

O coração do NumPy é o ndarray (N-dimensional array).

Pense nisso como:

COBOLNumPy
OCCURSarray
PIC 9(5)V99dtype=float64
Tabela indexadandarray
Área contígua memóriabuffer otimizado

Exemplo:

import numpy as np

dados = np.array([10, 20, 30])
print(dados * 2)

Saída:

[20 40 60]

Sem loop explícito. Sem PERFORM.

👉 Isso é chamado de vectorization.


🚀 Performance: aqui mora o espírito do mainframe

NumPy é rápido porque:

  • Escrito em C (baixo nível)
  • Usa operações vetorizadas
  • Evita overhead de loops Python

📌 Tradução para o mundo COBOL:

“Você está rodando um SORT interno com exit em assembler… sem escrever assembler.”


🔍 Curiosidades que todo coboleiro vai amar

🧩 1. NumPy evita loops como você evita GO TO

Loops em Python são lentos.

NumPy resolve isso com operações vetoriais:

a = np.array([1,2,3])
b = np.array([4,5,6])

print(a + b)

Resultado:

[5 7 9]

👉 Isso é equivalente a um loop automático altamente otimizado.


🧠 2. Broadcasting: o PERFORM invisível

a = np.array([1,2,3])
print(a + 10)

Resultado:

[11 12 13]

Sem loop. Sem stress.

👉 O NumPy “espalha” o valor automaticamente.


🏎️ 3. Memória contígua = performance absurda

Diferente de listas Python, NumPy usa:

  • memória contínua
  • tipos fixos

👉 Isso lembra:

  • buffers de I/O
  • áreas de WORKING-STORAGE bem definidas

🧪 Exemplos práticos (modo COBOL mindset ON)

📊 Soma de um dataset

COBOL:

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100
ADD VALOR(I) TO TOTAL
END-PERFORM

NumPy:

np.sum(array)

💥 1 linha. Otimizado. Vetorizado.


📈 Média (sem reinventar roda)

np.mean(array)

👉 Nada de controle manual. Nada de variáveis acumuladoras.


🔄 Transformação em massa

array * 1.15

👉 Isso é literalmente um:

“REDEFINES aplicado em lote com COMPUTE automático”


🧠 Easter Eggs e detalhes escondidos

🥚 1. O tipo float64 é padrão

👉 Isso significa precisão alta — quase como trabalhar com campos bem definidos no COBOL financeiro.


🥚 2. Você pode acessar o “layout de memória”

array.strides

👉 Sim… você pode ver como os dados estão distribuídos na memória.

Isso é nível:

“debug de storage layout no mainframe”


🥚 3. NumPy conversa com C diretamente

👉 Isso permite integrar com código de baixo nível.

Ou seja:

Python vira quase um “COBOL com superpoderes científicos”


⚔️ NumPy vs Python puro (visão mainframe)

AspectoPython puroNumPy
PerformanceBaixaAltíssima
TipagemDinâmicaEstática (dtype)
MemóriaFragmentadaContígua
LoopManualVetorizado
EstiloScriptCientífico / batch-like

🌍 Onde isso entra na sua evolução?

Se você domina COBOL, NumPy é uma ponte natural para:

  • 📊 Data Science
  • 🤖 Machine Learning
  • 📈 Analytics de alto volume
  • 🧮 Simulações financeiras

E mais importante:

👉 Você não começa do zero
👉 Você reaproveita seu mindset de performance


🎯 Conclusão: o despertar do coboleiro moderno

NumPy não é só uma biblioteca.

É uma mudança de paradigma.

É quando você percebe que:

“O Python pode ser tão performático quanto um batch bem escrito — se você usar as ferramentas certas.”

E aqui vai a provocação final:

🔥 Se COBOL é o rei do processamento estruturado…
🔥 NumPy é o motor matemático que pode levar você além do mainframe.


quinta-feira, 5 de maio de 2022

DSA para Programadores COBOL Padawan

 

Bellacosa Mainframe apresenta DSA para programadores

☕ Um Café no Bellacosa Mainframe

DSA para Programadores COBOL Padawan

Você Não Precisa Decorar 500 Problemas do LeetCode. Precisa Aprender a Reconhecer Padrões.

"Todo programador iniciante acredita que grandes desenvolvedores conhecem milhares de algoritmos. Depois de alguns anos de experiência, descobre que eles conhecem apenas algumas dezenas de padrões... e sabem exatamente quando utilizá-los."


Existe uma pergunta que aparece frequentemente entre jovens programadores COBOL que desejam migrar para o universo moderno da Engenharia de Software:

"Preciso aprender LeetCode para conseguir boas oportunidades?"

Minha resposta normalmente surpreende.

Não.

Você precisa aprender como pensar.

LeetCode é uma academia.

DSA (Data Structures and Algorithms) é aprender anatomia.

Um fisiculturista pode decorar todos os exercícios da academia.

Um médico entende músculos, ossos, tendões e articulações.

Quem entende anatomia consegue criar novos exercícios.

Quem entende DSA consegue resolver problemas que nunca viu antes.

Essa é exatamente a diferença entre decorar soluções e compreender padrões.

E essa diferença vale tanto para um desenvolvedor Java quanto para um veterano de COBOL com trinta anos de experiência em sistemas bancários.


O Programador COBOL Já Conhece DSA (Mesmo Sem Saber)

Essa talvez seja a maior surpresa.

Muitos profissionais de Mainframe acreditam que DSA é uma invenção recente.

Não é.

Na verdade, você trabalha com isso há décadas.

Veja alguns exemplos.

Quando você faz uma leitura sequencial de um arquivo VSAM...

...está explorando uma estrutura de dados.

Quando faz um SEARCH ALL...

...está utilizando Binary Search.

Quando usa tabelas OCCURS...

...está manipulando Arrays.

Quando organiza registros por chave...

...está trabalhando com algoritmos de ordenação.

Quando utiliza um índice alternativo no VSAM...

...está explorando conceitos semelhantes às árvores de busca.

O que mudou foi apenas a nomenclatura.


O Grande Erro de Quem Estuda LeetCode

Imagine que alguém queira aprender COBOL.

Então começa resolvendo programas aleatórios.

Um dia faz folha de pagamento.

No outro faz cálculo de imposto.

Depois processamento de boletos.

Na semana seguinte faz conciliação bancária.

Será que ele aprenderá COBOL?

Provavelmente não.

Porque cada programa utiliza conceitos diferentes.

Com DSA acontece exatamente o mesmo.

Resolver problemas aleatórios é uma forma extremamente lenta de aprender.

Muito melhor é dominar um padrão de cada vez.

Quando você aprende Sliding Window...

...de repente resolve cinquenta problemas diferentes.

Quando entende HashMap...

...mais cinquenta deixam de parecer difíceis.

É um efeito multiplicador.


Pensando Como um Analista de Sistemas

Um analista experiente nunca começa programando.

Ele começa fazendo perguntas.

Da mesma forma, um bom solucionador de problemas faz um diagnóstico antes de escrever uma linha de código.

Seu raciocínio deveria seguir algo parecido com isto:

Que tipo de dado eu possuo?

↓

Qual estrutura representa melhor esses dados?

↓

Existe um padrão conhecido?

↓

Qual algoritmo resolve isso?

↓

Quanto custa em tempo?

↓

Quanto custa em memória?

Perceba que programação é apenas o último passo.

O verdadeiro trabalho acontece antes.


Arrays: O Arquivo Sequencial da Programação

Se existe uma estrutura que todo programador COBOL domina intuitivamente, é o Array.

Em COBOL:

01 CLIENTES.
   05 CLIENTE OCCURS 1000 TIMES.
      10 NOME PIC X(30).

Isso é um Array.

Na maioria das linguagens modernas:

clientes[1000]

É exatamente o mesmo conceito.

O interessante é que vários algoritmos famosos trabalham exclusivamente sobre Arrays.

Entre eles:

  • Prefix Sum

  • Sliding Window

  • Kadane

  • Binary Search

Cada um resolve um tipo específico de problema.


Prefix Sum: Quando Somar Milhões de Registros Precisa Ser Rápido

Imagine um banco.

Existe um histórico diário de saldo.

O gerente pergunta:

"Qual foi a movimentação entre os dias 500 e 1800?"

A solução ingênua seria somar tudo novamente.

Mas isso custa:

O(n)

Prefix Sum cria uma tabela acumulada.

Depois disso qualquer consulta vira praticamente instantânea.

Essa ideia aparece em:

  • Data Warehouses

  • BI

  • Analytics

  • Processamento Financeiro

  • Mainframe Batch

Embora muitos profissionais não percebam, diversas rotinas históricas de fechamento utilizam exatamente esse princípio.


Sliding Window: Não Recalcule o Que Você Já Sabe

Imagine um programa que precisa descobrir os três maiores dias consecutivos de vendas.

Um iniciante faz isto:

Soma dia 1

Soma dia 2

Soma dia 3

Depois recomeça tudo.

Um desenvolvedor experiente pensa diferente.

"Já conheço dois dos três valores."

Então remove apenas o elemento que saiu da janela e adiciona o próximo.

É como acompanhar uma esteira rolante.

Você não desmonta a esteira inteira para observar o próximo objeto.

Apenas acompanha seu movimento.

Esse padrão reduz muitos problemas de O(n²) para O(n).


Binary Search: Muito Além de Procurar

Todo mundo conhece Binary Search como uma busca em listas ordenadas.

Mas existe um detalhe interessante.

Hoje ele é muito mais utilizado para responder perguntas como:

"Qual é o menor valor possível?"

"Qual é a menor capacidade de armazenamento?"

"Qual é a menor velocidade aceitável?"

Sempre que existe uma resposta monotônica, Binary Search pode aparecer.

É por isso que ele continua sendo um dos algoritmos preferidos em entrevistas.


Strings: O Mundo dos Textos

Mainframes trabalham intensamente com texto.

CPF.

Nome.

Código de Agência.

Número da Conta.

Mensagens.

Arquivos CNAB.

Tudo isso são Strings.

Existem alguns padrões clássicos.

Two Pointers

Muito útil para:

  • remover espaços

  • comparar extremos

  • detectar palíndromos

É simples.

Dois ponteiros caminham em velocidades diferentes ou em sentidos opostos.


KMP

Imagine procurar uma palavra dentro de um documento de centenas de megabytes.

Sem estratégia...

...você volta inúmeras vezes ao início.

KMP evita repetir trabalho.

Ele aprende durante a própria busca.

É um excelente exemplo de algoritmo inteligente.


HashMap: A Memória Instantânea

HashMap talvez seja a estrutura que mais transforma problemas difíceis em problemas simples.

Imagine a pergunta:

"Este CPF já apareceu?"

Sem HashMap:

Procure tudo novamente.

Com HashMap:

Consulte diretamente.

É praticamente um índice em memória.

Quem trabalhou com índices DB2 entende rapidamente essa ideia.

Não percorremos a tabela inteira.

Consultamos uma estrutura otimizada.


Pilhas (Stacks): A Forma Natural de Resolver Alguns Problemas

Uma Stack segue a regra:

Last In

First Out

Ou seja:

O último que entra é o primeiro que sai.

Pense numa pilha de JCLs impressos.

O último colocado em cima será retirado primeiro.

Stacks aparecem em:

  • compiladores

  • interpretadores

  • validação de parênteses

  • chamadas de funções

  • expressões matemáticas

Sempre que existir necessidade de "voltar" ao estado anterior, existe uma boa chance de uma Stack resolver o problema.


Filas: O Modelo Natural do Batch

Se existe uma estrutura familiar ao mundo Mainframe é a Queue.

Os Jobs entram.

Esperam.

São executados.

Saem.

JES2 e JES3 vivem exatamente desse conceito.

Fila.

Primeiro que entra.

Primeiro que sai.

O mesmo vale para sistemas de mensagens como IBM MQ.


Linked Lists: Quando a Ordem Importa Mais que a Posição

Em um Array sabemos exatamente onde cada elemento está.

Em uma Linked List sabemos apenas quem é o próximo.

Isso muda completamente a forma de navegar pelos dados.

Um algoritmo famoso utiliza dois ponteiros.

Um anda normalmente.

Outro corre duas posições.

É o famoso algoritmo da Tartaruga e da Lebre.

Ele consegue descobrir ciclos sem utilizar memória adicional.

Uma verdadeira obra de elegância.


Árvores: Muito Mais Presentes do Que Você Imagina

Quando pensamos em árvores normalmente lembramos da faculdade.

Mas elas aparecem diariamente.

Diretórios.

Menus.

JSON.

XML.

LDAP.

Catálogos.

Organogramas.

Até um Plano de Contas contábil é uma árvore.

Quando aprendemos percursos como:

  • Preorder

  • Inorder

  • Postorder

  • Level Order

Estamos aprendendo maneiras diferentes de visitar essa hierarquia.


Grafos: O Modelo Universal

Existe uma frase famosa na Ciência da Computação:

"Tudo pode ser modelado como um grafo."

Internet.

Rotas.

Redes sociais.

Dependências.

Fluxos.

Microserviços.

Tudo isso pode ser representado por nós ligados entre si.

Os principais algoritmos são:

  • BFS

  • DFS

  • Dijkstra

  • Topological Sort

Se você entende esses quatro...

...já resolve uma enorme quantidade de problemas reais.


Programação Dinâmica: A Arte de Não Fazer o Mesmo Trabalho Duas Vezes

Esse talvez seja o assunto que mais assusta iniciantes.

Mas a ideia é incrivelmente simples.

Imagine calcular Fibonacci.

Sem memória:

Fib(40)

↓

Fib(39)

↓

Fib(38)

↓

...

Os mesmos cálculos aparecem centenas de milhares de vezes.

Programação Dinâmica guarda os resultados.

Quando precisar novamente...

...apenas consulta.

No Mainframe fazemos isso frequentemente.

Tabelas em memória.

Caches.

Arquivos temporários.

Tudo isso segue exatamente essa filosofia.


Greedy: A Melhor Decisão Agora

Alguns problemas permitem escolher sempre a melhor opção local.

Quando isso acontece...

...Greedy produz soluções extremamente rápidas.

Mas cuidado.

Nem todo problema aceita essa abordagem.

Saber reconhecer quando Greedy funciona é tão importante quanto conhecer o algoritmo.


Manipulação de Bits: O Poder Escondido do Hardware

Bits ainda são fundamentais.

Operações como:

AND

OR

XOR

SHIFT

São extremamente rápidas.

Mainframes utilizam instruções de hardware especializadas justamente para explorar esse tipo de operação.

Muitos algoritmos de criptografia, compressão e otimização dependem delas.


Estruturas Avançadas

Quando os problemas ficam maiores surgem novas ferramentas.

Segment Trees.

Fenwick Trees.

Sweep Line.

Meet in the Middle.

Essas técnicas aparecem menos no dia a dia, mas são muito comuns em competições de programação e entrevistas de empresas de tecnologia.

Elas demonstram que um mesmo problema pode ser atacado por diferentes estratégias, cada uma adequada a um cenário específico.


O Que Realmente Avaliam em uma Entrevista Técnica?

Muitos imaginam que a empresa quer saber se você decorou o algoritmo de Dijkstra.

Na realidade ela observa outra coisa.

Seu raciocínio.

Ela quer entender se você consegue:

  • Identificar a estrutura de dados correta.

  • Escolher o algoritmo adequado.

  • Explicar por que essa escolha é eficiente.

  • Comparar alternativas.

  • Analisar complexidade de tempo e memória.

  • Escrever um código claro e correto.

A implementação é importante, mas a capacidade de justificar as decisões costuma pesar ainda mais.


O Caminho de Estudos para um COBOL Padawan

Se eu estivesse orientando um jovem programador COBOL hoje, seguiria esta ordem:

  1. Arrays e Strings.

  2. Hash Maps.

  3. Stacks e Queues.

  4. Linked Lists.

  5. Árvores.

  6. Grafos.

  7. Recursão.

  8. Heaps.

  9. Programação Dinâmica.

  10. Técnicas avançadas.

Depois disso, sim, começaria a resolver problemas no LeetCode, HackerRank ou plataformas semelhantes.

Porque, nesse momento, cada exercício deixaria de ser um enigma e passaria a ser um reconhecimento de padrões.


Conclusão: O Verdadeiro Poder Está na Forma de Pensar

Existe um mito de que grandes programadores possuem uma memória extraordinária e conhecem milhares de algoritmos. A realidade é bem diferente. Eles desenvolveram um repertório de padrões e sabem identificar rapidamente qual deles se aplica a um problema.

O programador COBOL possui uma vantagem importante nessa jornada. Décadas trabalhando com arquivos sequenciais, VSAM, DB2, índices, tabelas OCCURS, processamento batch e transações CICS desenvolveram uma disciplina de raciocínio que continua extremamente valiosa. O desafio não é abandonar esse conhecimento, mas traduzi-lo para a linguagem moderna das Estruturas de Dados e Algoritmos.

Quando você perceber que um SEARCH ALL é uma busca binária, que uma tabela OCCURS é um array, que uma fila JES2 segue o princípio de uma queue, ou que um índice DB2 representa uma estrutura otimizada para acesso eficiente, verá que DSA não é um universo distante do Mainframe. É a formalização de conceitos que sempre estiveram presentes.

No fim das contas, programar bem nunca foi sobre decorar centenas de soluções. Sempre foi sobre observar, modelar e resolver problemas da forma mais elegante possível. É essa mentalidade que transforma um Padawan COBOL em um verdadeiro Arquiteto de Software, capaz de navegar tanto pelos sistemas legados que movem bancos e governos quanto pelas tecnologias modernas que definem o futuro da computação.


terça-feira, 25 de fevereiro de 2020

☕💥 Os 10 Padrões Secretos de Arrays em COBOL Mainframe

 

Bellacosa Mainframe e 10 padroes secretos de arrays

☕💥 Os 10 Padrões Secretos de Arrays em COBOL Mainframe

Ou como descobrir que você já usava algoritmos de entrevistas do LeetCode muito antes deles virarem moda



Introdução

Existe uma curiosidade engraçada no mundo da programação.

Um desenvolvedor Java estuda LeetCode.

Um desenvolvedor Python assiste vídeos sobre algoritmos.

Um engenheiro C++ compra livros de Competitive Programming.

Enquanto isso...

Um programador COBOL de banco com vinte anos de experiência está processando 300 milhões de registros no Batch Noturno utilizando exatamente os mesmos algoritmos...

Mas chama tudo de:

"andar na tabela"

"fazer acumulado"

"pesquisa binária"

"comparar dois índices"

"janela de análise"

E provavelmente faz isso tomando café às 3 da manhã olhando um SDSF.

A verdade é que muitos dos algoritmos mais famosos ensinados atualmente em universidades e plataformas de entrevistas já existem no universo COBOL há décadas.

OCCURS.

INDEXED BY.

SEARCH.

SEARCH ALL.

SET UP.

SET DOWN.

ASCENDING KEY.

Tabelas auxiliares.

Acumuladores.

Áreas de trabalho.

Tudo isso forma um verdadeiro arsenal de algoritmos.

E hoje vamos conhecer os 10 padrões clássicos de Arrays, explicados para um Padawan COBOL.


Padrão 1 — Two Pointers

Os Dois Jedi da Tabela

É provavelmente o algoritmo mais antigo do mundo corporativo.

A ideia é simples.

Utilizamos dois ponteiros.

Um na esquerda.

Outro na direita.

Ou ambos andando em velocidades diferentes.


Exemplo

Verificar se uma tabela é simétrica.

01 TAB.

   05 ITEM OCCURS 100 TIMES
      INDEXED BY IDX1 IDX2.

77 MAX PIC 999 VALUE 100.



SET IDX1 TO 1
SET IDX2 TO MAX



PERFORM UNTIL IDX1 >= IDX2


   IF ITEM(IDX1) NOT = ITEM(IDX2)

      DISPLAY 'NAO SIMETRICO'

   END-IF


   SET IDX1 UP BY 1
   SET IDX2 DOWN BY 1


END-PERFORM

Onde aparece?

Remover duplicidade

Palíndromo

Conciliação bancária

Arquivos ordenados

Merge VSAM

Join Batch


Complexidade

O(n)


Padrão 2 — Sliding Window

A Janela Deslizante

Esse algoritmo parece sofisticado.

Mas todo programador financeiro já utilizou.


Exemplo

Últimos 30 dias.

Tabela

10
20
15
40
50

Janela

3


Primeira

10 20 15

Soma

45


Move.

20 15 40

75


Move.

15 40 50

105


COBOL


ADD ENTRADA(I)
TO SOMA


SUBTRACT ENTRADA(I-3)

FROM SOMA

Muito usado em:

Detecção fraude

PIX

Cartão crédito

Médias móveis

SMF


Complexidade

O(n)


Padrão 3 — Prefix Sum

O Acumulador Supremo

Padawan.

Você provavelmente já usou.

Só não sabia o nome.


Exemplo.

Tabela.

5 3 2 4 1

Prefix.

5

8

10

14

15

Consultar.

Posição.

2 até 5.

15 - 5

10


COBOL

ADD VALOR(I)

TO ACUM(I-1)

GIVING ACUM(I)

Utilização.

Analytics

DW

RMF

SMF

Cobrança


Padrão 4 — Kadane

O Santo Graal das Séries

Maior sequência positiva.


Exemplo.

-2
1
-3
4
-1
2
1

Resultado.

6


COBOL

IF SOMA < ZERO

MOVE ZERO TO SOMA

END-IF

Aplicações.

Lucro máximo

Oscilações

Bolsa

PIX

Cartões


Complexidade.

O(n)


Padrão 5 — Merge Intervals

Fundindo Períodos

Muito usado.

Principalmente bancos.


Exemplo.

Cliente bloqueado.

01-05

03-10

12-20

Resultado.

01-10

12-20


COBOL

Comparar.

Datas.

Mesclar.


Usado.

Seguros

RH

Férias

Janelas batch


Padrão 6 — Cyclic Sort

A Ordem Cósmica

Pouco conhecido.

Mas genial.


Exemplo.

3 1 2

Cada número.

Vai para posição.

Correta.


Resultado.

1 2 3

Muito útil.

Detectar.

Ausentes.

Duplicados.


Padrão 7 — Hashing

O Cache Jedi


Python

Dict


Java

HashMap


COBOL

Tabela OCCURS


Exemplo.

Estados.

SP


RJ


MG

Pesquisar.

Instantaneamente.


Alternativa.

SEARCH ALL


Exemplo.

Tabela IR.

Códigos.

CEP.

Produtos.


Padrão 8 — Binary Search

SEARCH ALL

A arma secreta do COBOL.


Tabela ordenada.

SEARCH ALL CLIENTE

Complexidade.

O(log n)


1000000 registros.

Comparações.

20


Magia matemática.


Muito superior.

SEARCH.


SEARCH.

500 mil leituras.


SEARCH ALL.


Padrão 9 — Monotonic Stack

O Mestre Esquecido


Pouco usado.

Mas poderoso.


Encontrar.

Próximo maior.

Próximo menor.


Exemplo.

Temperaturas.

30

31

28

35

Pergunta.

Quando esquenta?


Em COBOL.

Pode ser implementado.

Com tabela OCCURS.


Muito usado.

Forecast.

Analytics.

IA.


Padrão 10 — Two Heaps

O Conselho Jedi

Min Heap.

Max Heap.


Encontrar.

Top 10.

Maior.

Menor.

Mediana.


Em COBOL.

Mais raro.

Mas possível.


Exemplo.

Ranking clientes.


SEARCH versus SEARCH ALL

Padawan.

Essa é importante.


SEARCH

Linear.

O(n)

SEARCH ALL

O(log n)

1000000 registros.

SEARCH.

500000 leituras.

SEARCH ALL.


INDEX versus Subscript

Subscript.

CLIENTE(I)

Índice.

INDEXED BY IDX

Mais rápido.


Menos cálculos.


Melhor cache.


SSRANGE

O Guardião das Tabelas

Sempre.

DEV.

TESTE.

QA.


Nunca acessar.

CLIENTE(1001)

Se existem.


SSRANGE salva vidas.


Quando usar DB2

Tabela enorme.

Não use OCCURS.


Quando usar OCCURS

Lookup.

UF.

IR.

CEP.

Parâmetros.

Cache.


Arquitetura Moderna

Hoje.

Programadores resolvem LeetCode.


Veteranos Mainframe.

Já faziam isso.

Em 1982.


Usando.

COBOL

VSAM

JCL

DFSORT

ICETOOL

DB2


Curiosidade Histórica

Década de 70.

IBM chamava isso.

Table Processing


Década de 80.

Performance Tuning.


Década de 90.

Binary Search.

Virou padrão.

Grandes bancos.


Década de 2000.

Java descobriu.

Collections.


Década de 2020.

LeetCode descobriu.


Década de 2030.

IA vai descobrir.

Que um programador COBOL aposentado em Campinas ou Itatiba já utilizava Prefix Sum desde 1989.


Easter Egg Bellacosa

Existe uma antiga profecia dos Sysprogs.

Ela diz:

"Chegará um dia em que um desenvolvedor júnior perguntará ao arquiteto qual algoritmo usar."

O arquiteto responderá:

Use Sliding Window.

O desenvolvedor pesquisará durante três horas.

Assistirá quatro vídeos.

Lerá cinco artigos.

Abrirá o ChatGPT.

Fará benchmarking.

Criará um POC.

E finalmente implementará.

Enquanto isso, um programador COBOL veterano sentado ao lado apenas dirá:

Ah...

Você queria uma média móvel.

Faço isso desde 1993.

Está no PROGFINC.

Linha 287.

Não mexe.

Funciona.

E agora pega um café.

Porque no Reino do Mainframe, muitas vezes os algoritmos mais modernos apenas receberam nomes mais bonitos para técnicas que os Cavaleiros COBOL já dominavam há décadas.


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