☕ 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

quarta-feira, 11 de novembro de 2026

⚔️ SHINJA ZERO NO MEGAMI-SAMA: O JOGADOR MAIS FRACO DO ISEKAI E A DEUSA QUE NINGUÉM QUER ADORAR!

 

Bellacosa Mainframe apresenta Shinja Zero no Megami-sama

☕ UM CAFÉ NO BELLACOSA MAINFRAME

⚔️ SHINJA ZERO NO MEGAMI-SAMA: O JOGADOR MAIS FRACO DO ISEKAI E A DEUSA QUE NINGUÉM QUER ADORAR!

Uma investigação sobre deuses esquecidos, magia, RPGs, desigualdade de poderes, estratégias improváveis e um protagonista que precisa vencer um mundo programado para derrotá-lo.

A proposta de Shinja Zero no Megami-sama to Hajimeru Isekai Kouryaku é especialmente interessante para quem gosta de RPGs como Shangri-La Frontier: o protagonista não recebe poderes extraordinários, não é escolhido como salvador da humanidade e não começa sua aventura com um exército de admiradores.

Pelo contrário, Makoto Takatsuki recebe atributos miseráveis e acaba formando uma aliança com Noah, uma deusa que não possui um único fiel.

A grande pergunta é: será possível vencer um mundo inteiro utilizando habilidades consideradas inúteis?

E existe outra questão, mais interessante: por que uma divindade poderosa foi abandonada por seus seguidores?



1. Ficha técnica do anime

Título original

信者ゼロの女神サマと始める異世界攻略

Título internacional

Full Clearing Another World under a Goddess with Zero Believers

Autor

Isle Ōsaki (Aile Osaki)

Ilustrações da novel

Tam-U

Estúdio

HORNETS

Direção

Toshinori Fukushima

Roteiro

Touko Machida

Estreia

11 de outubro de 2026

Temporada

Outono japonês de 2026

Episódios

12 previstos; 5 exibidos até 13/11/2026

Duração

Cerca de 23–24 minutos

Gêneros

Isekai, fantasia, aventura, ação, romance e comédia

Classificação

Referência indicativa PG-13; classificação brasileira específica pode variar

Situação

Em exibição
Dados conferidos com a emissora japonesa, o site oficial e catálogos de anime.
BS朝日+2

2. História e sinopse — quando o mundo funciona como um RPG injusto

Makoto Takatsuki é um estudante japonês apaixonado por videogames, particularmente RPGs. Depois de um acidente com o ônibus de sua turma, ele e os colegas são transportados para um universo de fantasia.

Esse novo mundo possui monstros, magia, deuses, heróis, classes, atributos e habilidades especiais.

Normalmente, num isekai, o protagonista recebe algum privilégio extraordinário. Entretanto, Makoto descobre que está entre os indivíduos mais fracos de sua turma.

Enquanto os colegas recebem capacidades de heróis, guerreiros e sábios, ele é classificado como um simples aprendiz de mago, com poderes extremamente limitados.

Há ainda uma condição cruel: sua expectativa de vida inicial é de apenas dez anos.

Makoto encontra então Noah, uma divindade sem seguidores. Ela lhe oferece a possibilidade de se tornar seu primeiro fiel e estabelece uma relação de cooperação.

Mas Noah não é apenas uma deusa pouco popular.

Ela esconde uma história envolvendo antigas guerras divinas, uma prisão e uma missão potencialmente impossível.

Anime United+2

A proposta narrativa

A aventura começa com três problemas:

  • Makoto não possui o poder necessário para sobreviver facilmente.

  • Noah precisa de alguém disposto a acreditar nela.

  • Libertar Noah envolve enfrentar forças muito superiores às capacidades iniciais de Makoto.

O diferencial é que a história não trata apenas de subir de nível. Trata de descobrir como vencer com os recursos disponíveis.

Isso transforma o protagonista em algo semelhante a um jogador que escolheu a dificuldade máxima e tenta explorar cuidadosamente todas as regras do sistema.

3. Os personagens principais


Makoto Takatsuki — o estrategista subestimado

Dublado por Souhei Horikane.

Makoto compensa atributos insuficientes com treinamento, disciplina, observação e uso criativo da magia. Sua mentalidade de jogador permite interpretar obstáculos como problemas que podem ser resolvidos com preparação, não apenas com força bruta.

Sua principal qualidade não é ser invencível: é continuar experimentando quando os resultados parecem impossíveis.

N


oah Titan — a deusa dos zero fiéis

Dublada por Ikumi Hasegawa.

Noah pertence a uma antiga linhagem divina e foi aprisionada em um templo submarino depois de acontecimentos ligados a uma guerra entre deuses, ocorrida milhões de anos antes.

Sua personalidade combina charme, insistência, segredos e uma necessidade desesperada de recuperar influência. A relação com Makoto é o coração emocional e religioso da narrativa.


Lucy — a maga explosiva

Dublada por Yukina Shutou.

Lucy é uma elfa ligada à magia de fogo. Sua potência mágica contrasta com as dificuldades de controlar adequadamente os próprios poderes.

Sua parceria com Makoto demonstra que possuir grande capacidade ofensiva não equivale necessariamente a dominar o combate.



Aya Sasaki — a conexão com o passado

Dublada por Hitomi Sekine.

Integrante da turma transportada para outro mundo, Aya representa uma ligação importante com a vida anterior de Makoto. Sua presença amplia os aspectos pessoais e afetivos da história.

Outros personagens importantes incluem Ryosuke Sakurai, colega com o prestigiado papel de Herói da Luz; Michio Fujiwara, conhecido como Fujiyan, com suas habilidades comerciais; Nina, uma aventureira competente; Sofia, ligada ao culto da deusa da água; e Marie, que participa da vida de Makoto como aventureiro.

O elenco apresenta diferentes caminhos para prosperar nesse mundo: heroísmo, comércio, combate, religião e cooperação.

zero-believers-anime.com+1

4. Episódios — a jornada 01

Makoto se torna um fiel

11/10/2026

Apresentação do novo mundo, dos atributos desastrosos e do encontro com Noah.

02

Makoto encara uma missão

18/10/2026

Primeiros desafios práticos como aventureiro, testando seu treinamento e habilidades.

03

Makoto ganha uma companheira

25/10/2026

O início de uma parceria que amplia suas possibilidades de combate.

04

Makoto entra em sincronia

01/11/2026

Exploração da cooperação mágica e do desenvolvimento de suas técnicas.

05

Makoto explora uma masmorra

08/11/2026

Makoto, Lucy, Fujiyan e Nina enfrentam uma quimera antiga em uma masmorra.

06

Makoto encontra um dragão

Próximo

15/11/2026

Previsto: a jornada até Labyrinthos e o reencontro com Sakurai e Sofia.

Os títulos e as datas seguem os registros da BS Asahi e da produção oficial; as descrições são resumos sem revelações importantes.
BS朝日+2

A primeira grande mudança: do jogador solitário ao grupo

Os primeiros episódios constroem uma progressão importante. Inicialmente, Makoto precisa sobreviver praticamente sozinho. Depois, percebe que montar um grupo com competências complementares oferece possibilidades que seus atributos jamais permitiriam individualmente.

Lucy representa poder bruto difícil de controlar. Fujiyan oferece recursos, comércio e inteligência logística. Nina contribui com experiência real de combate.

Essa composição é uma boa aplicação da clássica mecânica de RPG em que cada integrante de uma equipe ocupa uma função diferente.

O episódio 5 exemplifica a ideia: a quimera possui características que tornam insuficiente depender apenas de ataques convencionais. O grupo precisa enfrentar um inimigo associado a uma era em que os monstros eram consideravelmente mais perigosos.

A partir daí, a aventura deixa de parecer apenas o treinamento de um aprendiz e começa a abordar ameaças históricas desse mundo.

5. Mangá, light novel e web novel — quantos volumes existem?

A origem: web novel (2018)

A história começou em 9 de maio de 2018, no portal japonês Shōsetsuka ni Narō.

Inicialmente, a obra utilizava outro título: Megami-sama no Onegai, ou aproximadamente O pedido da Deusa.

Em novembro de 2018, o título foi alterado durante o processo de publicação comercial.

A narrativa principal da web novel está marcada como concluída, mas sua página continuou recebendo atualizações, incluindo uma em novembro de 2026.

Ncode+1

A light novel (2019–2026)

A editora Overlap lançou a versão comercial em março de 2019, com ilustrações de Tam-U.

O volume 14 foi publicado em 20 de setembro de 2026, encerrando a série principal impressa.

Isso é uma excelente notícia para quem não gosta de começar uma história sem saber se existe um desfecho: a light novel possui um final publicado.

A versão comercial permite acompanhar o crescimento de Makoto muito além do estágio adaptado inicialmente pelo anime.

over-lap.co.jp+1

O mangá (2020–presente)

A adaptação ilustrada por Hakuto Shiroi estreou na Comic Gardo em abril de 2020.

O volume 11 foi lançado em 8 de outubro de 2026. Ele já alcança conflitos envolvendo conspirações religiosas, guerras e ameaças de escala nacional.

Isso demonstra como o universo cresce progressivamente, abandonando as pequenas missões para trabalhar disputas muito maiores.

over-lap.co.jp+1

Qual versão vale mais a pena?

Versão

Principal vantagem

Anime

Acessibilidade, vozes, humor e combates animados

Mangá

Expressões, ação visual e leitura mais rápida

Light novel

Detalhes sobre magia, personagens e construção do mundo

Web novel

Conhecer a origem da história e sua evolução editorial

A editora J-Novel Club publica edições da light novel e do mangá em inglês.

NamiComi

6. Estúdio HORNETS e qualidade da animação

O anime é produzido pelo estúdio HORNETS, com Toshinori Fukushima na direção e Touko Machida responsável pela composição da série e pelos roteiros.

O desenho dos personagens é supervisionado por Noriko Ito, enquanto AstroNoteS assina a música.

A abertura é Mirai no Ashiato, interpretada por 310, e o encerramento é Fall in Dream, de Suupeas.

over-lap.co.jp+1

Uma adaptação baseada em estratégia

A principal dificuldade técnica dessa história é transformar ações bastante mentais em cenas interessantes.

Makoto é um protagonista que precisa pensar, observar e planejar. Uma adaptação de qualidade não pode depender exclusivamente de explosões mágicas e movimentos rápidos.

Precisa transmitir o processo de descoberta.

O contraste entre Lucy, capaz de produzir grande poder mágico, e Makoto, limitado por suas habilidades, cria uma boa oportunidade visual: o espetáculo de um lado, a precisão do outro.

Na minha avaliação, o maior desafio artístico do anime é fazer uma vitória inteligente parecer tão emocionante quanto uma vitória conquistada pela força.

Também é importante não confundir uma animação econômica com uma adaptação necessariamente ruim. Isekais centrados em sistemas de habilidades dependem muito da clareza das cenas, do ritmo e da direção.

7. Censura, ecchi, violência e classificação etária

O anime contém alguns elementos de fanservice, imagens sexualizadas, situações românticas e humor associado ao elenco feminino.

A Crunchyroll apresenta avisos de conteúdo relativos a violência, imagens sexualizadas e linguagem imprópria.

Crunchyroll+1

Entretanto, há uma distinção importante entre conteúdo adulto, fanservice e censura.

Até 13 de novembro de 2026, não encontrei confirmação oficial de duas montagens distintas do anime, uma censurada para televisão e outra integral para plataformas ou Blu-ray.

Portanto, não seria correto afirmar que existem cenas retiradas, versões sem censura ou diferenças específicas entre a AT-X e a Crunchyroll sem uma comparação verificável.

O que esperar do conteúdo?

  • Violência: combates contra monstros, situações de risco e confrontos mágicos.

  • Sexualização: designs femininos e cenas de fanservice.

  • Romance: aproximações afetivas e situações cômicas de relacionamento.

  • Temas sombrios: manipulação religiosa, conflitos divinos e ameaças à sobrevivência.

Não é uma produção centrada em erotismo explícito. Seu núcleo narrativo permanece na aventura fantástica, com elementos românticos.

A referência PG-13 encontrada em catálogos internacionais é apenas indicativa, não uma confirmação de classificação oficial brasileira.

Traku+1

8. O verdadeiro diferencial: o sistema de magia e a mentalidade de jogador

Um aspecto particularmente interessante é a importância das habilidades consideradas fracas.

Makoto desenvolve sua especialização na magia de água, um atributo que não costuma receber tanto destaque quanto fogo, raio ou habilidades heroicas extraordinárias.

A premissa lembra uma discussão conhecida no universo dos RPGs: a diferença entre um personagem com excelentes atributos e um jogador que conhece profundamente as mecânicas.

Imagine dois aventureiros.

O primeiro possui um ataque capaz de causar 10.000 pontos de dano, mas não consegue acertar um inimigo protegido.

O segundo causa apenas 100 pontos por ataque, mas identifica uma vulnerabilidade e consegue impedir o inimigo de agir.

A vitória não é necessariamente do primeiro.

Essa é a filosofia de combate que torna Makoto interessante: aproveitar circunstâncias, sinergias e oportunidades que os personagens mais poderosos deixam passar.

A conexão com programação e sistemas

Existe até uma analogia muito apropriada para o universo Bellacosa Mainframe.

Um programa COBOL antigo pode parecer limitado quando comparado a tecnologias modernas. Entretanto, um programador que compreende profundamente as regras de negócio, a organização dos dados e as condições de execução pode produzir resultados surpreendentes.

Makoto funciona de maneira semelhante: não possui o melhor hardware, mas aprende a utilizar o sistema de maneira inteligente.

E Noah, por sua vez, conhece partes da arquitetura divina que os demais aventureiros desconhecem.

9. Religião, deuses e mensagens ocultas

A parte filosófica de Shinja Zero merece atenção.

O paradoxo da deusa sem seguidores

Noah possui existência divina, mas foi afastada da ordem religiosa dominante.

A obra apresenta um universo em que diferentes divindades disputam influência, legitimidade e seguidores. É possível interpretar esse arranjo como uma metáfora da concentração de poder.

Nesse mundo, fé não representa apenas uma convicção pessoal: ela integra as relações entre os seres humanos e as forças sobrenaturais.

A pergunta mais importante não é simplesmente se Noah é boa ou má.

É quem decide quais deuses merecem ser adorados.

O poder de quem foi excluído

Makoto e Noah possuem uma característica comum: ambos foram marginalizados pelo sistema.

Ele é considerado um aventureiro inútil; ela, uma divindade sem importância.

A aliança funciona porque os dois reconhecem algo um no outro que o restante do mundo despreza.

Essa é uma mensagem de superação, mas também uma crítica à avaliação das pessoas exclusivamente por indicadores.

A moralidade dos vencedores

A mitologia de Noah, envolvendo antigas guerras divinas e a oposição entre diferentes grupos de deuses, permite uma leitura mais profunda.

Será que uma entidade considerada perigosa realmente representa o mal? Ou essa classificação também pode refletir a perspectiva de quem venceu o conflito?

A narrativa abre espaço para esse questionamento, embora não se deva confundir a interpretação filosófica com uma declaração explícita do autor.

10. A aventura fica maior? O que acontece depois?

SPOILERS LEVES DA DIREÇÃO DA HISTÓRIA, SEM REVELAR O FINAL

Sim. E consideravelmente.

O universo que inicialmente parece um RPG de pequenas missões revela uma estrutura envolvendo reinos, tradições religiosas, antigas guerras, heróis lendários e entidades perigosas.

As histórias posteriores do mangá e da light novel exploram ameaças militares e conflitos entre poderes sobrenaturais.

A própria descrição editorial do volume 11 da light novel mostra que Makoto alcança confrontos relacionados ao Grande Rei Demônio e a acontecimentos históricos que ultrapassam muito sua trajetória inicial.

over-lap.co.jp

A proposta deixa de ser apenas o crescimento de um mago e se transforma numa discussão sobre o destino de um mundo.

O objetivo de resgatar Noah continua sendo um eixo essencial da narrativa, mas suas consequências adquirem outra dimensão.

Há uma mudança temática importante: alguém que começou tentando sobreviver precisa decidir quais responsabilidades está disposto a assumir.

E como a light novel terminou em setembro de 2026, já existe material suficiente para compreender o encerramento completo, embora o anime esteja apenas começando essa jornada.

11. Impacto cultural e recepção

Circulação divulgada pela editora

700 mil+

Exemplares da série, conforme divulgação oficial

Avaliação na Crunchyroll

4,7/5

Valor exibido na página consultada
Fontes: editora Overlap e Crunchyroll. São indicadores diferentes, não métricas diretamente comparáveis.
over-lap.co.jp+1

A obra conquistou espaço suficiente no mercado japonês para sustentar uma série de romances, uma adaptação em mangá e finalmente um anime televisivo.

Isso é relevante porque nem toda web novel alcança esse percurso.

Por outro lado, seria prematuro afirmar que Shinja Zero já representa um fenômeno cultural comparável a Re:Zero ou Mushoku Tensei.

Seu impacto internacional ainda está em formação.

Uma curiosidade promocional é que a Overlap divulgou também um projeto de representação tridimensional de Noah em 2026, reforçando o potencial da personagem como elemento de divulgação da franquia.

blog.over-lap.co.jp

E quanto a games e outras adaptações?

A obra utiliza intensamente a linguagem dos videogames, mas não encontrei confirmação confiável de um jogo próprio oficialmente lançado até esta data.

Também não há confirmação de uma segunda temporada do anime.

Isso não impede a continuação: o material original é extenso, e a produção atual cobre apenas o começo dessa trajetória.

12. Comparação com outros isekais

Anime

Protagonista

Característica central

Shangri-La Frontier

Sunraku

Vencer desafios pela habilidade como jogador

KonoSuba

Kazuma

Grupo disfuncional, humor e estratégias

Re:Zero

Subaru

Superação por tentativas, sofrimento e informação

Shinja Zero

Makoto

Explorar habilidades fracas e a relação com uma deusa marginalizada

Minha comparação favorita é com Shangri-La Frontier.

Sunraku enfrenta dificuldades voluntariamente porque gosta de jogos desafiadores. Makoto não escolheu seus atributos, mas utiliza uma mentalidade semelhante para enfrentar um mundo injusto.

A principal diferença é que Shangri-La Frontier gira em torno de um videogame, enquanto Shinja Zero apresenta um mundo de fantasia real para seus habitantes, com consequências potencialmente irreversíveis.

13. Avaliação Bellacosa Mainframe

Minha avaliação preliminar

Baseada na premissa, nos cinco primeiros episódios documentados e no material publicado

7,5/10

Premissa e originalidade 

8,0/10

Sistema de habilidades

8,5/10

Construção do mundo

8,0/10

Personagens e interações

7,5/10

Potencial da adaptação

7,0/10

Avaliação editorial interpretativa, não uma nota resultante de assistir integralmente à temporada.

O ponto mais forte da obra é seu protagonista: Makoto é alguém cujas decisões são mais importantes do que seus atributos.

O risco está em recorrer excessivamente às convenções do isekai, especialmente ao aumento constante de poderes, às situações românticas previsíveis e à expansão do elenco feminino.

A questão que determinará a qualidade da série será a capacidade de preservar a inteligência e a vulnerabilidade do protagonista enquanto o mundo ao seu redor cresce.

Vale a pena assistir?

Sim, especialmente se você gosta de protagonistas que precisam aprender a vencer em vez de receber tudo pronto.

É um isekai de aventura com humor, progressão de habilidades, romance e uma mitologia que promete se tornar muito mais complexa do que sua apresentação inicial sugere.

E há uma ironia deliciosa no título: uma deusa que começou sem nenhum fiel acaba conquistando leitores e espectadores no mundo real.

Afinal, Makoto talvez seja seu primeiro seguidor dentro da história, mas dificilmente será o último fora dela.

Fontes e leitura complementar

Uma última curiosidade: o nome Shinja Zero parece apenas uma piada sobre uma deusa impopular, mas a premissa oferece algo bem mais profundo: a história de duas pessoas que não encontram espaço na ordem estabelecida e decidem mudar as regras do jogo.

E essa é precisamente a qualidade que pode transformar um isekai aparentemente comum numa aventura memorável.

🦖 MIKE COWLISHAW E O DINOSSAURO QUE APRENDEU A AUTOMATIZAR O MAINFRAME: REXX, A LINGUAGEM NASCIDA ÀS 3 DA MADRUGADA QUE CONQUISTOU O z/OS!

 

Bellacosa Mainframe e uma revisão do rexx

☕ UM CAFÉ NO BELLACOSA MAINFRAME

🦖 MIKE COWLISHAW E O DINOSSAURO QUE APRENDEU A AUTOMATIZAR O MAINFRAME: REXX, A LINGUAGEM NASCIDA ÀS 3 DA MADRUGADA QUE CONQUISTOU O z/OS!

De uma ideia concebida em 1979 aos ambientes IBM Z de 2026: sob a ótica de Mike Cowlishaw, vamos descobrir como uma linguagem criada para simplificar a programação se transformou numa poderosa ferramenta de automação. Uma jornada por COBOL, JCL, TSO, ISPF, EXECIO, Data Stack, LINKMVS, SYSREXX, DevOps e os perigos silenciosos de um script que funciona perfeitamente — até chegar à produção.

Bellacosa Mainframe — Arqueologia da Computação, IBM Z, COBOL, REXX, Automação e os Mistérios da Tecnologia



🎬 Prólogo — 03h17: o homem que acordou com uma linguagem de programação na cabeça

Inglaterra, 20 de março de 1979.

Enquanto boa parte do mundo dormia, um engenheiro da IBM acordava com uma ideia que mudaria discretamente a história da programação.

Seu nome era Mike Cowlishaw.

Naquela época, os computadores pessoais ainda estavam conquistando espaço, os mainframes dominavam o processamento corporativo e escrever programas exigia familiaridade com linguagens, comandos e convenções nem sempre intuitivas.

Cowlishaw enxergava um problema que muitos especialistas pareciam aceitar como inevitável: por que as linguagens de programação precisavam impor tantas dificuldades aos seus usuários?

Por que transformar tarefas simples em exercícios de memorização de símbolos e regras?

Segundo o relato histórico preservado pela Rexx Language Association, naquele dia ele despertou por volta das três da madrugada com uma visão clara do que pretendia desenvolver. Ao final do dia, já havia compartilhado uma especificação inicial para receber comentários.

Era o nascimento do REXX.

Décadas depois, em novembro de 2026, imaginemos o mesmo Mike Cowlishaw entrando num moderno centro de processamento IBM Z.

Diante dele, monitores exibem jobs executando no JES2, aplicações COBOL processam informações bancárias, operadores investigam mensagens pelo SDSF e desenvolvedores utilizam ferramentas modernas de automação.

Em uma tela, aparece um programa:

/* REXX */
say 'Bom dia, Mainframe!'

Cowlishaw sorri.

A linguagem criada para tornar a programação mais acessível continua viva.

Mas ele encontra algo ainda mais interessante.

Aquele pequeno programa agora pode fazer parte de sistemas que consultam datasets, executam comandos, monitoram processos e integram aplicações escritas em diferentes linguagens.

O pequeno script cresceu.

E o dinossauro aprendeu a automatizar seu próprio castelo.

Esta cena é uma dramatização literária. A história do nascimento do REXX e os princípios de Cowlishaw são documentados; o encontro imaginário em 2026 não aconteceu.



🧠 Capítulo I — Quem é Mike Cowlishaw e por que devemos estudar sua filosofia?

Mike Cowlishaw é um cientista da computação britânico conhecido por seu trabalho no desenvolvimento do REXX e por contribuições posteriores ao processamento decimal em computadores.

No final dos anos 1970, ele trabalhava no laboratório da IBM em Hursley, na Inglaterra.

Sua preocupação não era simplesmente criar mais uma linguagem.

Ele buscava uma ferramenta que pudesse ser compreendida por profissionais de informática e também por usuários que não fossem programadores especializados.

O nome REXX representa REstructured eXtended eXecutor.

O projeto recebeu contribuições e comentários de usuários durante seu desenvolvimento. Essa característica é fundamental para compreender sua filosofia.

Em vez de criar uma linguagem pensando exclusivamente na facilidade de implementação do interpretador, Cowlishaw procurou observar as necessidades de quem realmente escreveria os programas.

Seu artigo The Design of the REXX Language, publicado no IBM Systems Journal em 1984, explica justamente essa preocupação com simplicidade, legibilidade e utilização prática.

O REXX foi apresentado publicamente em 1981, durante o SHARE 56, em Houston. Em 1983, passou a integrar oficialmente o ambiente VM/SP da IBM.

E aqui encontramos nossa primeira grande curiosidade.

🥚 Easter egg nº 1 — O REXX quase teve outro nome!

O projeto foi originalmente chamado REX, de Reformed EXecutor.

Segundo o histórico publicado pela IBM, o segundo X foi acrescentado para evitar problemas relacionados a marcas registradas.

Uma pequena alteração no nome ajudou a construir uma identidade que sobreviveria durante décadas.

A primeira lição de Cowlishaw é extraordinariamente atual:

Uma tecnologia não precisa ser difícil de compreender para ser poderosa.

E isso vale tanto para um estudante de COBOL em 2026 quanto para um programador que utilizava VM/CMS em 1983.



🖥️ Capítulo II — O castelo IBM Z: onde COBOL, JCL e REXX trabalham juntos

Imagine um enorme castelo tecnológico.

Dentro dele, milhares de programas COBOL processam pagamentos, atualizam saldos, consultam contratos, calculam juros e movimentam informações empresariais.

O COBOL representa os trabalhadores especializados, responsáveis pelas regras de negócio.

O JCL organiza o processamento batch, indicando programas, datasets, parâmetros e recursos necessários.

O JES2 recebe e gerencia os trabalhos submetidos.

O Db2 e o VSAM armazenam informações fundamentais.

O RACF controla identidades e permissões.

E o REXX?

O REXX atua como um assistente extremamente versátil.

Ele não precisa substituir os especialistas.

Sua função pode ser coordenar atividades, verificar condições, consultar resultados e eliminar procedimentos manuais repetitivos.

Considere uma operação noturna com cinco etapas:

  1. Verificar se o dataset de entrada está disponível.

  2. Validar os parâmetros do processamento.

  3. Executar ou preparar as operações autorizadas.

  4. Consultar resultados e códigos de retorno.

  5. Registrar o estado final para análise operacional.

Um operador poderia realizar parte dessas atividades manualmente.

Mas, quando as mesmas verificações precisam acontecer diariamente, surge uma oportunidade de automação.

É aqui que REXX se destaca.

Na apresentação APPDEV2, encontramos uma frase que resume essa relação:

"REXX não substitui COBOL. Ele substitui o humano apertando tecla."

A frase é uma metáfora, mas transmite uma distinção importante.

COBOL continua sendo especialmente adequado para a implementação de regras empresariais. REXX oferece uma maneira prática de automatizar diversas operações ao redor dessas aplicações.

Um não precisa eliminar o outro.

Em muitos ambientes, os dois trabalham melhor juntos.



📜 Capítulo III — Aprendendo REXX: o primeiro programa de um futuro Mestre Jedi

Vamos começar do zero.

Quem conhece COBOL perceberá imediatamente uma diferença.

No COBOL, normalmente declaramos variáveis e estruturas em seções específicas. No REXX, podemos trabalhar com variáveis de forma muito mais direta.

Nosso primeiro programa será:

/* REXX */
say 'Bem-vindo ao Bellacosa Mainframe!'

A primeira linha é um comentário.

A instrução SAY exibe uma mensagem.

Pronto!

Agora vamos introduzir uma variável:

/* REXX */
nome = 'Mike Cowlishaw'
ano = 1979

say nome
say 'Ano de nascimento do REXX:' ano

Resultado esperado:

Mike Cowlishaw
Ano de nascimento do REXX: 1979

Observe que não precisamos definir antecipadamente um campo PIC X(30) ou PIC 9(4).

Entretanto, essa flexibilidade traz responsabilidades.

Em COBOL, a definição de dados ajuda a organizar as informações. No REXX, o programador precisa estabelecer regras claras para os valores que suas variáveis podem receber.

Nosso primeiro processamento repetitivo

/* REXX */
do i = 1 to 5
  say 'Executando rotina numero' i
end

Resultado:

Executando rotina numero 1
Executando rotina numero 2
Executando rotina numero 3
Executando rotina numero 4
Executando rotina numero 5

O DO executa o bloco repetidamente.

O END encerra o bloco.

Para um iniciante, essa estrutura é fácil de compreender.

Mas vamos avançar.

/* REXX */
parse arg cliente

if cliente = '' then do
  say 'ERRO: cliente nao informado'
  exit 8
end

say 'Processando cliente:' cliente
exit 0

O comando PARSE ARG permite receber argumentos.

O código de retorno 8 indica, por convenção definida nesse exemplo, que houve uma falha de validação.

O código zero indica conclusão normal.

Dica de produção: não utilize códigos de retorno apenas como números decorativos. Documente seu significado, pois eles poderão influenciar decisões em JCL e ferramentas de automação.


🧩 Capítulo IV — Compound Variables: os arrays que não são exatamente arrays

Aqui começa uma das partes mais interessantes do REXX.

Imagine que precisamos armazenar informações de três clientes.

Podemos escrever:

/* REXX */
cliente.1 = 'ANA'
cliente.2 = 'BRUNO'
cliente.3 = 'CARLA'
cliente.0 = 3

do i = 1 to cliente.0
  say cliente.i
end

O resultado será:

ANA
BRUNO
CARLA

Para quem conhece arrays, parece um vetor convencional.

Mas existe uma diferença conceitual.

Em REXX, cliente.1, cliente.2 e cliente.3 são variáveis compostas.

A parte anterior ao ponto é chamada stem. A parte posterior pode ser construída dinamicamente.

Isso permite criar estruturas flexíveis, inclusive utilizando chaves textuais.

/* REXX */
cidade.ITATIBA = 'SAO PAULO'
cidade.LISBOA = 'PORTUGAL'
cidade.YORK = 'INGLATERRA'

say cidade.YORK

Entretanto, o funcionamento das caudas das variáveis compostas depende das regras de avaliação do REXX, que devem ser compreendidas antes de utilizar essas estruturas em aplicações complexas.

O perigoso valor padrão

Observe:

/* REXX */
saldo. = 0
saldo.123 = 500

say saldo.123
say saldo.999

Resultado:

500
0

O valor de saldo.999 não significa que uma conta com esse identificador foi encontrada.

Ele aparece porque estabelecemos zero como valor padrão para o stem.

Agora imagine uma aplicação bancária.

Uma conta com saldo zero existe.

Uma conta inexistente não existe.

Um saldo ainda não consultado é desconhecido.

São três situações diferentes.

Se nosso programa tratar todas como equivalentes, teremos um problema de lógica empresarial.

🥚 Easter egg nº 2 — O fantasma mora na variável que você não inicializou

A apresentação APPDEV2 alerta para um problema clássico: variáveis compostas podem conservar informações de operações anteriores.

Imagine carregar uma lista com cem clientes e, depois, carregar outra com apenas dez.

Se não houver limpeza adequada, elementos da primeira operação poderão permanecer na estrutura.

Para evitar resultados residuais, podemos usar:

drop cliente.

Também devemos validar se determinada variável foi inicializada.

/* REXX */
drop saldo.
saldo.123 = 500

if symbol('SALDO.999') = 'VAR' then
  say 'Variavel definida'
else
  say 'Variavel nao definida'

SYMBOL() é útil, mas não substitui a validação empresarial da existência do registro.

Lição de Cowlishaw aplicada à produção: simplicidade sintática não elimina a necessidade de compreender profundamente o comportamento dos dados.


📚 Capítulo V — Data Stack: a pilha que pode salvar ou sabotar sua automação

Imagine uma pequena agência dos correios.

As mensagens chegam, são armazenadas e posteriormente retiradas para processamento.

Essa é uma analogia útil para entender a Data Stack do REXX.

Duas instruções merecem atenção:

QUEUE adiciona informações ao final da fila.

PUSH coloca informações no início.

Considere:

/* REXX */
queue 'CLIENTE A'
queue 'CLIENTE B'
push 'URGENTE'

parse pull mensagem1
parse pull mensagem2
parse pull mensagem3

say mensagem1
say mensagem2
say mensagem3

A saída será:

URGENTE
CLIENTE A
CLIENTE B

Aqui encontramos duas estruturas clássicas de computação.

FIFO — First In, First Out: o primeiro elemento inserido é o primeiro a sair.

LIFO — Last In, First Out: o último elemento inserido é o primeiro a sair.

A Data Stack permite organizar fluxos temporários de informações, mas ela não é equivalente a um stem.

A pilha pertence ao contexto de execução e pode ser compartilhada por diferentes operações.

Um stem, por outro lado, é uma estrutura de variáveis submetida às regras de escopo do programa.

O perigo da stack suja

Imagine um exec que coloca vinte mensagens na stack, mas consome apenas quinze.

Sob determinadas condições, as cinco mensagens restantes podem interferir em operações posteriores.

A apresentação APPDEV2 resume o risco:

"Stack é compartilhada. Stem é sua."

É uma boa regra didática, embora existam mecanismos de compartilhamento e exposição de variáveis que exigem atenção.

Como isolar uma pilha temporária?

/* REXX */
call newstack

queue 'TAREFA001'
queue 'TAREFA002'

do while queued() > 0
  parse pull tarefa
  say 'Executando:' tarefa
end

call delstack

NEWSTACK estabelece uma nova pilha.

DELSTACK elimina essa pilha e retorna ao contexto anterior.

Dica: em uma aplicação real, estruture também o tratamento de erros para assegurar que os recursos temporários sejam liberados mesmo diante de falhas.


💾 Capítulo VI — EXECIO: quando o REXX abre as portas dos datasets

Agora entramos no território clássico do mainframe.

O mundo IBM Z trabalha intensamente com datasets.

Para um iniciante em COBOL, acessar um arquivo frequentemente significa aprender SELECT, FD, OPEN, READ, WRITE e CLOSE.

O REXX possui uma alternativa poderosa no ambiente TSO/E: EXECIO.

Esse comando permite operações de leitura e escrita de registros em datasets compatíveis.

Passo 1 — Preparar o arquivo

Imagine um dataset sequencial denominado:

APPDEV2.DADOS.CLIENTES

Com os seguintes registros:

00001;ANA;1000
00002;BRUNO;2500
00003;CARLA;750

Passo 2 — Alocar o dataset

No ambiente TSO/E, podemos usar:

address tso

"ALLOC FI(ENTRADA) DA('APPDEV2.DADOS.CLIENTES') SHR"

ALLOC associa um dataset a um nome lógico, neste caso ENTRADA.

Passo 3 — Ler os registros

drop rec.

"EXECIO * DISKR ENTRADA (STEM rec. FINIS"
leituraRC = rc

DISKR realiza leitura.

STEM rec. armazena os registros em variáveis compostas.

FINIS encerra a utilização do arquivo nessa operação.

RC informa o resultado do comando.

Quando a leitura é concluída normalmente, rec.0 contém a quantidade de registros carregados.

Passo 4 — Percorrer os dados

do i = 1 to rec.0
  parse var rec.i codigo ';' nome ';' saldo
  say codigo nome saldo
end

O comando PARSE VAR permite separar os campos utilizando o ponto e vírgula como delimitador.

Passo 5 — Liberar o dataset

"FREE FI(ENTRADA)"

Naturalmente, precisamos verificar o código de retorno da alocação antes de executar a leitura e também validar o resultado da operação.

O que significa FINIS?

Uma dúvida frequente é imaginar que basta terminar a execução do programa para que o dataset tenha sido corretamente tratado.

A documentação IBM explica que alguns recursos podem ser liberados automaticamente ao final de determinados ambientes de execução.

Entretanto, recomenda explicitamente fechar os datasets quando não forem mais necessários.

Essa é uma excelente prática de programação defensiva.

🥚 Easter egg nº 3 — O número de registros não controla automaticamente o DISKW *

Ao escrever registros com EXECIO, podemos usar uma quantidade explícita:

"EXECIO" rec.0 "DISKW SAIDA (STEM rec. FINIS"

Ou o asterisco:

"EXECIO * DISKW SAIDA (STEM rec. FINIS"

Mas existe um detalhe: na escrita a partir de um stem, o asterisco não significa simplesmente utilizar o valor de rec.0.

O processamento pode continuar até encontrar uma variável não inicializada ou um registro nulo, conforme as regras documentadas.

Por isso, quando conhecemos a quantidade exata de registros, frequentemente é mais seguro indicá-la explicitamente.

Outra limitação importante: não devemos presumir que EXECIO oferece acesso direto a todas as organizações de datasets.

Para VSAM, especialmente arquivos indexados, devem ser consideradas interfaces apropriadas.


🚂 Capítulo VII — IKJEFT01 contra IRXJCL: dois caminhos para executar REXX em batch

Uma rotina que funciona perfeitamente no terminal pode falhar quando executada em batch.

Por quê?

Porque o ambiente importa.

A apresentação APPDEV2 destaca duas alternativas de execução.

IKJEFT01 executa comandos TSO/E em background.

IRXJCL permite executar REXX em um ambiente que não oferece automaticamente os mesmos serviços de uma sessão TSO/E.

Essa diferença afeta os comandos disponíveis e as dependências do programa.

Exemplo de JCL com IKJEFT01

//REXXJOB  JOB (ACCT),'REXX TESTE',
//             CLASS=A,MSGCLASS=X
//STEP01   EXEC PGM=IKJEFT01,DYNAMNBR=30
//SYSEXEC  DD DSN=APPDEV2.REXX.EXEC,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
  %TESTE
/*

O job executa o membro TESTE localizado na biblioteca informada em SYSEXEC.

Os parâmetros do JOB e os nomes de datasets precisam ser adaptados ao ambiente de cada organização.

E por que não utilizar sempre IRXJCL?

Porque a escolha depende das necessidades do programa.

Um exec que utiliza comandos TSO/E pode exigir um ambiente diferente de outro que executa apenas lógica REXX e serviços disponíveis em MVS.

Não existe um mecanismo universalmente superior.

Existe o mecanismo adequado à aplicação.

O inimigo invisível: PULL em batch

Veja este código:

say 'Digite o numero do cliente:'
pull cliente

Em um terminal interativo, alguém pode fornecer a informação.

Em batch, porém, a origem dos dados depende da stack e do fluxo de entrada disponibilizado.

O resultado pode ser completamente diferente daquilo que o programador imaginou.

É preferível receber informações explicitamente:

parse arg cliente

if cliente = '' then do
  say 'ERRO: parametro ausente'
  exit 8
end

A automação precisa saber exatamente o que fazer sem depender de uma pessoa diante da tela.


🔗 Capítulo VIII — LINK, LINKMVS e LINKPGM: quando REXX conversa com COBOL

Aqui encontramos uma das partes mais sofisticadas do material.

Imagine que uma empresa possua um programa COBOL escrito em 1995.

Esse programa calcula uma regra financeira utilizada há décadas.

Você precisa automatizar sua utilização, mas não deseja reescrever a lógica.

Seria possível chamar diretamente esse programa a partir de REXX?

Dependendo da interface, sim.

O z/OS oferece ambientes como LINK, LINKMVS e LINKPGM.

Entretanto, eles não representam simplesmente três nomes diferentes para a mesma funcionalidade.

A principal dificuldade está na convenção de passagem de parâmetros.

Alguns módulos esperam receber uma cadeia de caracteres.

Outros esperam uma lista de endereços.

Existem ainda diferenças relacionadas aos comprimentos dos parâmetros e à possibilidade de modificar informações fornecidas pelo chamador.

Um exemplo conceitual de integração:

/* REXX */
cliente = '00000123'

address linkpgm 'CONSULTA cliente'

say 'Retorno:' rc

Nesse exemplo, CONSULTA seria um módulo hipotético preparado para receber parâmetros pela interface correspondente.

Não basta possuir um programa COBOL compilado para garantir que qualquer uma dessas chamadas funcione.

É preciso verificar sua convenção de entrada, o layout de parâmetros, as exigências de runtime e as características do módulo.

Uma recomendação para iniciantes

Antes de integrar um programa COBOL a REXX:

  1. Identifique o módulo que será chamado.

  2. Consulte sua documentação de interface.

  3. Verifique os parâmetros esperados.

  4. Confirme a compatibilidade com o ambiente de chamada.

  5. Teste entradas válidas e inválidas.

  6. Examine os códigos de retorno.

  7. Documente o comportamento em caso de falha.

Esse processo é menos espetacular do que simplesmente escrever um comando LINK.

Mas é justamente ele que permite construir integrações confiáveis.


⚙️ Capítulo IX — REXX compilado: colocar um motor maior não conserta um carro quebrado

Uma dúvida inevitável surge quando os programas começam a crescer.

Se REXX é interpretado, por que não compilar tudo?

A IBM oferece tecnologia para compilar programas REXX.

A compilação pode melhorar o desempenho em determinadas circunstâncias, principalmente reduzindo parte do trabalho necessário para interpretar expressões e instruções.

Mas ela não transforma automaticamente um programa ruim em um programa eficiente.

Imagine um exec que demora cem segundos.

Durante vinte segundos, ele executa lógica REXX.

Nos oitenta segundos restantes, aguarda operações de entrada e saída.

Se a compilação reduzir o tempo da lógica pela metade, o processamento passará de cem para noventa segundos.

A redução total será de apenas dez por cento.

Nada desprezível.

Mas muito diferente da expectativa de executar tudo duas vezes mais rapidamente.

Por isso, antes de compilar, precisamos medir.

A curiosidade das opções SLINE, ALT, CONDENSE e XREF

A apresentação menciona essas opções em sua seção de REXX compilado.

É importante compreender que, no contexto do IBM Compiler for REXX, elas dizem respeito à compilação, representação e informações associadas ao programa.

Não devem ser confundidas com comandos genéricos de processamento de arquivos.

O significado de cada opção precisa ser consultado na documentação da versão do compilador utilizada.

Essa distinção é valiosa porque evita ensinar uma nomenclatura equivocada ao iniciante.

Regra de ouro: primeiro melhore o algoritmo, depois investigue as possibilidades de compilação.


🚨 Capítulo X — ADDRESS CONSOLE: o momento em que o script encontra a operação do z/OS

Até agora, nosso REXX leu variáveis, percorreu estruturas e acessou datasets.

Mas o z/OS possui outro universo.

O universo dos comandos operacionais.

É nele que encontramos mensagens de sistema, informações de recursos, respostas de subsistemas e procedimentos executados por operadores.

Determinados ambientes REXX permitem interagir com comandos de console, desde que as autorizações e as condições técnicas sejam atendidas.

Isso abre possibilidades para ferramentas de monitoramento.

Imagine um exec que verifica se um recurso operacional está respondendo normalmente.

Ele emite uma consulta autorizada, aguarda a resposta, interpreta o resultado e registra a situação.

Mas surge um problema.

E se vários comandos estiverem sendo executados simultaneamente?

Como identificar a resposta correspondente a cada solicitação?

Uma das ferramentas envolvidas nessa situação é o CART — Command and Response Token.

O token ajuda a correlacionar comandos e mensagens de resposta.

Funções como GETMSG podem ser utilizadas para recuperação das mensagens em contextos apropriados.

É uma ideia semelhante à utilização de identificadores de correlação em sistemas distribuídos modernos.

🥚 Easter egg nº 4 — O console também precisa de identificadores

Muita gente associa identificadores de correlação exclusivamente a microsserviços, APIs e computação em nuvem.

Entretanto, a necessidade de associar solicitações às suas respostas também aparece na operação tradicional de mainframes.

A tecnologia muda.

O problema fundamental permanece.

E essa é uma das razões pelas quais estudar IBM Z ajuda a compreender arquiteturas modernas.


🛡️ Capítulo XI — SYSREXX: o poder exige responsabilidade

Chegamos ao nível mais avançado de nossa jornada.

System REXX permite executar programas em ambientes específicos do z/OS, fora do modelo tradicional de uma sessão interativa TSO/E.

Entre suas possibilidades estão a emissão de comandos de sistema e a recuperação de informações para processamento automatizado.

A IBM documenta dois ambientes importantes:

TSO=YES

TSO=NO

A distinção afeta os serviços disponíveis, a integração com TSO/E e as características de execução.

No ambiente System REXX encontramos funções como:

AXRCMD: utilizada para trabalhar com comandos de sistema e respectivas respostas.

AXRWTO: permite emitir mensagens por meio dos serviços correspondentes.

AXRWAIT: oferece mecanismos de espera controlada.

Essas ferramentas permitem construir assistentes operacionais, diagnósticos e rotinas de apoio ao operador.

Mas surge uma pergunta essencial.

Se um exec possui capacidade de interagir com funções sensíveis do sistema, quem controla o que ele pode fazer?

A resposta envolve segurança, autorizações, bibliotecas confiáveis e governança.

O RACF e os demais mecanismos de controle do z/OS desempenham papéis fundamentais.

Não basta que um programa execute corretamente.

Ele precisa executar somente aquilo que está autorizado a fazer.

Uma automação com privilégios excessivos pode se transformar em um risco operacional significativo.

O princípio do menor privilégio

Imagine um programa cuja única função seja consultar determinado recurso.

Ele não deveria receber permissões amplas para alterar configurações críticas, encerrar subsistemas ou modificar informações desnecessárias à consulta.

A simplicidade desejada por Cowlishaw precisa caminhar ao lado da responsabilidade exigida pela operação moderna.

Facilitar a programação não significa facilitar operações perigosas.


🧪 Capítulo XII — Mão na massa: nosso primeiro monitor de indicadores em REXX

Vamos reunir alguns conhecimentos em um projeto prático.

Nosso objetivo será criar um programa simples que leia informações de um dataset e identifique valores superiores a um limite estabelecido.

Imagine o arquivo:

APPDEV2.DADOS.HEALTH

Conteúdo:

CPU;65
MEMORIA;72
FILAS;91
IO;40

Esses valores são indicadores didáticos, não medições reais do sistema.

Passo 1 — Definir o limite

limite = 85

Passo 2 — Ler os registros

/* REXX */
address tso
drop dados.

"ALLOC FI(HCIN) DA('APPDEV2.DADOS.HEALTH') SHR"
if rc <> 0 then exit 12

"EXECIO * DISKR HCIN (STEM dados. FINIS"
leituraRC = rc

"FREE FI(HCIN)"

if leituraRC <> 0 then exit 12

Passo 3 — Verificar cada indicador

alertas = 0

do i = 1 to dados.0
  parse var dados.i indicador ';' valor

  if \datatype(valor,'W') then do
    say 'ERRO: valor invalido'
    exit 12
  end

  if valor < 0 | valor > 100 then do
    say 'ERRO: fora da escala'
    exit 12
  end

  if valor > limite then do
    say 'ALERTA:' indicador valor
    alertas = alertas + 1
  end
  else
    say 'OK:' indicador valor
end

if alertas > 0 then exit 4
exit 0

Passo 4 — Interpretar o resultado

Para os dados apresentados, esperamos:

OK: CPU 65
OK: MEMORIA 72
ALERTA: FILAS 91
OK: IO 40

O retorno será 4, indicando que pelo menos um indicador ultrapassou o limite.

Observe o que acabamos de construir.

Nosso programa possui:

  • Leitura de dataset.

  • Variáveis compostas.

  • Laço de repetição.

  • Validação de dados.

  • Lógica condicional.

  • Código de retorno.

  • Identificação de anomalias.

É um pequeno laboratório, mas contém os fundamentos de uma automação real.

Naturalmente, antes de utilizar essa ideia em produção, precisaríamos acrescentar tratamento completo de falhas, validação do formato dos registros, definição de limites por indicador, registros de auditoria e testes com entradas problemáticas.

Uma evolução interessante

Imagine substituir o dataset simulado por informações coletadas através de serviços autorizados do ambiente.

Poderíamos construir um monitor que identificasse condições operacionais e produzisse alertas.

A próxima etapa seria encaminhar os resultados para uma ferramenta de observabilidade.

E, posteriormente, integrar os registros a sistemas analíticos.

A partir daí, nossa automação começaria a participar de um ecossistema de operação inteligente.


🤖 Capítulo XIII — REXX, DevOps e inteligência artificial: a surpreendente modernidade de uma linguagem de 1979

É curioso imaginar que uma linguagem concebida antes da popularização dos computadores pessoais possa continuar relevante num mundo dominado por APIs, Git, automação e inteligência artificial.

Mas a explicação está na natureza do problema que REXX resolve.

Empresas continuam precisando coordenar processos.

Continuam precisando validar entradas.

Continuam precisando interpretar resultados.

Continuam precisando automatizar operações.

A inteligência artificial pode ajudar a explicar código, gerar testes, documentar rotinas e identificar padrões suspeitos.

Mas o modelo de IA não substitui automaticamente a necessidade de interfaces corretas, permissões apropriadas e validação empresarial.

Imagine um assistente inteligente encarregado de analisar uma rotina REXX.

Ele pode sugerir melhorias, identificar um RC ignorado ou observar que determinado dataset não foi corretamente fechado.

Entretanto, antes de aceitar qualquer modificação, será necessário confirmar que a alteração preserva o comportamento esperado.

Essa é uma das razões pelas quais conhecer profundamente REXX, COBOL e JCL continua importante.

A inteligência artificial pode acelerar o trabalho.

Mas a compreensão técnica permite verificar se o trabalho foi realizado corretamente.

Uma arquitetura possível

Um fluxo moderno pode utilizar:

Git para versionamento.

Uma pipeline CI/CD para testes e validações.

Zowe para integração com serviços do IBM Z.

JCL para processamentos batch.

COBOL para regras empresariais.

REXX para operações especializadas de automação.

RACF para controles de autorização.

E ferramentas de observabilidade para acompanhamento dos resultados.

Cada componente possui uma responsabilidade.

O segredo está na integração disciplinada.


🦖 Capítulo XIV — Dez erros que transformam um script REXX num pesadelo de produção

Depois de explorar os fundamentos, precisamos discutir as armadilhas.

1. Ignorar o RC. Um comando pode falhar sem que o restante do programa seja interrompido automaticamente.

2. Não inicializar estruturas. Variáveis residuais podem produzir resultados inesperados.

3. Confundir stem com array convencional. As regras de variáveis compostas precisam ser compreendidas.

4. Deixar a Data Stack contaminada. Informações pendentes podem interferir em operações posteriores.

5. Esquecer o FINIS. Recursos de I/O precisam ser gerenciados corretamente.

6. Presumir que EXECIO funciona com qualquer dataset. A organização e a interface de acesso importam.

7. Utilizar entrada interativa sem planejamento em batch. A ausência de um terminal altera as condições de execução.

8. Escolher LINK, LINKMVS ou LINKPGM sem compreender os parâmetros. A incompatibilidade de interfaces pode provocar falhas graves.

9. Compilar um programa sem medir seu desempenho. O ganho pode ser pequeno ou irrelevante para o problema real.

10. Automatizar comandos privilegiados sem controles adequados. Quanto maior a autoridade de um programa, maior a responsabilidade sobre sua segurança.

O que todos esses problemas possuem em comum?

Eles revelam a diferença entre conhecer a sintaxe de uma linguagem e compreender o ambiente em que ela funciona.


🏆 Capítulo XV — A trilha do Mestre Jedi do REXX

Se eu estivesse organizando uma formação de REXX para um iniciante em COBOL, dividiria o aprendizado em cinco estágios.

Primeiro estágio — Padawan da linguagem

Aprender SAY, PARSE, IF, DO, SELECT, PROCEDURE, funções e variáveis compostas.

O objetivo é escrever pequenos programas que possam ser compreendidos, testados e modificados.

Segundo estágio — Guardião dos datasets

Aprender EXECIO, Data Stack, tratamento de registros, validação de entradas e fechamento de recursos.

O objetivo é construir utilitários que trabalhem com dados sem comprometer sua integridade.

Terceiro estágio — Cavaleiro do batch

Aprender JCL, IKJEFT01, IRXJCL, parâmetros, DDs, RC e análise de resultados no SDSF.

O objetivo é executar programas de maneira reproduzível, sem dependência de interação humana.

Quarto estágio — Especialista em integração

Estudar LINK, LINKMVS, LINKPGM, interfaces COBOL, módulos carregáveis e convenções de parâmetros.

O objetivo é conectar componentes sem precisar reescrever sistemas que já executam regras empresariais confiáveis.

Quinto estágio — Mestre Jedi da produção

Estudar System REXX, console, autorizações, logs, auditoria, recuperação, controle de mudanças e automação operacional.

O objetivo é compreender não apenas como executar uma operação, mas também seus riscos e consequências.

Essa progressão acompanha a filosofia central da apresentação APPDEV2: sair do pequeno script e avançar, com responsabilidade, para a automação do z/OS.


🔍 Capítulo XVI — O que Mike Cowlishaw nos ensinaria sobre programação em 2026?

Não podemos atribuir a Cowlishaw opiniões que ele não expressou sobre todos os desafios atuais.

Mas podemos refletir sobre os princípios documentados de sua linguagem.

REXX foi desenvolvido com atenção especial à experiência dos usuários.

Sua sintaxe procurava ser legível e coerente.

A linguagem deveria ajudar a resolver problemas reais, em vez de transformar cada atividade numa batalha contra a notação.

Esses princípios continuam extraordinariamente relevantes.

Em 2026, um iniciante pode pedir a uma inteligência artificial que escreva cinquenta linhas de REXX.

Mas isso não garante que ele compreenda o programa.

A IA pode gerar código que parece correto, mas utiliza um serviço indisponível no ambiente de execução.

Pode interpretar incorretamente um código de retorno.

Pode produzir uma chamada incompatível com a interface de um módulo COBOL.

Pode esquecer de liberar recursos.

Por isso, existe uma diferença fundamental entre gerar código e compreender sistemas.

O futuro não pertence apenas a quem consegue produzir programas mais rapidamente. Pertence também a quem consegue demonstrar que esses programas funcionam corretamente, com segurança e dentro das regras do negócio.

Essa reflexão está perfeitamente alinhada à filosofia de uma linguagem que nasceu procurando facilitar a compreensão humana.


🎬 Epílogo — 03h17: o criador do REXX encontrou o futuro dentro de um mainframe

Voltemos ao nosso centro de processamento imaginário.

São 03h17.

Um job termina com RC zero.

Uma rotina verifica a existência de um dataset.

Outra analisa registros de controle.

Um monitor identifica uma condição incomum e registra um alerta.

Uma aplicação COBOL continua executando suas regras empresariais.

E um pequeno programa REXX reúne informações que antes exigiam diversas operações manuais.

Mike Cowlishaw observa a cena.

A linguagem que nasceu de uma ideia simples agora participa de uma infraestrutura tecnológica que movimenta instituições financeiras, empresas e serviços essenciais.

Mas talvez o aspecto mais interessante não seja sua longevidade.

É o fato de que sua filosofia original continua fazendo sentido.

Uma linguagem pode ser acessível sem ser limitada.

Pode ser simples sem ser superficial.

Pode ter décadas de existência e continuar resolvendo problemas modernos.

Em um mundo fascinado pelas novidades, o REXX lembra que inovação nem sempre significa abandonar o passado.

Às vezes, significa descobrir novas possibilidades numa ferramenta que já estava diante de nossos olhos.

E quando o último monitor apaga sua mensagem de processamento, uma frase permanece na tela:

"O verdadeiro Mestre Jedi do Mainframe não é aquele que conhece todos os comandos. É aquele que entende as consequências de cada comando que executa."

O pequeno dinossauro sorri.

O REXX continua vivo.

E sua próxima aventura acaba de começar.


📚 Referências e material de aprofundamento

  • Mike F. Cowlishaw — The Design of the REXX Language, IBM Systems Journal, 1984.

  • IBM — z/OS TSO/E REXX User's Guide.

  • IBM — z/OS TSO/E REXX Reference.

  • IBM — System REXX e documentação de serviços de console.

  • IBM — Compiler for REXX on IBM Z.

  • Rexx Language Association — História da linguagem REXX.

  • APPDEV2 — REXX Mainframe: Do Script ao Motor de Automação z/OS, novembro de 2026.

  • Bellacosa Mainframe — Artigos sobre REXX.

  • GitHub — REXX MiniCurso: scripts e exercícios práticos.

Bellacosa Mainframe — Porque compreender o passado da computação é uma das melhores maneiras de construir seu futuro.

terça-feira, 10 de novembro de 2026

🚨 DIJKSTRA CONTRA A CRISE DO COBOL: O HOMEM QUE DECLAROU GUERRA AO GOTO VOLTA PARA JULGAR A INTELIGÊNCIA ARTIFICIAL!

 

Bellacosa Mainframe e a guerra ao Goto e uma visão da IA

☕ UM CAFÉ NO BELLACOSA MAINFRAME

🚨 DIJKSTRA CONTRA A CRISE DO COBOL: O HOMEM QUE DECLAROU GUERRA AO GOTO VOLTA PARA JULGAR A INTELIGÊNCIA ARTIFICIAL!

Em 1968, Edsger W. Dijkstra desafiou os programadores a abandonarem o código desestruturado. Em 2026, a inteligência artificial promete traduzir sistemas COBOL que movimentam bilhões. Mas quem garante que o programa traduzido continua correto? Uma investigação sobre 67 anos de COBOL, programação estruturada, IBM Z e o perigo de entregar a lógica bancária às máquinas sem compreender o que elas fazem.

Bellacosa Mainframe — Arqueologia da Computação, COBOL, IBM Z, Inteligência Artificial e os Mistérios da Engenharia de Software.



🎬 Prólogo — 03h17: o fantasma de Dijkstra apareceu no CPD

São três horas e dezessete minutos da madrugada.

Em algum lugar do planeta, um mainframe IBM Z continua trabalhando.

No seu interior, milhares de programas COBOL executam cálculos financeiros, atualizam registros, processam pagamentos e alimentam sistemas que não podem simplesmente parar.

Numa das salas do Centro de Processamento de Dados, um jovem programador observa uma mensagem recém-produzida por uma inteligência artificial:

MIGRAÇÃO COBOL PARA JAVA CONCLUÍDA COM SUCESSO.

O programa original possui 18.432 linhas.

A versão produzida pela IA contém 7.216.

O processo levou poucos minutos.

O jovem sorri.

— Acabamos de modernizar quarenta anos de tecnologia!

De repente, uma voz surge atrás dele.

— Modernizar? Interessante. E como você demonstrou que o novo programa está correto?

O rapaz se vira.

Diante de um terminal 3270 está um senhor de óculos, expressão severa e uma folha de papel coberta de símbolos matemáticos.

— Quem é o senhor?

— Meu nome é Edsger W. Dijkstra.

— O famoso inimigo do GOTO?

— Prefiro pensar que sou amigo dos programas que podemos compreender.

Dijkstra aponta para o relatório da inteligência artificial.

— Quantos testes foram executados?

— Quatrocentos e vinte.

— E quantas possibilidades de comportamento existem?

Silêncio.

— O sistema possui registros redefinidos? Campos decimais compactados? Transações concorrentes? Processos batch? Regras de arredondamento? Dependências externas?

— Sim...

— Então por que você acredita que quatrocentos e vinte testes demonstram a equivalência de quarenta anos de regras empresariais?

O jovem olha novamente para a tela.

Pela primeira vez naquela madrugada, a palavra SUCESSO parece assustadora.

Nota: este prólogo é uma dramatização fictícia. Dijkstra faleceu em 2002. Suas intervenções neste artigo são reconstruções literárias inspiradas em suas ideias, não declarações históricas.



🧠 Capítulo I — Quem foi Edsger W. Dijkstra, o homem que queria ensinar computadores a obedecer à razão?

Edsger Wybe Dijkstra nasceu em 11 de maio de 1930, em Roterdã, nos Países Baixos.

Estudou matemática e física, tornando-se um dos pioneiros da ciência da computação numa época em que programar computadores ainda parecia uma atividade experimental.

Naqueles primeiros anos, computadores eram caros, difíceis de operar e muito limitados.

A memória era pequena. O processamento era lento. Os programadores precisavam administrar cuidadosamente cada recurso.

Mas Dijkstra percebeu algo extraordinário.

O maior obstáculo ao desenvolvimento de software complexo não seria apenas a velocidade dos computadores.

Seria a incapacidade humana de compreender sistemas excessivamente complicados.

Essa percepção atravessaria toda a sua carreira.

Entre suas contribuições mais conhecidas estão:

  • O algoritmo de Dijkstra para encontrar caminhos de custo mínimo em grafos.

  • Trabalhos fundamentais sobre programação estruturada.

  • O desenvolvimento do conceito de semáforos para sincronização de processos.

  • Estudos sobre concorrência, exclusão mútua e deadlocks.

  • Métodos de raciocínio matemático sobre a correção dos programas.

  • Contribuições à programação baseada em invariantes e condições formais.

Em 1972, recebeu o Prêmio Turing da ACM, uma das maiores distinções da computação.

Dijkstra não acreditava que a engenharia de software pudesse evoluir indefinidamente apenas escrevendo mais instruções e corrigindo defeitos posteriormente.

Para ele, construir um programa significava desenvolver um raciocínio cujo comportamento pudesse ser compreendido e justificado.

Essa perspectiva é especialmente importante no mundo de 2026.

Porque, quando uma inteligência artificial produz milhares de linhas de código em segundos, o problema humano deixa de ser somente escrever instruções.

Passa a ser compreender, controlar e validar o resultado.

🔎 Curiosidade: Dijkstra não foi apenas o homem do GOTO

Muitos estudantes conhecem Dijkstra exclusivamente por sua crítica ao comando GOTO.

Isso é como estudar Albert Einstein e acreditar que sua contribuição científica foi apenas escrever uma equação famosa.

Dijkstra ajudou a estabelecer fundamentos de engenharia para programas concorrentes e algoritmos.

Suas ideias continuam relevantes em bancos de dados, sistemas operacionais, redes, computação distribuída e ambientes transacionais.

Inclusive no IBM Z.



📜 Capítulo II — 1959: nasce o COBOL, a linguagem que se recusou a desaparecer

Nossa aventura precisa voltar a 1959.

Os computadores empresariais estavam começando a transformar organizações.

Bancos, seguradoras, governos e grandes empresas precisavam automatizar atividades administrativas.

Folhas de pagamento, faturamento, estoques, contabilidade e registros financeiros exigiam processamento confiável.

A maioria das linguagens de programação disponíveis estava fortemente associada às características técnicas dos computadores.

Surgia, então, um desafio.

Era necessário desenvolver uma linguagem mais apropriada ao processamento empresarial, capaz de representar registros, valores monetários e operações administrativas de maneira relativamente legível.

Assim nasceu o COBOL, sigla para Common Business-Oriented Language.

Sua origem está associada ao comitê CODASYL e ao trabalho de diversos pioneiros. Grace Hopper teve influência importante por seus trabalhos anteriores sobre linguagens comerciais, embora não tenha sido a única criadora do COBOL.

A proposta era ambiciosa.

Permitir que programas empresariais fossem escritos numa linguagem menos dependente de uma máquina específica.

Veja um exemplo simples:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO.

       PROCEDURE DIVISION.
           DISPLAY "BELLACOSA MAINFRAME"
           GOBACK.

Mesmo uma pessoa sem experiência em programação consegue perceber que o programa exibirá uma mensagem.

Essa legibilidade aproximada da língua inglesa foi uma das características marcantes do COBOL.

Mas a facilidade aparente de ler instruções não elimina a complexidade de compreender um sistema inteiro.

E foi justamente nesse ponto que Dijkstra teria uma crítica profunda a oferecer.



⚔️ Capítulo III — 1968: Dijkstra declara guerra ao GOTO

Em março de 1968, Dijkstra publicou uma carta na revista Communications of the ACM que se tornaria histórica:

Go To Statement Considered Harmful.

Em português: O comando GOTO considerado prejudicial.

Seu argumento não era simplesmente uma preferência estética.

Ele examinava a relação entre a estrutura textual de um programa e a capacidade humana de acompanhar seu comportamento durante a execução.

Considere este exemplo didático de COBOL com saltos desnecessários:

       PROCEDURE DIVISION.
       INICIO.
           MOVE 100 TO WS-VALOR
           GO TO CALCULO.

       FINAL.
           GOBACK.

       CALCULO.
           COMPUTE WS-VALOR =
               WS-VALOR * 2
           GO TO FINAL.

Um programa pequeno como esse é fácil de acompanhar.

Mas imagine milhares de parágrafos, centenas de saltos e condições capazes de alterar a ordem de execução.

O programador precisaria construir mentalmente um mapa de todas as rotas possíveis.

Agora considere a mesma ideia organizada de maneira estruturada:

       PROCEDURE DIVISION.
           MOVE 100 TO WS-VALOR

           PERFORM CALCULO

           GOBACK.

       CALCULO.
           COMPUTE WS-VALOR =
               WS-VALOR * 2.

O código agora apresenta uma sequência mais evidente.

Existe um fluxo principal e uma rotina chamada explicitamente.

A diferença parece pequena.

Entretanto, em sistemas grandes, estruturas previsíveis ajudam a reduzir a quantidade de caminhos de execução que o programador precisa compreender simultaneamente.

📚 O que significa programação estruturada?

A programação estruturada organiza algoritmos principalmente por três mecanismos fundamentais:

Sequência: executar instruções numa ordem determinada.

Seleção: escolher caminhos por meio de condições, como IF e EVALUATE.

Repetição: executar operações repetidamente por meio de estruturas como PERFORM UNTIL.

Esses mecanismos permitem construir programas complexos sem depender de saltos arbitrários entre diferentes regiões do código.

Isso não significa que todo programa estruturado esteja correto.

Significa que sua organização facilita o raciocínio sobre o comportamento.

🥚 Easter egg histórico

Existe uma ironia maravilhosa envolvendo o artigo de 1968.

O título original proposto por Dijkstra era A Case against the GO TO Statement.

Foi o editor Niklaus Wirth quem alterou o título para Go To Statement Considered Harmful.

Décadas depois, Dijkstra relatou essa história no documento EWD1308.

A expressão Considered Harmful acabaria se tornando um dos modelos de títulos mais imitados na história da informática.

Eis uma proposta de título que provavelmente caberia perfeitamente em 2026:

Blind AI Code Generation Considered Harmful.

Ou, em português:

Geração cega de código por inteligência artificial considerada prejudicial.

Não é um artigo real de Dijkstra, mas resume uma crítica que podemos construir a partir de seus princípios.


💣 Capítulo IV — A surpresa: Dijkstra também atacou o COBOL!

Aqui encontramos um detalhe histórico que seria desonesto esconder.

Dijkstra não era exatamente um admirador da linguagem COBOL.

Em 1975, no texto How do we tell truths that might hurt?, ele fez uma crítica extraordinariamente severa ao ensino e ao uso da linguagem.

Sua formulação chegou a classificar o ensino de COBOL como algo que deveria ser tratado como uma infração criminosa.

A declaração era deliberadamente provocativa.

Dijkstra criticava várias linguagens que, na sua avaliação, dificultavam o desenvolvimento de bons hábitos intelectuais de programação.

Isso inclui também críticas a BASIC, PL/I e APL.

Portanto, apresentar Dijkstra como defensor histórico do COBOL seria incorreto.

Mas existe algo muito interessante nessa oposição.

Podemos utilizar os princípios de Dijkstra para melhorar programas COBOL, mesmo que ele próprio rejeitasse a linguagem.

A crítica histórica também precisa ser colocada em seu contexto.

O COBOL de 1975 não representa todas as possibilidades dos compiladores e padrões modernos.

A linguagem evoluiu. Ganhou recursos estruturados, novas funcionalidades, integração com bancos de dados, orientação a objetos em determinados ambientes e ferramentas de desenvolvimento mais sofisticadas.

Dijkstra provavelmente continuaria exigente quanto à qualidade do raciocínio envolvido.

E essa exigência é exatamente o que torna sua filosofia útil para discutir a atual crise dos sistemas legados.


🏦 Capítulo V — 2026: a crise do COBOL invade os bancos

No dia 8 de novembro de 2026, o Canaltech publicou uma reportagem sobre a chamada crise do COBOL e o papel da inteligência artificial na modernização de sistemas.

O problema envolve três fenômenos interligados.

Primeiro, organizações continuam dependendo de aplicações desenvolvidas durante décadas.

Segundo, muitos profissionais responsáveis por sua construção e manutenção estão se aposentando.

Terceiro, parte considerável do conhecimento empresarial está incorporada ao próprio código, sem documentação suficientemente atualizada.

Imagine um sistema de financiamento criado em 1988.

Originalmente, sua função era calcular prestações, registrar pagamentos e produzir demonstrativos.

Durante os anos seguintes, recebeu modificações para atender diferentes produtos, mudanças tributárias, procedimentos regulatórios e exigências operacionais.

Em 2026, talvez o programa original ainda esteja executando sua função.

O problema é que ninguém consegue explicar completamente por que ele contém determinadas condições.

Uma variável chamada WS-FATOR-ANTIGO pode guardar uma regra empresarial importante.

Um parágrafo denominado AJUSTE-1997 pode representar uma exceção contratual que permanece válida para determinados clientes.

Um processamento noturno pode depender da ordem exata em que três arquivos são atualizados.

O conhecimento existe.

Mas está distribuído pelo sistema.

E essa é uma forma particularmente perigosa de dependência tecnológica.

📊 A crise não é apenas falta de programadores COBOL

O levantamento de modernização de mainframes da Kyndryl, publicado em 2025, aponta dificuldades relevantes de contratação e capacitação.

Entretanto, modernizar não exige somente conhecer sintaxe COBOL.

Exige compreender bancos de dados, segurança, integração, aplicações distribuídas, operações e arquitetura empresarial.

A falta de especialistas capazes de integrar tecnologias tradicionais com ferramentas modernas pode ser tão importante quanto a escassez de programadores da linguagem original.

A crise, portanto, é também uma crise de transferência de conhecimento.


🤖 Capítulo VI — Outubro de 2026: a inteligência artificial aprende a traduzir COBOL

Em 19 de outubro de 2026, a OpenAI divulgou resultados de pesquisas envolvendo linguagens de programação com menor disponibilidade pública de código e documentação, incluindo COBOL, Fortran e Visual Basic.

Uma das avaliações investigou a capacidade de migrar programas COBOL para linguagens como Java, Python, C++, Kotlin e Rust.

Os resultados foram impressionantes.

No benchmark específico de migração COBOL, o GPT-5.6 Sol obteve 5,4% de precisão em baixo esforço de raciocínio.

O GPT-6.1 Sol alcançou 86,6% nas mesmas condições gerais de esforço e chegou a 97,9% com maior esforço de raciocínio.

Isso demonstra uma evolução importante na capacidade dos modelos de lidar com programas em linguagens historicamente menos representadas nos materiais utilizados para treinamento.

Mas existe uma distinção essencial.

Um benchmark de migração não equivale à migração certificada de um sistema bancário inteiro.

Um sistema real pode reunir COBOL, JCL, CICS, Db2, IMS, VSAM, RACF, filas MQ, interfaces externas e procedimentos operacionais.

O comportamento depende de muito mais do que uma sequência de instruções.

Dijkstra provavelmente faria a pergunta fundamental:

Como sabemos que o comportamento do programa resultante corresponde àquilo que foi especificado?

Essa é a questão que separa uma demonstração tecnológica de um processo seguro de engenharia.


💰 Capítulo VII — O centavo que colocou a inteligência artificial no banco dos réus

Vamos construir nosso primeiro laboratório.

Você é um programador COBOL iniciante trabalhando no processamento de uma taxa bancária.

A empresa utiliza uma taxa de 2,5% aplicada sobre R$ 100,60.

O programa original contém:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. TAXABANCO.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 WS-VALOR      PIC 9(5)V99.
       01 WS-TAXA       PIC 9V999.
       01 WS-RESULTADO  PIC 9(5)V99.

       PROCEDURE DIVISION.

           MOVE 100.60 TO WS-VALOR
           MOVE 0.025 TO WS-TAXA

           COMPUTE WS-RESULTADO =
               WS-VALOR * WS-TAXA

           DISPLAY WS-RESULTADO

           GOBACK.

Vamos compreender cada etapa.

IDENTIFICATION DIVISION identifica o programa.

DATA DIVISION contém as definições de dados.

WORKING-STORAGE SECTION declara variáveis utilizadas durante a execução.

PIC 9(5)V99 representa cinco dígitos inteiros e dois decimais. O V é uma posição decimal implícita, não um caractere armazenado.

COMPUTE realiza uma operação aritmética.

DISPLAY apresenta o resultado.

GOBACK encerra a execução do programa principal e retorna o controle ao ambiente chamador.

O cálculo matemático produz:

100,60 × 0,025 = 2,515

Mas o campo de destino aceita somente duas casas decimais.

Sem ROUNDED, o resultado armazenado será 2,51.

Agora imagine que uma IA converta o programa para Java e utilize um arredondamento convencional para duas casas decimais.

A nova versão pode produzir 2,52.

Os dois programas compilam.

Os dois executam.

Os dois parecem corretos.

Mas são diferentes.

Uma diferença de apenas R$ 0,01, repetida em um milhão de operações que produzam divergência no mesmo sentido, representa R$ 10.000.

É uma situação hipotética, naturalmente. Na prática, diferenças podem ocorrer nos dois sentidos.

Entretanto, o exemplo revela por que preservar o comportamento é fundamental.

🔧 Como corrigir o exemplo?

Depende da regra empresarial.

Se a especificação exigir arredondamento ao centavo segundo a regra suportada pelo compilador, podemos utilizar:

           COMPUTE WS-RESULTADO ROUNDED =
               WS-VALOR * WS-TAXA

Nesse caso, para os valores apresentados, o resultado será 2,52.

Entretanto, acrescentar ROUNDED a um programa existente não é apenas uma melhoria estética.

É uma mudança funcional.

Pode alterar resultados financeiros, conciliações e registros históricos.

Dica Bellacosa: nunca altere uma regra aritmética em produção porque a nova implementação parece matematicamente mais elegante. Confirme antes a especificação empresarial.


🧮 Capítulo VIII — Dijkstra apresenta seu maior argumento: programas precisam de propriedades verificáveis

Um dos fundamentos da abordagem de Dijkstra é a necessidade de raciocinar sobre o comportamento dos programas.

Considere uma rotina que transfere dinheiro de uma conta para outra.

Antes da operação, temos:

Conta A: R$ 1.000

Conta B: R$ 500

Total: R$ 1.500

Agora vamos transferir R$ 200 da conta A para a conta B.

O resultado esperado é:

Conta A: R$ 800

Conta B: R$ 700

Total: R$ 1.500

Observe que uma propriedade permanece verdadeira.

A soma dos saldos não mudou.

Podemos expressar isso matematicamente:

Saldo A + Saldo B = constante

Essa propriedade é um exemplo de invariante.

Um invariante é uma condição que deve permanecer verdadeira durante determinadas etapas ou ao final de uma operação, conforme sua especificação.

Em uma transferência bancária simples entre duas contas, a conservação do valor transferido é uma propriedade importante.

Contudo, sistemas reais também precisam considerar tarifas, tributos, lançamentos contábeis, reversões e outras movimentações.

Por isso, os invariantes precisam ser definidos de acordo com o domínio empresarial.

💻 Laboratório: transferência bancária em COBOL

O exemplo abaixo é exclusivamente didático e não implementa uma transação bancária real.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. TRANSFER.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 WS-CONTA-A    PIC S9(7)V99 COMP-3.
       01 WS-CONTA-B    PIC S9(7)V99 COMP-3.
       01 WS-VALOR      PIC S9(7)V99 COMP-3.
       01 WS-TOTAL-INI  PIC S9(9)V99 COMP-3.
       01 WS-TOTAL-FIM  PIC S9(9)V99 COMP-3.

       PROCEDURE DIVISION.

           MOVE 1000 TO WS-CONTA-A
           MOVE 500 TO WS-CONTA-B
           MOVE 200 TO WS-VALOR

           COMPUTE WS-TOTAL-INI =
               WS-CONTA-A + WS-CONTA-B

           IF WS-VALOR > ZERO AND
              WS-CONTA-A >= WS-VALOR

               SUBTRACT WS-VALOR
                   FROM WS-CONTA-A

               ADD WS-VALOR
                   TO WS-CONTA-B
           ELSE
               DISPLAY "TRANSFERENCIA INVALIDA"
           END-IF

           COMPUTE WS-TOTAL-FIM =
               WS-CONTA-A + WS-CONTA-B

           IF WS-TOTAL-INI = WS-TOTAL-FIM
               DISPLAY "INVARIANTE PRESERVADO"
           ELSE
               DISPLAY "ERRO DE CONSISTENCIA"
           END-IF

           GOBACK.

O que aprendemos?

Primeiro, declaramos os valores monetários usando COMP-3, uma representação decimal compactada comum em aplicações COBOL empresariais.

Depois, calculamos a soma dos saldos antes da operação.

Verificamos se o valor da transferência é positivo e se existe saldo suficiente.

Executamos débito e crédito.

Finalmente, comparamos os totais.

Mas atenção: essa verificação não demonstra que o programa está totalmente correto.

Por exemplo, ela não verifica se cada saldo individual corresponde exatamente ao esperado.

Também não trata persistência em banco de dados, concorrência, falhas intermediárias ou rollback.

Uma aplicação bancária real exige mecanismos transacionais apropriados.

Ainda assim, o exercício apresenta uma ideia importante.

Podemos verificar propriedades do programa, em vez de observar apenas algumas saídas isoladas.

Essa é uma conexão direta entre o pensamento de Dijkstra e a modernização de software com inteligência artificial.


🕵️ Capítulo IX — O mistério dos 360 dias: um erro que talvez seja uma regra bancária

Imagine que uma IA encontre o seguinte trecho:

           COMPUTE WS-JUROS =
              (WS-SALDO * WS-TAXA * WS-DIAS)
               / 360

A IA poderia perguntar:

Por que o programa utiliza 360 dias se o ano normalmente possui 365?

Um programador sem experiência financeira talvez respondesse:

— É um erro antigo. Vamos corrigir.

Dijkstra provavelmente interromperia a discussão.

Antes de corrigir, precisamos saber o que o programa deveria fazer.

A utilização de uma base anual de 360 dias pode corresponder a uma convenção financeira contratual.

A base 365 também existe, assim como diferentes convenções de contagem de dias.

Isso significa que o divisor correto depende do produto e de sua especificação.

Agora imagine que o sistema tenha milhões de contratos antigos.

Modificar 360 para 365 pode alterar valores que deveriam continuar obedecendo às condições originalmente acordadas.

O código pode estar feio.

Pode estar mal documentado.

Pode ser antigo.

Mas isso não significa que sua lógica esteja incorreta.

💡 A grande lição

Existem pelo menos três perguntas diferentes:

O programa faz aquilo que foi programado para fazer?

O programa faz aquilo que a especificação exige?

A especificação ainda representa corretamente a necessidade empresarial?

Uma IA pode ajudar a responder à primeira pergunta.

Pode auxiliar muito na investigação da segunda.

Mas a terceira exige conhecimento do negócio, documentação, responsabilidade e decisões humanas.


🏰 Capítulo X — O castelo IBM Z: por que o COBOL não vive sozinho?

Imagine um castelo medieval.

O programador COBOL trabalha na sala principal.

Mas o castelo possui muralhas, arquivos, mensageiros, guardas e depósitos.

Algo semelhante acontece no mainframe.

O COBOL representa parte da lógica da aplicação.

O CICS administra ambientes de processamento transacional.

O Db2 oferece recursos de banco de dados relacional.

O VSAM gerencia determinadas organizações de arquivos e métodos de acesso.

O JCL descreve trabalhos batch e recursos necessários à execução.

O JES2 participa do gerenciamento e processamento de jobs.

O RACF fornece recursos de identificação, autenticação, controle de acesso e auditoria.

O IBM MQ permite comunicação assíncrona entre aplicações.

E ferramentas como Zowe, VS Code e z/OS Connect ajudam a integrar esse ambiente com práticas e plataformas modernas.

Um programa COBOL pode depender de vários desses componentes simultaneamente.

Por isso, migrar seu código-fonte não significa migrar toda a aplicação.

Considere um programa que recebe uma transação pelo CICS, consulta tabelas Db2, atualiza um arquivo VSAM e envia uma mensagem MQ.

Se uma IA converter o COBOL para Python, ainda precisaremos decidir como preservar:

  • Os limites transacionais.

  • O tratamento de falhas.

  • O controle de concorrência.

  • A recuperação de operações interrompidas.

  • As autorizações de acesso.

  • As integrações externas.

  • Os formatos e a integridade dos dados.

  • Os requisitos de disponibilidade e desempenho.

O desafio é arquitetural.

Dijkstra, que estudou profundamente problemas de concorrência, sincronização e correção, seria um excelente guia intelectual para investigar essas dependências.


🧪 Capítulo XI — Passo a passo: como um iniciante pode investigar COBOL com inteligência artificial

Chegou a hora de construir um método prático.

Vamos imaginar que você acaba de entrar numa equipe responsável por manter aplicações COBOL.

Seu primeiro trabalho consiste em compreender um programa desconhecido.

Passo 1 — Não comece pedindo uma tradução

A primeira reação pode ser copiar o programa e solicitar:

Converta tudo para Python.

Resista à tentação.

Comece identificando o problema que o software resolve.

Pergunte quais dados ele recebe, quais regras aplica, quais arquivos modifica e quais resultados produz.

A tradução será muito mais segura quando houver compreensão prévia.

Passo 2 — Separe as divisões do COBOL

Procure compreender:

IDENTIFICATION DIVISION: identidade do programa.

ENVIRONMENT DIVISION: definições relacionadas ao ambiente e aos recursos externos.

DATA DIVISION: estruturas de dados.

PROCEDURE DIVISION: lógica executável.

Nem todos os programas apresentam exatamente a mesma organização, mas essas divisões constituem uma base excelente para o aprendizado.

Passo 3 — Investigue os tipos de dados

Observe especialmente:

PIC 9: campos numéricos.

PIC X: campos alfanuméricos.

COMP-3: armazenamento decimal compactado.

COMP e COMP-5: representações binárias com particularidades que dependem do ambiente.

REDEFINES: diferentes interpretações de uma mesma área de armazenamento.

OCCURS: repetição de estruturas.

Esses recursos frequentemente determinam como a aplicação representa dados externos e calcula resultados.

Passo 4 — Identifique dependências

Pesquise instruções como:

CALL

COPY

EXEC SQL

EXEC CICS

READ

WRITE

REWRITE

START

Essas instruções podem revelar relações com outros programas, copybooks, bancos de dados, arquivos e serviços transacionais.

Passo 5 — Solicite explicações com evidências

Um prompt útil seria:

Analise este programa COBOL sem modificar seu conteúdo. Identifique entradas, saídas, regras de negócio, dependências, tipos de dados, cálculos e possíveis riscos. Separe os fatos observados das hipóteses. Para cada conclusão, indique o trecho do código que a sustenta. Quando houver informação insuficiente, declare a incerteza.

Esse último requisito é muito importante.

Inteligências artificiais podem apresentar interpretações plausíveis que não correspondem ao verdadeiro propósito empresarial do código.

Passo 6 — Construa testes de caracterização

Um teste de caracterização registra o comportamento existente de um sistema.

Ele ajuda a descobrir como a aplicação funciona antes da alteração.

Inclua valores normais, situações extremas, números negativos, limites de campos, condições de erro e formatos inesperados.

Documente também quais comportamentos precisam ser preservados e quais defeitos conhecidos devem ser corrigidos.

Passo 7 — Compare versões

Execute o programa original e a versão modificada utilizando entradas controladas.

Compare resultados, formatos, códigos de erro e efeitos colaterais.

Quando houver divergência, investigue sua origem.

Nunca considere que a implementação nova está automaticamente correta porque utiliza uma linguagem mais recente.

Passo 8 — Só então considere a modernização

Após compreender e testar o comportamento, avalie se é melhor:

Manter e otimizar o COBOL.

Refatorar componentes internos.

Expor serviços por APIs.

Substituir módulos específicos.

Ou realizar uma migração maior.

A decisão deve considerar riscos, custos e benefícios reais.


🧰 Capítulo XII — As ferramentas modernas que Dijkstra encontraria no mainframe

Em 2026, o desenvolvimento COBOL pode utilizar recursos muito diferentes daqueles encontrados nos terminais dos anos 1970 e 1980.

Ambientes modernos permitem integração com editores, repositórios de código, pipelines e ferramentas de análise.

O Visual Studio Code, com extensões apropriadas, pode ser utilizado para editar COBOL e interagir com recursos do z/OS.

O Zowe facilita diversas formas de acesso e automação.

O Git permite controlar versões, comparar alterações e organizar o desenvolvimento colaborativo.

Ferramentas de compilação, testes e integração contínua ajudam a produzir evidências de qualidade.

O IBM watsonx Code Assistant for Z oferece recursos voltados à compreensão, explicação, geração, refatoração e transformação de código, conforme a versão e os componentes disponíveis.

Essas tecnologias podem reduzir atividades repetitivas.

Mas nenhuma delas elimina a necessidade de engenharia.

Uma ferramenta capaz de produzir código rapidamente não demonstra, por si só, que o código está correto.

A automação precisa ser acompanhada de critérios verificáveis.

E aqui existe uma ligação fundamental com a filosofia de Dijkstra.

A qualidade de um programa não deve ser medida apenas pela facilidade com que ele foi escrito.

Precisamos considerar sua clareza, suas propriedades e a capacidade de demonstrar que atende às exigências estabelecidas.


🔐 Capítulo XIII — Quando a IA recebe acesso ao código bancário: surge um novo perigo

Até agora discutimos erros de lógica.

Mas existe outro problema.

Para analisar um sistema COBOL empresarial, uma inteligência artificial pode precisar acessar código-fonte, documentação, configurações e informações operacionais.

Esses materiais podem conter detalhes sensíveis.

Imagine um agente de IA conectado a um repositório de aplicações financeiras.

Ele recebe autorização para consultar programas.

Depois, ganha acesso a pipelines de desenvolvimento.

Em seguida, alguém permite que modifique arquivos e execute tarefas automaticamente.

De repente, uma ferramenta originalmente utilizada para explicar código possui capacidades de alterar componentes críticos.

Isso exige governança.

As boas práticas incluem controle de privilégios, segregação de funções, rastreabilidade de alterações, avaliação de ferramentas, revisão humana e mecanismos de aprovação.

Credenciais e dados pessoais não devem ser enviados indiscriminadamente para serviços externos.

Ambientes de testes também precisam ser separados dos ambientes produtivos.

Dijkstra não estudou os modelos de linguagem atuais, mas sua preocupação com sistemas complexos e comportamentos controláveis fornece um excelente ponto de partida para essa discussão.

Quanto maior a autonomia concedida ao agente, maior a necessidade de verificar suas ações e limitar seus efeitos.


⏳ Capítulo XIV — 2030: o futuro pertence ao programador COBOL ou ao fiscal da inteligência artificial?

Vamos imaginar o mercado de trabalho daqui a alguns anos.

Em uma organização, existem milhares de programas COBOL.

Boa parte deles foi desenvolvida antes do nascimento dos profissionais mais jovens da equipe.

Agora, agentes de IA conseguem explicar rotinas, localizar dependências, produzir documentação e sugerir transformações.

Isso pode reduzir a quantidade de trabalho manual exigida em determinadas tarefas.

Mas também pode aumentar a capacidade de profissionais experientes de cuidar de aplicações maiores.

O mercado poderá valorizar novas combinações de competências.

O programador COBOL tradicional compreende a linguagem e o ambiente.

O engenheiro de modernização compreende o sistema, suas dependências e as alternativas arquiteturais.

O especialista em validação compreende como estabelecer requisitos e demonstrar propriedades importantes.

O profissional que combina essas habilidades com o uso responsável da IA poderá assumir funções particularmente relevantes.

Entretanto, não devemos transformar essa possibilidade numa promessa de estabilidade profissional garantida.

A automação pode alterar a demanda por determinadas atividades e mudar a forma de contratação das empresas.

O melhor caminho para quem está começando é construir fundamentos sólidos e desenvolver competências complementares.

Aprender COBOL não precisa significar ignorar Python, Java, APIs, Git ou inteligência artificial.

Da mesma forma, aprender IA não deveria significar abandonar o estudo de algoritmos, estruturas de dados e engenharia de software.

📚 O currículo que eu recomendaria para um aprendiz

Comece compreendendo variáveis, condições, repetição e arquivos em COBOL.

Depois avance para JCL, TSO/ISPF e execução de programas no z/OS.

Estude Db2, CICS e VSAM para compreender como aplicações empresariais armazenam e movimentam dados.

Aprenda testes, depuração, documentação e controle de versões.

Finalmente, explore integração por APIs e uso de IA para apoiar análise e desenvolvimento.

Durante todo o processo, faça uma pergunta inspirada por Dijkstra:

Como posso demonstrar que este programa está fazendo aquilo que deveria fazer?

Essa pergunta vale mais do que decorar centenas de instruções.


🥚 Capítulo XV — Cinco curiosidades que Dijkstra deixou para os arqueólogos do software

1. O algoritmo de Dijkstra não nasceu para encontrar rotas de GPS

Seu famoso algoritmo de caminhos mínimos antecede os sistemas modernos de navegação.

A ideia é encontrar caminhos de custo mínimo em grafos com pesos não negativos.

Hoje, conceitos semelhantes aparecem em redes, logística, transportes e planejamento.

2. Dijkstra trabalhou com os fundamentos da concorrência

Muito antes dos atuais sistemas distribuídos, ele investigou problemas de sincronização, exclusão mútua e coordenação de processos.

Esses temas são fundamentais para compreender por que aplicações transacionais precisam controlar corretamente operações simultâneas.

3. Ele não gostava de complexidade desnecessária

A programação estruturada não elimina toda a complexidade.

Mas pode organizar melhor o raciocínio e reduzir a dificuldade de acompanhar o fluxo de execução.

É uma lição que continua válida para software produzido por humanos ou por IA.

4. Ele realmente criticou o COBOL

Essa é talvez a maior ironia de nossa investigação.

Estamos utilizando as ideias de um crítico da linguagem para ensinar como construir programas COBOL melhores.

Não existe contradição obrigatória nisso.

Boas ideias científicas podem ser aplicadas em contextos que seus autores não apreciavam.

5. O maior perigo da IA pode ser tornar fácil demais produzir código

Durante décadas, escrever programas exigia tempo e esforço consideráveis.

Agora, produzir código pode ser muito mais rápido.

Mas a rapidez de geração não reduz automaticamente a dificuldade de compreender o comportamento.

Talvez estejamos entrando numa época em que escrever software se torna progressivamente mais barato, enquanto demonstrar sua correção permanece um dos grandes desafios da engenharia.


⚖️ Capítulo XVI — O julgamento final: COBOL, inteligência artificial e o legado de Dijkstra

Voltamos ao Centro de Processamento de Dados.

São quatro horas e cinquenta e dois minutos.

O jovem programador ainda observa a migração realizada pela inteligência artificial.

Na primeira tentativa, o sistema havia informado sucesso.

Agora, depois de uma investigação mais cuidadosa, surgiram diferenças importantes.

Alguns valores decimais foram arredondados de maneira diferente.

Um campo redefinido não foi interpretado corretamente.

Um fluxo de exceção não recebeu tratamento equivalente.

Uma rotina utilizava um calendário financeiro que não estava documentado.

O jovem compreende que o código produzido pela IA pode representar um excelente ponto de partida.

Mas ainda não é suficiente para substituir o sistema original em produção.

Ele prepara novos testes.

Consulta a documentação.

Conversa com os especialistas de negócio.

Investiga dependências.

E começa a construir uma justificativa técnica para cada alteração.

O visitante observa em silêncio.

— Professor, então o problema não é a inteligência artificial?

Na nossa dramatização, Dijkstra responde:

— O problema é acreditar que produzir instruções equivale a compreender um programa.

O jovem olha novamente para o terminal.

Durante quase sete décadas, os computadores ficaram mais rápidos.

As linguagens evoluíram.

Os sistemas operacionais se transformaram.

A capacidade de armazenamento cresceu em proporções extraordinárias.

E agora as máquinas conseguem produzir programas com uma velocidade que os pioneiros da computação dificilmente imaginariam.

Mas uma pergunta permanece.

Como sabemos que o programa está correto?

Essa pergunta existia antes do COBOL.

Continuou importante durante a expansão dos mainframes.

Sobreviveu à revolução dos computadores pessoais.

Acompanhou a chegada da internet e da computação em nuvem.

E continua fundamental na era da inteligência artificial.


☕ Epílogo — O COBOL não precisa ser salvo da idade. Precisa ser protegido da incompreensão.

A crise do COBOL é frequentemente apresentada como uma disputa entre tecnologias antigas e modernas.

Mas essa interpretação é superficial.

Não estamos simplesmente diante de uma linguagem de 1959 tentando sobreviver em 2026.

Estamos diante de décadas de conhecimento empresarial incorporado a sistemas que continuam executando funções críticas.

A inteligência artificial oferece ferramentas extraordinárias para investigar, explicar, documentar, testar e transformar essas aplicações.

Entretanto, também introduz novos riscos quando resultados aparentemente convincentes são aceitos sem verificação suficiente.

A filosofia de Edsger W. Dijkstra nos ajuda a compreender essa diferença.

A engenharia de software não pode depender exclusivamente da confiança no autor do programa.

E isso vale quando o autor é um programador de 1986, um engenheiro de 2026 ou um agente de inteligência artificial.

É preciso compreender o problema.

Definir o comportamento esperado.

Organizar o raciocínio.

Identificar propriedades importantes.

Construir evidências de correção.

E assumir responsabilidade pelas mudanças.

Talvez o futuro do COBOL não seja determinado por quantas linhas de código uma inteligência artificial consegue traduzir por minuto.

Talvez seja determinado pela nossa capacidade de preservar corretamente os processos empresariais que essas linhas representam.

Porque uma máquina pode escrever um milhão de instruções. Mas ainda precisamos saber se são as instruções certas.

E, no universo Bellacosa Mainframe, essa é a diferença entre simplesmente programar e compreender o que se está construindo.


📚 Referências e leituras recomendadas

  • André Lourenti Magalhães, Canaltech. O que é a chamada Crise do COBOL e como a IA pode ajudar a resolver? — 8 de novembro de 2026.

  • OpenAI. Advancing coding in low-resource programming languages — 19 de outubro de 2026.

  • Edsger W. Dijkstra. Go To Statement Considered Harmful. Communications of the ACM — março de 1968.

  • Edsger W. Dijkstra. How do we tell truths that might hurt? — EWD498, 1975.

  • Edsger W. Dijkstra. What led to Notes on Structured Programming — EWD1308, 2001.

  • IBM Documentation. Enterprise COBOL for z/OS.

  • IBM Documentation. watsonx Code Assistant for Z.

  • Kyndryl. State of Mainframe Modernization Report 2025.

Bellacosa Mainframe — Onde os programas antigos contam suas histórias, a inteligência artificial encontra novos desafios e o conhecimento continua sendo o recurso mais importante de todos.

Fim da investigação. O mainframe continua trabalhando.

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