 |
| Bellacosa Mainframe do c++ ao cobol no zos |
☕ Um Café no Bellacosa Mainframe
De C++ ao COBOL no IBM Z
Você Não Está Trocando de Linguagem. Está Descobrindo um Novo Conceito de Engenharia de Software.
"Quem domina C++ já aprendeu a controlar memória, desempenho e arquitetura. Aprender COBOL no IBM Z significa descobrir como aplicar essa disciplina ao software que movimenta bancos, bolsas de valores, seguradoras, governos e companhias aéreas há mais de meio século."
Existe um mito que acompanha praticamente todo desenvolvedor C++ quando ouve a palavra COBOL.
"É uma linguagem antiga."
"Não tem orientação a objetos."
"Não tem templates."
"Não tem STL."
"Não tem RAII."
"Não tem ponteiros."
Curiosamente...
Nenhuma dessas características explica por que bilhões de transações financeiras continuam sendo processadas diariamente em IBM Z.
Porque o IBM Z nunca foi uma competição de linguagens.
Sempre foi uma competição de confiabilidade.
E esse é justamente o ponto onde muitos programadores C++ descobrem que já possuem muito mais em comum com o mundo Mainframe do que imaginavam.
O programador C++ já pensa como um engenheiro
Quem programa em C++ normalmente desenvolveu algumas virtudes raras.
Ele sabe que desempenho importa.
Ele entende custo de memória.
Conhece pilha (stack) e heap.
Sabe que concorrência é difícil.
Entende compilação.
Conhece linkedição.
Sabe que ABI existe.
Já ouviu falar em alignment.
Conhece cache.
Sabe otimizar algoritmos.
Entende estruturas de dados.
Aprendeu que software não é apenas escrever código.
É construir sistemas.
E adivinhe?
Essa filosofia é extremamente compatível com o IBM Z.
A maior diferença não é COBOL
A maior mudança será perceber que no Mainframe o protagonista não é a linguagem.
É o ambiente.
No Windows você pensa em:
aplicação
executável
DLL
usuário
No IBM Z você passa a pensar em:
Job
Dataset
Região
CICS
IMS
DB2
RACF
JES2
Workload
Segurança
Disponibilidade
Você deixa de desenvolver apenas programas.
Passa a desenvolver partes de um ecossistema gigantesco.
 |
| Bellacosa Mainframe c++ versus cobol no zos |
C++ e COBOL possuem mais semelhanças do que parece
À primeira vista parecem opostos.
Mas compare.
Ambos são compilados
Não existe interpretação.
Existe compilador.
Existe otimização.
Existe geração de código objeto.
Existe linkedição.
Existe build.
Tudo isso será familiar.
Ambos valorizam desempenho
No desktop você mede milissegundos.
No Mainframe mede milhões de transações por hora.
A preocupação é a mesma.
Executar rapidamente.
Consumir poucos recursos.
Não desperdiçar CPU.
Ambos valorizam estabilidade
Em C++ um ponteiro inválido pode derrubar um processo.
No Mainframe um erro pode impedir milhões de pagamentos.
A consequência muda.
A responsabilidade também.
Ambos vivem muitos anos
Aplicações C++ frequentemente permanecem décadas.
O mesmo acontece com COBOL.
Você aprenderá rapidamente que software corporativo envelhece muito mais lentamente do que aplicações web.
Ambos exigem disciplina
C++ não perdoa descuidos.
COBOL também não.
A diferença é que os erros costumam aparecer em regras de negócio.
Não em segmentation faults.
Onde tudo muda
Agora começam as diferenças.
Memória
Em C++ você administra memória.
new
delete
smart pointers
RAII
ownership
No COBOL praticamente toda memória já está definida.
Você declara estruturas.
O runtime administra tudo.
Não existe malloc para o desenvolvedor comum.
Você passa menos tempo gerenciando memória.
E muito mais tempo modelando dados.
Dados são o centro do universo
No C++ muitos desenvolvedores começam pensando em objetos.
No COBOL começa-se pensando em registros.
Campos.
Layouts.
Arquivos.
Tabelas.
Copys.
Estruturas.
A pergunta muda.
Em vez de:
"Qual classe criar?"
Você pergunta:
"Como esse registro representa o negócio?"
Legibilidade acima de tudo
Em C++ frequentemente vemos código extremamente compacto.
Templates.
Metaprogramação.
Lambdas.
Concepts.
Operator overloading.
No COBOL o objetivo sempre foi outro.
Código que qualquer desenvolvedor consiga ler daqui vinte anos.
Você rapidamente perceberá que clareza vale ouro.
Regras de negócio
Aqui acontece uma mudança importante.
Grande parte do código COBOL não implementa algoritmos complexos.
Implementa decisões empresariais.
Calcular juros.
Validar CPF.
Fechar folha.
Liquidar títulos.
Atualizar contas.
Emitir boletos.
Processar seguros.
Calcular impostos.
É programação.
Mas profundamente ligada ao negócio.
Batch é uma mudança de mentalidade
Quem veio do Windows costuma pensar em aplicações interativas.
No Mainframe você aprende Batch.
Recebe arquivos.
Valida.
Ordena.
Consolida.
Atualiza bancos.
Gera relatórios.
Tudo cuidadosamente orquestrado.
Muitos iniciantes subestimam Batch.
Depois descobrem que ele continua sendo uma das maiores forças do IBM Z.
Online também existe
Não pense que tudo é Batch.
Você conhecerá o CICS.
Ali surgem conceitos familiares.
Sessões.
Transações.
Chamadas.
Programas.
Controle de fluxo.
Mas com disponibilidade muito maior do que normalmente encontramos em aplicações tradicionais.
Banco de Dados
Se você conhece PostgreSQL, SQL Server ou Oracle, já possui uma excelente base.
Aprender DB2 será muito mais simples.
Você encontrará:
SELECT
INSERT
UPDATE
DELETE
JOIN
CURSOR
COMMIT
ROLLBACK
Índices.
Plano de acesso.
A sintaxe muda pouco.
A engenharia por trás é impressionante.
Arquivos ainda são importantes
Enquanto muitos ambientes modernos vivem exclusivamente de bancos relacionais, o IBM Z continua dominando processamento de arquivos gigantescos.
VSAM.
Sequential Files.
GDG.
Flat Files.
Isso surpreende muitos desenvolvedores.
Mas faz sentido quando milhões de registros precisam ser processados continuamente.
Segurança não é um detalhe
Em muitos ambientes segurança aparece no fim do projeto.
No IBM Z ela nasce junto.
RACF.
Perfis.
Grupos.
Permissões.
Auditoria.
Controle de acesso.
Tudo extremamente integrado.
A melhor trilha para um programador C++
Se eu estivesse orientando um excelente desenvolvedor C++, faria exatamente este caminho.
Etapa 1
Não aprenda COBOL primeiro.
Aprenda IBM Z.
Entenda:
Sem isso COBOL parecerá apenas uma linguagem antiga.
Etapa 2
Aprenda z/OS
Entenda:
Dataset
PDS
PDSE
Sequential
VSAM
Catalog
Volume
Job
Step
Esses conceitos aparecerão diariamente.
Etapa 3
Aprenda TSO/ISPF
Aprenda a navegar.
Editar.
Compilar.
Executar.
Comparar arquivos.
Pesquisar membros.
Como um programador Linux aprende Bash.
Etapa 4
Aprenda JCL
Esse é provavelmente o maior choque.
JCL não é linguagem de programação.
É descrição de execução.
Quem entende JCL entende o Mainframe.
Etapa 5
Agora sim...
COBOL.
Comece apenas com:
IDENTIFICATION DIVISION
DATA DIVISION
WORKING-STORAGE
PROCEDURE DIVISION
IF
PERFORM
EVALUATE
READ
WRITE
MOVE
COMPUTE
Nada mais.
Etapa 6
Arquivos
Aprenda:
Sequential
VSAM
KSDS
ESDS
READ
WRITE
START
REWRITE
DELETE
Etapa 7
SQL
COBOL + DB2.
Aqui você descobrirá onde grande parte dos sistemas corporativos realmente vivem.
Etapa 8
CICS
Aprenda:
COMMAREA
MAP
Pseudo Conversação
LINK
XCTL
RETURN
RESP
Depois Channels e Containers.
Etapa 9
Debug
SDSF
JES2
Spool
Abends
Dump
Mensagens
SYSOUT
SYSUDUMP
SYSABOUT
Aprenda a investigar problemas.
Etapa 10
Modernização
Somente depois disso avance para:
REST
JSON
XML
z/OS Connect
MQ
Kafka
Java
Python
OpenAPI
Git
VS Code
Zowe
Ansible
OpenShift
Porque agora você compreenderá onde essas tecnologias entram.
O que treinar diariamente
Sugiro uma rotina simples.
Segunda
Resolver pequenos exercícios COBOL.
Terça
Ler JCL.
Quarta
Executar Batch.
Quinta
SQL no DB2.
Sexta
Ler código legado.
Sábado
Refatorar programas COBOL.
Domingo
Estudar arquitetura IBM Z.
Em poucos meses você terá construído uma visão muito superior à de quem apenas decorou comandos.
O maior erro de quem vem do C++
O desenvolvedor tenta transformar COBOL em C++.
Não faça isso.
COBOL resolve outro tipo de problema.
Quanto antes aceitar isso, mais rápido aprenderá.
O maior desafio
Não será aprender comandos.
Será aprender o domínio bancário.
Seguros.
Cartões.
Folha.
Tributos.
Previdência.
Liquidação financeira.
No IBM Z, entender o negócio vale tanto quanto dominar a linguagem.
O que um programador C++ aprende com o Mainframe
Depois de algum tempo algo curioso acontece.
Você volta ao C++ diferente.
Mais disciplinado.
Mais cuidadoso.
Mais preocupado com rastreabilidade.
Mais atento à estabilidade.
Mais consciente do impacto de uma mudança.
Porque o IBM Z ensina uma lição rara.
Software não existe apenas para impressionar desenvolvedores.
Existe para manter empresas funcionando.
Existe para pagar salários.
Existe para processar aposentadorias.
Existe para autorizar cartões.
Existe para movimentar bolsas de valores.
Existe para garantir que um avião possa decolar porque milhares de reservas foram processadas corretamente.
Essa responsabilidade muda completamente a forma como enxergamos programação.
Conclusão
Se você domina C++, já possui uma base extraordinária.
Você entende algoritmos, compilação, desempenho e arquitetura. Agora chegou a hora de aprender algo que poucas universidades ensinam: como grandes organizações constroem sistemas capazes de operar 24 horas por dia, sete dias por semana, durante décadas, com confiabilidade quase absoluta.
COBOL no IBM Z não substitui o C++.
Ele complementa sua formação.
Você continuará pensando como engenheiro, mas passará a enxergar software por outra perspectiva: continuidade, governança, auditoria, integridade dos dados e estabilidade operacional.
No Bellacosa Mainframe costumo dizer que aprender IBM Z é como visitar uma usina hidrelétrica depois de anos construindo geradores portáteis.
Os dois produzem energia.
Mas em escalas completamente diferentes.
O mesmo vale para C++ e COBOL.
Você não está abandonando a programação moderna.
Está descobrindo onde muitos dos sistemas mais importantes do planeta aprenderam a nunca falhar.
E essa é uma experiência que transforma qualquer desenvolvedo