☕ 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

quinta-feira, 24 de fevereiro de 2022

Da Compilação à Execução de um Programa COBOL — Parte II

 

Bellacosa Mainframe e a compilação cobol parte II

☕ Um Café no Bellacosa Mainframe

Da Compilação à Execução de um Programa COBOL — Parte II

CICS, Db2, IMS e Adabas: O que Acontece com o Código Antes de o Compilador Entrar em Cena

Introdução

Na primeira parte desta jornada, conhecemos o nascimento de um programa COBOL.

Vimos que tudo começa com o código-fonte armazenado em uma biblioteca, geralmente um PDS ou PDSE, e que os copybooks funcionam como contratos reutilizáveis entre programas, arquivos, mensagens e sistemas.

Também descobrimos uma diferença essencial:

COPY inclui código-fonte.
CALL executa outro módulo.

Porém, quando abrimos um programa corporativo real, especialmente em um banco, seguradora, indústria ou grande empresa, encontramos instruções que parecem COBOL, mas que não pertencem diretamente à linguagem.

Por exemplo:

           EXEC CICS
                READ FILE('CLIENTE')
                INTO(REGISTRO-CLIENTE)
                RIDFLD(WS-CHAVE)
           END-EXEC.

Ou:

           EXEC SQL
                SELECT NOME
                  INTO :WS-NOME
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

Também podemos encontrar chamadas como:

           CALL 'CBLTDLI'
                USING GU-FUNCTION
                      PCB-MASK
                      AREA-SEGMENTO
                      SSA-CLIENTE.

Ou estruturas utilizadas na comunicação com Adabas.

O Programador COBOL Padawan olha para tudo isso e pode imaginar que o compilador entende todos esses comandos naturalmente.

Mas não é exatamente assim.

Antes que o compilador COBOL possa transformar o fonte em código objeto, outros componentes precisam preparar partes específicas do programa.

É como uma grande cozinha corporativa.

O compilador é o chef principal, mas alguns ingredientes precisam ser preparados por especialistas antes de chegar à bancada.

Nesta segunda parte, vamos entender:

  • o papel do tradutor CICS;

  • como o Db2 processa comandos EXEC SQL;

  • o que é um DBRM;

  • por que o BIND do Db2 não é linkedição;

  • como programas COBOL acessam IMS;

  • como ocorre a comunicação com Adabas;

  • o que todas essas tecnologias possuem em comum.

Prepare o café, abra o ISPF e venha descobrir o que realmente acontece com o código antes da compilação.


1. Nem tudo o que aparece no programa é COBOL puro

COBOL possui instruções próprias, como:

MOVE
ADD
SUBTRACT
MULTIPLY
DIVIDE
COMPUTE
IF
EVALUATE
PERFORM
READ
WRITE
REWRITE
DELETE
OPEN
CLOSE
CALL

Essas instruções fazem parte da linguagem e podem ser analisadas diretamente pelo compilador.

Porém, comandos como:

EXEC CICS
EXEC SQL

pertencem a ambientes externos.

Eles foram incorporados ao fonte por meio de uma sintaxe padronizada, mas precisam ser interpretados por componentes especializados.

Uma representação simples seria:

Programa COBOL
   ├── comandos COBOL
   ├── comandos CICS
   ├── comandos SQL
   ├── chamadas IMS
   └── interfaces Adabas

O compilador entende plenamente a primeira parte.

As demais exigem preparação, tradução, bibliotecas ou interfaces específicas.


2. O que é o CICS?

CICS significa Customer Information Control System.

Na prática, ele é uma plataforma de processamento de transações online.

Quando um cliente consulta o saldo, realiza uma transferência, altera um endereço ou solicita uma segunda via de documento, existe uma grande possibilidade de algum componente CICS estar envolvido em ambientes tradicionais IBM Z.

O CICS gerencia elementos como:

  • transações;

  • programas;

  • terminais;

  • sessões;

  • arquivos;

  • filas;

  • segurança;

  • recuperação;

  • sincronização;

  • comunicação entre sistemas;

  • controle de recursos;

  • integração com Db2, MQ e outras tecnologias.

O programa COBOL contém a regra de negócio.

O CICS controla o ambiente transacional em que essa regra será executada.

Imagine uma transação chamada:

C001

Ela pode estar associada ao programa:

PGMCLI01

Quando o usuário informa C001, o CICS localiza o programa, cria uma task, verifica segurança, entrega o controle e acompanha sua execução.


3. Os comandos EXEC CICS

Um programa pode utilizar comandos como:

           EXEC CICS
                RECEIVE MAP('MAPCLI')
                        MAPSET('SETCLI')
                        INTO(AREA-MAPA)
           END-EXEC.

Esse comando solicita o recebimento dos dados de uma tela.

Outro exemplo:

           EXEC CICS
                SEND MAP('MAPCLI')
                     MAPSET('SETCLI')
                     FROM(AREA-MAPA)
                     ERASE
           END-EXEC.

Nesse caso, o programa solicita o envio de um mapa para o terminal.

Também podemos encontrar:

           EXEC CICS
                READ FILE('ARQCLI')
                     INTO(REGISTRO-CLIENTE)
                     RIDFLD(WS-CODIGO)
                     RESP(WS-RESP)
           END-EXEC.

Ou:

           EXEC CICS
                LINK PROGRAM('PGM002')
                     COMMAREA(AREA-COMUNICACAO)
                     LENGTH(WS-TAMANHO)
           END-EXEC.

Esses comandos parecem fazer parte do COBOL porque estão misturados ao código.

Entretanto, o compilador COBOL puro não sabe implementar operações como:

  • enviar uma tela;

  • ler um arquivo controlado pelo CICS;

  • iniciar outra transação;

  • acessar uma fila temporária;

  • chamar outro programa por meio do CICS;

  • devolver o controle ao monitor transacional.

Por isso, entra em cena o tradutor CICS.


4. O tradutor CICS

O tradutor CICS analisa os comandos:

EXEC CICS
...
END-EXEC

e os transforma em estruturas que o compilador COBOL consegue processar.

O fluxo conceitual é:

Fonte COBOL com EXEC CICS
             ↓
Tradutor CICS
             ↓
Fonte COBOL traduzido
             ↓
Compilador COBOL

O tradutor não executa a transação.

Ele apenas prepara o fonte.

Imagine o seguinte comando:

           EXEC CICS
                WRITEQ TS
                QUEUE('TEMP001')
                FROM(WS-DADOS)
                LENGTH(WS-TAMANHO)
           END-EXEC.

O tradutor converte essa instrução em uma sequência de chamadas e estruturas internas utilizadas pela interface do CICS.

Depois dessa tradução, o compilador enxerga COBOL válido.

Durante a execução, o programa chama os serviços CICS correspondentes.


5. EXEC CICS é uma macro?

No cotidiano do mainframe, alguns profissionais chamam os comandos EXEC CICS de macros.

Essa forma de falar é compreensível, mas pode gerar confusão.

Uma macro, em outros contextos, costuma ser um trecho expandido diretamente durante a montagem ou compilação.

O comando EXEC CICS é melhor compreendido como uma instrução embutida que precisa ser traduzida por um processador específico.

Portanto, tecnicamente, é mais correto dizer:

EXEC CICS é um comando CICS embutido no programa COBOL.

A distinção pode parecer pequena, mas ajuda o iniciante a compreender que existe uma etapa especializada antes da compilação.


6. CICS controla o recurso, não o programa COBOL

Considere:

           EXEC CICS
                READ FILE('CLIENTES')
                     INTO(REG-CLIENTE)
                     RIDFLD(WS-CODIGO)
                     RESP(WS-RESP)
           END-EXEC.

O programa não abre diretamente o arquivo físico.

Ele pede ao CICS que realize a leitura.

O CICS pode cuidar de:

  • localização do recurso;

  • compartilhamento;

  • segurança;

  • recuperação;

  • bloqueios;

  • integridade;

  • controle transacional;

  • resposta de erro.

O programa recebe o resultado e continua a regra de negócio.

Esse modelo é poderoso porque separa responsabilidades.

Programa COBOL → lógica de negócio
CICS          → controle transacional

7. O que é o Db2?

Db2 é o sistema gerenciador de banco de dados relacional da IBM amplamente utilizado no IBM Z.

Ele organiza informações em:

  • tabelas;

  • colunas;

  • linhas;

  • índices;

  • views;

  • tablespaces;

  • databases;

  • schemas;

  • packages;

  • plans;

  • collections.

O COBOL pode acessar dados Db2 por meio de SQL embutido.

Exemplo:

           EXEC SQL
                SELECT NOME,
                       SALDO
                  INTO :WS-NOME,
                       :WS-SALDO
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

Esse SQL está inserido dentro do fonte COBOL.

Porém, ele não pertence diretamente à linguagem COBOL.

Assim como ocorre com o CICS, o SQL precisa ser processado antes da compilação.


8. O pré-compilador Db2

Historicamente, programas COBOL com SQL passavam pelo pré-compilador Db2.

O fluxo clássico é:

Fonte COBOL com EXEC SQL
              ↓
Pré-compilador Db2
              ↓
Fonte COBOL modificado
              +
             DBRM

O pré-compilador realiza duas tarefas importantes.

Primeiro, ele substitui ou prepara os comandos SQL no fonte para que o compilador COBOL possa processá-los.

Segundo, ele gera o DBRM.

Em ambientes modernos, pode ser utilizado um coprocessador SQL integrado ao compilador.

Para o iniciante, o conceito fundamental permanece:

O SQL precisa ser analisado por uma tecnologia Db2 antes ou durante a compilação COBOL.


9. O que é o DBRM?

DBRM significa Database Request Module.

Ele contém informações extraídas dos comandos SQL presentes no programa.

Considere:

           EXEC SQL
                UPDATE CONTAS
                   SET SALDO = SALDO - :WS-VALOR
                 WHERE AGENCIA = :WS-AGENCIA
                   AND CONTA   = :WS-CONTA
           END-EXEC.

O Db2 precisa conhecer essa instrução para preparar sua execução.

O DBRM representa as requisições SQL encontradas no programa.

Posteriormente, ele será utilizado em uma operação de BIND.

O fluxo é:

Programa com SQL
       ↓
DBRM
       ↓
BIND PACKAGE
       ↓
Package Db2

O package contém a preparação necessária para que o Db2 execute as instruções SQL.


10. O BIND do Db2

O BIND do Db2 transforma o DBRM em um package executável pelo subsistema.

Durante esse processo, o Db2 pode avaliar:

  • existência das tabelas;

  • existência das colunas;

  • existência dos índices;

  • autorizações;

  • estatísticas;

  • opções de isolamento;

  • caminhos de acesso;

  • versões;

  • collections;

  • parâmetros de execução.

O Db2 decide como determinada instrução poderá ser executada.

Por exemplo:

SELECT NOME
FROM CLIENTES
WHERE CODIGO = ?

O Db2 poderá utilizar:

  • um índice;

  • uma varredura de tabela;

  • um índice composto;

  • uma combinação de acessos;

  • alguma estratégia definida pelo otimizador.

O programa COBOL informa o que deseja.

O Db2 decide como localizar os dados.


11. BIND Db2 não é linkedição

Este é um dos pontos mais importantes deste capítulo.

No mainframe, a palavra “bind” pode aparecer em contextos diferentes.

Existe o Binder do z/OS, responsável pela criação do módulo executável.

E existe o BIND do Db2, responsável pela preparação do SQL.

Binder z/OS → cria load module ou program object
BIND Db2    → cria package

Portanto:

Compilação + linkedição ≠ BIND Db2

Um programa pode estar perfeitamente compilado e linkedidado, mas falhar porque:

  • o package não existe;

  • o package está inválido;

  • a collection está incorreta;

  • o usuário não possui autorização;

  • os objetos Db2 foram alterados;

  • a versão do package não corresponde ao programa.


12. As duas trilhas de um programa Db2

Um programa COBOL com Db2 segue duas trilhas paralelas.

Trilha COBOL

Fonte
  ↓
Compilador
  ↓
Código objeto
  ↓
Binder
  ↓
Módulo executável

Trilha Db2

EXEC SQL
  ↓
DBRM
  ↓
BIND
  ↓
Package

Na execução, as duas trilhas se encontram.

O módulo executável inicia a lógica COBOL.

Quando chega a um comando SQL, ele aciona a interface Db2, que utiliza o package correspondente.

O load module sozinho não é suficiente.

O package sozinho também não é suficiente.

Eles trabalham em conjunto.


13. Host variables

Campos COBOL utilizados dentro de instruções SQL são chamados de host variables.

Exemplo:

       01  WS-CODIGO            PIC 9(09).
       01  WS-NOME              PIC X(40).

No SQL:

           EXEC SQL
                SELECT NOME
                  INTO :WS-NOME
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

Os dois-pontos indicam que os campos pertencem ao programa COBOL.

Sem essa indicação, o Db2 poderia interpretar o nome como uma coluna ou outro elemento SQL.

As host variables formam a ponte entre:

Memória COBOL ↔ Db2

14. A SQLCA

SQLCA significa SQL Communication Area.

Ela contém informações sobre a execução do último comando SQL.

Sua inclusão pode ser feita assim:

           EXEC SQL
                INCLUDE SQLCA
           END-EXEC.

Depois de uma instrução SQL, o programa pode testar:

           EVALUATE SQLCODE
               WHEN 0
                   DISPLAY 'OPERACAO REALIZADA'
               WHEN 100
                   DISPLAY 'REGISTRO NAO ENCONTRADO'
               WHEN OTHER
                   DISPLAY 'ERRO SQL: ' SQLCODE
           END-EVALUATE.

O SQLCODE é um dos campos mais conhecidos.

Alguns resultados comuns são:

SQLCODE 0    → sucesso
SQLCODE 100  → nenhuma linha encontrada
SQLCODE negativo → erro
SQLCODE positivo → aviso ou situação específica

O programa precisa tratar esses resultados.

Ignorar o SQLCODE é como atravessar uma rodovia sem olhar os sinais.


15. Indicadores de nulo

No Db2, uma coluna pode aceitar valor nulo.

COBOL, porém, trabalha com campos que possuem conteúdo físico.

Para representar um nulo, é comum utilizar uma variável indicadora.

Exemplo:

       01  WS-TELEFONE          PIC X(15).
       01  WS-IND-TELEFONE      PIC S9(04) COMP.

No SQL:

           EXEC SQL
                SELECT TELEFONE
                  INTO :WS-TELEFONE
                       :WS-IND-TELEFONE
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

Se o indicador retornar valor negativo, a coluna estava nula.

Sem o indicador adequado, o programa pode receber erros ao tentar trabalhar com valores nulos.


16. Um programa CICS com Db2

Em sistemas online, é comum encontrar CICS e Db2 dentro do mesmo programa.

Exemplo:

           EXEC CICS
                RECEIVE MAP('MAPCLI')
                        MAPSET('SETCLI')
                        INTO(AREA-MAPA)
           END-EXEC.

           MOVE MAP-CODIGO TO WS-CODIGO.

           EXEC SQL
                SELECT NOME,
                       SALDO
                  INTO :WS-NOME,
                       :WS-SALDO
                  FROM CLIENTES
                 WHERE CODIGO = :WS-CODIGO
           END-EXEC.

           EXEC CICS
                SEND MAP('MAPCLI')
                     MAPSET('SETCLI')
                     FROM(AREA-MAPA)
           END-EXEC.

Nesse caso, o programa utiliza:

  • CICS para controlar a transação e a tela;

  • Db2 para acessar os dados;

  • COBOL para executar a regra de negócio.

O fluxo pode envolver:

Fonte com CICS e SQL
          ↓
Tradução CICS
          ↓
Processamento Db2
          ↓
Compilação COBOL
          ↓
Linkedição
          ↓
BIND do package Db2

A sequência exata pode variar conforme as ferramentas e versões.

Mas todos esses elementos precisam ser preparados.


17. O que é IMS?

IMS significa Information Management System.

É uma plataforma histórica e extremamente importante no ecossistema IBM Z.

Ela pode ser dividida em duas grandes áreas:

IMS DB → gerenciamento de banco de dados hierárquico
IMS TM → gerenciamento de transações e mensagens

Um banco IMS não organiza os dados exatamente como uma tabela relacional.

Ele utiliza uma estrutura hierárquica baseada em segmentos.

Podemos imaginar:

CLIENTE
   ├── CONTA
   │      ├── MOVIMENTO
   │      └── CARTAO
   └── ENDERECO

O segmento CLIENTE pode ser o pai.

CONTA e ENDERECO podem ser filhos.

MOVIMENTO pode ser filho de CONTA.

Essa estrutura lembra uma árvore.


18. Chamadas DL/I

Programas COBOL acessam IMS por meio da interface DL/I.

DL/I significa Data Language/I.

Uma chamada conceitual pode ser:

           CALL 'CBLTDLI'
                USING GU-FUNCTION
                      PCB-MASK
                      SEGMENTO-CLIENTE
                      SSA-CLIENTE.

A função GU significa Get Unique.

Ela solicita a localização de um segmento específico.

Outras funções comuns incluem:

GU    Get Unique
GN    Get Next
GNP   Get Next Within Parent
GHU   Get Hold Unique
GHN   Get Hold Next
ISRT  Insert
REPL  Replace
DLET  Delete

O programa envia uma solicitação ao IMS.

O IMS navega pela estrutura hierárquica e retorna o segmento solicitado.


19. O PCB no IMS

PCB significa Program Communication Block.

Ele representa a comunicação entre o programa e um banco ou fila de mensagens IMS.

Após uma chamada DL/I, o programa pode verificar campos da PCB para descobrir:

  • status da operação;

  • nome do segmento;

  • nível hierárquico;

  • informações de processamento;

  • resultado da chamada.

É semelhante ao papel do FILE STATUS em arquivos ou do SQLCODE no Db2.

Cada tecnologia possui sua maneira de informar ao programa o resultado da operação.

QSAM/VSAM → FILE STATUS
Db2       → SQLCODE e SQLSTATE
IMS       → status da PCB
CICS      → RESP e RESP2
Adabas    → response code

Um bom programador não ignora nenhum desses retornos.


20. O que são DBD e PSB?

O ambiente IMS utiliza definições importantes.

DBD

DBD significa Database Description.

Ele descreve a estrutura do banco IMS:

  • segmentos;

  • relacionamentos;

  • campos-chave;

  • organização;

  • métodos de acesso;

  • características físicas e lógicas.

PSB

PSB significa Program Specification Block.

Ele define quais recursos um programa pode acessar e como poderá acessá-los.

O PSB pode conter PCBs para:

  • bancos IMS;

  • filas de mensagens;

  • outros recursos.

Podemos imaginar:

DBD → descreve o banco
PSB → descreve a visão do programa
PCB → interface usada durante a execução

21. IMS Transaction Manager

O IMS TM controla transações baseadas em mensagens.

Um fluxo simplificado pode ser:

Terminal, API ou outro sistema
             ↓
Mensagem de entrada
             ↓
Fila IMS
             ↓
Código de transação
             ↓
Programa COBOL
             ↓
Processamento
             ↓
Mensagem de saída

O programa pode receber a mensagem por meio de uma PCB de entrada e produzir uma resposta.

Assim como o CICS, o IMS controla o ambiente transacional.

Mas sua arquitetura, seus conceitos e sua forma de programação são diferentes.


22. Regiões IMS

Programas IMS podem executar em diferentes tipos de regiões.

Entre elas:

  • MPP;

  • BMP;

  • batch DL/I;

  • regiões utilitárias;

  • ambientes controlados pelo IMS.

MPP

Message Processing Program.

Processa mensagens e transações IMS.

BMP

Batch Message Processing.

Executa processamento batch com acesso controlado a bancos IMS e, em certos casos, filas.

O programa COBOL continua sendo compilado e linkedidado.

Porém, sua execução depende do ambiente IMS e das definições corretas.


23. O que é Adabas?

Adabas é um sistema de gerenciamento de banco de dados criado pela Software AG.

Ele se tornou muito conhecido em ambientes que utilizam Natural, mas também pode ser acessado por programas COBOL.

O Adabas possui uma arquitetura própria e utiliza componentes como:

  • Nucleus;

  • arquivos Adabas;

  • control blocks;

  • buffers;

  • interfaces de chamada;

  • códigos de resposta.

O Nucleus é o componente central que processa as solicitações.

Uma representação simplificada seria:

Programa COBOL
      ↓
Interface Adabas
      ↓
Adabas Nucleus
      ↓
Arquivo Adabas

24. Control Block e buffers Adabas

Um programa pode utilizar um control block para informar:

  • comando;

  • arquivo;

  • identificadores;

  • opções;

  • códigos de resposta;

  • informações de navegação;

  • parâmetros da operação.

Também podem existir buffers como:

Format Buffer

Define os campos que serão lidos ou atualizados.

Record Buffer

Recebe ou envia os dados do registro.

Search Buffer

Descreve os critérios de pesquisa.

Value Buffer

Contém os valores utilizados na pesquisa.

ISN Buffer

Pode armazenar números internos de sequência de registros.

Essas estruturas são fornecidas à interface Adabas durante a chamada.


25. Response Code Adabas

Após uma operação, o programa precisa verificar o código de resposta.

Um retorno de sucesso indica que a solicitação foi processada.

Outros códigos podem indicar:

  • registro não encontrado;

  • arquivo indisponível;

  • comando inválido;

  • conflito;

  • erro de formato;

  • problema de segurança;

  • falha de comunicação;

  • inconsistência de parâmetros.

Assim como no Db2, IMS, CICS ou VSAM, nunca se deve presumir que uma operação foi bem-sucedida sem verificar o retorno.


26. Natural e Adabas

Muitos iniciantes associam Adabas exclusivamente à linguagem Natural.

Essa associação existe porque as duas tecnologias são frequentemente utilizadas juntas.

Porém:

Natural é uma linguagem e ambiente de desenvolvimento.
Adabas é um sistema gerenciador de banco de dados.

Um programa COBOL também pode acessar Adabas por meio de interfaces apropriadas.

Da mesma forma, um programa Natural pode acessar outros recursos.

Não confunda a linguagem com o banco de dados.


27. O padrão comum entre CICS, Db2, IMS e Adabas

Apesar das diferenças, existe um padrão arquitetural comum.

O programa COBOL não controla diretamente toda a infraestrutura.

Ele solicita serviços.

COBOL → descreve a regra de negócio
CICS  → controla a transação
Db2   → gerencia dados relacionais
IMS   → gerencia dados hierárquicos e mensagens
Adabas → gerencia dados em sua arquitetura

Cada ambiente fornece:

  • interfaces;

  • comandos;

  • códigos de retorno;

  • controle de recursos;

  • segurança;

  • recuperação;

  • mecanismos de diagnóstico.

O programa COBOL deve respeitar os contratos de cada um.


28. O código de retorno é parte da lógica

Considere um programador que escreve:

           EXEC SQL
                UPDATE CONTAS
                   SET SALDO = SALDO - :WS-VALOR
                 WHERE CONTA = :WS-CONTA
           END-EXEC.

           DISPLAY 'OPERACAO REALIZADA'.

Esse programa exibe sucesso sem verificar o SQLCODE.

Se a conta não existir, o programa poderá informar uma operação que não aconteceu.

O correto seria:

           EXEC SQL
                UPDATE CONTAS
                   SET SALDO = SALDO - :WS-VALOR
                 WHERE CONTA = :WS-CONTA
           END-EXEC.

           EVALUATE SQLCODE
               WHEN 0
                   DISPLAY 'OPERACAO REALIZADA'
               WHEN 100
                   DISPLAY 'CONTA NAO ENCONTRADA'
               WHEN OTHER
                   DISPLAY 'ERRO DB2: ' SQLCODE
           END-EVALUATE.

O mesmo princípio vale para:

RESP CICS
FILE STATUS
PCB IMS
Response Code Adabas

No mainframe, tratar retorno não é uma recomendação opcional.

É parte da regra de negócio.


29. O perigo das opções implícitas

Alguns comandos utilizam tratamento automático de erro.

No CICS, por exemplo, certos erros podem transferir o controle para mecanismos padrão caso o programa não utilize opções como:

RESP
RESP2
NOHANDLE
HANDLE CONDITION

Em programas modernos, é comum preferir tratamento explícito por RESP e RESP2.

Exemplo:

           EXEC CICS
                READ FILE('ARQCLI')
                     INTO(REG-CLIENTE)
                     RIDFLD(WS-CODIGO)
                     RESP(WS-RESP)
                     RESP2(WS-RESP2)
           END-EXEC.

           EVALUATE WS-RESP
               WHEN DFHRESP(NORMAL)
                   CONTINUE
               WHEN DFHRESP(NOTFND)
                   DISPLAY 'CLIENTE NAO ENCONTRADO'
               WHEN OTHER
                   DISPLAY 'ERRO CICS: ' WS-RESP
           END-EVALUATE.

O objetivo é impedir que falhas sejam tratadas de forma inesperada.


30. Copybooks especializados

Esses ambientes também utilizam copybooks.

No CICS, podem existir:

  • layouts de COMMAREA;

  • mapas BMS;

  • estruturas de mensagens;

  • áreas de resposta;

  • contratos entre programas.

No Db2, podem existir:

  • DCLGENs;

  • estruturas de tabelas;

  • SQLCA;

  • áreas de entrada e saída.

No IMS:

  • layouts de segmentos;

  • PCBs;

  • SSAs;

  • áreas de mensagens.

No Adabas:

  • control blocks;

  • buffers;

  • layouts de registros;

  • constantes e códigos.

Portanto, o copybook apresentado na primeira parte continua sendo fundamental.

Ele liga o programa às interfaces dos subsistemas.


31. DCLGEN no Db2

DCLGEN significa Declarations Generator.

Ele pode gerar estruturas COBOL compatíveis com colunas de uma tabela Db2.

Exemplo conceitual:

       01  DCLCLIENTES.
           10 CLIENTE-CODIGO     PIC S9(9) COMP.
           10 CLIENTE-NOME       PIC X(40).
           10 CLIENTE-SALDO      PIC S9(11)V99 COMP-3.

O programa inclui essa estrutura por meio de um copybook ou processo equivalente.

Isso reduz a possibilidade de divergência entre os campos COBOL e as definições do banco.

Porém, a geração não elimina a necessidade de análise.

Tipos, precisão, nulos e conversões precisam ser compreendidos.


32. O programa ainda não é executável

Depois da tradução CICS, do processamento SQL e da preparação das interfaces IMS ou Adabas, o programa ainda não está pronto para executar.

Neste momento, temos algo semelhante a:

Fonte COBOL preparado
Copybooks expandidos ou localizados
Comandos CICS traduzidos
Comandos SQL processados
DBRM gerado
Interfaces disponíveis

O próximo passo será a compilação.

O compilador transformará o fonte em código objeto.

Depois, o Binder realizará a linkedição.

Somente então surgirá o módulo executável.


33. O fluxo completo desta etapa

Podemos representar a Parte II assim:

Fonte COBOL
     ↓
Identificação de comandos externos
     ↓
EXEC CICS → tradução CICS
     ↓
EXEC SQL → pré-compilação ou coprocessamento Db2
     ↓
Geração do DBRM
     ↓
Chamadas IMS → preparação das interfaces DL/I
     ↓
Chamadas Adabas → uso de control blocks e buffers
     ↓
Fonte preparado para compilação

Em paralelo:

DBRM
  ↓
BIND Db2
  ↓
Package

34. Erros típicos antes da compilação

Nesta fase, podem ocorrer problemas como:

CICS

  • comando EXEC CICS inválido;

  • opção incompatível;

  • copybook CICS ausente;

  • tamanho incorreto de COMMAREA;

  • referência a campo inexistente;

  • estrutura de mapa incorreta.

Db2

  • host variable não declarada;

  • SQLCA ausente;

  • sintaxe SQL inválida;

  • DCLGEN incompatível;

  • indicador de nulo inexistente;

  • DBRM não gerado.

IMS

  • PCB incompatível;

  • SSA incorreta;

  • função DL/I inválida;

  • layout de segmento divergente;

  • ordem incorreta dos parâmetros.

Adabas

  • control block incorreto;

  • buffer incompatível;

  • código de comando inválido;

  • tamanho inconsistente;

  • interface ausente.

O segredo é identificar em qual tecnologia o erro está ocorrendo.


35. O Padawan pergunta: quem executa primeiro?

A resposta depende do programa.

Um programa COBOL batch simples pode seguir diretamente para o compilador.

Um programa CICS pode precisar de tradução.

Um programa Db2 precisa de processamento SQL.

Um programa CICS Db2 precisa dos dois.

Um programa IMS ou Adabas precisa das interfaces corretas durante compilação, linkedição e execução.

Portanto:

Não existe um único fluxo universal.

Existe um fluxo-base que recebe etapas adicionais conforme as tecnologias utilizadas.


36. O verdadeiro papel do COBOL

O COBOL continua sendo o centro da regra de negócio.

Exemplo:

           IF WS-SALDO >= WS-VALOR
               PERFORM DEBITAR-CONTA
               PERFORM REGISTRAR-MOVIMENTO
           ELSE
               MOVE 'SALDO INSUFICIENTE'
                 TO WS-MENSAGEM
           END-IF.

Porém, as operações internas podem utilizar vários subsistemas.

DEBITAR-CONTA        → Db2
REGISTRAR-MOVIMENTO  → IMS
ENVIAR-MENSAGEM      → CICS ou MQ
CONSULTAR-CADASTRO   → Adabas

O COBOL orquestra a regra.

Os subsistemas fornecem capacidades especializadas.


37. Uma analogia com uma missão espacial

Imagine uma nave espacial.

O programa COBOL é o comandante da missão.

Ele decide:

  • qual objetivo deve ser atingido;

  • qual operação deve ser realizada;

  • o que fazer em caso de falha;

  • quando continuar;

  • quando interromper.

O CICS é o centro de controle de missões online.

O Db2 é o banco de dados científico organizado em tabelas.

O IMS é o sistema hierárquico de navegação e mensagens.

O Adabas é outro repositório especializado de dados.

O tradutor CICS e o pré-compilador Db2 são intérpretes que transformam os comandos do comandante em instruções compreensíveis por cada sistema.

O compilador, que veremos no próximo capítulo, será o engenheiro que converterá toda a missão em instruções executáveis pela máquina.


38. Conselhos do Mestre Bellacosa

Ao trabalhar com programas que utilizam CICS, Db2, IMS ou Adabas, sempre pergunte:

  • Quais processadores precisam preparar o fonte?

  • Existe tradução CICS?

  • Existe pré-compilação ou coprocessador Db2?

  • O DBRM foi gerado?

  • O package correto foi criado?

  • O programa utiliza a versão certa do DCLGEN?

  • As host variables estão compatíveis?

  • O SQLCODE está sendo tratado?

  • O RESP CICS está sendo validado?

  • A PCB IMS corresponde ao PSB utilizado?

  • Os códigos de resposta Adabas são verificados?

  • Os copybooks estão na versão correta?

  • O ambiente de compilação utiliza as bibliotecas corretas?

  • O processo automatizado esconde quais etapas?

Essas perguntas transformam um iniciante em um profissional que entende arquitetura.


Conclusão

Um programa COBOL corporativo pode conter muito mais do que instruções COBOL tradicionais.

Comandos EXEC CICS precisam ser traduzidos para que o compilador possa processá-los.

Comandos EXEC SQL precisam ser analisados pelo pré-compilador ou coprocessador Db2, gerando um fonte preparado e um DBRM.

O DBRM será utilizado no BIND para criação de um package.

No IMS, o programa utiliza chamadas DL/I, PCBs, PSBs, DBDs e layouts hierárquicos.

No Adabas, o acesso ocorre por meio de interfaces, control blocks, buffers e códigos de resposta.

Apesar das diferenças, todos esses ambientes compartilham o mesmo princípio:

O programa COBOL descreve a regra de negócio e solicita serviços a subsistemas especializados.

O CICS controla transações.

O Db2 gerencia dados relacionais.

O IMS processa bancos hierárquicos e mensagens.

O Adabas administra dados por meio de sua própria arquitetura.

E o COBOL permanece no centro, coordenando decisões, cálculos, validações e fluxos empresariais.

Mas ainda falta uma etapa fundamental.

Até agora, o código foi apenas preparado.

Ele ainda não se tornou um módulo executável.

No próximo capítulo

Na Parte III — Compilação, Linkedição e Load Library, entraremos no coração da transformação.

Veremos passo a passo:

  • como o compilador analisa o programa;

  • como o fonte se transforma em código objeto;

  • por que o objeto ainda não é o executável final;

  • como funciona o Binder;

  • o que são chamadas estáticas e dinâmicas;

  • como nasce um load module;

  • onde o executável é armazenado;

  • como interpretar return codes e listagens.

Se nesta parte conhecemos os tradutores que preparam a mensagem, no próximo capítulo conheceremos a fábrica que transforma palavras em instruções de máquina.

Prepare outra xícara de café.

A verdadeira transformação do programa COBOL está prestes a começar.

“O Padawan enxerga CICS, Db2, IMS e Adabas como comandos misturados ao COBOL. O especialista enxerga contratos entre arquiteturas, cada uma responsável por uma parte essencial do processamento corporativo.”

Laboratório Forense Bellacosa Mainframe

CSI z/OS: Da Compilação à Execução de um Programa COBOL

Cinco arquivos de evidências revelam como o código-fonte COBOL atravessa copybooks, CICS, Db2, IMS, compilação, Binder, load library, JCL, JES2, memória e CPU até produzir um resultado no IBM Z.

CASO: COBOL-2022-EXEC EVIDÊNCIAS: 05 ARTIGOS AMBIENTE: IBM Z / z/OS STATUS: ARQUIVO ABERTO

Esta investigação técnica apresenta o ciclo completo de um programa COBOL no mainframe IBM Z. A série explica o nascimento do código-fonte, o uso de copybooks, a preparação de comandos CICS e SQL, a geração de código objeto, a atuação do Binder, o armazenamento em load libraries e a execução por JCL, JES2, loader, Language Environment, dispatcher e CPU. Selecione uma evidência abaixo para ler o artigo correspondente dentro do visualizador.

Evidência selecionada Parte I — Código-fonte, bibliotecas e copybooks
Processando evidência digital...

Laudo preliminar: o nascimento do programa

A primeira parte acompanha a transformação da regra de negócio em código-fonte COBOL, explica o papel das bibliotecas e mostra por que copybooks funcionam como contratos de dados compartilhados entre programas.

COBOL código-fonte copybook SYSLIB IBM Z
Bellacosa Mainframe Forensic Lab · Nenhum byte é inocente até que os logs provem o contrário.

quarta-feira, 23 de fevereiro de 2022

SQL versus NoSQL: A Guerra que Nunca Existiu (e por que todo Programador COBOL deveria entender os dois)

 

Bellacosa Mainframe numa guerra que nunca existiu sql versus nosql

☕ Um Café no Bellacosa Mainframe

SQL versus NoSQL: A Guerra que Nunca Existiu (e por que todo Programador COBOL deveria entender os dois)

"A tecnologia muda. Os princípios permanecem."

Imagine que você acabou de entrar em uma grande empresa. É seu primeiro emprego como programador COBOL. Você acabou de aprender JCL, já conseguiu fazer seu primeiro programa rodar no z/OS, descobriu o que é um Job, um Dataset e finalmente conseguiu fazer um SELECT sem esquecer o END-EXEC.

Então alguém da equipe comenta durante uma reunião:

"Estamos integrando o Mainframe com MongoDB."

Cinco minutos depois outro colega fala:

"Os dados vão para Redis."

Na sequência o arquiteto comenta:

"O Neo4j será usado para análise de fraude."

Você pensa:

"Mas... eu aprendi SQL... o que aconteceu? Agora existem quatro bancos diferentes?"

Bem-vindo ao desenvolvimento moderno.

Hoje vamos conversar sobre uma das maiores dúvidas de quem está começando:

SQL ou NoSQL?

Spoiler...

A resposta é muito diferente do que a internet costuma vender.

Pegue seu café.

Vamos conversar.


O mito da guerra

Existe uma narrativa que aparece em vídeos, blogs e redes sociais dizendo que:

SQL morreu.

Ou então:

NoSQL veio substituir os bancos relacionais.

Nada poderia estar mais distante da realidade.

Na verdade, SQL nunca esteve tão vivo.

E NoSQL nunca tentou matá-lo.

Os dois nasceram para resolver problemas completamente diferentes.

É como comparar:

  • um caminhão

  • um avião

Qual é melhor?

Depende.

Você quer transportar cimento entre cidades?

Ou cruzar o oceano?

A pergunta está errada.

Da mesma forma:

A pergunta nunca foi SQL versus NoSQL.

A pergunta correta sempre foi:

Qual tecnologia resolve melhor ESTE problema?


Uma pequena viagem no tempo

Imagine que estamos em 1970.

Os computadores ocupavam salas inteiras.

Não existia internet.

Não existia smartphone.

Nem notebook.

Muito menos Cloud.

Os bancos de dados funcionavam quase como arquivos gigantes.

Era preciso conhecer exatamente onde cada informação estava gravada.

Era complicado.

Foi então que um pesquisador da IBM chamado Edgar Frank Codd publicou um artigo que mudaria para sempre a computação:

A Relational Model of Data for Large Shared Data Banks

Esse trabalho apresentou uma ideia brilhante.

Em vez de pensar em ponteiros físicos...

Vamos pensar em relações.

Assim nasceram:

  • tabelas

  • linhas

  • colunas

  • chaves

  • relacionamentos

Nascia o Modelo Relacional.

Poucos anos depois, a própria IBM desenvolveu o System R, um projeto experimental que introduziu a linguagem SQL (Structured Query Language). A ideia mostrou tanto potencial que outras empresas passaram a investir no modelo, surgindo plataformas como Oracle, Informix, SQL Server, PostgreSQL, MySQL e, naturalmente, o Db2, um dos pilares do universo IBM Mainframe.


Por que o SQL fez tanto sucesso?

Porque ele resolveu um problema gigantesco.

Imagine um banco.

Existem milhões de clientes.

Cada cliente possui:

  • conta corrente

  • poupança

  • investimentos

  • cartões

  • empréstimos

Tudo isso precisa estar relacionado.

Se João mudar de endereço...

Não faz sentido atualizar vinte lugares diferentes.

O SQL organiza essas informações em tabelas relacionadas, reduzindo redundâncias e garantindo consistência.

Esse conceito recebe o nome de normalização.

Parece um detalhe.

Na prática...

Economizou bilhões de dólares em armazenamento ao longo da história.


ACID: o superpoder invisível

Existe um conceito que todo programador júnior deveria decorar.

ACID.

Não porque cai em entrevista.

Mas porque explica por que bancos confiam tanto em SQL.

Imagine transferir R$ 500 de uma conta para outra.

São duas operações:

  • retirar da Conta A

  • adicionar na Conta B

E se faltar energia exatamente no meio?

ACID garante que isso não aconteça.

Ou tudo acontece...

Ou nada acontece.

Isso é chamado de Atomicidade.

Depois temos:

Consistência

Os dados permanecem válidos.

Isolamento

Milhares de pessoas podem operar simultaneamente sem "atropelar" umas às outras.

Durabilidade

Depois do COMMIT...

Mesmo que o servidor desligue...

Os dados continuam lá.

É por isso que bancos, seguradoras e bolsas de valores continuam confiando em bancos relacionais.


Onde entra o Mainframe?

Agora vem uma curiosidade que muita gente desconhece.

Grande parte do dinheiro que circula diariamente no mundo passa por Mainframes.

Cartões.

PIX.

TED.

DOC.

Compras internacionais.

Folha de pagamento.

Seguros.

Tudo isso frequentemente passa por sistemas COBOL utilizando Db2 for z/OS.

Quando você escreve:

EXEC SQL

SELECT SALDO

INTO :WS-SALDO

FROM CONTAS

WHERE NUMERO = :WS-CONTA

END-EXEC.

O SQL não está apenas buscando dados.

Existe todo um universo trabalhando por trás:

  • Pré-compilador SQL

  • DBRM

  • Package

  • Bind

  • Plan

  • Otimizador

  • Buffer Pools

  • Logging

  • Locking

  • Recovery

O desenvolvedor enxerga apenas a ponta do iceberg.


Então por que surgiu o NoSQL?

Porque o mundo mudou.

Muito.

Em 1970 ninguém imaginava redes sociais.

Nem streaming.

Nem IoT.

Nem celulares.

Nem milhões de fotos por minuto.

Agora imagine armazenar:

  • vídeos

  • comentários

  • curtidas

  • localização

  • mensagens

  • sensores

  • documentos JSON

Tudo isso em tabelas relacionais.

Funciona?

Sim.

Mas nem sempre é a melhor escolha.

Foi então que surgiu o movimento NoSQL.

Curiosamente...

NoSQL não significa "Sem SQL".

Significa:

Not Only SQL

Ou seja...

Existem outros modelos além do relacional.


Os quatro reinos do NoSQL

Quando alguém diz "NoSQL", na verdade está falando de uma família inteira de bancos.

📄 Documento

Exemplo:

MongoDB.

Os dados ficam parecidos com JSON.

Cada documento pode possuir uma estrutura diferente.

Perfeito para aplicações web.


🔑 Chave-Valor

Exemplo:

Redis.

Imagine um gigantesco dicionário.

Você fornece uma chave.

Recebe um valor.

Extremamente rápido.

Muito utilizado como cache.


📚 Colunar

Exemplos:

Cassandra.

ScyllaDB.

HBase.

Projetados para trabalhar com enormes volumes distribuídos.

Muito utilizados em Big Data.


🌐 Grafos

Exemplo:

Neo4j.

Aqui o importante não são os registros.

São os relacionamentos.

Quem conhece quem?

Quem comprou junto?

Quem transferiu dinheiro para quem?

Ideal para detectar fraudes.


SQL é rígido?

Sim.

E isso é uma vantagem.

Imagine um cadastro de funcionários.

Todos possuem:

  • matrícula

  • nome

  • salário

  • departamento

É ótimo exigir que todos tenham exatamente a mesma estrutura.

Já em uma rede social...

Cada usuário pode possuir informações diferentes.

Uns possuem Instagram.

Outros TikTok.

Outros LinkedIn.

Outros nenhum.

Forçar uma estrutura única pode ser desnecessário.

É aí que bancos orientados a documentos brilham.


Escalabilidade

Existe outra diferença importante.

Tradicionalmente, bancos SQL cresceram na vertical.

Mais CPU.

Mais memória.

Mais discos.

Servidor maior.

Já muitos bancos NoSQL foram desenhados pensando em crescer horizontalmente.

Mais servidores.

Mais nós.

Mais máquinas.

É o modelo utilizado por empresas como Google, Amazon, Netflix e Meta.

Mas atenção: hoje essa divisão não é absoluta. Bancos relacionais modernos também oferecem mecanismos de escalabilidade horizontal, e diversas soluções NoSQL implementam recursos avançados de consistência e transações.


SQL também evoluiu

Existe outro mito.

"O SQL parou no tempo."

Errado.

Hoje temos:

  • JSON dentro do PostgreSQL

  • JSON no Oracle

  • JSON no SQL Server

  • JSON no Db2

  • XML

  • Graph Extensions

  • Machine Learning integrado

  • Consultas analíticas

  • Window Functions

  • Compressão avançada

  • IA auxiliando otimização

Os bancos relacionais modernos absorveram diversas características que antes eram exclusivas do NoSQL.


NoSQL também evoluiu

MongoDB hoje possui:

  • transações

  • índices sofisticados

  • agregações complexas

Redis deixou de ser apenas cache.

Neo4j suporta consultas extremamente sofisticadas.

Cassandra possui consistência configurável.

Ou seja...

Os mundos estão convergindo.


O conceito mais importante: Polyglot Persistence

Se existe uma expressão que todo desenvolvedor moderno deveria conhecer é esta:

Polyglot Persistence.

Ela significa:

usar o banco certo para cada problema.

Imagine um banco digital.

Ele pode utilizar:

Db2 → contas correntes

MongoDB → documentos

Redis → cache

Neo4j → fraude

Elastic → pesquisa

Banco Vetorial → IA

Tudo funcionando junto.

Não existe regra dizendo que um sistema deve possuir apenas um banco.


O papel do COBOL nessa história

Aqui existe um enorme equívoco.

Muitos imaginam que COBOL só conversa com Db2.

Hoje isso está longe da realidade.

Aplicações COBOL podem consumir:

REST APIs.

MQ.

Kafka.

gRPC.

z/OS Connect.

Eventos.

Microsserviços.

E esses serviços podem acessar MongoDB, Redis ou qualquer outro banco moderno.

O COBOL continua sendo o cérebro transacional.

Os demais componentes ampliam suas capacidades.


Dicas para quem está começando

Se eu pudesse aconselhar um programador júnior, seguiria esta ordem:

  1. Aprenda modelagem de dados.

  2. Domine SQL.

  3. Entenda normalização.

  4. Aprenda índices.

  5. Estude planos de acesso.

  6. Descubra como funciona um otimizador.

  7. Aprenda transações.

  8. Depois estude MongoDB.

  9. Conheça Redis.

  10. Descubra Neo4j.

  11. Aprenda APIs REST.

  12. Entenda eventos e mensageria.

A tecnologia muda.

Os fundamentos permanecem.


Curiosidades que pouca gente conhece

☕ O primeiro grande projeto SQL da IBM chamava-se System R.

☕ O Db2 nasceu dentro da IBM justamente para materializar as ideias do modelo relacional em ambientes corporativos.

☕ O comando SELECT * é um dos mais utilizados por iniciantes... e um dos menos recomendados em produção. Buscar apenas as colunas necessárias reduz tráfego de dados e melhora o desempenho.

☕ Muitos sistemas bancários escritos há mais de 30 anos continuam processando milhões de transações diariamente com desempenho impressionante.

☕ Redis consegue responder consultas em microssegundos porque mantém os dados principalmente em memória.

☕ Neo4j foi inspirado na Teoria dos Grafos, um ramo da matemática muito mais antigo do que os computadores.

☕ Diversos bancos NoSQL utilizam conceitos publicados em artigos científicos da Google e da Amazon sobre sistemas distribuídos, como Bigtable, Dynamo e MapReduce.

☕ O termo NoSQL surgiu como um movimento alternativo, mas acabou sendo reinterpretado como Not Only SQL, refletindo melhor a realidade atual.


Easter Eggs Bellacosa Mainframe 🥚

🔍 Easter Egg #1 – O herói invisível

Sempre que você executa um SELECT no Db2, existe um componente trabalhando silenciosamente para decidir o melhor caminho de acesso: o otimizador de consultas. Ele é como o GPS do banco de dados. Você não o vê, mas ele escolhe a rota mais eficiente.


🥚 Easter Egg #2 – O COBOL nunca pergunta "como"

Um programa COBOL com Embedded SQL apenas descreve o que deseja. Quem decide como buscar os dados é o Db2. Essa separação entre intenção e estratégia foi uma das grandes revoluções introduzidas pelo SQL.


🥚 Easter Egg #3 – O Mainframe conversa com o futuro

Um programa COBOL criado na década de 1990 pode, com poucas adaptações, consumir uma API REST hospedada na nuvem que, por sua vez, grava documentos em MongoDB e publica eventos em Kafka. O legado não é um obstáculo: ele pode ser parte da arquitetura moderna.


🥚 Easter Egg #4 – Nem tudo é tabela

Quando você olhar para uma árvore genealógica, uma rede social ou um mapa de rotas aéreas, pense em grafos. Quando observar um catálogo de produtos com atributos diferentes para cada item, pense em documentos. Quando acessar seu extrato bancário, pense em tabelas relacionais. O segredo está em reconhecer o problema antes de escolher a ferramenta.


Conclusão

No fim das contas, SQL e NoSQL não são adversários. São aliados que nasceram em épocas diferentes para enfrentar desafios distintos. O SQL continua sendo o alicerce dos sistemas críticos que exigem consistência, integridade e confiabilidade — exatamente o tipo de ambiente onde o IBM Z e o Db2 brilham há décadas. Já o NoSQL oferece flexibilidade, escalabilidade e modelos especializados que complementam essas capacidades em aplicações modernas, distribuídas e orientadas a dados.

Se você está iniciando sua jornada como programador COBOL ou desenvolvedor Mainframe, não caia na armadilha dos modismos. Aprenda primeiro os fundamentos: modelagem de dados, SQL, índices, transações e otimização de consultas. Esses conhecimentos acompanharão toda a sua carreira. Depois, expanda seus horizontes estudando MongoDB, Redis, Cassandra, Neo4j e outras tecnologias que fazem parte das arquiteturas atuais.

Lembre-se sempre de uma filosofia muito presente no universo Bellacosa Mainframe:

Um excelente desenvolvedor não é aquele que conhece todas as ferramentas, mas aquele que sabe exatamente quando usar cada uma delas.

No mundo do IBM Z, onde convivem sistemas escritos há décadas com APIs, microsserviços, inteligência artificial e computação em nuvem, essa capacidade de escolher a tecnologia certa é o que transforma um programador júnior em um verdadeiro arquiteto de soluções. Afinal, o futuro não pertence ao SQL nem ao NoSQL. Ele pertence aos profissionais que compreendem ambos e conseguem fazê-los trabalhar juntos.


terça-feira, 22 de fevereiro de 2022

Top 5 na Comunidade Digital Innovation One

Ontem foi um dia muito feliz, fui surpreendido com uma carta, ao abri-la foi muita emoção, ser reconhecido pelos meus pares, dentre uma comunidade de 700 k, parceiros, mestres jedi, padawans e renegado. Sempre aprendendo e divertindo-se no percurso, muito obrigado família @digitalinnovation.one

segunda-feira, 21 de fevereiro de 2022

De Python ao COBOL no IBM Z : Você Não Está Voltando no Tempo. Está Entrando no Computador que Nunca Parou de Evoluir.

 

Bellacosa Mainframe do python ao cobol no ibm z

# ☕ Um Café no Bellacosa Mainframe

De Python ao COBOL no IBM Z

Você Não Está Voltando no Tempo. Está Entrando no Computador que Nunca Parou de Evoluir.

"Quem programa em Python já pensa como um desenvolvedor. Aprender COBOL no IBM Z não significa reaprender programação. Significa aprender um novo ecossistema onde confiabilidade vale mais que velocidade, e onde milhões de transações passam todos os dias sem que ninguém perceba."


Introdução

Existe uma pergunta que recebo com frequência:

"Sou desenvolvedor Python. Vale a pena aprender COBOL e Mainframe?"

Minha resposta costuma surpreender.

Não apenas vale a pena. Você provavelmente aprenderá engenharia de software que dificilmente encontrará em qualquer outro ambiente.

O mercado costuma vender uma falsa dicotomia:

  • Python é moderno.

  • COBOL é antigo.

A realidade é muito diferente.

Python possui pouco mais de trinta anos.

O ecossistema IBM Z evolui continuamente há mais de sessenta anos.

Não estamos falando de software ultrapassado.

Estamos falando da plataforma responsável por executar boa parte das operações financeiras, seguradoras, governos, companhias aéreas, cartões de crédito e sistemas críticos do planeta.

O interessante é que um programador Python já possui diversas habilidades que tornam essa transição muito mais natural do que imagina.

Vamos descobrir por quê.


Bellacosa Mainframe python versus cobol no zos

Antes de aprender COBOL, esqueça um mito

Você não está trocando Python por COBOL.

Você está adicionando uma nova ferramenta.

Da mesma forma que um carpinteiro possui martelo, serra, plaina e furadeira, um engenheiro de software também possui diversas linguagens.

Python continuará excelente para:

  • automação

  • IA

  • APIs

  • Data Science

  • DevOps

  • scripts

COBOL continuará excelente para:

  • regras de negócio

  • processamento financeiro

  • batch

  • alta disponibilidade

  • transações críticas

  • processamento massivo

Não existe vencedor.

Existe contexto.


O que um programador Python já sabe

Muito mais do que imagina.

Quando alguém aprende programação de verdade, aprende conceitos.

Linguagens são apenas dialetos.

Você já conhece:

  • variáveis

  • constantes

  • operadores

  • funções

  • módulos

  • lógica

  • estruturas condicionais

  • repetições

  • tratamento de erros

  • arquivos

  • entrada e saída

  • testes

  • depuração

Tudo isso continuará existindo.

A diferença é a forma como aparece.


O primeiro choque

Em Python você escreve:

if saldo > 0:
    print("Aprovado")

Em COBOL:

IF SALDO > ZERO
    DISPLAY "APROVADO"
END-IF.

A lógica?

Exatamente igual.

O estilo?

Completamente diferente.

COBOL prefere ser explícito.

Python prefere ser minimalista.


Python é uma linguagem

COBOL no Mainframe é um ecossistema

Essa talvez seja a maior diferença.

Um desenvolvedor Python normalmente trabalha assim:

Editor
↓

Python

↓

Bibliotecas

↓

Sistema Operacional

No IBM Z:

TSO

↓

ISPF

↓

JCL

↓

COBOL

↓

DB2

↓

CICS

↓

IMS

↓

z/OS

Você não aprende apenas uma linguagem.

Você aprende uma plataforma inteira.

É parecido com aprender desenvolvimento Web.

Você não aprende apenas HTML.

Aprende HTML, CSS, JavaScript, servidor, banco, protocolos...

No Mainframe acontece exatamente isso.


O segundo choque

Em Python normalmente você executa:

python programa.py

No Mainframe:

  • editar

  • salvar

  • compilar

  • linkar

  • executar

  • consultar spool

  • verificar retorno

  • analisar mensagens

Parece mais trabalhoso.

Na verdade, é muito mais controlado.

Cada etapa possui um propósito.


O que parece estranho inicialmente

Python:

arquivo = open(...)

COBOL:

SELECT CLIENTES
ASSIGN TO DDCLIENTE.

"Cadê o nome do arquivo?"

Está no JCL.

O programa não conhece o arquivo físico.

Essa separação é uma das grandes ideias do Mainframe.

Trocar arquivos sem alterar código.


Orientação a Objetos?

Sim.

COBOL suporta OO há muitos anos.

Mas no mercado você encontrará principalmente programas procedurais.

Não porque COBOL não suporte.

Mas porque grande parte dos sistemas foi construída muito antes da popularização da orientação a objetos.


Tipagem

Python:

x = 10

COBOL:

01 X PIC 9(02).

Parece estranho.

Depois você percebe que o compilador sabe exatamente quanto espaço cada dado ocupará.

Isso faz enorme diferença quando bilhões de registros são processados.


Precisão numérica

Python possui excelentes bibliotecas.

Mas o COBOL nasceu para números financeiros.

Imagine calcular juros compostos durante quarenta anos.

Imagine fazer isso para centenas de milhões de contas.

É exatamente esse tipo de problema que COBOL resolveu durante décadas.


O maior aprendizado

Python ensina produtividade.

Mainframe ensina disciplina.

No IBM Z você aprende:

  • planejamento

  • padronização

  • auditoria

  • versionamento

  • governança

  • rastreabilidade

  • segurança

  • confiabilidade

Esses conceitos acompanham você para qualquer linguagem.


A maior mudança mental

No mundo Python pensamos:

Como resolver este problema?

No Mainframe pensamos:

Como resolver este problema sem colocar o banco em risco?

A preocupação muda completamente.


O que estudar primeiro

Muita gente começa pelo COBOL.

Eu faria diferente.


Etapa 1 — Entender o Mainframe

Antes de escrever uma linha de código, entenda:

  • IBM Z

  • LPAR

  • z/OS

  • usuários

  • datasets

  • spool

  • JES2

  • catálogo

  • compilação

Sem isso o COBOL parecerá confuso.


Etapa 2 — Aprender TSO

Você precisa aprender:

  • logon

  • logoff

  • HELP

  • PROFILE

  • ALLOCATE

  • LISTCAT

Poucos comandos.

Grande impacto.


Etapa 3 — ISPF

Domine:

  • Editor

  • Browse

  • Utilities

  • Member List

  • Search

  • Compare

Passe algumas horas apenas navegando.


Etapa 4 — Datasets

Este é o primeiro grande divisor de águas.

Aprenda:

  • PS

  • PDS

  • PDSE

  • VSAM

Depois:

  • organização

  • bloqueio

  • atributos

  • RECFM

  • LRECL

  • BLKSIZE

Sem isso o restante ficará nebuloso.


Etapa 5 — JCL

Muitos evitam JCL.

Erro enorme.

JCL é o "Python launcher" do Mainframe.

Aprenda:

  • JOB

  • EXEC

  • DD

  • PROC

  • COND

  • IF

  • INCLUDE

Sem JCL não existe compilação.


Etapa 6 — COBOL Básico

Agora sim.

Comece com:

  • IDENTIFICATION

  • ENVIRONMENT

  • DATA DIVISION

  • PROCEDURE DIVISION

Depois:

  • MOVE

  • ADD

  • SUBTRACT

  • COMPUTE

  • IF

  • EVALUATE

  • PERFORM

Nada além disso.


Etapa 7 — Arquivos

Aprenda:

  • Sequential

  • Indexed

  • Relative

Depois:

  • OPEN

  • CLOSE

  • READ

  • WRITE

  • REWRITE

  • DELETE

  • START

Treine muito.


Etapa 8 — VSAM

Agora tudo faz sentido.

Aprenda:

  • KSDS

  • ESDS

  • RRDS

Depois:

  • chave

  • acesso direto

  • acesso sequencial


Etapa 9 — DB2

Aqui o desenvolvedor Python sente-se novamente em casa.

SQL continua SQL.

Você estudará:

  • SELECT

  • INSERT

  • UPDATE

  • DELETE

  • CURSOR

  • COMMIT

  • ROLLBACK

A lógica é praticamente a mesma.


Etapa 10 — CICS

Finalmente chega ao ambiente online.

Aprenda:

  • transações

  • mapas

  • COMMAREA

  • Channels

  • Containers

  • EXEC CICS

Agora você entenderá como bancos processam operações em tempo real.


O que praticar diariamente

Não basta ler.

É preciso escrever código.

Sugiro pequenos desafios.

Semana 1

  • DISPLAY

  • ACCEPT

  • variáveis


Semana 2

  • IF

  • EVALUATE

  • PERFORM


Semana 3

  • tabelas

  • OCCURS

  • índices


Semana 4

  • arquivos sequenciais


Semana 5

  • VSAM


Semana 6

  • SQL


Semana 7

  • JCL


Semana 8

  • programas completos


O que um programador Python aprende com COBOL

Mais do que imagina.

Aprende:

  • processamento em lote

  • processamento transacional

  • controle de recursos

  • otimização de I/O

  • estruturas de dados fixas

  • planejamento de memória

  • arquitetura corporativa

  • auditoria

  • governança

  • compatibilidade

Essas habilidades aumentam a maturidade técnica independentemente da linguagem utilizada.


O que um programador COBOL pode aprender com Python

A troca também funciona.

Python ensina:

  • automação

  • APIs REST

  • IA

  • testes automatizados

  • integração

  • DevOps

  • scripts

  • análise de dados

Hoje o profissional mais valorizado costuma conhecer os dois mundos.


A combinação poderosa

Imagine este cenário.

Python:

  • chama uma API.

API:

  • conversa com z/OS Connect.

z/OS Connect:

  • chama um programa COBOL.

COBOL:

  • consulta DB2.

Resultado:

  • retorna JSON.

Para o usuário parece uma aplicação moderna.

Nos bastidores, quarenta anos de regras de negócio continuam funcionando com segurança e desempenho.

É exatamente assim que muitas organizações modernizam seus sistemas sem reescrever décadas de conhecimento.


Erros comuns de quem vem do Python

  1. Tentar escrever COBOL como Python.

Cada linguagem possui sua filosofia.

  1. Ignorar JCL.

Sem ele você não entende o ciclo de desenvolvimento.

  1. Pular datasets.

Arquivos são parte fundamental do ecossistema.

  1. Estudar apenas sintaxe.

O diferencial está na arquitetura do IBM Z.

  1. Ter pressa.

Mainframe recompensa consistência, não velocidade.


Uma trilha de estudos de 24 semanas

SemanasTema
1–2Arquitetura IBM Z e z/OS
3–4TSO e ISPF
5–6Datasets e catálogo
7–9JCL
10–14COBOL Fundamental
15–16Arquivos Sequenciais e VSAM
17–19DB2 e SQL Embutido
20–21CICS
22Debug e análise de ABENDs
23Integração com APIs, JSON e XML
24Projeto final integrando Batch, DB2 e CICS

Ao final desse percurso, o desenvolvedor já terá uma visão sólida do ambiente corporativo IBM Z e poderá evoluir para temas como RACF, IMS, MQ, z/OS Connect, REXX, DevOps para Mainframe e automação.


O verdadeiro objetivo

Aprender Mainframe não é decorar comandos do ISPF.

Não é memorizar JCL.

Não é conhecer todas as cláusulas do COBOL.

O verdadeiro objetivo é desenvolver uma nova forma de pensar sistemas críticos.

Você passa a enxergar software sob a ótica da disponibilidade, da previsibilidade, da integridade dos dados e da continuidade do negócio. São princípios que sustentam bancos, seguradoras, bolsas de valores, companhias aéreas e órgãos governamentais há décadas.

Quando você domina esses conceitos, volta ao mundo Python mais preparado para construir sistemas robustos, escaláveis e resilientes.


Conclusão

Se você já programa em Python, a parte mais difícil ficou para trás: aprender a pensar como desenvolvedor.

A jornada para o COBOL no IBM Z não exige abandonar esse conhecimento. Exige expandi-lo.

Você descobrirá que if, for, funções, arquivos, SQL e algoritmos continuam presentes. O que muda é o ambiente, a disciplina operacional e a responsabilidade de trabalhar em sistemas que não podem falhar.

No Bellacosa Mainframe costumo dizer que o Mainframe não é um museu da computação; é uma universidade permanente de engenharia de software. Quem entra nesse ecossistema aprende muito mais do que uma linguagem: aprende arquitetura, confiabilidade, governança e a importância de construir software que continue funcionando por décadas.

Python e COBOL não competem. Eles se complementam. O profissional que transita entre esses dois universos torna-se capaz de conectar inovação e legado, nuvem e missão crítica, APIs modernas e regras de negócio consolidadas.

E talvez essa seja a maior lição da jornada:

Você não está deixando o Python para aprender COBOL. Está ampliando sua caixa de ferramentas com uma das plataformas mais sólidas e respeitadas da história da computação.

Bem-vindo ao IBM Z. O café está passado. Agora é hora de escrever seu primeiro programa.

domingo, 20 de fevereiro de 2022

Ferramentas para Implementar CI/CD no Mainframe

 

Bellacosa Mainframe apresenta ferramentas ci/cd para mainframers

☕ Um Café no Bellacosa Mainframe

Ferramentas para Implementar CI/CD no Mainframe

Do Git ao IBM Z: Construindo uma Esteira Moderna para Aplicações COBOL

"O maior erro de um programador COBOL é imaginar que CI/CD significa apenas instalar Jenkins. O verdadeiro pipeline começa muito antes da primeira ferramenta e termina muito depois do deploy."

Durante muitos anos existiu um mito dentro das equipes de desenvolvimento IBM Z.

O mito dizia que DevOps era coisa de aplicações Java.

Que Docker era para Linux.

Que Git era para desenvolvedores Web.

Que CI/CD não fazia sentido para COBOL.

Enquanto isso, silenciosamente, bancos, seguradoras, bolsas de valores, empresas aéreas e grandes instituições financeiras começaram a automatizar praticamente todo o ciclo de desenvolvimento de aplicações Mainframe.

Hoje, um programa COBOL raramente percorre o caminho entre desenvolvimento e produção apenas pelas mãos de um operador. Em vez disso, ele passa por uma esteira automatizada composta por dezenas de ferramentas responsáveis por versionamento, compilação, análise de qualidade, testes, empacotamento, implantação, monitoramento e auditoria.

Se antigamente o programador entregava apenas um fonte COBOL, hoje ele entrega um conjunto de artefatos que precisam passar por um pipeline inteligente.

Neste café vamos conhecer as principais ferramentas que compõem esse ecossistema moderno.


O quebra-cabeça do CI/CD

Antes de falar de ferramentas, precisamos entender uma verdade importante.

Não existe uma ferramenta chamada CI/CD.

CI/CD é um conjunto de práticas.

Cada ferramenta resolve apenas uma parte do problema.

Imagine uma linha de montagem de automóveis.

Uma máquina solda.

Outra pinta.

Outra instala o motor.

Outra testa os freios.

Nenhuma delas constrói o carro sozinha.

No mundo DevOps acontece exatamente a mesma coisa.


O pipeline moderno

Um pipeline corporativo normalmente possui etapas como:

Git

↓

Merge

↓

Build

↓

Compile

↓

Static Analysis

↓

Unit Test

↓

Integration Test

↓

Artifact

↓

Deploy DEV

↓

Deploy QA

↓

Approval

↓

Deploy Production

↓

Monitoring

Cada etapa pode utilizar uma ferramenta diferente.


Git — O novo PDS do Coboleiro

A primeira ferramenta que todo desenvolvedor precisa conhecer é o Git.

Não importa se você trabalha com COBOL, PL/I, Assembler ou Java.

Sem controle de versões não existe CI/CD.

Git permite:

  • histórico completo;

  • rollback;

  • branches;

  • merge;

  • auditoria;

  • colaboração entre equipes.

Para quem vem do mundo IBM Z, uma boa analogia é pensar que o Git é um grande PDS inteligente que registra todas as alterações feitas em cada membro, preservando versões e identificando exatamente quem modificou cada linha de código.


GitHub, GitLab e Bitbucket

O Git controla versões localmente.

Já GitHub, GitLab e Bitbucket hospedam os repositórios e adicionam funcionalidades colaborativas.

Essas plataformas oferecem:

  • Pull Requests;

  • Code Review;

  • gestão de branches;

  • integração com pipelines;

  • controle de permissões;

  • rastreabilidade.

No dia a dia, um programador COBOL pode alterar um programa, abrir um Pull Request e aguardar a aprovação do líder técnico antes que o código seja integrado à branch principal.


Jenkins — O Maestro da Orquestra

Se o Git armazena o código, quem coordena a esteira?

Uma das respostas mais comuns é o Jenkins.

O Jenkins é um servidor de automação.

Sua função é executar tarefas automaticamente sempre que algum evento ocorre.

Por exemplo:

git push

↓

Executar Build

↓

Compilar

↓

Executar testes

↓

Publicar relatório

↓

Enviar e-mail

↓

Implantar

Para um coboleiro, o Jenkins lembra bastante um agendador de JOBs.

A diferença é que, em vez de executar apenas batchs, ele orquestra toda a cadeia de desenvolvimento.


GitHub Actions

Nos últimos anos, GitHub Actions tornou-se uma excelente alternativa ao Jenkins.

O pipeline fica descrito em arquivos YAML dentro do próprio repositório.

Exemplo simplificado:

Push

↓

Checkout

↓

Build

↓

Test

↓

Deploy

Toda alteração no código pode disparar automaticamente essa sequência.


GitLab CI

Quem utiliza GitLab encontra uma solução semelhante.

O arquivo .gitlab-ci.yml define as etapas do pipeline.

Cada etapa executa scripts específicos.

É uma excelente opção para organizações que desejam manter todo o ciclo DevOps em uma única plataforma.


Docker — O Ambiente que Viaja Junto

Talvez esta seja a ferramenta mais mal compreendida pelos desenvolvedores Mainframe.

Docker normalmente não executa aplicações z/OS.

Ele executa aplicações Linux.

Mas isso não significa que ele esteja distante do IBM Z.

Muito pelo contrário.

Imagine uma aplicação composta por:

  • Front-end React;

  • API Java;

  • Redis;

  • Kafka;

  • PostgreSQL;

  • COBOL no Mainframe.

Durante os testes, Docker pode subir automaticamente todos os componentes distribuídos, permitindo que apenas o Mainframe permaneça como ambiente externo.

Assim, o pipeline consegue validar toda a aplicação antes da entrega.


Easter Egg Bellacosa

Uma Docker Image lembra muito uma PROC catalogada.

Alguém preparou um ambiente padronizado.

Os demais apenas reutilizam.

Da mesma forma que uma PROC encapsula passos JCL reutilizáveis, uma imagem Docker encapsula bibliotecas, ferramentas e configurações.


IBM Dependency Based Build (DBB)

Agora entramos nas ferramentas específicas do mundo IBM Z.

O IBM Dependency Based Build foi criado para automatizar builds de aplicações Mainframe.

Seu grande diferencial é entender dependências entre:

  • programas COBOL;

  • COPYBOOKs;

  • JCLs;

  • BMS;

  • PL/I;

  • Assembler.

Imagine alterar um COPYBOOK.

Em vez de recompilar milhares de programas, o DBB identifica exatamente quais módulos dependem daquele componente.

Isso reduz drasticamente o tempo de build.


IBM Developer for z/OS (IDz)

Durante muitos anos o ISPF foi praticamente o único ambiente de desenvolvimento utilizado por programadores COBOL.

Hoje o IBM Developer for z/OS oferece recursos modernos:

  • edição inteligente;

  • autocomplete;

  • refatoração;

  • integração com Git;

  • depuração;

  • integração com pipelines.

Ele aproxima a experiência do desenvolvedor Mainframe daquela encontrada em IDEs modernas.


Zowe CLI

Poucas ferramentas revolucionaram tanto a integração entre Mainframe e DevOps quanto o Zowe.

O Zowe CLI permite executar comandos z/OS diretamente da linha de comando.

É possível:

  • enviar arquivos;

  • submeter JOBs;

  • consultar JES;

  • baixar datasets;

  • acessar USS;

  • manipular perfis.

Isso transforma o Mainframe em um participante natural dos pipelines modernos.

Um Jenkins pode executar comandos Zowe da mesma forma que executa comandos Linux.


z/OSMF

O z/OS Management Facility disponibiliza serviços REST para administração do ambiente.

Essas APIs permitem:

  • submeter JOBs;

  • consultar status;

  • manipular datasets;

  • automatizar operações.

Isso reduz a necessidade de scripts específicos e facilita a integração com ferramentas DevOps.


IBM UrbanCode Deploy

Quando falamos em implantação controlada, uma ferramenta bastante conhecida é o UrbanCode Deploy.

Ela oferece:

  • versionamento de pacotes;

  • promoção entre ambientes;

  • rollback;

  • aprovações;

  • auditoria;

  • histórico de deploys.

Em bancos, normalmente um pacote percorre DEV → QA → UAT → Produção obedecendo regras rígidas de governança.


SonarQube

Compilar não significa produzir código de qualidade.

É aí que entra o SonarQube.

Ele realiza análise estática identificando:

  • duplicação de código;

  • complexidade excessiva;

  • vulnerabilidades;

  • más práticas;

  • código morto.

No universo COBOL, também ajuda a localizar programas com manutenção difícil, excesso de GO TO ou baixa legibilidade.


Testes Automatizados

CI/CD sem testes automatizados é apenas automação de compilação.

Ferramentas como ZUnit permitem validar programas COBOL automaticamente.

Cada alteração dispara dezenas ou centenas de testes sem intervenção humana.

Isso reduz regressões e aumenta a confiança nas entregas.


Nexus e Artifactory

Após o build surge outra pergunta.

Onde armazenar os artefatos?

Ferramentas como Nexus Repository e JFrog Artifactory centralizam:

  • pacotes;

  • bibliotecas;

  • versões;

  • dependências.

Mesmo quando o artefato final é um LOAD Module, o pipeline pode armazenar documentação, scripts, relatórios e componentes auxiliares.


Ansible

Cada vez mais utilizado em ambientes híbridos.

Permite automatizar:

  • configuração;

  • implantação;

  • execução de comandos;

  • integração entre servidores Linux e Mainframe.

Com coleções específicas para IBM Z, torna-se possível executar tarefas administrativas repetitivas de forma padronizada.


OpenShift

Embora aplicações COBOL normalmente permaneçam no z/OS, muitos componentes modernos são executados em OpenShift.

APIs.

Microsserviços.

Monitoramento.

Dashboards.

Ferramentas de apoio ao pipeline.

Tudo isso pode coexistir com o Mainframe.


Monitoramento

Depois do deploy o trabalho não termina.

Ferramentas como:

  • Grafana;

  • Prometheus;

  • Elastic;

  • Splunk;

  • Dynatrace;

  • Instana.

permitem acompanhar métricas, logs e desempenho.

No IBM Z elas complementam informações provenientes de RMF, SMF e outras soluções tradicionais.


Segurança

Pipelines modernos também verificam:

  • credenciais;

  • certificados;

  • assinaturas;

  • vulnerabilidades;

  • conformidade.

O objetivo é impedir que software inseguro alcance produção.


Como tudo conversa?

Imagine o seguinte fluxo.

Git

↓

GitHub

↓

GitHub Actions

↓

Docker

↓

DBB

↓

Compile COBOL

↓

ZUnit

↓

SonarQube

↓

Artifact

↓

UrbanCode

↓

Produção IBM Z

Cada ferramenta executa apenas sua especialidade.

Juntas, constroem uma esteira extremamente confiável.


O erro mais comum

Muitas empresas acreditam que basta instalar Jenkins.

Não basta.

Sem:

  • versionamento;

  • testes;

  • padronização;

  • documentação;

  • governança;

o pipeline apenas automatiza problemas antigos.

Existe uma frase famosa no mundo DevOps:

"Automatizar um processo ruim apenas faz com que ele falhe mais rápido."


Como escolher as ferramentas?

Não existe resposta única.

Uma empresa pequena pode começar apenas com:

  • Git;

  • GitHub;

  • GitHub Actions;

  • Zowe.

Uma organização maior pode utilizar:

  • GitLab;

  • Jenkins;

  • DBB;

  • SonarQube;

  • UrbanCode;

  • ZUnit;

  • Artifactory;

  • OpenShift;

  • Ansible.

Tudo depende da maturidade do ambiente.


A jornada do Coboleiro Moderno

O desenvolvedor COBOL do futuro continuará escrevendo PROCEDURE DIVISION.

Continuará criando JCL.

Continuará utilizando Db2.

Continuará desenvolvendo CICS.

Mas também precisará compreender conceitos como:

  • Git;

  • Pull Request;

  • Merge;

  • Pipeline;

  • Docker;

  • YAML;

  • Testes Automatizados;

  • Quality Gates;

  • DevSecOps;

  • Observabilidade.

Isso não significa abandonar o Mainframe.

Significa ampliar suas competências.


Conclusão

Durante décadas, o IBM Z foi visto como uma ilha tecnológica, separado do restante da engenharia de software. Hoje essa visão já não corresponde à realidade. As ferramentas modernas de CI/CD demonstram que é possível integrar aplicações COBOL aos mesmos processos de automação, qualidade e governança utilizados no desenvolvimento distribuído, preservando toda a confiabilidade que tornou o Mainframe indispensável para os negócios.

O segredo não está em substituir tecnologias tradicionais, mas em conectá-las de forma inteligente. Git não elimina o conhecimento sobre bibliotecas PDS; Docker não substitui o z/OS; Jenkins não toma o lugar do JES2; Zowe não elimina o ISPF. Cada ferramenta complementa o ambiente e amplia a capacidade de entrega das equipes.

Para o COBOL Jr, dominar esse ecossistema representa uma enorme vantagem competitiva. Ele deixa de ser apenas um programador que compila programas e passa a compreender toda a jornada do software, desde o primeiro commit até o monitoramento da aplicação em produção. Essa visão sistêmica é cada vez mais valorizada em bancos, seguradoras e empresas que executam milhares de transações por segundo no IBM Z.

No universo Bellacosa Mainframe, a mensagem é simples: o COBOL continua sendo o motor dos negócios, mas o CI/CD é a esteira invisível que mantém esse motor evoluindo com velocidade, qualidade e segurança. O profissional que aprender a combinar a robustez do Mainframe com as práticas modernas de DevOps estará preparado para construir a próxima geração de aplicações críticas, onde tradição e inovação caminham lado a lado.


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