Translate

quarta-feira, 24 de agosto de 2022

De Kotlin ao COBOL no IBM Z Você Não Está Voltando ao Passado. Está Descobrindo Onde a Engenharia de Software Aprendeu a Nunca Parar.

 

Bellacosa Mainframe do kotlin ao cobol zos

☕ Um Café no Bellacosa Mainframe

De Kotlin ao COBOL no IBM Z

Você Não Está Voltando ao Passado. Está Descobrindo Onde a Engenharia de Software Aprendeu a Nunca Parar.

Existe uma pergunta que aparece com frequência:

"Eu programo em Kotlin. Faz sentido aprender COBOL e Mainframe?"

A resposta é simples.

Faz muito mais sentido do que parece.

O problema é que quase todo mundo apresenta o COBOL da maneira errada.

Mostram telas verdes.

Mostram comandos antigos.

Mostram ISPF.

Mostram JCL.

E passam a impressão de que você precisa esquecer tudo o que aprendeu nos últimos anos.

Nada poderia estar mais distante da realidade.

Quem programa em Kotlin já possui praticamente todas as habilidades intelectuais necessárias para aprender COBOL.

O que muda não é a capacidade técnica.

Muda a maneira de pensar sobre software.

Hoje vamos conversar exatamente sobre isso.

Pegue seu café.


O que um desenvolvedor Kotlin já sabe

Quem trabalha com Kotlin normalmente domina boa parte dos conceitos modernos de desenvolvimento.

Entre eles:

  • orientação a objetos;

  • encapsulamento;

  • modularização;

  • tratamento de exceções;

  • APIs REST;

  • JSON;

  • Gradle;

  • Maven;

  • Git;

  • testes automatizados;

  • IntelliJ IDEA;

  • desenvolvimento Android ou backend;

  • Spring Boot;

  • corrotinas;

  • programação assíncrona.

Ou seja...

Você já sabe construir aplicações.

O IBM Z apenas apresenta outro universo onde essas aplicações vivem.


A maior diferença não é a linguagem

A maioria imagina que aprender COBOL significa decorar comandos.

Não.

A maior mudança acontece aqui:

Kotlin pergunta:

"Como desenvolver uma aplicação?"

Já o Mainframe pergunta:

"Como garantir que esta aplicação continue funcionando durante os próximos quarenta anos?"

É uma mudança de perspectiva.


Kotlin pensa em objetos

Imagine uma classe.

class Cliente

Você cria objetos.

Possui métodos.

Herança.

Interfaces.

Polimorfismo.

Tudo gira em torno de objetos.


COBOL pensa em processos

Em COBOL você normalmente encontra algo semelhante a isto:

Receber arquivo

↓

Validar registros

↓

Consultar DB2

↓

Atualizar saldo

↓

Gerar relatório

↓

Finalizar

É uma sequência extremamente clara.

O programa parece um fluxograma.

Não existe vergonha nisso.

Muito pelo contrário.

Grandes bancos processam bilhões de transações exatamente assim.


Bellacosa Mainframe kotlin versus cobol zos

Kotlin privilegia reutilização

No mundo Kotlin você cria:

  • Services

  • Controllers

  • Repositories

  • Components

  • Beans

  • Extensions

  • Libraries

Você divide tudo em pequenas responsabilidades.

Excelente.


COBOL privilegia previsibilidade

O principal objetivo é outro.

Não surpreender.

Quando um programa executa hoje...

Ele deve produzir exatamente o mesmo resultado amanhã.

E na próxima década.

Essa obsessão pela previsibilidade é um dos motivos pelos quais o IBM Z continua sendo utilizado pelas maiores instituições financeiras do planeta.


Memória: Kotlin versus COBOL

Curiosamente...

As diferenças são menores do que parecem.

Em Kotlin:

val nome = "Maria"

Em COBOL:

01 NOME PIC X(30).

Ambos representam dados.

A diferença é que COBOL descreve o layout da memória explicitamente.

Isso é extremamente importante quando milhares de programas compartilham exatamente o mesmo registro há décadas.


Null Safety

Uma curiosidade interessante.

Kotlin ficou famoso pelo Null Safety.

COBOL resolveu um problema parecido muito antes.

Ao definir exatamente o tamanho e o formato dos dados, o programa sabe precisamente o que pode existir naquele campo.

Não existe "qualquer coisa".

Existe uma definição formal.


Data Classes

Em Kotlin:

data class Cliente

Em COBOL:

01 CLIENTE.
   05 NOME.
   05 CPF.
   05 SALDO.

Conceitualmente...

Os dois representam uma estrutura de dados.


Enums

Em Kotlin:

enum class Status

Em COBOL normalmente encontramos:

88 CLIENTE-ATIVO.
88 CLIENTE-INATIVO.

Os famosos Condition Names.

É um recurso elegante que muitos desenvolvedores modernos desconhecem.


Corrotinas

Aqui surge uma diferença importante.

Kotlin possui:

  • Coroutines

  • Dispatchers

  • Async

  • Await

COBOL tradicional não trabalha dessa forma.

O paralelismo acontece em outro nível.

Quem faz isso é o próprio ambiente do z/OS.

Centenas ou milhares de jobs.

Diversas regiões CICS.

Múltiplas tasks.

Workload Manager.

Sysplex.

Você deixa o sistema operacional organizar o processamento.


Frameworks

Kotlin:

  • Spring Boot

  • Ktor

  • Micronaut

COBOL:

  • CICS

  • IMS

  • Batch

  • Db2

  • MQ

Perceba algo curioso.

Os dois mundos possuem frameworks.

Apenas resolveram problemas diferentes.


Banco de Dados

Kotlin conversa com:

  • PostgreSQL

  • Oracle

  • SQL Server

  • MongoDB

COBOL conversa com:

  • Db2 for z/OS

  • IMS DB

  • VSAM

A linguagem muda pouco.

O SQL continua sendo SQL.


Logs

No Kotlin:

println()

ou

Logger.info()

No Mainframe:

  • JES2

  • SDSF

  • SYSOUT

  • SMF

A ideia continua sendo observar o comportamento da aplicação.


Build

Kotlin utiliza:

  • Gradle

  • Maven

No Mainframe encontramos:

  • JCL

  • Procedures

  • Utilities

Os dois executam etapas.

A diferença é que o JCL controla muito mais do que apenas compilar.

Ele controla recursos do sistema operacional inteiro.


Versionamento

Git continua sendo Git.

Hoje muitos ambientes IBM Z utilizam:

  • GitHub

  • GitLab

  • Azure DevOps

  • Zowe

  • VS Code

Ou seja...

Você não precisa abandonar seu fluxo moderno.


O que realmente muda

Você deixa de pensar apenas no programa.

Passa a pensar no ambiente inteiro.

Um desenvolvedor Mainframe precisa compreender:

  • armazenamento;

  • filas;

  • segurança;

  • processamento batch;

  • processamento online;

  • concorrência;

  • recuperação;

  • auditoria;

  • disponibilidade;

  • desempenho.

O programa é apenas uma pequena parte do ecossistema.


O que aprender primeiro

Se eu estivesse orientando um desenvolvedor Kotlin hoje, seguiria exatamente esta sequência.


Etapa 1 — COBOL

Aprenda:

  • divisões do programa;

  • Working-Storage;

  • Local-Storage;

  • PIC;

  • COMP;

  • COMP-3;

  • tabelas;

  • OCCURS;

  • PERFORM;

  • IF;

  • EVALUATE;

  • SEARCH;

  • SORT;

  • MERGE;

  • File Section.

Objetivo:

Ler programas antigos sem medo.


Etapa 2 — JCL

Depois venha para:

  • JOB

  • EXEC

  • DD

  • PROC

  • INCLUDE

  • COND

  • IF

  • RETURN CODE

Pense nele como um enorme script de automação do sistema operacional.


Etapa 3 — VSAM

Entenda:

  • KSDS

  • ESDS

  • RRDS

  • Índices

  • Chaves

Você descobrirá que muito do que hoje fazemos com bancos NoSQL já existia conceitualmente.


Etapa 4 — Db2

Aprenda:

  • SQL

  • Cursor

  • Commit

  • Rollback

  • Packages

  • Bind

Boa notícia:

Você já conhece SQL.


Etapa 5 — CICS

Agora começa a diversão.

Aprenda:

  • transações;

  • COMMAREA;

  • Channels;

  • Containers;

  • mapas BMS;

  • pseudo-conversação.

Você entenderá como bancos funcionam em tempo real.


Etapa 6 — z/OS

Estude:

  • Address Spaces;

  • Tasks;

  • Jobs;

  • JES2;

  • SDSF;

  • RACF;

  • Catálogos;

  • Dataset;

  • SMS.

Agora você começa a compreender o computador inteiro.


Etapa 7 — Arquitetura IBM Z

Aprenda:

  • Sysplex;

  • GDPS;

  • Workload Manager;

  • Parallel Sysplex;

  • criptografia por hardware;

  • canais FICON;

  • LPAR;

  • z/VM;

  • Linux on IBM Z.

Aqui você deixa de ser apenas um programador.

Passa a compreender infraestrutura crítica.


O que treinar todos os dias

Durante a transição, recomendo pequenos exercícios diários.

Segunda

Ler um programa COBOL.

Não modificar.

Apenas entender.


Terça

Escrever um pequeno programa.

Exemplo:

  • cadastro;

  • cálculo;

  • relatório.


Quarta

Montar um JCL.

Executar.

Interpretar mensagens.


Quinta

Estudar mensagens do sistema.

Aprender:

  • IEC

  • IEF

  • IGD

  • DFS

  • IKJ

  • HASP

No começo parecem assustadoras.

Depois viram grandes amigas.


Sexta

Resolver um problema real.

Converter uma lógica Kotlin para COBOL.

Não copie a sintaxe.

Copie o algoritmo.


Sábado

Ler documentação IBM.

Poucas páginas.

Mas todos os dias.


Domingo

Revisão.

Nada fixa mais conhecimento do que revisar.


O erro mais comum

O maior erro de quem vem do Kotlin é tentar encontrar equivalentes exatos.

Não procure:

"Qual é o Spring Boot do Mainframe?"

Ou:

"Onde está o Maven?"

Ou:

"Qual é o Hibernate?"

Cada plataforma evoluiu para resolver problemas diferentes.

Em vez disso pergunte:

"Como o IBM Z resolve este problema?"

Essa pequena mudança mental acelera muito o aprendizado.


O superpoder do desenvolvedor híbrido

Imagine alguém que domina:

  • Kotlin;

  • APIs REST;

  • microsserviços;

  • Docker;

  • Kubernetes;

  • GitHub Actions;

  • DevOps;

  • Cloud.

Agora imagine essa mesma pessoa sabendo também:

  • COBOL;

  • CICS;

  • Db2;

  • MQ;

  • JCL;

  • RACF;

  • z/OS Connect;

  • IBM Z.

Esse profissional conversa naturalmente com equipes modernas e, ao mesmo tempo, entende os sistemas que processam pagamentos, seguros, previdência, cartões, folha de pagamento e operações financeiras de milhões de pessoas.

Ele não fica preso a um único mundo.

Ele se torna uma ponte entre eles.

E pontes são extremamente valiosas em qualquer organização.


Uma sugestão de laboratório para Windows e Linux

Você não precisa começar em um mainframe físico.

Monte um ambiente de aprendizado moderno:

  • Visual Studio Code com extensões para COBOL;

  • Git e GitHub para versionamento;

  • OpenJDK (para ferramentas auxiliares);

  • GnuCOBOL para praticar a linguagem e algoritmos;

  • Zowe Explorer para conhecer o acesso remoto ao IBM Z;

  • Docker para simular integrações;

  • PostgreSQL ou SQLite para comparar SQL com Db2;

  • IntelliJ IDEA para continuar praticando Kotlin e comparar soluções.

Depois, quando tiver acesso a um IBM Z real (ou a um ambiente educacional), concentre-se nas diferenças do ecossistema, não na sintaxe da linguagem. Você chegará muito mais preparado.


Conclusão

Aprender COBOL não significa abandonar Kotlin.

Significa ampliar sua visão sobre engenharia de software.

Kotlin ensina como criar aplicações elegantes, produtivas e modernas.

O IBM Z ensina como manter aplicações essenciais funcionando por décadas, suportando volumes gigantescos, auditoria rigorosa e disponibilidade praticamente contínua.

Quando esses dois conhecimentos se encontram, nasce um profissional raro: alguém capaz de falar a linguagem da inovação sem perder o respeito pela estabilidade.

E talvez essa seja a maior lição do Mainframe.

Tecnologia não é uma disputa entre o novo e o antigo.

É uma conversa entre ideias que sobreviveram ao tempo e ideias que ainda estão sendo escritas.

No Bellacosa Mainframe gostamos de dizer que aprender IBM Z não é fazer uma viagem ao passado.

É visitar o lugar onde muitas das melhores práticas da engenharia de software foram testadas, refinadas e comprovadas durante décadas.

Se você já domina Kotlin, a porta de entrada está aberta.

Agora é hora de atravessá-la.

O café está servido.

Sem comentários:

Enviar um comentário