Translate

quarta-feira, 8 de janeiro de 2020

☕💥 Algoritmos no Mainframe: Da Matemática de Al-Khwarizmi ao COBOL no z/OS

 

Bellacosa Mainframe apresenta algoritmos na programação

☕💥 Algoritmos no Mainframe: Da Matemática de Al-Khwarizmi ao COBOL no z/OS

Ou como um programador COBOL Padawan descobre que, antes de existir código, existia lógica

"Um bom algoritmo faz um bom programa. Um excelente algoritmo faz o programador parecer um mago. Um algoritmo ruim faz o operador do turno da madrugada querer abrir um chamado para exorcismo."

— Bellacosa Mainframe

Introdução

Existe uma frase que gosto de repetir aos meus alunos padawans:

"COBOL não é difícil. Difícil é pensar."

E isso pode soar estranho.

Muitos acreditam que programar significa decorar comandos, aprender sintaxe, conhecer verbos COBOL ou dominar JCL.

Não.

Programar é, essencialmente, aprender a pensar de forma estruturada.

E isso possui um nome.

Algoritmo.

Antes do COBOL.

Antes do Assembler.

Antes do FORTRAN.

Antes do System/360.

Antes do z16.

Antes do ChatGPT.

Já existiam algoritmos.

E a história deles é simplesmente fantástica.


O nascimento dos algoritmos

A palavra algoritmo deriva do nome do matemático persa:

Muhammad ibn Musa al-Khwarizmi

(cerca de 780–850 d.C.)

Ele escreveu um tratado chamado:

"Kitab al-Jabr wa-l-Muqabala"

Livro que deu origem à palavra:

Algebra

E seu nome latinizado tornou-se:

Algorismus

Posteriormente:

Algorithm

Ou seja...

Cada vez que fazemos:

ADD A TO B GIVING TOTAL

estamos usando ideias desenvolvidas há mais de mil anos.


Algoritmos antes dos computadores

Curiosamente, algoritmos são muito mais antigos que computadores.

Exemplos:

Receitas culinárias

Procedimentos militares

Construção de pirâmides

Cálculos astronômicos

Navegação marítima

Tributação romana

Tudo era algoritmo.

Apenas não era chamado assim.


O primeiro algoritmo famoso

O algoritmo de Euclides.

300 a.C.

Encontrar o MDC.

Exemplo:

MDC(48,18)

Passo 1

48 mod 18 = 12

Passo 2

18 mod 12 = 6

Passo 3

12 mod 6 =0

Resposta

6

Dois mil anos depois...

Continuamos utilizando a mesma lógica.


A chegada dos computadores

Década de 1940.

ENIAC

UNIVAC

EDSAC

LEO I

IBM 650

IBM 7070

A grande dificuldade não era processador.

Era ensinar uma máquina a pensar.

E pensar significava:

Transformar problemas em algoritmos.


O nascimento do mainframe

1952

IBM 701

1954

IBM 704

1964

System/360

Um dos projetos mais revolucionários da história.

Pela primeira vez:

Uma arquitetura única.

Diversos equipamentos.

Compatibilidade.

E o software começava a ganhar importância.


O problema dos programas gigantes

Década de 50.

Empresas começavam a automatizar:

Folha de pagamento

Seguros

Bancos

Governo

Previdência

Surgiu um problema.

Como ensinar milhares de pessoas a desenvolver sistemas?

Resposta:

Criando linguagens de alto nível.


COBOL nasce em 1959

CODASYL.

Grace Hopper.

Departamento de Defesa Americano.

Objetivo:

Criar uma linguagem próxima do inglês.

Exemplo:

READ CLIENTE

IF SALDO > 1000

   PERFORM LIBERA-CREDITO

END-IF

Mas existe um detalhe importante.

COBOL não pensa.

Quem pensa é o desenvolvedor.

COBOL apenas executa.

O algoritmo continua sendo o verdadeiro cérebro.


O algoritmo escondido dentro do COBOL

Muitos iniciantes acreditam:

"Aprendi COBOL."

Não.

Aprendeu comandos.

Programar é construir algoritmos.

Exemplo.

Problema:

Calcular média.

Padawan inexperiente:

ADD A TO B
ADD C TO TOTAL
DIVIDE 3 INTO TOTAL

Padawan treinado:

Entrada

3 notas

Processamento

Somar

Dividir

Saída

Média

Ele pensa primeiro.

Codifica depois.


Características de um algoritmo

Entrada

Pode possuir dados.

Exemplo:

Arquivo VSAM

DB2

MQ

GDG

SYSIN


Saída

Relatório

Arquivo

Mensagem

Tela CICS

API JSON


Finitude

Todo algoritmo precisa terminar.

Exemplo ruim:

PERFORM FOREVER

Exemplo bom:

PERFORM UNTIL EOF='S'

Clareza

Evitar ambiguidades.

Ruim:

"Processar cliente"

Bom:

Ler registro

Validar CPF

Consultar saldo

Atualizar DB2

Gravar auditoria


Algoritmos nos Batchs Mainframe

Imagine.

Banco processando PIX.

2 bilhões de registros.

A lógica continua igual.

Entrada

SORTIN

Processamento

JOINKEYS

ICETOOL

COBOL

Saída

SORTOUT

Relatórios

DB2

MQ


O algoritmo do fechamento bancário

Leitura

Validação

Consolidação

Apuração

Tributação

Geração de extrato

Backup

Auditoria

Tudo algoritmo.


Algoritmos no CICS

O novato vê:

EXEC CICS RECEIVE

EXEC CICS SEND

EXEC CICS LINK

Mas por trás existe:

Receber dados

Validar

Consultar

Persistir

Retornar

Fluxo decisório.


Algoritmos no Natural

Mesmo conceito.

MAP

READ

FIND

END-FIND

ESCAPE TOP

DECIDE ON

São apenas ferramentas.

O raciocínio continua sendo algoritmo.


Pseudocódigo

Excelente ferramenta para padawans.

Exemplo.

Transferência bancária.



Inicio


Ler conta origem


Ler conta destino


Ler valor


Saldo suficiente ?


SIM


Debitar


Creditar


Gerar log


Nao


Retornar erro



Fim



Só depois escrevemos COBOL.


Fluxogramas

Muito utilizados nos anos 70.

Analistas desenhavam:

Retângulos

Losangos

Setas

Pastas físicas.

Canetas.

Régua.

Pranchetas.

Sim.

Mainframe já existia antes do Visio.


Algoritmos de busca

Busca sequencial.

Busca binária.

Hash.

Índices VSAM.

DB2 Index.

B-tree.

LSM Trees.

Todos são algoritmos.


Algoritmos de ordenação

Mainframe ama ordenação.

DFSORT.

SYNCSORT.

ICETOOL.

Métodos famosos:

Bubble Sort

Merge Sort

QuickSort

HeapSort

No universo IBM, o Merge Sort praticamente reina.


Complexidade computacional

Nem todo algoritmo é igual.

O(1)

Constante

O(log n)

Busca binária

O(n)

Linear

O(n²)

Bubble

O(2ⁿ)

Exponencial


O dia em que um COBOL virou um monstro

Já vi programa COBOL com:

70 mil linhas.

350 PERFORM.

1200 IF.

85 GO TO.

Documentação inexistente.

Autor aposentado em 1998.

Chamado aberto em produção.

Ninguém sabe mexer.

Por quê?

Ausência de algoritmo.

Código cresceu.

Pensamento não.


Design de algoritmos

Força Bruta

Dividir e conquistar

Backtracking

Greedy

Programação dinâmica

Mesmo em bancos.

Mesmo em seguradoras.

Mesmo em governo.


Algoritmos modernos no IBM Z

Hoje temos:

z16

z17

LinuxONE

OpenShift

zCX

API Connect

z/OS Connect

Kafka

Python

Java

Node.js

AI

Machine Learning

Mas adivinhe.

O algoritmo continua sendo rei.


Inteligência Artificial também vive de algoritmos

Redes neurais.

Transformers.

LLMs.

Árvores.

Regressão.

Clustering.

Tudo algoritmo.

A IA não substituiu algoritmos.

Ela apenas os sofisticou.


O maior erro dos novos programadores

Querer aprender linguagem.

Antes de aprender lógica.

É equivalente a comprar um sabre de luz sem saber usar a Força.


Conselhos para um Padawan COBOL

Primeiro pense.

Depois desenhe.

Depois escreva.

Depois teste.

Depois otimize.

Nunca faça o inverso.

Pergunte sempre:

Quais entradas?

Qual processamento?

Qual saída?

Existem exceções?

Qual volume?

Como recuperar falhas?

Como auditar?

Como escalar?


O algoritmo invisível que move o mundo

Quando um cliente faz PIX.

Existe algoritmo.

Quando um avião decola.

Existe algoritmo.

Quando uma seguradora calcula prêmio.

Existe algoritmo.

Quando um cartão aprova compra.

Existe algoritmo.

Quando o INSS paga benefícios.

Existe algoritmo.

Quando um CICS responde em menos de um segundo.

Existe algoritmo.

E quando um velho programa COBOL criado em 1987 continua funcionando perfeitamente em um IBM Z moderno...

Existe um bom algoritmo escondido ali.


Considerações finais

Muitos dizem que COBOL é uma linguagem antiga.

Discordo.

COBOL é apenas um meio de expressão.

A verdadeira tecnologia imortal chama-se algoritmo.

Ela nasceu com matemáticos árabes, sobreviveu aos impérios, atravessou a Revolução Industrial, alimentou os primeiros computadores, ajudou a criar o System/360, sustentou bancos por décadas, acompanhou a internet, chegou ao z/OS, conversa hoje com APIs REST e provavelmente continuará existindo quando estivermos programando computadores quânticos.

Portanto, jovem Padawan, lembre-se:

Você não é pago para escrever DISPLAY, MOVE, ADD ou EXEC CICS.

Você é pago para transformar problemas caóticos em sequências ordenadas de decisões capazes de gerar valor para empresas, governos e pessoas.

E esse poder, desde Al-Khwarizmi até o IBM z17, continua tendo exatamente o mesmo nome:

Algoritmo.

☕🚀 E como diria um velho mestre do Bellacosa Mainframe:

"Código envelhece. Linguagens mudam. Frameworks desaparecem. Mas um algoritmo elegante continua sendo reconhecido por qualquer programador, em qualquer época, em qualquer plataforma."

 

Sem comentários:

Enviar um comentário