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

sexta-feira, 14 de maio de 2004

⚔️ SATOU PENDRAGON E A DUNGEON DOS ALGORITMOS DE ORDENAÇÃO

  

Bellacosa Mainframe e alguns algoritmos de ordenação

☕ Um Café no Bellacosa Mainframe

⚔️ SATOU PENDRAGON E A DUNGEON DOS ALGORITMOS DE ORDENAÇÃO

Bubble Sort, Selection Sort, Insertion Sort, Quicksort, Big-O, recursividade, memória, I/O, SORT, Db2 e o dia em que um programador COBOL descobriu que ORDER BY não era magia.



🎬 PRÓLOGO — SATOU ENCONTROU UM VETOR DESORDENADO

Satou Pendragon já havia enfrentado monstros, labirintos, exércitos e problemas que normalmente exigiriam um grupo inteiro de aventureiros.

Naquela manhã, entretanto, encontrou algo aparentemente muito mais simples:

8  3  7  1  9  2  5

— Satou, precisamos colocar isso em ordem.

O jovem programador COBOL que o acompanhava olhou para a tela.

— Fácil! Coloco em um banco de dados e faço:

SELECT *
FROM TABELA
ORDER BY VALOR;

Satou sorriu.

— E quem você acha que executa o ORDER BY?

Silêncio.

Alguma coisa precisava comparar aqueles valores, movimentá-los e descobrir uma ordem.

Talvez fosse o banco.

Talvez uma biblioteca.

Talvez uma utility.

Talvez o runtime.

Mas o trabalho não desapareceu.

Apenas foi escondido por uma camada de abstração.

Bem-vindo à dungeon dos algoritmos de ordenação.

E cuidado.

O primeiro monstro parece uma bolha.



🏰 CAPÍTULO 1 — QUANDO O PROGRAMADOR PRECISAVA SABER ORDENAR

Durante muito tempo, classificação — ou sorting — fazia parte do repertório básico de praticamente qualquer programador.

Imagine um arquivo contendo:

0007 SILVA       350
0002 SOUZA       120
0009 ALMEIDA     870
0001 COSTA       440

Precisamos gerar um relatório ordenado pelo código do cliente:

0001 COSTA       440
0002 SOUZA       120
0007 SILVA       350
0009 ALMEIDA     870

Hoje podemos pensar imediatamente em SQL, frameworks, bibliotecas ou ferramentas especializadas.

Mas computadores não nasceram sabendo ordenar.

Alguém precisa decidir:

  1. quais elementos comparar;

  2. quando trocar elementos;

  3. quantas vezes repetir a operação;

  4. quanta memória utilizar;

  5. como tratar dados maiores que a memória;

  6. o que fazer quando existem valores repetidos;

  7. quando considerar o trabalho terminado.

Com o crescimento de sistemas gerenciadores de banco de dados e produtos como ADABAS, Db2 e, no universo da microinformática, dBASE, parte dessa responsabilidade deixou de aparecer diretamente no programa de aplicação.

O algoritmo, porém, não morreu.

Ele mudou de endereço.



🧙 CAPÍTULO 2 — ABSTRAÇÃO NÃO É TELETRANSPORTE

Nosso programador iniciante pergunta:

— Então eu realmente não preciso saber isso. O Db2 resolve.

Satou pega uma caneca de café.

— Quando você usa uma ponte, não precisa construir uma ponte. Mas continua sendo útil saber que existe alguma coisa segurando você sobre o rio.

Essa é uma excelente forma de compreender abstração.

Quando escrevemos:

SELECT *
FROM CLIENTES
ORDER BY NOME;

não estamos dizendo:

"Ordenação deixou de existir."

Estamos dizendo:

"Delego a responsabilidade de descobrir uma boa estratégia de ordenação para outra camada."

O mesmo acontece quando utilizamos uma utility de SORT no mainframe.

O desenvolvedor pode especificar as chaves e deixar uma infraestrutura altamente otimizada realizar o trabalho.

Isso é ótimo.

Reutilizar software especializado é engenharia, não preguiça.

O problema começa quando abstração vira desconhecimento.

Um programador não precisa implementar todos os algoritmos que utiliza.

Mas deveria compreender suficientemente bem os fundamentos para perceber quando uma operação aparentemente inocente pode custar uma fortuna em CPU, memória, I/O ou tempo.



🫧 CAPÍTULO 3 — O PRIMEIRO MONSTRO É UMA BOLHA

Bubble Sort é provavelmente um dos algoritmos de ordenação mais conhecidos por estudantes.

Sua ideia é extremamente simples.

Considere:

5  3  8  1  4

Compare os dois primeiros:

5 3

Estão na ordem errada.

Troque:

3 5 8 1 4

Agora compare:

5 8

Estão corretos.

Depois:

8 1

Troque:

3 5 1 8 4

Finalmente:

8 4

Troque:

3 5 1 4 8

Percebeu?

O 8 foi caminhando em direção ao final.

Ele "borbulhou".

Daí o nome Bubble Sort.

Podemos imaginar o algoritmo em pseudocódigo:

REPITA

    PARA CADA PAR DE ELEMENTOS VIZINHOS

        SE ESQUERDA > DIREITA
            TROQUE
        FIM-SE

    FIM-PARA

ATÉ ESTAR ORDENADO

A grande virtude do Bubble Sort não é performance.

É didática.

Ele permite enxergar claramente:

  • comparação;

  • troca;

  • passagem;

  • ordenação parcial;

  • condição de término.

Para quem está começando em COBOL, é uma excelente maneira de compreender arrays, índices e estruturas repetitivas.



⚡ CAPÍTULO 4 — A BANDEIRA QUE SALVA O BUBBLE

Satou encontra:

1 2 3 4 5 6 7 8 9

O aprendiz começa outra sequência enorme de comparações.

— Pare.

— Mas ainda temos várias passadas!

— Você trocou alguma coisa na primeira?

— Não.

— Então por que continuar?

Aqui surge uma pequena otimização extremamente instrutiva.

Criamos uma variável:

HOUVE-TROCA

No começo de cada passada:

HOUVE-TROCA = NÃO

Quando houver troca:

HOUVE-TROCA = SIM

No final:

SE HOUVE-TROCA = NÃO
    TERMINAR

Em COBOL, conceitualmente poderíamos possuir algo semelhante a:

01 WS-HOUVE-TROCA PIC X VALUE 'N'.
   88 HOUVE-TROCA VALUE 'S'.
   88 NAO-HOUVE-TROCA VALUE 'N'.

Essa pequena mudança ensina uma gigantesca lição de engenharia:

Não execute trabalho que você já sabe ser desnecessário.

Guarde essa frase.

Ela reaparecerá em SQL, batch, APIs, loops, VSAM, Db2 e praticamente todo sistema que você conhecer.


🎯 CAPÍTULO 5 — SELECTION SORT E O CAÇADOR DO MENOR

Selection Sort utiliza outra filosofia.

Temos:

8 3 7 2 9

Perguntamos:

Qual é o menor elemento?

Resposta:

2

Colocamos o 2 na primeira posição:

2 3 7 8 9

Agora a primeira posição está resolvida.

Passamos a procurar o menor valor entre as posições restantes.

A filosofia é:

ENCONTRE O MENOR
       ↓
COLOQUE-O NA POSIÇÃO CORRETA
       ↓
IGNORE A REGIÃO JÁ RESOLVIDA
       ↓
REPITA

É extremamente intuitivo.

Imagine organizar livros.

Você procura o primeiro alfabeticamente e coloca na primeira posição.

Depois procura o segundo.

Depois o terceiro.

E assim sucessivamente.

Mas existe um detalhe.

Se recebermos:

1 2 3 4 5 6 7 8 9

Selection Sort tradicional ainda precisa procurar repetidamente o menor elemento da parte restante.

O vetor estar ordenado não produz a mesma vantagem que vimos no Bubble otimizado ou veremos no Insertion Sort.


🃏 CAPÍTULO 6 — INSERTION SORT E AS CARTAS DE SATOU

Satou tira algumas cartas.

Na mão já existem:

3 7 9

Ele recebe:

5

Onde colocar?

Entre 3 e 7.

Resultado:

3 5 7 9

Recebe outra:

4

Resultado:

3 4 5 7 9

Essa é a essência do Insertion Sort.

Em vez de reorganizar tudo a cada instante, mantemos uma parte já ordenada.

Para cada novo elemento:

  1. guardamos o valor;

  2. procuramos sua posição;

  3. deslocamos os maiores;

  4. inserimos o valor;

  5. ampliamos a região ordenada.

Existe uma elegância enorme nessa estratégia.

Principalmente quando os dados já estão quase ordenados.

Imagine:

1 2 3 4 5 7 6 8 9

Existe praticamente apenas uma pequena correção.

Insertion Sort consegue explorar muito bem esse tipo de situação.

E aqui aparece uma lição importante:

As características dos dados importam tanto quanto o algoritmo.


📐 CAPÍTULO 7 — SATOU ABRE O GRIMÓRIO DO BIG-O

Chegamos à pergunta:

Como comparar algoritmos?

Medir segundos ajuda, mas cria problemas.

Um algoritmo executado num computador de 10 MHz e outro numa CPU moderna produzirão tempos completamente diferentes.

Precisamos estudar principalmente como o trabalho cresce quando aumenta o tamanho da entrada.

É aqui que entra a notação Big-O.

Considere:

n = quantidade de elementos

Um algoritmo O(n) cresce aproximadamente de forma linear.

Se dobramos a entrada, esperamos aproximadamente dobrar a quantidade dominante de trabalho.

Já:

O(n²)

é muito mais perigoso.

Se:

n = 5.000

temos como referência:

5.000² = 25.000.000

Agora dobre:

10.000² = 100.000.000

Dobrar os dados produziu aproximadamente quatro vezes o crescimento quadrático dominante.

Bem-vindo à dungeon onde hardware caro começa a chorar.


💥 CAPÍTULO 8 — 674 SEGUNDOS CONTRA 3

No experimento histórico que inspirou nossa aventura, um vetor desordenado com aproximadamente 5.000 elementos apresentou tempos da ordem de:

Bubble       674 segundos
Selection    355 segundos
Insertion    233 segundos
Quicksort      3 segundos

Há inclusive uma provável repetição tipográfica no texto histórico, que chama o terceiro resultado novamente de seleção; pelo contexto, trata-se de inserção.

Mas observe a diferença:

674 / 3 ≈ 225

Mais de duzentas vezes.

Mesmo resultado funcional:

ENTRADA DESORDENADA
        ↓
SAÍDA ORDENADA

Engenharia completamente diferente.

Essa é uma das razões pelas quais estudar algoritmos continua sendo importante.

Dois programas podem estar funcionalmente corretos e serem economicamente muito diferentes.

Em produção, performance também custa dinheiro.


🧨 CAPÍTULO 9 — ENTRA EM CENA C. A. R. HOARE

No início da década de 1960, Tony Hoare desenvolveu o algoritmo que ficou conhecido como Quicksort.

Aqui precisamos evitar uma simplificação comum.

Quicksort não é simplesmente:

"Bubble Sort que troca elementos mais distantes."

A diferença conceitual é muito mais profunda.

Sua grande arma é o particionamento.

Considere:

9 3 7 1 8 2 5

Escolhemos um pivô.

Por exemplo:

5

Queremos reorganizar os elementos conceitualmente em três regiões:

MENORES | PIVÔ | MAIORES

Podemos chegar a algo semelhante a:

3 1 2 | 5 | 9 8 7

Observe:

3 1 2

ainda não está ordenado.

E:

9 8 7

também não.

Mas aprendemos algo extremamente poderoso:

todos da esquerda < 5
todos da direita  > 5

O problema original foi quebrado.


🪆 CAPÍTULO 10 — RECURSIVIDADE: UMA DUNGEON DENTRO DA DUNGEON

Agora aplicamos Quicksort novamente à esquerda:

3 1 2

E novamente à direita:

9 8 7

Temos conceitualmente:

QUICKSORT
    │
    ├── PARTICIONE
    │
    ├── QUICKSORT(esquerda)
    │
    └── QUICKSORT(direita)

Isso é um exemplo clássico de divide and conquer:

Divida um grande problema em problemas menores da mesma natureza.

Imagine:

5000
 ↓
2500
 ↓
1250
 ↓
625
 ↓
312
 ↓
156
 ↓
78
 ↓
39
 ↓
19
 ↓
9
 ↓
4
 ↓
2
 ↓
1

Quando as divisões são razoavelmente equilibradas, a profundidade cresce aproximadamente como:

log₂(n)

E daí emerge o comportamento esperado clássico do Quicksort:

O(n log n)

Isso explica por que ele pode esmagar algoritmos quadráticos em conjuntos grandes.


☠️ CAPÍTULO 11 — QUICKSORT TAMBÉM TEM UM CHEFÃO SECRETO

Não saia dizendo:

"Quicksort sempre é O(n log n)."

Não é.

O pior caso do Quicksort clássico é:

O(n²)

Tudo depende da estratégia de particionamento e, entre outros fatores, da escolha do pivô.

Se produzirmos repetidamente divisões terríveis:

1 | 999 elementos

depois:

1 | 998

depois:

1 | 997

perdemos grande parte da vantagem do divide and conquer.

Essa é uma excelente aula sobre análise de algoritmos:

melhor caso
caso médio
pior caso

não são necessariamente iguais.


🧪 CAPÍTULO 12 — OS QUATRO VETORES DA DUNGEON

O experimento original utilizava quatro tipos de vetor.

Isso é muito mais sofisticado do que simplesmente testar números aleatórios.

Vetor 1 — crescente

1 2 3 4 5 6 7 8

Já está ordenado.

Vetor 2 — aleatório

7 2 9 1 8 4 3

Representa um caso comum de benchmark.

Vetor 3 — decrescente

9 8 7 6 5 4 3 2 1

Pode ser extremamente ruim para determinadas estratégias.

Vetor 4 — quase tudo igual

55 55 55 55 44 55 55 55 55

Parece uma maluquice.

Não é.

Ele testa como o algoritmo reage a muitas chaves repetidas.

Hoje podemos pensar em:

STATUS
A
A
A
A
A
P
A
A
A

Milhões de registros podem possuir pouquíssimos valores distintos.

Um bom benchmark não pergunta apenas:

"É rápido?"

Pergunta:

"É rápido em quais condições?"

Essa pergunta deveria estar escrita na parede de toda War Room.


📊 CAPÍTULO 13 — O MAPA DOS QUATRO AVENTUREIROS

Como aproximação didática:

AlgoritmoMelhor casoMédioPior
Bubble otimizadoO(n)O(n²)O(n²)
SelectionO(n²)O(n²)O(n²)
InsertionO(n)O(n²)O(n²)
QuicksortO(n log n) esperadoO(n log n)O(n²)

Mas Satou imediatamente avisa:

— Não transforme essa tabela numa religião.

Big-O descreve crescimento assintótico.

Não conta sozinho toda a história.


🧠 CAPÍTULO 14 — BIG-O NÃO CONHECE SEU DATACENTER

Imagine dois algoritmos:

A → O(n log n)
B → O(n²)

A parece automaticamente melhor.

Para conjuntos suficientemente grandes, o crescimento assintótico favorece A.

Mas sistemas reais possuem:

  • constantes;

  • overhead;

  • chamadas de função;

  • cache;

  • branch prediction;

  • alocação;

  • movimentação de memória;

  • recursividade;

  • I/O;

  • características específicas do hardware.

Para:

n = 5

um algoritmo teoricamente inferior pode ser mais rápido simplesmente por ser muito simples.

Essa observação explica uma coisa aparentemente absurda:

algoritmos sofisticados podem recorrer ao Insertion Sort quando os subconjuntos ficam pequenos.

Não existe contradição.

Existe engenharia.


🧾 CAPÍTULO 15 — ESTABILIDADE: O DETALHE QUE O RELATÓRIO DESCOBRE

Imagine:

ANA       100
CARLOS    200
MARIA     100
JOÃO      300
PEDRO     100

Ordenamos por valor.

Um sort estável pode produzir:

ANA       100
MARIA     100
PEDRO     100
CARLOS    200
JOÃO      300

ANA, MARIA e PEDRO possuíam a mesma chave 100.

Sua ordem relativa foi preservada.

Isso é estabilidade.

Agora imagine sistemas empresariais contendo:

DATA
HORA
CONTA
SEQUÊNCIA
STATUS

De repente estabilidade deixa de ser curiosidade acadêmica.

Ela pode afetar o resultado esperado de processamentos posteriores.

Bubble e Insertion podem ser implementados de forma estável.

Selection Sort tradicional e Quicksort clássico normalmente não são estáveis.

Moral:

"Está ordenado" não descreve sozinho todas as propriedades relevantes da ordenação.


💾 CAPÍTULO 16 — SATOU ENCONTRA UM ARQUIVO MAIOR QUE A MEMÓRIA

Nosso aprendiz está confiante.

— Entendi! Carrego o arquivo na memória e aplico Quicksort.

Satou olha para o tamanho:

1 TB

Depois olha para a memória disponível ao processo:

16 GB

— Temos um pequeno problema.

Não conseguimos simplesmente carregar tudo.

Aqui aparece a diferença entre ordenação interna e ordenação externa.

Ordenação interna trabalha com dados que podem ser tratados essencialmente na memória disponível.

Ordenação externa precisa considerar armazenamento secundário e I/O.

Uma estratégia conceitual seria:

ARQUIVO GIGANTE
      │
      ├── BLOCO A → SORT ──┐
      ├── BLOCO B → SORT ──┤
      ├── BLOCO C → SORT ──┼── MERGE → RESULTADO
      └── BLOCO D → SORT ──┘

Ordenamos pedaços.

Depois fazemos merge.

É por isso que famílias de algoritmos de fusão tiveram enorme importância histórica em processamento de arquivos.


📼 CAPÍTULO 17 — QUANDO O SORT TINHA CHEIRO DE FITA MAGNÉTICA

Aqui existe uma curiosidade histórica deliciosa.

Durante a era de processamento sequencial em fitas magnéticas, o acesso aos dados possuía características muito diferentes das de RAM moderna.

Não dava para tratar fita como um array e simplesmente saltar alegremente para qualquer elemento.

Isso tornou estratégias de merge externo fundamentais.

Daí encontramos nomes históricos como:

fusão direta
fusão natural
fusão balanceada multidirecional
classificação polifásica

Esses algoritmos não são fósseis inúteis.

Eles mostram que algoritmos são profundamente influenciados pelo meio físico no qual os dados existem.

Memória muda algoritmo.

Storage muda algoritmo.

Rede muda algoritmo.

Hardware muda algoritmo.

Mas a necessidade de pensar permanece.


🖥️ CAPÍTULO 18 — O PROGRAMADOR COBOL DESCOBRE O SORT

Chegamos ao nosso território.

Em COBOL podemos encontrar construções como:

SORT ARQUIVO-SORT
    ON ASCENDING KEY CLIENTE
    USING ARQUIVO-ENTRADA
    GIVING ARQUIVO-SAIDA.

E no ambiente mainframe existem utilities especializadas de sorting.

Isso significa que deveríamos implementar Quicksort manualmente em todo programa COBOL?

Claro que não.

Conhecer Quicksort e reinventar Quicksort são coisas completamente diferentes.

Se uma infraestrutura de SORT altamente otimizada existe, normalmente queremos aproveitá-la.

O programador especifica:

ENTRADA
CHAVE
ORDEM
SAÍDA

e deixa uma infraestrutura especializada decidir detalhes de execução.

Mas o profissional experiente ainda pensa:

Quantos registros?

Qual o tamanho do registro?

Quanto workspace?

Quanto I/O?

Quais campos são chave?

Há registros duplicados?

Qual a janela batch?

Existe pressão de CPU?

Existe contenção de storage?

É aí que o programador deixa de ser simplesmente alguém que conhece sintaxe COBOL e começa a entender sistemas.


🗄️ CAPÍTULO 19 — O DB2 NÃO USA MAGIA NEGRA

Nosso aprendiz tenta escapar novamente:

SELECT *
FROM TRANSACOES
ORDER BY DATA;

— Pronto.

Satou pergunta:

— Existe índice?

— Não sei.

— Quantas linhas?

— Não sei.

— Qual access path?

— Não sei.

— Houve sort?

— Não sei.

Temos um problema maior que sorting.

Temos programação por esperança.

Um SGBD possui um otimizador justamente para analisar alternativas.

Dependendo da consulta, estruturas existentes e estatísticas, pode ser possível aproveitar uma ordem já fornecida por determinado access path ou pode ser necessário realizar trabalho adicional de ordenação.

Portanto:

ORDER BY

não significa:

CUSTO = ZERO

Significa:

EU PRECISO DO RESULTADO NESTA ORDEM.

Como obter essa ordem é outra história.


⚙️ CAPÍTULO 20 — CPU NÃO É O ÚNICO CHEFÃO

O artigo histórico media segundos numa máquina de aproximadamente 10 MHz.

Era uma forma perfeitamente válida de observar comportamento naquele ambiente.

Hoje, entretanto, precisamos pensar em muito mais coisas.

Considere:

CPU
MEMÓRIA
CACHE
STORAGE
I/O
PARALELISMO
COMPRESSÃO
REDE

Em grandes processamentos empresariais, movimentar dados pode custar mais que compará-los.

Imagine ordenar centenas de gigabytes.

A pergunta deixa de ser apenas:

"Quantas comparações?"

Passa a ser:

"Quanto dado estou movimentando?"

É por isso que otimização moderna não pode ser reduzida à contagem de instruções.

No mainframe, essa conversa rapidamente encontra:

SMF
RMF
WLM
CPU
I/O
elapsed time
service classes
batch window

O algoritmo encontra Capacity Planning.

Satou acaba de chegar à War Room.


🔢 CAPÍTULO 21 — RADIX SORT ENTRA PELA PORTA DOS FUNDOS

Existe outro detalhe fascinante.

Algoritmos baseados exclusivamente em comparação possuem uma barreira teórica da ordem de:

Ω(n log n)

para o problema geral de sorting por comparação.

Mas então alguém pergunta:

— E se eu souber alguma coisa sobre a chave?

Excelente pergunta.

Imagine:

00000017
00000003
00000122
00000045

Algoritmos como Radix Sort exploram a estrutura das próprias chaves.

Em vez de depender exclusivamente de:

A < B?

podem trabalhar com posições/dígitos.

Também encontramos:

Counting Sort
Bucket Sort
Radix Sort

Isso ensina uma lição maravilhosa:

Conhecimento sobre os dados pode mudar o algoritmo disponível.

Para um programador acostumado com campos fixos, PICs, chaves e registros estruturados, isso deveria soar bastante familiar.


🐚 CAPÍTULO 22 — A FAMÍLIA É MUITO MAIOR

Os quatro personagens principais não estão sozinhos.

Existe uma guilda inteira:

Bubble Sort
Selection Sort
Insertion Sort
Quicksort
Shellsort
Heapsort
Merge Sort
Radix Sort
Counting Sort
Bucket Sort
Cocktail/Shaker Sort

Cada um nasceu de determinadas ideias e compromissos.

Shellsort trabalha com inserções usando intervalos que diminuem.

Heapsort explora uma estrutura de heap.

Merge Sort divide e depois combina resultados ordenados.

Cocktail/Shaker Sort lembra Bubble, mas percorre alternadamente direções.

E algoritmos modernos podem ser híbridos.

A frase atribuída no texto antigo a respeito de bons programadores conhecerem várias classificações, mas utilizarem a própria, captura uma ideia interessante quando interpretada com cuidado:

conhecer algoritmos oferece repertório para compreender e escolher ferramentas — não obrigação de reinventá-las.


🤖 CAPÍTULO 23 — A IA APARECE NA DUNGEON

Finalmente nosso aprendiz encontra uma solução definitiva.

— Satou! Agora temos IA!

Ele abre seu assistente favorito:

"Ordene estes dados da maneira mais eficiente."

Código aparece imediatamente.

Problema resolvido?

Satou começa o interrogatório:

Quantos registros?

— Não sei.

Cabe na memória?

— Não sei.

Existem duplicatas?

— Não sei.

Precisa ser estável?

— Não sei.

Está quase ordenado?

— Não sei.

Qual o SLA?

— Não sei.

É batch ou online?

— Não sei.

Quanto I/O podemos consumir?

— Não sei.

Satou fecha o notebook.

A IA consegue produzir código.

Mas alguém ainda precisa compreender o problema.


🧠 CAPÍTULO 24 — QUANTO MAIS ALTA A ABSTRAÇÃO, MAIS IMPORTANTE O FUNDAMENTO

Observe nossa viagem:

ASSEMBLY
      ↓
LINGUAGENS DE ALTO NÍVEL
      ↓
COBOL
      ↓
UTILITIES
      ↓
SGBDs
      ↓
FRAMEWORKS
      ↓
CLOUD
      ↓
IA GENERATIVA

A cada camada, mais detalhes são escondidos.

Isso é maravilhoso.

É assim que conseguimos construir sistemas cada vez maiores.

Mas existe uma armadilha:

ABSTRAÇÃO ≠ INEXISTÊNCIA

Quando utilizamos Db2, índices continuam existindo.

Quando utilizamos cloud, hardware continua existindo.

Quando utilizamos APIs, rede continua existindo.

Quando utilizamos IA, algoritmos continuam existindo.

Quando utilizamos SORT, alguém continua ordenando.


🧪 CAPÍTULO 25 — LABORATÓRIO PARA O PADAWAN COBOL

Quer realmente aprender?

Não apenas leia.

Experimente.

Crie quatro arrays:

VETOR-1 → crescente
VETOR-2 → aleatório
VETOR-3 → decrescente
VETOR-4 → valores repetidos

Implemente Bubble Sort.

Depois acrescente:

HOUVE-TROCA

Conte:

comparações
trocas
passadas

Não meça apenas segundos.

Depois implemente Selection Sort.

Faça a mesma instrumentação.

Depois Insertion Sort.

Compare.

Para Quicksort, se estiver começando em COBOL, primeiro implemente em pseudocódigo e acompanhe manualmente o particionamento.

Pegue:

9 3 7 1 8 2 5

Escolha:

PIVÔ = 5

E desenhe no papel:

< 5 | 5 | > 5

Depois repita para cada lado.

Você começará a enxergar o algoritmo.

Esse é o momento em que sorting deixa de ser uma receita decorada e vira raciocínio.


🥚 EASTER EGG — O ELEMENTO 03:17

Nos testes, Satou encontra:

55 55 55 55 55 44 55 55 55

— Quem colocou esse 44 aí?

O operador responde:

— Não sei. Apareceu às 03:17.

Silêncio na War Room.

Todo veterano sabe:

se alguma coisa inexplicável aconteceu às 03:17, procure o job batch.

E, por favor, não reinicie nada antes de guardar as evidências.


💡 CAPÍTULO 26 — SETE DICAS PARA QUEM ESTÁ COMEÇANDO

Primeira: não decore apenas Big-O. Entenda por que o algoritmo cresce daquela maneira.

Segunda: teste entradas diferentes. Aleatório não representa o universo inteiro.

Terceira: conte operações. Comparações e movimentações revelam muito.

Quarta: aprenda estabilidade. Em processamento comercial ela pode importar.

Quinta: não reinvente utilities maduras sem motivo. Aprender Quicksort é excelente; substituir um SORT otimizado por seu experimento acadêmico em produção provavelmente não é.

Sexta: olhe além da CPU. Memória e I/O podem dominar o custo.

Sétima: sempre pergunte:

Qual é o tamanho real do problema?

Uma solução fantástica para 100 elementos pode ser desastrosa para 100 milhões.


🏁 EPÍLOGO — SATOU NÃO ESTAVA ENSINANDO SORT

Ao final da dungeon, nosso jovem programador COBOL olha novamente para:

8 3 7 1 9 2 5

Agora ele não vê simplesmente sete números.

Vê possibilidades.

Bubble pergunta:

Quais vizinhos estão invertidos?

Selection pergunta:

Qual elemento deveria ocupar esta posição?

Insertion pergunta:

Onde este novo elemento pertence?

Quicksort pergunta:

Como posso dividir este problema?

E essa talvez seja a maior lição de todas.

Estamos estudando quatro maneiras de ordenar dados, mas estamos aprendendo quatro maneiras de pensar.

BUBBLE
→ corrija pequenos erros locais

SELECTION
→ encontre a próxima escolha correta

INSERTION
→ mantenha uma solução parcial válida

QUICKSORT
→ divida o grande problema em problemas menores

Esses padrões reaparecem muito além de sorting.

Eles aparecem em estruturas de dados, otimização, bancos de dados, compiladores, sistemas distribuídos e engenharia de software.

O computador de 10 MHz desapareceu.

A fita magnética deixou de dominar o datacenter.

ADABAS, Db2, SQL e utilities esconderam boa parte da ordenação.

COBOL evoluiu.

Mainframes ganharam quantidades de memória e capacidade de processamento inimagináveis para os programadores daquela época.

Depois chegaram Java, Python, cloud, containers, APIs, machine learning e IA generativa.

Mas uma pergunta atravessou todas essas gerações:

Existe uma maneira mais inteligente de resolver este problema?

Essa pergunta separa conhecer sintaxe de compreender computação.

Um programador iniciante vê:

ORDER BY CLIENTE

e pensa:

"Está ordenado."

Um programador que começa a compreender sistemas olha para o mesmo comando e pergunta:

Quantos registros?

Qual access path?

Existe índice?

Houve sort?

Quanto custou?

Cabe na memória?

Quanto I/O produziu?

Qual é a distribuição das chaves?

O resultado precisa ser estável?

Existe uma estratégia melhor?

E é nesse instante que o padawan começa sua transformação.

Não porque aprendeu Bubble Sort.

Não porque decorou:

O(n²)

ou:

O(n log n)

Mas porque descobriu que todo comando simples pode esconder uma enorme quantidade de engenharia.

Satou fecha o terminal.

O batch terminou.

Na saída encontramos:

1 2 3 5 7 8 9

O aprendiz comemora.

Satou, naturalmente, pergunta:

— Quanto custou?

Bem-vindo ao mainframe.

Aqui até uma lista perfeitamente ordenada ainda pode abrir um incidente às 03:17.

sábado, 1 de janeiro de 2000

🧙‍♂️ O EX-PROGRAMADOR E A DUNGEON DO DOWNSIZING — QUANDO TRÊS 386 ENFRENTARAM UM IBM 4341

Bellacosa Mainframe e o downsize dos anos 1990

 

☕ Um Café no Bellacosa Mainframe

🧙‍♂️ O EX-PROGRAMADOR E A DUNGEON DO DOWNSIZING — QUANDO TRÊS 386 ENFRENTARAM UM IBM 4341

IBM 4341, COBOL, CICS, VSAM, 3278, NetWare, Clipper, DOS, cliente-servidor, TCO, migração — e o dia em que um ex-programador entrou em outro mundo com um laptop e descobriu que trocar o mainframe por 98 PCs não fazia os problemas desaparecerem.

Sob a tutela de A Former Programmer Enters Another World and Uses a Laptop to Hack S-Rank Mage Skills



🎬 PRÓLOGO — O EX-PROGRAMADOR ACORDOU EM 1990

O ex-programador abriu os olhos.

Não havia Wi-Fi.

Não havia GitHub.

Não havia Stack Overflow.

Não havia Docker.

Não havia Kubernetes.

Não havia Cloud.

Não havia sequer uma tomada USB onde carregar seu misterioso laptop vindo de outro mundo.

Na parede havia um terminal.

Ele olhou para o teclado.

IBM 3278.

— Onde estou?

Um analista aproximou-se carregando uma listagem COBOL de aproximadamente quatro centímetros de espessura.

— No Banco Inter-Atlântico.

— Em que ano?

— 1990.

O programador olhou novamente para o terminal.

— E onde está o computador?

O analista apontou para outra sala.

— Lá.

Era um IBM 4341.

Nosso aventureiro sorriu.

Finalmente reconhecia alguma coisa naquele mundo.

Mas então apareceu o diretor da guilda.

— Temos uma missão S-Rank.

— Qual?

— Vamos aposentar o mainframe.

Silêncio.

O programador fechou lentamente seu laptop.

A dungeon acabara de começar.



🏰 CAPÍTULO 1 — QUANDO O COMPUTADOR ERA O CASTELO

Para um programador COBOL iniciante entender o downsizing, primeiro precisa compreender como funcionava grande parte da computação empresarial antes da popularização dos PCs.

Imagine um castelo.

Dentro dele estão os recursos mais importantes do reino:

  • CPU;

  • memória;

  • discos;

  • aplicações;

  • arquivos;

  • processamento transacional;

  • segurança;

  • operação.

Esse castelo é o mainframe.

Os usuários não carregavam pequenos castelos consigo.

Eles possuíam terminais.

Podemos simplificar a arquitetura assim:

             +-------------------+
             |     IBM 4341      |
             |                   |
             | COBOL CICS VSAM   |
             +---------+---------+
                       |
                 Controladores
                       |
          +------------+------------+
          |            |            |
       3278         3278         3278

O terminal IBM 3278 não era equivalente ao PC moderno.

Ele servia principalmente como interface entre o usuário e o sistema central.

O processamento importante acontecia no ambiente central.

Isso nos leva ao primeiro conceito.

Centralização

Na arquitetura centralizada, grande parte da capacidade computacional encontra-se concentrada.

O usuário diz:

“Quero consultar a conta 12345.”

O terminal transmite a solicitação.

CICS recebe a transação.

Um programa COBOL é acionado.

O programa acessa VSAM.

O resultado retorna.

Conceitualmente:

3278
 |
 v
CICS
 |
 v
COBOL
 |
 v
VSAM
 |
 v
COBOL
 |
 v
CICS
 |
 v
3278

Para quem está começando em COBOL, guarde esse desenho.

Ele explica uma quantidade enorme da arquitetura clássica de aplicações comerciais.



⚔️ CAPÍTULO 2 — COBOL, CICS E VSAM: OS TRÊS MAGOS DO CASTELO

O relato do Banco Inter-Atlântico menciona três tecnologias importantíssimas:

COBOL, CICS e VSAM.

Elas não são a mesma coisa.

COBOL

COBOL é a linguagem na qual podemos escrever a lógica de negócio.

Por exemplo:

IF SALDO-CONTA >= VALOR-SAQUE
    SUBTRACT VALOR-SAQUE
        FROM SALDO-CONTA
ELSE
    MOVE 'SALDO INSUFICIENTE'
        TO MENSAGEM
END-IF.

A regra é:

somente autorize o saque quando houver saldo suficiente.

COBOL representa a lógica.


CICS

CICS é um monitor de processamento transacional.

Imagine centenas ou milhares de usuários realizando:

consulta
depósito
saque
transferência
alteração cadastral
pagamento

simultaneamente.

Precisamos administrar essas transações.

É aí que entra o CICS.

Em uma analogia de RPG:

COBOL é o guerreiro.

VSAM é o inventário.

CICS é o mestre da dungeon coordenando quem pode fazer o quê e quando.


VSAM

VSAM fornece estruturas de armazenamento de dados muito utilizadas em sistemas mainframe.

Um programador iniciante provavelmente encontrará siglas como:

KSDS
ESDS
RRDS
LDS

Um KSDS, por exemplo, permite acessar registros através de chave.

Imagine:

000001 | MARIA | 1500.00
000002 | JOAO  | 3270.00
000003 | ANA   | 4341.00

Você fornece a chave:

000002

e procura o registro correspondente.

Portanto, quando o texto diz:

COBOL/CICS e VSAM

não está simplesmente despejando três siglas.

Está descrevendo boa parte de uma arquitetura transacional.



🧟 CAPÍTULO 3 — O MONSTRO NÃO ERA NECESSARIAMENTE O MAINFRAME

O Banco Inter-Atlântico enfrentava problemas.

Entre eles:

  • sistemas obsoletos;

  • analistas consumidos por manutenção;

  • usuários insatisfeitos;

  • upgrades caros.

É extremamente tentador concluir:

“O IBM 4341 era o problema.”

Nosso ex-programador levantaria a mão imediatamente.

— Prova?

Silêncio na War Room.

Essa pergunta é fundamental.

Porque:

HARDWARE ANTIGO
       ≠
SOFTWARE RUIM
       ≠
PROCESSO RUIM
       ≠
ARQUITETURA RUIM
       ≠
DÍVIDA TÉCNICA

Eles podem coexistir.

Mas não são sinônimos.

Imagine este código:

IF WS-TIPO = 'A'
    PERFORM 7000-ROTINA-ANTIGA
ELSE
    IF WS-TIPO = 'B'
        PERFORM 7100-ROTINA-NOVA
    ELSE
        PERFORM 7999-TRATAMENTO
    END-IF
END-IF.

Perguntamos:

Por que clientes A utilizam a rotina antiga?

Resposta:

— Ninguém sabe.

Quem escreveu?

— Almeida.

Onde está Almeida?

— Saiu da empresa em 1987.

Existe documentação?

— Talvez no armário do terceiro andar.

Trocar o IBM 4341 por PCs não explica a regra.

Apenas transporta o mistério para outra plataforma.

Easter egg #1

Se encontrar no fonte:

0317-ROTINA-ESPECIAL.

não mexa antes de descobrir por quê.

Às 03:17, produção sempre cobra juros.



🖥️ CAPÍTULO 4 — SURGE UMA NOVA MAGIA: DOWNSIZING

No final dos anos 1980 e começo dos anos 1990, microcomputadores tornavam-se cada vez mais poderosos.

O raciocínio parecia irresistível.

Se um computador enorme custa muito e vários computadores pequenos custam pouco, por que não substituir o grande pelos pequenos?

Nascia a febre do:

DOWNSIZING

Não significa simplesmente:

“comprar computadores menores.”

Significa transferir workloads que antes dependiam de plataformas maiores e centralizadas para plataformas menores, frequentemente distribuídas.

A transformação conceitual era:

ANTES

Terminal
   |
Mainframe
   |
Aplicação
   |
Dados

para algo parecido com:

DEPOIS

PC ----\
PC -----+---- Rede ---- Servidor
PC ----/                 |
                         Dados

Isso é uma mudança arquitetural profunda.

O PC não é mais apenas uma janela.

Ele possui:

  • CPU;

  • RAM;

  • armazenamento;

  • sistema operacional;

  • programas;

  • capacidade de processamento local.

A inteligência começa a se espalhar.


💰 CAPÍTULO 5 — "CEM VEZES MAIS BARATO!"

O vendedor entrou na dungeon.

— Tenho uma magia capaz de reduzir o custo de processamento em até cem vezes!

Nosso ex-programador cruzou os braços.

— Qual custo?

O vendedor hesitou.

E aí encontramos uma das maiores lições do caso.

Preço de hardware não é necessariamente o mesmo que:

TCO — TOTAL COST OF OWNERSHIP

Ou Custo Total de Propriedade.

Você pode comparar:

IBM 4341
versus
386 SX

e descobrir enorme vantagem de preço para o pequeno computador.

Mas a empresa não estava adquirindo simplesmente um 386.

O ambiente terminou com:

3 servidores 386 SX

98 micros entre XT e 386 SX

2 GB de armazenamento

rede

software

suporte

Agora existem dezenas de equipamentos para administrar.

Cada PC pode precisar de:

instalação
configuração
backup
suporte
manutenção
placa de rede
sistema operacional
aplicativos
atualizações

Surge então uma verdade clássica da computação distribuída:

O custo não desaparece necessariamente. Parte dele muda de lugar.


🧙 CAPÍTULO 6 — NASCE O MAGO DO SUPORTE DE DESKTOP

No mundo 3270, o usuário possuía uma interface relativamente controlada.

Com dezenas de PCs aparecem novas aventuras:

— Meu AUTOEXEC.BAT não funciona!

— Minha placa de rede sumiu!

— Não consigo mapear o drive!

— Meu CONFIG.SYS está diferente!

— O aplicativo funciona no computador do João!

— O disquete trouxe um vírus!

— Minha impressora não imprime!

— Alguém apagou o arquivo!

Bem-vindo à computação distribuída.

Você reduziu determinado tipo de centralização.

Em compensação, criou dezenas de novos pontos que precisam ser administrados.

Esse princípio permanece válido em 2026.

Troque:

PC

por:

container
microservice
VM
pod
endpoint
cloud account

e perceberá que o problema continua reconhecível.

Distribuir processamento também significa distribuir complexidade.


🌐 CAPÍTULO 7 — NETWARE: A ESTRADA ENTRE AS VILAS

O banco adotou Novell NetWare 386.

Para entender sua importância, imagine dezenas de PCs isolados:

PC     PC     PC     PC

Eles são ilhas.

Uma LAN cria estradas:

 PC \
 PC  \
 PC --- REDE --- SERVIDOR
 PC  /
 PC /

O servidor pode centralizar recursos como:

arquivos
diretórios
aplicações
impressoras
autenticação

NetWare tornou-se extremamente importante nesse período.

Era a infraestrutura que permitia transformar um conjunto de PCs em um ambiente corporativo conectado.


🔌 CAPÍTULO 8 — A REDE TAMBÉM PRECISA DE ARQUITETURA

Uma recomendação do relato parece banal:

“Planejar a rede antes de instalar.”

Não é banal.

Você precisa pensar em:

topologia
cabeamento
servidores
protocolos
capacidade
distância
crescimento
backup
segurança
impressão
falhas

Até a instalação elétrica entra na arquitetura.

Antes:

CPD
 |
infraestrutura especializada
 |
IBM

Agora:

Sala 1 → PCs
Sala 2 → PCs
Sala 3 → PCs
Gerência → PCs
Operações → PCs
Servidores → outra sala

Computação distribuída significa também distribuir:

energia, cabeamento e pontos de falha.

Não basta comprar 98 computadores e gritar:

“Transformação digital!”


💾 CAPÍTULO 9 — 2 GB ERA MUITA COISA

O jovem aventureiro de 2026 abriu seu laptop.

— Dois gigabytes? Meu celular usa isso para...

O mago interrompeu:

— Estamos em 1991.

Esse contexto é essencial.

Suponha registros comerciais com aproximadamente 200 bytes.

Um milhão deles representaria aproximadamente:

200 × 1.000.000
=
200.000.000 bytes

aproximadamente 200 MB em uma conta simplificada.

Dois gigabytes podiam armazenar enorme quantidade de dados estruturados daquela época.

Isso ensina algo importante:

Nunca avalie uma arquitetura histórica usando apenas os padrões de consumo atuais.

Um arquivo VSAM com milhões de registros comerciais pode representar enorme valor empresarial sem possuir terabytes.

Valor do dado não é proporcional ao tamanho do arquivo.


🧰 CAPÍTULO 10 — CLIPPER ENTRA NA GUILDA

Outro nome importante no relato é Clipper.

Clipper tornou-se muito conhecido no desenvolvimento de aplicações comerciais para microcomputadores.

Era comum trabalhar com estruturas como:

CLIENTES.DBF
CONTAS.DBF
MOVIMENTO.DBF

Para alguém vindo de ambientes mais centralizados, desenvolver diretamente no PC podia produzir uma enorme sensação de liberdade.

O ciclo podia parecer:

EDITAR
  ↓
COMPILAR
  ↓
EXECUTAR
  ↓
TESTAR
  ↓
CORRIGIR

Tudo perto do desenvolvedor.

Compare isso mentalmente com processos centralizados de desenvolvimento, compilação e implantação.

Não é difícil compreender por que os micros eram vistos como libertadores.


🪟 CAPÍTULO 11 — POR QUE DOS E NÃO UMA INTERFACE GRÁFICA?

Aqui existe uma decisão arquitetural muito interessante.

O banco tinha pressa.

Tempo era crítico.

Então escolheu DOS em vez de perseguir imediatamente um ambiente gráfico.

Para o arquiteto moderno, isso ensina:

Não escolha uma tecnologia simplesmente porque ela parece mais moderna. Escolha-a porque atende aos requisitos.

GUI poderia significar:

mais memória
hardware melhor
novo treinamento
novas ferramentas
maior complexidade

DOS já era conhecido e leve.

O objetivo era migrar.

Não ganhar um concurso de interface.


📦 CAPÍTULO 12 — O VERDADEIRO FEITIÇO TALVEZ TENHA SIDO O PACOTE

Existe uma frase no caso que merece enorme atenção:

“adotar pacotes prontos no lugar de desenvolvimento interno.”

Isso significa que duas variáveis foram modificadas simultaneamente.

Antes:

MAINFRAME
+
SOFTWARE DESENVOLVIDO INTERNAMENTE

Depois:

MICROS/SERVIDORES
+
PACOTES

Agora alguém anuncia:

“Nossa produtividade aumentou porque abandonamos o mainframe!”

Nosso aventureiro responde:

— Como você provou isso?

Talvez a produtividade tenha aumentado porque:

  • houve menos desenvolvimento interno;

  • processos foram padronizados;

  • interfaces melhoraram;

  • aplicações antigas foram eliminadas;

  • regras foram simplificadas;

  • hardware tornou-se mais barato;

  • usuários ganharam autonomia.

Provavelmente houve contribuição de várias dessas coisas.

Arquitetura séria exige cuidado com causalidade.


👨‍💻 CAPÍTULO 13 — O CHEFÃO FINAL ERA HUMANO

O relato diz algo extraordinariamente moderno:

O maior impasse eram as pessoas.

Eis o verdadeiro S-Rank.

Não IBM.

Não COBOL.

Não CICS.

Não NetWare.

Pessoas.

Imagine um analista que passou dez anos aprendendo:

COBOL
CICS
VSAM
3270
produção
regras bancárias

Agora o diretor anuncia:

“Vamos substituir tudo.”

O analista pode ouvir algo completamente diferente:

“Tudo aquilo que você aprendeu não vale mais.”

Isso cria:

medo
resistência
insegurança
territorialismo
desmotivação

Por isso o relato enfatizava:

  • apoio da alta administração;

  • treinamento;

  • motivação;

  • comunicação da nova cultura;

  • cronogramas realistas.

Cloud, DevOps e IA continuam tropeçando exatamente nessa dungeon.


🗺️ CAPÍTULO 14 — COMO MIGRAR SEM EXPLODIR O REINO

O IBM 4341 não foi simplesmente desligado.

A migração durou 14 meses, segundo o relato.

Essa é uma pista importantíssima.

Provavelmente existiu alguma forma de coexistência entre ambientes.

Didaticamente podemos imaginar:

FASE 1

IBM 4341
COBOL/CICS/VSAM
████████████████████

NOVO
██

Depois:

FASE 2

IBM
████████████

NOVO
████████

Depois:

FASE 3

IBM
████

NOVO
████████████████

Finalmente, em julho de 1991:

IBM
OFF

NOVO AMBIENTE
████████████████████

Essa estratégia reduz o risco do temido:

BIG BANG

O Big Bang seria:

SEXTA 18:00

IBM OFF

e:

SEGUNDA 08:00

NOVO SISTEMA ON

seguido, eventualmente, por:

SEGUNDA 08:07

WAR ROOM

E, por alguma razão inexplicável:

03:17

continua sendo o horário em que tudo resolve quebrar.

Easter egg localizado. ☕


🧪 CAPÍTULO 15 — COMO EU AUDITARIA ESSA MIGRAÇÃO

Nosso ex-programador abre seu laptop.

Não vai começar copiando arquivos.

Primeiro criará um inventário.

Passo 1 — Aplicações

Sistema
Programa
Função
Usuários
Criticidade
Dependências

Passo 2 — COBOL

Catalogar:

programas
subprogramas
copybooks
interfaces
regras especiais

Passo 3 — CICS

Identificar:

transactions
programas associados
arquivos
dependências
fluxos

Passo 4 — VSAM

Catalogar:

KSDS
ESDS
RRDS
chaves
layouts
volumetria
retenção

Passo 5 — Batch

Não esqueça do batch!

Um erro clássico seria migrar apenas aquilo que o usuário vê.

O usuário vê:

TELA

mas atrás dela podem existir:

JCL
SORT
COBOL batch
arquivos
fechamentos
relatórios
conciliações

A interface é apenas a porta da dungeon.


💰 CAPÍTULO 16 — MIGRAR DINHEIRO EXIGE RECONCILIAÇÃO

Agora chegamos ao ponto mais importante para um banco.

Imagine o mainframe dizendo:

TOTAL CONTAS:
R$ 10.000.000

Depois da migração:

NOVO SISTEMA:
R$ 9.997.413

Alguém pergunta:

— Migração concluída?

Não.

Você precisa provar que os dados mantiveram:

quantidade
valor
identidade
relacionamentos
significado

Isso é reconciliação.

Podemos criar controles como:

ANTES
1.000.000 registros

DEPOIS
1.000.000 registros

Mas quantidade sozinha não basta.

Precisamos verificar também:

soma de saldos
soma de movimentos
quantidade por categoria
hashes
amostragens
totais de controle
exceções

Em sistemas financeiros:

Mover o dado não basta. É necessário demonstrar que seu significado sobreviveu à viagem.


🏦 CAPÍTULO 17 — MAS ERA UM BANCO!

Isso torna tudo mais sério.

Aplicações bancárias precisam considerar:

integridade
consistência
segurança
concorrência
auditoria
disponibilidade
recuperação
backup
transações

Suponha:

Conta A = 1000
Conta B = 500

Transferência:

A → B = 200

Precisamos terminar com:

A = 800
B = 700

Não podemos aceitar:

A = 800
B = 500

porque o sistema caiu no meio.

Nem:

A = 1000
B = 700

Senão acabamos de criar dinheiro.

É por isso que processamento transacional não pode ser reduzido à pergunta:

“Qual computador é mais rápido?”

Existem propriedades muito mais importantes.


⚖️ CAPÍTULO 18 — MAINFRAME CONTRA PC É A PERGUNTA ERRADA

Um iniciante frequentemente procura respostas absolutas:

Mainframe é melhor?

Cloud é melhor?

Microservices são melhores?

PC é melhor?

A arquitetura responde:

Depende do workload.

Considere:

volume
transações
latência
segurança
disponibilidade
custo
crescimento
equipe
software
integração
regulação

Então:

WORKLOAD
   +
REQUISITOS
   +
RISCOS
   +
CUSTOS
   +
PESSOAS
   =
ARQUITETURA ADEQUADA

O Banco Inter-Atlântico possuía apenas 25 terminais 3278 no ambiente descrito.

Talvez uma infraestrutura menor realmente oferecesse excelente relação custo-benefício.

Isso não demonstra universalmente:

PC > MAINFRAME

Da mesma maneira que uma grande instalação financeira não demonstra:

MAINFRAME > TUDO

Arquitetura não é torcida de futebol.


🔄 CAPÍTULO 19 — E ENTÃO O PÊNDULO VOLTOU

Agora vem a ironia histórica.

Durante décadas fizemos:

MAINFRAME
   |
TERMINAL

Depois:

PC
 |
SERVIDOR

Depois:

BROWSER
 |
WEB SERVER
 |
DATABASE

Depois:

SMARTPHONE
 |
INTERNET
 |
CLOUD

E hoje temos:

NOTEBOOK
   |
HTTPS
   |
API
   |
LOAD BALANCER
   |
CONTAINER
   |
DATABASE

Nosso ex-programador olha para isso.

Depois olha para:

3278
 |
CICS
 |
COBOL
 |
VSAM

E sorri.

Não são arquiteturas tecnicamente equivalentes.

Mas existe uma ironia conceitual deliciosa.

O usuário continua muitas vezes diante de uma interface local que depende de recursos computacionais remotos.


☁️ CAPÍTULO 20 — CLOUD NÃO É UM MAINFRAME GIGANTE, MAS...

Precisamos evitar uma simplificação enganosa.

Cloud não é mainframe.

As arquiteturas, modelos operacionais, virtualização, redes, elasticidade, software e economia são diferentes.

Mas existe uma semelhança econômica interessante:

recursos caros são concentrados e compartilhados.

No passado:

Muitos usuários
      ↓
   MAINFRAME

Hoje:

Milhões de clientes
       ↓
DATACENTERS / CLOUD REGIONS

Portanto, depois de décadas celebrando a descentralização, construímos alguns dos maiores centros de processamento da história humana.

O pêndulo não voltou ao mesmo lugar.

Mas voltou a passar perto.


👻 CAPÍTULO 21 — O MAINFRAME NÃO MORREU

Durante os anos do downsizing, era fácil imaginar:

“Mais alguns anos e ninguém precisará dessas máquinas.”

Isso não aconteceu.

O que realmente perdeu força foi outra ideia:

todo processamento empresarial precisa morar no mainframe.

Essa ideia realmente foi derrotada.

Passamos a construir ambientes híbridos:

MAINFRAME
     |
     +---- API
     |
     +---- MQ
     |
     +---- Kafka
     |
     +---- Cloud
     |
     +---- Mobile
     |
     +---- Analytics
     |
     +---- IA

O mainframe deixa de precisar representar:

“toda a computação da empresa”

e pode representar:

“um motor especializado dentro de um ecossistema maior.”

Essa diferença é fundamental.


🧠 CAPÍTULO 22 — DOWNSIZING, CLOUD E IA ENSINAM A MESMA LIÇÃO

1991:

“Vamos abandonar o mainframe porque micros são mais baratos.”

2015:

“Vamos colocar tudo na cloud porque será mais barato.”

2026:

“Vamos colocar IA em tudo porque aumentará a produtividade.”

Nosso aventureiro pergunta nas três ocasiões:

— Você mediu?

Essa talvez seja a maior skill S-Rank de arquitetura.

Não acreditar cegamente.

Medir.

Para downsizing:

TCO
disponibilidade
produtividade
suporte
incidentes
tempo de resposta

Para cloud:

compute
storage
network
egress
observabilidade
operações
licenciamento

Para IA:

qualidade
tempo economizado
erros
revisão humana
tokens
risco
governança

Tecnologia nova não elimina engenharia.


🧙 CAPÍTULO 23 — AS DEZ REGRAS DO EX-PROGRAMADOR

Antes de abandonar a dungeon, nosso aventureiro deixou dez regras escritas na parede:

  1. Nunca confunda hardware antigo com arquitetura ruim.

  2. Nunca confunda hardware barato com operação barata.

  3. Descubra o workload antes de escolher a plataforma.

  4. Inventarie antes de migrar.

  5. Entenda as regras de negócio escondidas no COBOL.

  6. Não esqueça batch, interfaces e arquivos.

  7. Reconcilie os dados depois da migração.

  8. Planeje coexistência e rollback.

  9. Treine as pessoas antes de culpá-las pela resistência.

  10. Meça o resultado antes de declarar vitória.

Depois acrescentou uma décima primeira:

Se alguém disser que uma nova tecnologia vai resolver todos os problemas, verifique primeiro se ele está vendendo essa tecnologia.


🥚 EASTER EGG — O PROGRAMA COBOL ESQUECIDO

Trinta e cinco anos depois, um jovem desenvolvedor encontra um programa antigo:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. BIA0317.

      *--------------------------------------------*
      * BANCO INTER-ATLANTICO
      * NAO REMOVER SEM CONSULTAR OPERACOES
      * MIGRACAO - 1991
      *--------------------------------------------*

       PROCEDURE DIVISION.

           DISPLAY 'HELLO, OTHER WORLD'.

           STOP RUN.

Ele abre um chamado:

“Alguém sabe por que isso ainda existe?”

Um veterano responde:

“Não mexa.”

— Por quê?

— Ninguém sabe.

O ciclo está completo.


☕ EPÍLOGO — ACREDITE SE QUISER!

Em julho de 1991, segundo o relato histórico, o IBM 4341 foi finalmente desativado depois de aproximadamente 14 meses de migração.

No lugar daquele ambiente centralizado havia redes NetWare, três servidores 386 SX e quase uma centena de micros.

Os usuários estavam mais satisfeitos.

O custo teria diminuído.

A expansão continuava.

E o autor da época encerrou praticamente piscando para o leitor:

“Acredite se quiser!”

Décadas depois, aquela frase ficou ainda melhor.

Porque o mais extraordinário não é que pequenos computadores tenham conseguido substituir aquele IBM em determinado banco.

O extraordinário é perceber que a história não terminou ali.

Depois do downsizing vieram:

cliente-servidor
Internet
Web
Java
Linux
virtualização
SOA
Cloud
containers
microservices
APIs
event streaming
IA

E o velho COBOL?

Continua por aí.

CICS?

Também.

VSAM?

Também.

Mainframe?

Também.

Não porque a computação tenha parado no tempo.

Justamente pelo contrário.

A indústria descobriu que modernização nem sempre significa destruir aquilo que existia anteriormente.

Às vezes significa conectá-lo ao próximo mundo.

Nosso ex-programador finalmente abriu o portal de retorno.

Antes de atravessá-lo, olhou uma última vez para o IBM 4341 de um lado e os servidores 386 do outro.

O jovem aprendiz perguntou:

— Mestre, afinal, quem venceu? O mainframe ou o micro?

Ele respondeu:

— Você ainda está fazendo a pergunta errada.

— Então qual é a pergunta certa?

O portal começou a fechar.

O ex-programador sorriu.

“Qual arquitetura resolve melhor o problema que realmente temos?”

E desapareceu.

Na tela 3278 permaneceu apenas:

READY

Em algum lugar da empresa, entretanto, uma rotina esquecida aguardava pacientemente.

Seu nome?

0317-ROTINA-ESPECIAL

Porque certas coisas sobrevivem ao downsizing, à cloud, à inteligência artificial e, aparentemente, até mesmo ao isekai.

Bem-vindo ao mainframe, Padawan.

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