☕ 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

domingo, 22 de maio de 2022

Yuusha, Yamemasu — Muito Além do "Herói Aposentado"

Bellacosa Mainframe apresenta yuusha yamemasu

☕ Um Café no Bellacosa Mainframe

Yuusha, Yamemasu — Muito Além do "Herói Aposentado"

O Que Todo Programador COBOL Padawan Precisa Saber Sobre Liderança, Sistemas Legados, Inteligência Artificial, Propósito e Como um Anime de Fantasia Ensina Lições que Valem para IBM Z, DevOps e Engenharia de Software

"Todo sistema nasce para resolver um problema. O verdadeiro desafio começa quando o problema desaparece, mas o sistema continua existindo."


Ficha Técnica

Título original

勇者、辞めます ~次の職場は魔王城~
(Yūsha, Yamemasu: Tsugi no Shokuba wa Maōjō)

Título internacional

I'm Quitting Heroing

Autor (Light Novel)

Quantum

Ilustrações

Hana Amano

Mangá

Nori Kazato

Estúdio de animação

EMT Squared

Diretor

Hisashi Ishii

Diretor-chefe

Yuu Nobuta

Roteiro

Shigeru Murakoshi

Trilha sonora

Kōhei Munemoto

Exibição original

  • 5 de abril de 2022

  • 21 de junho de 2022

Quantidade de episódios

  • 12 episódios

  • 2 OVAs lançadas posteriormente

Gênero

  • Fantasia

  • Aventura

  • Comédia

  • Drama

  • Filosofia

  • Ficção científica (em sua essência)

Classificação indicativa

  • Aproximadamente 14 anos (TV-14)


Sinopse

Durante séculos, o lendário herói Leo Demonheart foi o maior defensor da humanidade. Quando finalmente derrota a Rainha Demônio Echidna, espera ser recebido como salvador.

Mas acontece exatamente o contrário.

Com medo de seu poder, os próprios humanos passam a rejeitá-lo. Sem um propósito e sem lugar no mundo, Leo toma uma decisão improvável: oferecer seus serviços ao antigo inimigo e trabalhar para o exército demoníaco.

O que parecia uma simples comédia logo revela uma história profunda sobre liderança, identidade, propósito e o peso da imortalidade.


Resumo

A primeira temporada acompanha a chegada de Leo ao castelo de Echidna. Para conquistar a confiança dos generais demônios, ele resolve problemas de logística, treinamento, motivação, planejamento e organização.

Enquanto ajuda o reino demoníaco a se reerguer, descobrimos lentamente que Leo não é apenas um herói extremamente poderoso. Seu passado esconde uma verdade capaz de mudar completamente a forma como enxergamos sua existência.

Nos episódios finais, a narrativa deixa de ser uma fantasia convencional e se transforma em uma reflexão sobre humanidade, inteligência artificial e livre-arbítrio.


A História

À primeira vista, parece um anime de fantasia medieval.

Castelos.

Espadas.

Magia.

Demônios.

Heróis.

Mas tudo isso funciona apenas como cenário.

O verdadeiro tema da obra é a jornada de alguém criado para cumprir uma única missão e que, após concluí-la, precisa descobrir quem é sem essa missão.

A revelação de que Leo foi criado por uma civilização tecnologicamente avançada há milhares de anos muda completamente a percepção do espectador. A fantasia passa a dialogar com ficção científica, mostrando que sua força, longevidade e habilidades extraordinárias fazem parte de um projeto criado para proteger a humanidade.


Os Personagens

Leo Demonheart

O protagonista.

Extremamente inteligente, estratégico e praticamente invencível.

Mais do que um guerreiro, é um solucionador de problemas.

No estilo Bellacosa Mainframe, Leo representa um sistema legado robusto: confiável, eficiente e indispensável, mas construído para um contexto que já mudou.


Echidna

A Rainha Demônio.

Carismática, racional e profundamente preocupada com seu povo.

Apesar da imagem de vilã, demonstra qualidades de uma excelente líder.

Ela entende que liderança não significa mandar, mas inspirar.


Shutina

General responsável pelas forças militares.

Competente, disciplinada e dedicada.

Representa o profissional técnico que assume responsabilidades demais.


Edvard

Especialista em logística.

Organizado e metódico.

Sempre pensa em eficiência operacional.

É o "gerente de infraestrutura" do reino.


Mernes

Responsável pela inteligência.

Especialista em informações estratégicas.

Mostra como conhecimento pode ser mais poderoso do que força.


Lily

General da magia.

Gentil, otimista e extremamente talentosa.

Representa empatia e colaboração.


Temática

A obra aborda diversos temas:

  • Liderança

  • Gestão de pessoas

  • Burnout

  • Propósito

  • Solidão

  • Inteligência Artificial

  • Imortalidade

  • Livre-arbítrio

  • Evolução pessoal

  • Administração de organizações

  • Confiança

  • Cooperação


O Que Torna o Anime Diferente?

Grande parte dos animes de fantasia termina quando o herói derrota o Rei Demônio.

Yuusha, Yamemasu começa exatamente nesse ponto.

A pergunta deixa de ser:

"Como vencer a guerra?"

E passa a ser:

"Como reconstruir depois dela?"

Além disso, o anime substitui batalhas constantes por desafios administrativos, mostrando que liderar pessoas pode ser tão difícil quanto derrotar monstros.


As Aventuras

Ao longo da temporada, Leo ajuda cada general a superar problemas específicos:

  • reorganiza equipes;

  • melhora processos;

  • resolve gargalos logísticos;

  • otimiza treinamento militar;

  • aumenta a motivação dos soldados;

  • cria estratégias mais eficientes;

  • fortalece a confiança entre líderes.

Cada episódio funciona como um estudo de caso sobre resolução de problemas.


As Mensagens Ocultas

O verdadeiro inimigo pode ser a falta de propósito

Leo descobre que vencer não significa encontrar felicidade.


Liderança é desenvolver pessoas

Em vez de resolver tudo sozinho, Leo ensina os outros a crescer.


Organizações sobrevivem graças aos processos

Mesmo indivíduos brilhantes não conseguem sustentar uma organização sem estrutura.


Poder exige responsabilidade

Quanto maior a capacidade de alguém, maior sua responsabilidade em decidir como utilizá-la.


Evoluir é mais importante do que permanecer perfeito

Leo percebe que seguir eternamente a mesma programação não faz sentido quando o mundo muda.


Bellacosa Mainframe: A Grande Analogia

Imagine um programa COBOL escrito há quarenta anos.

Ele foi criado para resolver um problema específico.

Funcionou perfeitamente durante décadas.

Mas o negócio mudou.

As regras mudaram.

Os clientes mudaram.

Mesmo assim, o programa continua executando exatamente a mesma lógica.

Leo Demonheart representa esse sistema legado.

Não porque esteja ultrapassado.

Mas porque continua executando sua missão original sem questionar se ela ainda faz sentido.

Modernizar um sistema não significa descartá-lo.

Significa permitir que ele evolua.

É exatamente a jornada de Leo.


O Que Todo Programador COBOL Padawan Aprende com Yuusha, Yamemasu

  • Resolver problemas é mais importante do que demonstrar poder.

  • Sistemas robustos precisam evoluir junto com o negócio.

  • Documentação, processos e treinamento são fundamentais.

  • Grandes líderes criam sucessores.

  • Tecnologia sem propósito perde valor.

  • Modernização deve preservar o que funciona e transformar o que limita.


Impacto Cultural

Embora não tenha alcançado o sucesso comercial de franquias como Overlord, Re:Zero ou Tate no Yuusha no Nariagari, Yuusha, Yamemasu conquistou uma base fiel de fãs por oferecer uma narrativa madura, focada em reconstrução, liderança e identidade.

A obra é frequentemente lembrada por sua reviravolta narrativa nos episódios finais, que transforma uma aparente fantasia medieval em uma história com elementos de ficção científica e reflexões sobre inteligência artificial, memória e propósito. Esse contraste tornou o anime um exemplo de como subverter expectativas sem depender apenas de cenas de ação.


Classificação Bellacosa Mainframe

CritérioNota
História⭐⭐⭐⭐⭐ (10/10)
Originalidade⭐⭐⭐⭐⭐
Desenvolvimento dos personagens⭐⭐⭐⭐⭐
Filosofia⭐⭐⭐⭐⭐
Liderança e gestão⭐⭐⭐⭐⭐
Humor⭐⭐⭐⭐☆
Ação⭐⭐⭐⭐☆
Trilha sonora⭐⭐⭐⭐☆
Reviravoltas⭐⭐⭐⭐⭐

Veredito Final

Yuusha, Yamemasu é muito mais do que um anime sobre um herói desempregado. É uma aula sobre adaptação, liderança e evolução contínua.

No universo do Bellacosa Mainframe, Leo Demonheart simboliza um sistema IBM Z de missão crítica: extremamente confiável, resiliente e poderoso. Porém, assim como aplicações COBOL que atravessam décadas, seu verdadeiro desafio não é continuar funcionando, e sim adaptar-se a novas necessidades sem perder sua essência.

A grande lição da primeira temporada é clara: vencer uma batalha é importante, mas construir um futuro sustentável — para pessoas, organizações ou sistemas — é o que realmente define um herói.

sexta-feira, 13 de maio de 2022

Kubernetes, COBOL e o Guia do Mochileiro das Galáxias para quem saiu do JES2 e encontrou um Pod

 

Bellacosa Mainframe e a introducao ao kubernetes no mundo cobol

☕ Um Café no Bellacosa Mainframe

Kubernetes, COBOL e o Guia do Mochileiro das Galáxias para quem saiu do JES2 e encontrou um Pod

🚀 Pods, Deployments, Services, YAML, containers, Scheduler, Control Plane, storage, autorrecuperação e a perturbadora descoberta de que o universo cloud-native passou décadas reinventando problemas que o velho operador do mainframe já conhecia — só que agora tudo tem nomes novos, logos simpáticos e desaparece antes do café esfriar

Existe uma frase que deveria estar escrita em letras grandes na entrada de qualquer curso de Kubernetes:

NÃO ENTRE EM PÂNICO.

Ela deveria aparecer imediatamente acima de outra:

E NÃO TENTE DECORAR O YAML.

O jovem programador COBOL, entretanto, normalmente ignora ambas.

Ele acabou de sobreviver ao primeiro encontro com IDENTIFICATION DIVISION, descobriu que PIC 9(7)V99 COMP-3 não é uma coordenada intergaláctica, conseguiu executar seu primeiro JCL sem receber um JCL ERROR e começa a acreditar que finalmente compreendeu o universo.

Então alguém aparece no corredor e pergunta:

— Você conhece Kubernetes?

O programador responde:

— Um pouco.

Essa resposta, como inúmeras decisões tomadas na história da humanidade, será lamentada posteriormente.

Quinze minutos depois ele estará olhando para alguma coisa assim:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: payment-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: payment

E começa a suspeitar que foi sequestrado por extraterrestres.

Deployment.

ReplicaSet.

Pod.

Service.

Ingress.

Node.

Cluster.

Namespace.

ConfigMap.

Secret.

PersistentVolumeClaim.

DaemonSet.

StatefulSet.

Scheduler.

kubelet.

etcd.

O sujeito olha para aquilo e pensa:

“Eu só queria executar um programa.”

Bem-vindo ao Kubernetes.

Pegue sua toalha.

Prepare o café.

E não entre em pânico.


🌌 Capítulo 1 — Afinal, que diabo é Kubernetes?

O material que iniciou nossa viagem apresenta Kubernetes como uma plataforma open source destinada a automatizar implantação, dimensionamento, gerenciamento e operação de aplicações em contêineres.

A definição está correta.

Mas é daquelas definições tecnicamente corretas que escondem justamente a parte mais interessante.

É como definir um mainframe dizendo:

“É um computador utilizado para executar programas.”

Também está correto.

Só não ajuda muito.

Kubernetes pode ser entendido de forma mais poderosa:

Kubernetes é um sistema distribuído que observa continuamente o mundo real e tenta fazê-lo coincidir com o mundo que você declarou desejar.

Essa frase merece café.

Porque aqui está praticamente toda a filosofia Kubernetes.

Suponha que você diga:

Quero três instâncias da minha aplicação.

No Kubernetes você pode declarar:

replicas: 3

Agora imagine que estejam rodando:

Pod A
Pod B
Pod C

Perfeito.

Estado desejado:

3

Estado real:

3

O universo está em equilíbrio.

Até que o Pod B morre.

Agora temos:

Estado desejado = 3
Estado real     = 2

O Kubernetes observa a diferença.

E basicamente diz:

“Segundo meus registros, deveriam existir três. Só estou vendo dois. Isso é inaceitável.”

Então cria outro.

Pod A
Pod C
Pod D

Voltamos a:

Desejado = 3
Real     = 3

Pronto.

Você acabou de entender um dos conceitos mais importantes de Kubernetes:

reconciliation loop

ou:

loop de reconciliação

Kubernetes está continuamente perguntando:

O que deveria existir?
       |
       v
O que existe agora?
       |
       v
Existe diferença?
       |
       +---- não ---> continue observando
       |
       +---- sim ---> tente corrigir

Pense nisso como um operador extremamente obsessivo que possui uma planilha dizendo:

PRECISO DE 3 INSTÂNCIAS

e passa o dia inteiro contando.

— Uma.

— Duas.

— Três.

Tudo certo.

Cinco minutos depois:

— Uma.

— Duas.

CADÊ A TERCEIRA?!

E imediatamente chama alguém para providenciar outra.


🧠 Capítulo 2 — Kubernetes é declarativo, e isso muda tudo

No mundo tradicional de administração de sistemas, costumamos pensar proceduralmente.

Faça isto.

Depois aquilo.

Depois outra coisa.

Por exemplo:

1. crie servidor
2. instale sistema operacional
3. copie aplicação
4. configure arquivos
5. inicie processo
6. verifique processo
7. reinicie se necessário

Kubernetes tenta trabalhar de maneira diferente.

Você declara:

Quero três instâncias.
Quero esta imagem.
Quero esta configuração.
Quero esta quantidade de memória.
Quero este serviço.

E deixa a plataforma tentar produzir esse estado.

O próprio material destaca essa abordagem: você descreve os recursos através de manifestos e o sistema trabalha para manter o ambiente alinhado com o estado declarado.

Para um COBOLzeiro isso pode parecer estranho.

Mas não é completamente alienígena.

Pense em JCL.

Você escreve:

//ARQOUT DD DSN=EMPRESA.RELATORIO,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(5,2))

Você não está manualmente movimentando braços mecânicos dentro do storage.

Você está declarando requisitos.

O sistema interpreta.

Aloca.

Gerencia.

Kubernetes leva essa filosofia para workloads distribuídos.


🐳 Capítulo 3 — Antes de Kubernetes havia containers

Agora surge uma pergunta absolutamente fundamental:

Por que Kubernetes existe?

Porque containers ficaram tremendamente úteis.

Imagine uma aplicação tradicional que depende de:

Java versão X
biblioteca Y
arquivo Z
variáveis ambientais
configurações específicas

Na máquina do desenvolvedor funciona.

Em homologação explode.

Em produção surge o clássico diálogo:

— Mas na minha máquina funciona.

Ao que o operador responde:

— Excelente. Então vamos colocar sua máquina no data center.

Containers surgiram como uma maneira extremamente prática de empacotar aplicação e suas dependências.

Simplificando:

Aplicação
+
Dependências
+
Configuração de runtime
=
Imagem de container

A partir dela podemos iniciar containers.

Mas aí aparece o problema.

Um container é fácil.

Dez containers são administráveis.

Cem começam a ficar interessantes.

Mil começam a pedir café.

Dez mil fazem você procurar emprego.

Então surgem perguntas:

Em qual servidor cada container roda?

E se o servidor morrer?

Como substituir automaticamente?

Como distribuir tráfego?

Como atualizar versões?

Como saber quais instâncias estão saudáveis?

Como aumentar capacidade?

Como armazenar dados?

Como controlar configuração?

Como proteger credenciais?

Eis o território do Kubernetes.


📦 Capítulo 4 — Container não é Pod

Essa é uma das primeiras armadilhas do viajante.

O material corretamente apresenta o Pod como menor unidade de implantação do Kubernetes, capaz de conter um ou mais containers.

Então:

CONTAINER != POD

Um Pod é uma abstração.

Imagine:

+---------------------------+
|            POD            |
|                           |
|   +-------------------+   |
|   | Container App     |   |
|   +-------------------+   |
|                           |
|   +-------------------+   |
|   | Container Sidecar |   |
|   +-------------------+   |
|                           |
+---------------------------+

Na maioria dos casos simples:

1 Pod
  |
  +-- 1 container principal

Mas podem existir múltiplos containers fortemente relacionados.

Por exemplo:

Aplicação
+
proxy auxiliar

ou:

Aplicação
+
componente auxiliar de observabilidade

Esses containers compartilham elementos do ambiente do Pod.

A ideia importante é:

Kubernetes administra Pods.

Você pode até imaginar o container como o programa e o Pod como sua pequena unidade operacional.

Não é uma equivalência perfeita com nada do mainframe, mas ajuda a construir o mapa mental.


💀 Capítulo 5 — Kubernetes não ama seus servidores

Aqui ocorre um choque cultural particularmente divertido.

Administradores tradicionais costumavam dar nomes carinhosos às máquinas.

WEBPROD01
WEBPROD02
DBSERVER03

E depois surgia aquele servidor lendário.

Você pergunta:

— Podemos reiniciar WEBPROD01?

A sala fica silenciosa.

O sysadmin mais velho começa a suar.

— Não sabemos.

— Como assim?

— Ele está rodando desde 2014.

— Então reinicie.

— Existem coisas que o homem não deveria tentar compreender.

No Kubernetes, a filosofia tende a ser diferente.

Pods são efêmeros.

Se um Pod desaparece, você não deveria necessariamente organizar uma cerimônia fúnebre.

Você substitui.

Pod XPTO morreu.

Kubernetes:

Quantos deveriam existir?

Você:

5.

Kubernetes:

Quantos existem?

Você:

4.

Kubernetes:

Então criarei outro.

Fim.

Nenhuma lágrima.

Nenhum minuto de silêncio.

Nenhum administrador abraçando o rack.


🏗️ Capítulo 6 — Deployment: pare de criar Pods com as próprias mãos

Você pode criar diretamente um Pod.

Mas normalmente aplicações são administradas por objetos de nível superior.

Um dos principais é o:

Deployment

Imagine:

Deployment
     |
     v
ReplicaSet
     |
     +---- Pod
     +---- Pod
     +---- Pod

O material apresenta ReplicaSets como responsáveis por garantir determinado número de réplicas e Deployments como responsáveis por administrar implantações e atualizações.

Declare:

replicas: 3

Você está dizendo:

“Universo, quero três.”

Um Pod morre.

ReplicaSet percebe:

Desejado: 3
Atual:    2

Cria outro.

Mas Deployment também ajuda em algo importantíssimo:

atualizações.

Imagine que você possui:

versão 1

e deseja implantar:

versão 2

Em vez de executar:

PARA TUDO
ATUALIZA TUDO
REZA
LIGA TUDO

podemos fazer atualização gradual.

Essa lógica está por trás dos famosos:

rolling updates

Nova versão vai entrando enquanto a antiga vai saindo.

O objetivo é reduzir interrupção.

Naturalmente, como qualquer sysprog experiente sabe:

“Atualização sem parada” não significa “atualização sem risco”.

Kubernetes automatiza mecanismos.

Não revoga a Lei de Murphy.


🛰️ Capítulo 7 — O Scheduler é o agente de viagens dos Pods

Imagine que um novo Pod precisa executar.

Existem cinco Nodes.

Node A
Node B
Node C
Node D
Node E

Quem decide onde o bichinho vai morar?

O:

Scheduler

O artigo apresenta o Scheduler entre os principais componentes do antigo chamado “Master Node”.

Hoje é preferível falar:

CONTROL PLANE

em vez de simplesmente:

MASTER NODE

O Scheduler analisa possibilidades.

Por exemplo:

CPU disponível?
Memória suficiente?
Restrições?
Afinidade?
Taints?
Tolerations?
Topologia?

E decide:

Este Pod -> Node C

Para quem viveu mainframe:

— Bellacosa, isso lembra WLM!

Calma, jovem Padawan.

Não são equivalentes.

Mas enfrentam uma família semelhante de problemas.

No mainframe:

workload
    |
    v
classes / prioridades / recursos
    |
    v
execução

No Kubernetes:

Pod pendente
    |
    v
Scheduler
    |
    v
Node

A tecnologia muda.

A pergunta permanece:

Como distribuir trabalho sobre recursos limitados?

Os computadores passam décadas reinventando essa pergunta.

Só os acrônimos mudam.


🧙 Capítulo 8 — O Control Plane é a burocracia imperial

Para entender Kubernetes, imagine uma administração imperial intergaláctica extremamente eficiente.

Temos:

API Server
Scheduler
Controller Manager
etcd

O API Server é a porta de entrada.

Você executa:

kubectl apply -f deployment.yaml

Muitos iniciantes pensam:

kubectl = Kubernetes

Não.

kubectl é um cliente.

Conceitualmente:

kubectl
   |
   v
API Server
   |
   v
Universo Kubernetes

A API é extraordinariamente importante.

Porque quase tudo pode conversar com ela:

CI/CD
GitOps
Operators
automação
ferramentas administrativas
políticas
observabilidade

Isso explica por que Kubernetes não é simplesmente um “Docker grandão”.

É uma plataforma orientada por API.


📚 Capítulo 9 — etcd: o cartório onde o universo guarda sua memória

O etcd mantém dados importantes sobre o estado do cluster.

Imagine que Kubernetes possui um cartório.

Lá está registrado:

Deployment pagamento
replicas: 5

Service pagamento
porta: 8080

Configuração X
Configuração Y

O etcd participa da preservação daquilo que o cluster acredita que existe e deveria existir.

Portanto:

etcd morreu

não é exatamente uma frase que você gostaria de ouvir às 3h17 da manhã.

Especialmente se a próxima frase for:

— E o backup?

seguida por:

— Que backup?

Nesse momento até o Guia do Mochileiro recomendaria abandonar o planeta.


👷 Capítulo 10 — kubelet: o capataz de cada Node

Cada worker possui um agente chamado:

kubelet

O material o apresenta como responsável por administrar os containers e manter sua execução em conformidade com as especificações.

Imagine:

CONTROL PLANE
      |
      v
    NODE
+-------------------+
| kubelet           |
| runtime           |
| Pod               |
| Pod               |
+-------------------+

O control plane decide.

O kubelet executa localmente parte desse desejo.

Ele verifica:

“Existem Pods que deveriam estar rodando aqui?”

E trabalha para garantir isso.


🌐 Capítulo 11 — Service: porque decorar IP de Pod é receita para enlouquecer

Hoje:

Pod A = 10.0.1.37

Amanhã ele morre.

Novo Pod:

Pod B = 10.0.8.91

Se todo cliente dependesse diretamente desses endereços, estaríamos construindo um castelo sobre areia movediça.

Então surge:

Service

O material descreve Services como abstrações responsáveis por permitir comunicação confiável entre Pods e proporcionar exposição e balanceamento de tráfego.

Em vez de:

Cliente -> IP do Pod

temos:

            +--> Pod A
Cliente -> Service
            +--> Pod B
            +--> Pod C

Os Pods podem mudar.

O Service fornece identidade estável.

Isso é uma ideia fundamental.

Pods são descartáveis.

Services são pontos lógicos relativamente estáveis.


🚪 Capítulo 12 — E então aparecem Ingress e Gateway

Agora imagine que temos:

Internet

e precisamos encaminhar tráfego até aplicações dentro do cluster.

Uma arquitetura pode envolver:

Internet
   |
Load Balancer
   |
Ingress / Gateway
   |
Service
   |
Pods

Isso nos ensina algo importante:

Kubernetes não é uma caixa mágica que substitui DNS, firewall, load balancer, proxy e todas as camadas de networking da humanidade.

Quando alguém disser:

“Kubernetes faz load balancing.”

Pergunte imediatamente:

“Em qual camada?”

Você ficará instantaneamente 14% mais perigoso em reuniões técnicas.


💾 Capítulo 13 — Storage: o momento em que os Pods descobrem que existem consequências

Aplicações stateless combinam maravilhosamente com a filosofia:

morreu?
cria outra.

Mas imagine um banco.

Pod morre.

Você diz:

— Tudo bem, cria outro.

Banco responde:

— Excelente ideia. E meus dados?

Silêncio.

Agora chegamos a:

PersistentVolume
PersistentVolumeClaim
StorageClass
StatefulSet

O artigo explica que Kubernetes oferece volumes e mecanismos de persistência que permitem manter dados mesmo quando Pods são reiniciados ou reimplantados.

Podemos pensar:

Pod
 |
 v
PVC
 |
 v
PV
 |
 v
Storage

Por trás pode existir:

cloud disk
SAN
NFS
Ceph
storage corporativo

A aplicação solicita armazenamento.

A infraestrutura providencia.


🏛️ Capítulo 14 — StatefulSet: alguns cidadãos precisam de identidade

Para uma API web:

Pod A
Pod B
Pod C

podem ser quase equivalentes.

Mas existem aplicações onde identidade importa.

Bancos.

Clusters distribuídos.

Mensageria.

Sistemas que precisam de:

ordem
identidade
storage persistente
relações específicas

Então aparece:

StatefulSet

O nome já entrega:

Stateful

Estado importa.

Aqui Kubernetes começa a deixar de ser parque de diversões e vira arquitetura séria.


🔑 Capítulo 15 — ConfigMap e Secret

Um erro clássico:

password = "senha123"

dentro do código.

Outro:

URL_PRODUCAO

compilada na aplicação.

Kubernetes permite separar configuração da aplicação.

Temos:

ConfigMap

para configurações.

E:

Secret

para informações sensíveis.

O material destaca ambos como mecanismos de separação entre código, configuração e dados sensíveis.

Mas cuidado.

Secret não significa:

SEGREDO PROTEGIDO POR MAGIA ÉLFICA

Segurança real ainda exige:

RBAC
controle de privilégios
criptografia
proteção do etcd
auditoria
segregação
gestão de credenciais

Quem vem de RACF deveria sentir aqui um arrepio familiar.

A tecnologia muda.

O princípio permanece:

usuário ou workload deve possuir apenas os privilégios necessários.

Least privilege nunca saiu de moda.

Só ganhou novos logos.


🏥 Capítulo 16 — Está vivo? Está pronto? Ou apenas finge muito bem?

Imagine um processo executando.

Sistema operacional diz:

PID existente.

Ótimo.

Mas ele responde?

Talvez não.

Consegue acessar dependências?

Talvez não.

Está preparado para receber tráfego?

Talvez não.

Então Kubernetes trabalha com probes.

livenessProbe
readinessProbe
startupProbe

Três perguntas diferentes:

STARTUP:
Você conseguiu iniciar?

READINESS:
Você está pronto para trabalhar?

LIVENESS:
Você ainda está funcionando?

Essa diferença é lindíssima.

Porque:

processo existente não significa aplicação saudável.

Quem já passou horas olhando um CICS aparentemente “UP” enquanto alguma parte crítica estava mortalmente doente sabe exatamente do que estamos falando.


🩺 Capítulo 17 — Self-healing não é House M.D.

Kubernetes frequentemente é descrito como possuindo:

self-healing

Ou:

autorrecuperação

O texto também destaca recuperação automática diante de falhas de Pods ou máquinas.

Mas não imagine:

Kubernetes encontrou bug COBOL.
Kubernetes corrigiu regra de juros.
Kubernetes percebeu SQL errado.

Não.

Ele pode perceber:

processo morreu
Pod desapareceu
Node deixou de responder
probe falhou
réplicas estão abaixo do esperado

E reagir operacionalmente.

Porém se sua aplicação calcula:

R$ 10,00

quando deveria calcular:

R$ 1.000.000,00

Kubernetes pode executar o erro com extraordinária disponibilidade.

E escalá-lo horizontalmente.

Parabéns.

Você agora possui um bug altamente disponível.


🔥 Capítulo 18 — Kubernetes automatiza inclusive suas más decisões

Essa merece entrar no manual oficial.

Você declara:

replicas: 50

Kubernetes tenta fornecer 50.

Muito eficiente.

Agora imagine que a aplicação possua um erro fatal.

Kubernetes pode providenciar:

50 cópias

do erro fatal.

Cloud-native!

Esse é o paradoxo da automação:

Automação amplifica capacidade, não inteligência.

Ela acelera boas decisões.

E acelera estupidamente decisões ruins.

Por isso precisamos de:

testes
observabilidade
logs
métricas
traces
health checks
CI/CD
rollback
canary
políticas
controle de mudança

O velho mainframeiro sorri.

Porque novamente descobre que o futuro acabou reencontrando problemas que produção conhece há décadas.


🐳 Capítulo 19 — Docker não é Kubernetes

O artigo compara corretamente os papéis gerais:

Docker -> empacotamento/execução de containers

Kubernetes -> orquestração

Mas precisamos modernizar a interpretação.

Kubernetes não significa:

Kubernetes
    |
 Docker obrigatório

O ecossistema utiliza runtimes compatíveis com a Container Runtime Interface.

Um arranjo comum é:

Kubernetes
    |
 kubelet
    |
   CRI
    |
containerd
    |
containers

Então Docker e Kubernetes podem coexistir no seu aprendizado, mas Kubernetes não deve ser entendido simplesmente como:

“Docker distribuído.”

É outra camada de abstração.


📝 Capítulo 20 — YAML não é Kubernetes

Essa deveria estar estampada em canecas.

YAML != Kubernetes

YAML é sintaxe usada para representar objetos.

Veja:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pagamento

A parte importante não é saber que depois de metadata: vêm dois espaços.

O importante é compreender:

O que é Deployment?

Por que existe?

Qual estado ele representa?

Quem observa esse estado?

Que outros objetos ele cria?

Memorizar YAML sem entender Kubernetes é como decorar JCL sem compreender dataset, step, DD, condição e execução.

Você aprende os símbolos.

Mas ainda não aprendeu o sistema.


🪐 Capítulo 21 — O fantástico universo dos objetos

Depois que você entende o modelo declarativo, os nomes começam a deixar de parecer uma convenção criada por alienígenas bêbados.

Pod

declara unidade executável.

Deployment

declara uma aplicação replicada e atualizável.

Service

declara uma identidade de rede.

ConfigMap

declara configuração.

Secret

declara informação sensível.

PVC

declara necessidade de armazenamento.

Job

declara trabalho que deve terminar.

CronJob

declara trabalho agendado.

StatefulSet

declara workload com identidade/estado.

DaemonSet

declara algo que deve existir em determinados Nodes, frequentemente um por Node.

Percebeu o padrão?

Tudo é:

declaração de intenção.


🔧 Capítulo 22 — Operator: quando você ensina Kubernetes a administrar seu sistema

Agora chegamos a uma das regiões mais interessantes da galáxia.

Kubernetes possui controllers.

Controllers observam estado e corrigem divergências.

Então alguém teve a ideia inevitável:

“E se eu criar meu próprio controller?”

Nasce o conceito de:

Operator

Imagine um banco fictício.

Você cria um recurso:

kind: BancoGalactico
spec:
  replicas: 3
  backup: diario

Naturalmente Kubernetes não nasce sabendo o que significa:

BancoGalactico

Mas você pode criar lógica que compreenda essa definição.

Então o Operator observa:

BancoGalactico

e executa procedimentos especializados.

A partir daí Kubernetes deixa de ser simplesmente um orquestrador.

Ele se transforma numa:

plataforma para construir plataformas.


👽 Capítulo 23 — O cluster não é simplesmente um grupo de servidores

O material define cluster como conjunto de máquinas físicas ou virtuais usadas para executar workloads Kubernetes.

Correto.

Mas existe uma interpretação melhor.

Cluster também é um domínio lógico de:

computação
rede
storage
políticas
identidade
scheduling
controle

Imagine:

                CLUSTER
+---------------------------------------+
|                                       |
| Control Plane                         |
|                                       |
| Node A      Node B       Node C       |
| Pods        Pods         Pods         |
|                                       |
| Services                              |
| Storage                               |
| Policies                              |
| Configurations                        |
|                                       |
+---------------------------------------+

Você deixa de pensar:

Tenho 37 servidores.

e começa a pensar:

Tenho capacidade computacional administrada pelo cluster.

Essa mudança mental é poderosa.


🧮 Capítulo 24 — Requests, Limits e o dia em que todo mundo quis 64 GB

Em ambientes compartilhados aparece outra pergunta ancestral:

Quanto cada aplicação pode consumir?

Imagine vinte equipes declarando:

Minha aplicação precisa de tudo.

Kubernetes fornece mecanismos como:

requests
limits

Simplificando:

request = quantidade considerada necessária para scheduling
limit   = teto permitido

Exemplo conceitual:

resources:
  requests:
    memory: "512Mi"
    cpu: "250m"
  limits:
    memory: "1Gi"
    cpu: "500m"

Isso começa a lembrar gestão de capacidade.

E novamente o COBOLzeiro veterano diz:

— Isso parece assunto de WLM.

Sim.

Continue seguindo o coelho branco.


📈 Capítulo 25 — Autoscaling: três não precisam continuar três

Inicialmente:

replicas: 3

Mas carga aumenta.

Talvez precisemos de:

6

Depois diminui:

2

Kubernetes possui mecanismos de autoscaling.

Então a infraestrutura começa a adaptar capacidade ao comportamento observado.

A ideia é sedutora:

Pouca carga -> menos recursos
Muita carga -> mais recursos

Mas novamente:

métricas ruins produzem decisões ruins.

Se seu indicador não representa corretamente pressão real sobre a aplicação, você pode automatizar oscilações, desperdício ou indisponibilidade.

Nenhum produto consegue escapar da regra universal:

GARBAGE IN
   |
   v
AUTOMATION
   |
   v
GARBAGE AT SCALE

🧭 Capítulo 26 — Como eu ensinaria Kubernetes para um programador COBOL iniciante

Não começaria com Helm.

Não começaria com service mesh.

Não começaria com Istio.

Não começaria com GitOps.

E certamente não jogaria 800 páginas de YAML na cabeça da vítima.

Eu seguiria esta trilha:

Passo 1 — Entenda processo

Saiba o que significa um programa executando.

Passo 2 — Entenda container

Aplicação isolada com dependências empacotadas.

Passo 3 — Entenda imagem

Modelo imutável usado para criar containers.

Passo 4 — Execute container localmente

Antes de Kubernetes.

Passo 5 — Aprenda Pod

A menor unidade Kubernetes.

Passo 6 — Aprenda Deployment

Pare de tratar Pods como animais de estimação.

Passo 7 — Aprenda Service

Descubra como encontrar aplicações efêmeras.

Passo 8 — ConfigMap e Secret

Separe configuração de aplicação.

Passo 9 — Volumes

Descubra que dados não podem desaparecer simplesmente porque um Pod morreu.

Passo 10 — Requests e Limits

Aprenda capacidade.

Passo 11 — Probes

Aprenda saúde operacional.

Passo 12 — Scheduler

Descubra como workload encontra Node.

Passo 13 — Control Plane

Entenda quem governa a galáxia.

Passo 14 — Networking

Agora você possui contexto suficiente para sofrer adequadamente.

Passo 15 — Segurança

RBAC, ServiceAccounts, Secrets, políticas.

Passo 16 — Observabilidade

Logs, métricas, tracing.

Passo 17 — StatefulSet e Jobs

Comece a trabalhar com workloads especializados.

Passo 18 — GitOps, Operators e ecossistema

Somente depois disso entre nos níveis avançados.


🧪 Capítulo 27 — Laboratório do Mochileiro: sua primeira viagem

Imagine uma aplicação:

hello-cobol

Você cria Deployment com:

replicas: 3

Depois:

kubectl get pods

E encontra:

hello-abc
hello-def
hello-ghi

Agora delete um:

kubectl delete pod hello-def

Espere alguns segundos.

Execute novamente:

kubectl get pods

Você verá outro surgindo.

Esse exercício vale mais do que vinte slides.

Porque seu cérebro finalmente percebe:

“Ah! Eu não mandei Kubernetes executar três Pods uma vez. Eu disse que três deveriam existir.”

BINGO.

Esse é o momento Jedi.


🎒 Easter Egg nº 1 — O nome Kubernetes

Kubernetes vem de uma palavra grega associada ao conceito de:

timoneiro
piloto
governante

Daí o famoso símbolo do leme.

É uma escolha perfeita.

Containers são workloads.

Nodes são recursos.

Kubernetes segura o leme.

Ou pelo menos tenta.

Porque ocasionalmente alguém executa:

kubectl delete namespace production

e então nem Poseidon poderá ajudá-lo.


🧙 Easter Egg nº 2 — Kubernetes também é conhecido como K8s

Você verá frequentemente:

K8s

Por quê?

Kubernetes possui:

K + 8 letras + s

As oito letras entre K e s foram comprimidas.

Da mesma família:

internationalization -> i18n
localization         -> l10n

Economia de caracteres.

Talvez porque depois de escrever manifestos YAML durante três horas qualquer economia começa a parecer importante.


🐛 Easter Egg nº 3 — O artigo trouxe PHP para Kubernetes

No final do material original surge uma frase curiosa:

“Embora seja possível aprender PHP por conta própria...”

PHP aparentemente atravessou um wormhole editorial.

Logo depois o texto ainda fala em compreensão profunda da “linguagem”.

Só que Kubernetes não é linguagem.

Provavelmente o texto nasceu de algum template reaproveitado.

Excelente lembrete de produção:

copy/paste é o ancestral comum de metade dos bugs do planeta.

COBOLzeiros conhecem muito bem essa criatura.


🏦 Capítulo 28 — Kubernetes encontra COBOL

Agora chegamos à pergunta realmente divertida.

COBOL vai rodar em Kubernetes?

Pode.

Mas essa não é necessariamente a pergunta mais importante.

O ponto mais interessante é:

Como sistemas legados podem participar de uma arquitetura onde Kubernetes administra componentes modernos?

Imagine:

Mobile
   |
API Gateway
   |
Kubernetes
   |
Microserviço
   |
API
   |
z/OS Connect
   |
COBOL
   |
Db2

Nesse desenho:

COBOL continua fazendo aquilo que faz extraordinariamente bem:

transação
regra de negócio
processamento financeiro
integração com dados críticos

Enquanto Kubernetes administra:

APIs
camadas web
serviços modernos
integrações
workloads distribuídos

Não precisamos transformar cada programa COBOL em um Pod para que Kubernetes seja relevante ao mundo mainframe.

Essa é uma distinção importante.

Modernização não significa:

DELETE FROM MAINFRAME;

Modernização pode significar:

INTEGRATE MAINFRAME WITH MODERN ECOSYSTEM;

🏰 Capítulo 29 — Kubernetes não matou o mainframe

Eis uma história corporativa clássica.

1995:

“Mainframe morreu.”

2005:

“Mainframe morreu.”

2015:

“Agora morreu.”

2026:

“Tem alguém que saiba COBOL?”

Enquanto isso, no universo distribuído:

Docker
Kubernetes
Kafka
Redis
Service Mesh
Observability
GitOps
API Gateway
Zero Trust

O futuro não substituiu complexidade.

Ele a redistribuiu.

Às vezes elegantemente.

Às vezes em 97 arquivos YAML.


☕ Capítulo 30 — A grande revelação do velho sysprog

Depois de algumas semanas estudando Kubernetes, nosso jovem COBOLzeiro procura o sysprog.

— Mestre, descobri algo.

O sysprog larga o café.

— Fale.

— Kubernetes possui Scheduler.

— Sim.

— Controle de recursos.

— Sim.

— Autorização.

— Sim.

— Alta disponibilidade.

— Sim.

— Logs.

— Sim.

— Automação.

— Sim.

— Storage.

— Sim.

— Workload management.

— De certa forma.

— Atualizações controladas.

— Sim.

— Recuperação automática.

— Sim.

— Então...

O jovem hesita.

— O pessoal de cloud passou décadas recriando problemas que o mainframe já tinha?

O sysprog sorri.

— Agora você está aprendendo arquitetura.

Essa é a grande lição.

Não significa que:

Kubernetes = mainframe

Nem remotamente.

Significa que sistemas grandes encontram problemas universais:

capacidade
concorrência
isolamento
scheduling
identidade
segurança
storage
recuperação
configuração
observabilidade
automação

A tecnologia muda.

Os problemas fundamentais continuam sentados no mesmo bar.


🌌 Epílogo — A resposta para Kubernetes, a vida, o universo e tudo mais

No Guia do Mochileiro das Galáxias, a resposta para a grande questão da vida, do universo e tudo mais é:

42

No Kubernetes, talvez a resposta seja:

estado desejado

Porque quase tudo começa daí.

Você declara:

Quero três Pods.

Quero determinada imagem.

Quero determinada configuração.

Quero determinado storage.

Quero determinado endpoint.

Quero determinadas políticas.

O cluster observa:

O que existe?

Compara:

O que deveria existir?

E trabalha continuamente para reduzir a diferença.

Por isso o fluxo mental definitivo pode ser desenhado assim:

            DECLARAÇÃO
                |
                v
        ESTADO DESEJADO
                |
                v
           API SERVER
                |
                v
              etcd
                |
        +-------+-------+
        |               |
   Controllers       Scheduler
        |               |
        +-------+-------+
                |
                v
              Nodes
                |
             kubelet
                |
                v
              Pods
                |
                v
        ESTADO REAL
                |
                v
          OBSERVAÇÃO
                |
                +-------------------+
                                    |
                                    v
                         ESTÁ DIFERENTE?
                              /       \
                            não       sim
                            |          |
                         continue   reconciliar

Se você entendeu esse desenho, Kubernetes deixou de ser coleção de palavras estranhas.

Pod não é mais um nome engraçado.

Deployment não é mais um YAML gigante.

Service não é simplesmente um IP.

Scheduler não é magia.

Controller não é mistério.

Kubernetes começa a revelar aquilo que realmente é:

um enorme sistema distribuído de controle, baseado em APIs e declarações de intenção, construído para manter workloads funcionando num mundo onde servidores falham, aplicações mudam, demanda oscila, containers desaparecem e alguém inevitavelmente faz deploy numa sexta-feira às 17h47.

E essa última pessoa deverá ser proibida de tocar em produção.

Não por Kubernetes.

Por um sysprog veterano armado com uma caneca de café.


☕ Registro final do Bellacosa Mainframe

Se você vem de COBOL, não cometa o erro de olhar Kubernetes pensando:

“Isso é coisa totalmente diferente daquilo que conheço.”

Olhe novamente.

Por baixo dos logos coloridos existem velhos problemas conhecidos:

Quem executa?

Onde executa?

Quanto pode consumir?

Quem pode acessar?

O que acontece quando falha?

Como encontrar o serviço?

Como manter estado?

Como atualizar?

Como observar?

Como recuperar?

Essas perguntas sobreviveram ao batch, ao CICS, ao cliente-servidor, à web, aos containers e sobreviverão ao próximo paradigma.

Aprender Kubernetes, portanto, não é decorar uma tecnologia.

É aprender uma nova maneira de responder antigas perguntas da computação.

E talvez seja justamente por isso que um programador COBOL possui uma vantagem inesperada.

Ele já conhece o planeta.

Só precisa aprender os nomes das novas criaturas.

Pegue sua toalha.

Abra o terminal.

Prepare o café.

Digite:

kubectl get pods

E lembre-se da primeira regra do administrador intergaláctico de infraestrutura:

NÃO ENTRE EM PÂNICO.

A segunda?

NUNCA FAÇA kubectl delete ANTES DE LER DUAS VEZES O NOME DO NAMESPACE.

☕🚀🖥️

quinta-feira, 12 de maio de 2022

O Arquivo Secreto do JSON : Os Recursos Avançados do Enterprise COBOL que Quase Ninguém Aprende...

 

Bellacosa Mainframe e o arquivo secreto do json

☕ Um Café no Bellacosa Mainframe

O Arquivo Secreto do JSON

Os Recursos Avançados do Enterprise COBOL que Quase Ninguém Aprende... Mas que Movem Bilhões de Transações Todos os Dias

"Existem programadores que sabem escrever COBOL. Existem programadores que sabem integrar COBOL ao mundo moderno. A diferença entre eles pode ser apenas uma instrução chamada JSON PARSE."


Prólogo — A Porta Número 3270

Era quase meia-noite.

As luzes do CPD permaneciam acesas como sempre.

O z16 processava milhões de transações silenciosamente. Em algum lugar daquele prédio, centenas de aplicações CICS conversavam entre si, acessando DB2, VSAM, MQ e dezenas de microsserviços espalhados pela nuvem.

Na tela verde do terminal 3270, um jovem Programador Padawan acabara de receber sua primeira missão.

Integrar um programa COBOL com uma API REST.

A documentação dizia apenas:

"Receber um JSON."

Somente isso.

Nenhuma explicação.

Nenhum diagrama.

Nenhuma pista.

Foi naquele momento que ele descobriu que o maior mistério do Mainframe moderno não era o COBOL.

Era o JSON.

Pegue seu café.

Hoje vamos abrir um dos arquivos mais secretos do Enterprise COBOL.


Quando o IBM Z Aprendeu um Novo Idioma

Durante décadas o Mainframe falava uma linguagem extremamente organizada.

Cada campo possuía tamanho fixo.

Cada byte tinha uma posição.

Cada registro obedecia um layout rígido.

Exemplo:

Cliente........30 bytes
Conta..........10 bytes
Saldo..........09 bytes

Nada podia sair do lugar.

Era como uma biblioteca onde todos os livros ocupavam exatamente a mesma prateleira.

Então surgiu a Internet.

Depois vieram smartphones.

Cloud.

Microsserviços.

Open Banking.

PIX.

Aplicativos.

Inteligência Artificial.

Todos falavam uma língua completamente diferente.

JSON.

Ao invés de posições fixas...

Possuíam nomes.

Ao invés de layouts...

Possuíam objetos.

Ao invés de registros...

Possuíam documentos.

Durante algum tempo muitos acreditaram que COBOL jamais conversaria naturalmente com esse novo mundo.

Estavam completamente enganados.


O Nascimento do JSON PARSE

A IBM resolveu o problema adicionando dois comandos revolucionários ao Enterprise COBOL:

JSON PARSE

e

JSON GENERATE

Essas duas instruções mudaram completamente a forma como aplicações COBOL se integram ao restante do mercado.

Hoje um programa escrito há quarenta anos pode conversar com uma aplicação Android, um sistema em Java, um microsserviço em Go, uma aplicação Python ou um modelo de Inteligência Artificial.

Sem precisar reinventar a roda.


O Grande Tradutor Invisível

Imagine um tradutor simultâneo.

Uma pessoa fala japonês.

Outra fala português.

O tradutor escuta.

Converte.

Entrega a mensagem.

É exatamente isso que o parser faz.

Ele recebe:

{
   "nome":"Maria",
   "idade":30
}

e transforma automaticamente em:

05 WS-NOME.
05 WS-IDADE.

Nenhuma linha extra de código.

Nenhum parser artesanal.

Nenhuma rotina gigantesca.


O Que Acontece Dentro do Enterprise COBOL?

Pouca gente sabe.

Mas internamente o compilador cria uma estrutura extremamente sofisticada.

Quando encontra:

JSON PARSE

ele gera código capaz de:

✔ analisar caractere por caractere;

✔ identificar objetos;

✔ validar aspas;

✔ converter números;

✔ interpretar arrays;

✔ localizar campos;

✔ detectar erros;

✔ copiar os valores para a Working-Storage.

Tudo isso acontece em microssegundos.


JSON PARSE WITH DETAIL

Aqui começamos a entrar na parte que muitos programadores nunca utilizam.

Imagine receber um JSON com erro.

Sem WITH DETAIL.

Você sabe apenas que falhou.

Com:

JSON PARSE WS-JSON

INTO WS-DADOS

WITH DETAIL

ON EXCEPTION

DISPLAY "ERRO"

END-JSON

o compilador produz informações muito mais ricas sobre o ponto exato da falha.

Isso facilita enormemente o diagnóstico em produção.

Em grandes bancos, localizar rapidamente o campo inválido pode significar minutos em vez de horas de investigação.

☕ Curiosidade Bellacosa: muitos incidentes de integração não são causados pelo COBOL, mas por mudanças discretas em contratos JSON feitos por equipes externas sem comunicação adequada.


NAME OF — Quando Dois Mundos Usam Nomes Diferentes

Imagine o seguinte cenário.

API:

customerName

COBOL:

CLIENTE-NOME

Os nomes não coincidem.

Em vez de alterar um copybook utilizado por dezenas de programas, o Enterprise COBOL permite realizar o mapeamento de nomes com recursos como NAME OF, preservando a estrutura interna da aplicação.

Isso é extremamente útil quando uma API segue convenções como camelCase e o ambiente Mainframe utiliza nomes tradicionais em maiúsculas.


SUPPRESS — O Segredo dos JSONs Elegantes

Imagine um cadastro.

Telefone

Email

Fax

Todos vazios.

Sem SUPPRESS.

{
   "telefone":"",
   "email":"",
   "fax":""
}

Com SUPPRESS.

{
}

Ou apenas:

{
   "nome":"Luke"
}

Arquivos menores.

Menos tráfego.

Mais desempenho.

Menor consumo de banda.

Em ambientes de alta escala, alguns poucos bytes economizados por mensagem representam milhões de bytes ao longo do dia.


COUNT IN — Descobrindo Quantos Objetos Foram Processados

Imagine receber uma lista de clientes.

[
...
]

Como saber quantos registros realmente foram convertidos?

Entra em cena:

COUNT IN

Ele informa quantos elementos foram efetivamente processados.

Extremamente útil para:

  • auditoria;

  • logs;

  • validação;

  • conferência de cargas;

  • integração batch.


CONVERTING — O Pequeno Mágico

Nem sempre dois sistemas utilizam os mesmos valores.

API:

true

COBOL:

"S"

Outro sistema:

1

Outro:

"ATIVO"

O recurso CONVERTING permite realizar essas transformações de forma controlada, reduzindo código repetitivo e centralizando regras de conversão.


Arrays Complexos — O Labirinto do Minotauro

É aqui que muitos iniciantes se perdem.

Observe:

Clientes

↓

Telefones

↓

Endereços

↓

Documentos

Objetos dentro de objetos.

Arrays dentro de arrays.

No COBOL isso é representado através de grupos e OCCURS.

CLIENTE

↓

ENDERECOS OCCURS

↓

TELEFONES OCCURS

O parser percorre cada nível da estrutura, preenchendo automaticamente as tabelas.

É como explorar um enorme arquivo de fichas organizado em gavetas, pastas e divisórias.


OCCURS DEPENDING ON

Nem sempre sabemos quantos registros existirão.

Hoje chegam cinco clientes.

Amanhã cinquenta.

Depois mil.

O OCCURS DEPENDING ON permite estruturas variáveis, mas exige atenção redobrada: o contador deve refletir corretamente a quantidade de elementos, caso contrário leituras incompletas ou acessos inválidos podem ocorrer.


O Fantasma do UTF-8

Existe um fantasma que assombra integrações.

Seu nome:

UTF-8.

O Mainframe tradicional trabalha naturalmente em EBCDIC.

Grande parte da Internet utiliza UTF-8.

Quando a conversão é esquecida...

acentos desaparecem.

Caracteres ficam ilegíveis.

Nomes tornam-se símbolos estranhos.

Antes de culpar o JSON, verifique sempre a codificação.

Esse detalhe já consumiu incontáveis horas de troubleshooting em ambientes corporativos.


O Castelo do z/OS Connect

Agora imagine o seguinte cenário.

Aplicativo.

Internet.

API REST.

z/OS Connect.

CICS.

COBOL.

DB2.

Esse é um dos caminhos mais comuns atualmente.

O z/OS Connect funciona como um diplomata.

Ele recebe JSON.

Traduz.

Entrega ao programa COBOL.

Depois faz exatamente o caminho inverso.

O desenvolvedor trabalha na lógica de negócio enquanto a infraestrutura cuida do protocolo.


CICS e JSON

Durante muito tempo o CICS falava principalmente COMMAREA.

Hoje ele também conversa utilizando:

CHANNEL.

CONTAINER.

JSON.

Isso permitiu criar aplicações muito maiores do que os antigos limites impostos por COMMAREA.

Além disso, o modelo de canais facilita integrações complexas e transporte de documentos maiores.


APIs REST — O Novo Correio do Mainframe

As APIs REST funcionam como um serviço postal moderno.

GET.

Buscar.

POST.

Criar.

PUT.

Atualizar.

DELETE.

Excluir.

O JSON é a carta.

O HTTP é o carteiro.

O COBOL continua sendo o especialista que decide o que fazer quando a carta chega.


O Caminho de Uma Transação

Imagine um PIX.

Aplicativo.

API.

Gateway.

z/OS Connect.

CICS.

JSON PARSE.

COBOL.

DB2.

JSON GENERATE.

Resposta.

Tudo isso pode acontecer em poucos milissegundos.

Enquanto você termina de piscar os olhos, milhares de mensagens semelhantes atravessaram esse caminho.


Segurança Nunca É Opcional

Nem todo JSON recebido deve ser considerado confiável.

Boas práticas incluem:

  • validar tamanho do payload;

  • tratar exceções com ON EXCEPTION;

  • inicializar estruturas antes do parse;

  • rejeitar campos inesperados quando necessário;

  • proteger informações sensíveis;

  • evitar registrar senhas, tokens ou números completos de cartões em logs.

Segurança começa antes mesmo da primeira linha de lógica de negócio.


Performance — O Mito do JSON Lento

Existe quem diga que JSON é lento.

Depende.

O parser nativo do Enterprise COBOL foi otimizado para esse trabalho.

Na maioria dos casos, o gargalo não está no processamento do JSON, mas na comunicação de rede, no acesso ao banco de dados ou em integrações externas.

Um bom desenho de aplicação, buffers bem dimensionados e estruturas adequadas fazem enorme diferença.


Armadilhas Que Todo Padawan Enfrenta

  • Buffer pequeno para armazenar o JSON.

  • Campos numéricos recebendo texto.

  • Datas em formatos diferentes.

  • Arrays maiores do que o OCCURS previsto.

  • Objetos opcionais não tratados.

  • Mudanças silenciosas em contratos de API.

  • Esquecimento da conversão EBCDIC ↔ UTF-8.

  • Logs excessivos em produção.

Reconhecer essas armadilhas cedo economiza muitas madrugadas de plantão.


O Checklist do Mestre Jedi do JSON

Antes de colocar uma aplicação em produção, pergunte:

  • O JSON foi validado?

  • Há tratamento ON EXCEPTION?

  • Os buffers suportam o maior payload esperado?

  • Os campos opcionais foram considerados?

  • A codificação está correta?

  • O contrato da API está documentado?

  • Os logs preservam a privacidade dos dados?

  • O desempenho foi testado com volumes reais?

Se todas as respostas forem "sim", você está muito mais próximo de uma implantação tranquila.


☕ Easter Egg Bellacosa

Nas antigas revistas de mistério noir dos anos 1950, sempre existia um personagem discreto que parecia apenas observar a história. No final, descobria-se que ele era a peça-chave de toda a investigação.

No universo do Mainframe moderno, o JSON desempenha um papel semelhante.

Ele raramente aparece nas manchetes. Quase ninguém comenta sobre ele em reuniões executivas. Porém, é esse "mensageiro silencioso" que leva ordens, saldos, cadastros, pagamentos, consultas e confirmações entre sistemas espalhados pelo planeta.

Da próxima vez que você abrir um aplicativo bancário e visualizar um saldo em segundos, lembre-se: em algum lugar do caminho, um programa COBOL pode ter recebido um JSON, transformado aquela mensagem em estruturas internas, consultado um banco de dados e respondido antes mesmo que você terminasse de tocar a tela do celular.


Conclusão — O Verdadeiro Mistério Nunca Foi o JSON

Quando os primeiros programadores COBOL surgiram, ninguém imaginava que décadas depois seus programas conversariam com smartphones, APIs REST, aplicações em nuvem e modelos de Inteligência Artificial.

Mas a essência permaneceu exatamente a mesma.

Receber dados.

Validar.

Processar.

Garantir integridade.

Responder com segurança.

O JSON não substituiu o COBOL.

Ele apenas abriu uma nova porta.

E, como todo bom investigador das antigas histórias noir descobriria, o segredo nunca esteve na porta.

O segredo sempre esteve em compreender o que existe do outro lado.

O Programador Padawan que domina JSON PARSE, JSON GENERATE, WITH DETAIL, NAME OF, SUPPRESS, COUNT IN, CONVERTING, arrays complexos e integrações com CICS e z/OS Connect deixa de ser apenas um mantenedor de sistemas legados. Ele se torna um tradutor entre dois mundos: a robustez do IBM Z e a velocidade do ecossistema digital moderno.

Enquanto bilhões de transações continuarem atravessando o planeta todos os dias, haverá espaço para profissionais capazes de unir tradição e inovação. E talvez esse seja o maior mistério do Mainframe: a tecnologia mais antiga em produção continua encontrando novas maneiras de conversar com o futuro.

quarta-feira, 11 de maio de 2022

Muito Além da Tartaruga Espiritual: Como a Segunda Temporada Mostra que Grandes Crises Exigem Cooperação, Arquitetura e Engenharia de Sistemas

 

Bellacosa Mainframe apresenta a segunda temporada de Tate no yusha no nariagari 

☕ Um Café no Bellacosa Mainframe

Tate no Yūsha no Nariagari Season 2 (盾の勇者の成り上がり Season 2)

Muito Além da Tartaruga Espiritual: Como a Segunda Temporada Mostra que Grandes Crises Exigem Cooperação, Arquitetura e Engenharia de Sistemas

"No Mainframe, os maiores incidentes nunca são resolvidos por um único programa. Eles exigem integração, coordenação e profissionais que saibam enxergar o sistema como um todo."


Ficha Técnica

Título original: 盾の勇者の成り上がり Season 2

Título internacional: The Rising of the Shield Hero Season 2

Baseado na obra de: Aneko Yusagi

Ilustrações (Light Novel): Seira Minami

Estúdio: Kinema Citrus (coprodução de animação com Dr. Movie)

Diretor: Masato Jinbo

Composição da série: Keigo Koyanagi

Trilha sonora: Kevin Penkin

Estreia: 6 de abril de 2022

Exibição: abril a junho de 2022

Episódios: 13


Gênero

  • Isekai

  • Fantasia

  • Dark Fantasy

  • Aventura

  • Drama

  • Ação

  • Política

  • Estratégia

  • RPG


Classificação

16 anos

Contém:

  • violência

  • guerra

  • conflitos políticos

  • perdas

  • manipulação

  • sofrimento psicológico


O Studio

A segunda temporada continuou sob responsabilidade da Kinema Citrus, mas contou com forte participação da Dr. Movie, estúdio sul-coreano conhecido por colaborar em grandes produções japonesas.

Visualmente a animação continua competente.

O maior problema esteve na adaptação.


Sinopse

Após derrotar a Igreja dos Três Heróis, surge uma ameaça completamente diferente.

Uma criatura colossal chamada Tartaruga Espiritual desperta.

Ela não é simplesmente um monstro.

É praticamente uma arma viva criada para proteger o equilíbrio do mundo.

Mas alguém está manipulando seu poder.

Naofumi precisa impedir uma catástrofe que ameaça milhões de vidas.


Resumo

A temporada adapta principalmente os arcos:

  • Spirit Tortoise

  • Outro Mundo

Ao contrário da primeira temporada, aqui a narrativa deixa de focar apenas na injustiça sofrida por Naofumi.

Agora ele já é reconhecido como herói.

O desafio muda.

Ele precisa agir como comandante.


História

A enorme Tartaruga Espiritual começa a destruir cidades inteiras.

Seu objetivo aparente é absorver almas.

Posteriormente descobre-se que tudo fazia parte do plano de Kyo Ethnina, um cientista de outro mundo que utiliza energia espiritual para aumentar seu próprio poder.

Naofumi derrota a criatura.

Depois atravessa um portal dimensional.

E passa a lutar em outro mundo completamente diferente.


Os Personagens

Naofumi

Mais maduro.

Mais calmo.

Agora assume papel semelhante ao de um arquiteto de sistemas.

Coordena equipes.

Distribui tarefas.

Analisa riscos.


Raphtalia

Recebe enorme desenvolvimento.

Sua independência cresce bastante.

Mostra que não depende apenas de Naofumi para ser forte.


Filo

Continua sendo o equilíbrio emocional da equipe.

Mesmo em momentos dramáticos, representa esperança.


Rishia Ivyred

Talvez a personagem que mais evolui.

Antes insegura.

Depois extremamente determinada.

Mostra que talento sem confiança dificilmente floresce.


Kizuna Kazeyama

Heroína da Caça.

Pertence ao outro mundo.

Rapidamente cria excelente parceria com Naofumi.

Seu estilo lembra administradores experientes que entendem que colaboração gera melhores resultados.


Kyo Ethnina

O principal antagonista.

Não luta apenas por força.

Ele acredita que conhecimento sem ética justifica qualquer experimento.

É um excelente exemplo do cientista brilhante que ignora as consequências.


O que esta temporada tem de diferente?

A primeira temporada era profundamente emocional.

A segunda é muito mais técnica.

Ela apresenta:

  • novos sistemas de magia;

  • outro universo;

  • novos heróis;

  • regras completamente diferentes;

  • mecânicas inéditas.

É quase como migrar de um Data Center IBM Z para uma arquitetura distribuída em nuvem.

As regras continuam existindo.

Mas funcionam de outra forma.


As Aventuras

Durante a temporada acompanhamos:

  • combate contra a Tartaruga Espiritual;

  • investigação sobre almas absorvidas;

  • batalha contra familiares gigantes;

  • viagem dimensional;

  • prisão de Raphtalia;

  • encontro com Kizuna;

  • exploração de outro mundo;

  • evolução de novas armas;

  • confronto final contra Kyo.

Cada arco introduz novas mecânicas e amplia o universo da série.


Temáticas

A segunda temporada fala muito menos sobre preconceito.

Seu foco passa a ser:

  • responsabilidade;

  • liderança;

  • trabalho em equipe;

  • estratégia;

  • ciência sem ética;

  • consequências do poder;

  • cooperação internacional.


As Mensagens Ocultas

1. Nenhum sistema é isolado

A Tartaruga Espiritual afeta todo o mundo.

Assim como um incidente em um Data Center pode afetar milhares de empresas.


2. Conhecimento sem ética destrói

Kyo representa a inteligência usada apenas para benefício próprio.

É o equivalente ao engenheiro que ignora segurança para atingir metas.


3. Grandes problemas exigem integração

Nenhum herói derrota a crise sozinho.

Assim como em TI:

  • Desenvolvimento

  • Infraestrutura

  • Segurança

  • Banco de Dados

  • Redes

  • Operações

precisam trabalhar juntos.


4. Liderança é distribuir responsabilidades

Naofumi deixa de resolver tudo sozinho.

Ele aprende a confiar na equipe.


Analogia Bellacosa Mainframe

Imagine um banco.

O ambiente principal continua funcionando.

Mas existe outro Data Center.

Outra arquitetura.

Outro conjunto de aplicações.

Outro banco de dados.

Outro protocolo.

Quando ocorre um desastre em um ambiente, é preciso integrar sistemas completamente diferentes.

É exatamente isso que Naofumi enfrenta ao chegar ao outro mundo.

Cada ambiente possui regras próprias, mas ambos precisam permanecer sincronizados para garantir a continuidade do serviço.


O que dividiu opiniões?

Grande parte dos fãs considerou que:

  • a adaptação condensou muitos capítulos;

  • personagens receberam menos desenvolvimento;

  • o arco da Tartaruga Espiritual foi acelerado;

  • algumas motivações ficaram superficiais.

Apesar disso, a trilha sonora de Kevin Penkin, a direção de arte e os episódios finais foram amplamente elogiados.


Impacto Cultural

A segunda temporada manteve a franquia em destaque, mas recebeu avaliações mais mistas do que a primeira devido ao ritmo acelerado da adaptação. Ainda assim, expandiu o universo da obra ao introduzir um segundo mundo, novos heróis e diferentes sistemas de poder, preparando o terreno para os acontecimentos da terceira temporada e mantendo o interesse da comunidade de fãs.


Nota Bellacosa Mainframe

CritérioNota
História⭐⭐⭐⭐☆ (8,0/10)
Desenvolvimento de personagens⭐⭐⭐⭐☆ (7,8/10)
Construção do mundo⭐⭐⭐⭐⭐ (9,5/10)
Ação⭐⭐⭐⭐☆ (8,5/10)
Trilha sonora⭐⭐⭐⭐⭐ (10/10)
Ritmo⭐⭐⭐☆☆ (6,8/10)
Originalidade⭐⭐⭐⭐⭐ (9,0/10)

Veredito Bellacosa Mainframe

A segunda temporada não alcança o impacto emocional da primeira, mas amplia significativamente a escala da narrativa. Ela troca a jornada de sobrevivência por uma história sobre integração de sistemas, cooperação entre equipes e liderança em tempos de crise. Para quem trabalha com IBM Z, DevOps ou arquitetura corporativa, a maior lição é clara: resolver incidentes complexos exige visão sistêmica, colaboração e responsabilidade — qualidades muito mais valiosas do que apenas poder bruto.


terça-feira, 10 de maio de 2022

O Que Todo Programador COBOL Padawan Precisa Saber Sobre Erros de Programação, Git, Extensões de Arquivos e Inteligência Artificial para Construir Sistemas que Sobrevivem ao Tempo

 

Bellacosa Mainframe emtemdemdo erros

☕ Um Café no Bellacosa Mainframe

Muito Além da Sintaxe

O Que Todo Programador COBOL Padawan Precisa Saber Sobre Erros de Programação, Git, Extensões de Arquivos e Inteligência Artificial para Construir Sistemas que Sobrevivem ao Tempo

"Aprender uma linguagem é importante. Aprender como os computadores pensam é o que realmente transforma um programador em um engenheiro de software."

Existe uma frase muito conhecida entre desenvolvedores experientes:

"Programar não é escrever código. Programar é resolver problemas."

E, curiosamente, quanto mais experiência um profissional adquire, menos tempo ele passa escrevendo código e mais tempo ele dedica a entender erros, interpretar logs, analisar requisitos, versionar alterações, revisar código, automatizar processos e estudar novas tecnologias.

Esse é um choque para muitos iniciantes.

O Programador COBOL Padawan costuma imaginar que a carreira será composta principalmente por escrever comandos MOVE, IF, PERFORM, READ, WRITE e EXEC SQL.

Mas basta entrar em um grande banco, uma seguradora ou uma empresa aérea para descobrir uma realidade completamente diferente.

Ali existem milhares de programas.

Milhões de linhas de código.

Centenas de desenvolvedores.

Diversas linguagens convivendo lado a lado.

COBOL.

PL/I.

Assembler.

Java.

Python.

JavaScript.

Go.

Rust.

SQL.

JCL.

REXX.

E, cada vez mais, Inteligência Artificial auxiliando todas essas equipes.

Nesse ambiente, conhecer apenas a sintaxe de uma linguagem é como saber dirigir um carro sem entender placas de trânsito, mecânica ou regras de circulação.

É por isso que as cinco listas apresentadas anteriormente representam muito mais do que simples curiosidades.

Na prática, elas resumem alguns dos pilares da Engenharia de Software moderna.

Vamos conversar sobre cada um deles.

Pegue seu café.


O computador nunca faz "o que você quis"

Uma das maiores descobertas de todo programador é perceber que computadores não possuem bom senso.

Eles fazem exatamente aquilo que foi programado.

Nem mais.

Nem menos.

Se existir uma pequena falha lógica, o computador executará essa falha com perfeição matemática.

É por isso que um erro aparentemente insignificante pode movimentar milhões de reais incorretamente.

No IBM Z isso acontece diariamente.

Não porque o mainframe seja ruim.

Muito pelo contrário.

Ele é extremamente confiável.

O problema sempre foi — e sempre será — o ser humano.


Existem erros... e existem erros

Quando alguém começa a aprender programação, normalmente acredita que erro significa apenas aquela mensagem vermelha que aparece na tela.

Na realidade existem diversas categorias.

Cada uma possui causas completamente diferentes.

Cada uma exige uma forma diferente de investigação.

É exatamente isso que diferencia um programador júnior de um engenheiro de software.


Syntax Error

O primeiro erro da carreira.

O compilador simplesmente não consegue entender o que você escreveu.

Imagine escrever em português:

Eu mercado fui ontem.

As palavras existem.

Mas a estrutura está incorreta.

O compilador pensa exatamente assim.

Em COBOL:

IF SALDO > 100
DISPLAY "OK"

Faltou o END-IF.

O compilador interrompe tudo.

Nada será executado.

Esse tipo de erro normalmente é simples.

O compilador informa linha, coluna e descrição.


Runtime Error

Agora a situação muda.

O programa compilou perfeitamente.

Foi para produção.

Começou a executar.

Depois...

ABEND.

No universo Mainframe, poucos termos assustam tanto quanto esse.

Um ABEND (Abnormal End) significa que alguma condição inesperada ocorreu durante a execução.

Alguns exemplos clássicos:

S0C1

S0C4

S0C7

S0CB

S322

SB37

SE37

SD37

Cada um deles conta uma história diferente.

Por exemplo...

Dividir por zero em Python gera:

ZeroDivisionError

No COBOL, dependendo do contexto, isso normalmente resulta em um S0CB.

Já acessar memória inválida pode gerar um S0C4, um dos ABENDs mais conhecidos entre programadores COBOL.

Por isso, aprender apenas a programar não basta.

É necessário aprender a investigar.

Ler dumps.

Interpretar mensagens.

Consultar SYSOUT.

Analisar o JES.

Entender SDSF.

Essa habilidade vale ouro.


O erro mais perigoso não gera mensagem

Esse é o famoso Logical Error.

O programa funciona.

Não apresenta erro.

Não gera dump.

Não gera ABEND.

Mas calcula errado.

Imagine um banco calculando juros de 1,59% quando deveria calcular 1,95%.

O programa executa normalmente.

Nenhum operador percebe.

Nenhum monitor dispara alerta.

Somente semanas depois alguém descobre um prejuízo milionário.

Esse tipo de erro explica por que testes automatizados, revisão de código e homologação são tão importantes.


Tipos de dados existem por um motivo

Quando o COBOL foi criado, muitos acreditavam que sua enorme quantidade de definições era exagerada.

Hoje entendemos que não era.

Cada tipo de dado existe para evitar erros.

Em Python podemos escrever:

idade = "30"

Visualmente parece correto.

Mas...

idade + 5

gera erro.

Em COBOL:

PIC 9(03)

é completamente diferente de

PIC X(03)

Essa rigidez é justamente o que torna sistemas bancários tão confiáveis.


Overflow e Underflow

Imagine um campo:

PIC 999

Ele aceita apenas três dígitos.

Se alguém tentar gravar:

1000

algo precisa acontecer.

Dependendo da situação ocorrerá truncamento, exceção ou erro de execução.

Já o Underflow acontece principalmente em cálculos científicos quando números extremamente pequenos perdem precisão.

Embora seja raro em aplicações comerciais, ele é muito comum em computação de alto desempenho e modelos de Inteligência Artificial.


Arquivos são muito mais importantes do que parecem

Outro assunto frequentemente ignorado pelos iniciantes são as extensões de arquivos.

".py"

".java"

".json"

".xml"

".sql"

Muitos acreditam que isso serve apenas para organizar arquivos.

Na realidade, cada extensão representa um ecossistema inteiro.

Quando você vê um arquivo ".java", imediatamente sabe que existe uma JVM envolvida.

Ao encontrar um ".sql", entende que haverá interação com um banco de dados.

Um ".json" normalmente representa troca de informações entre sistemas.

No IBM Mainframe a situação é um pouco diferente.

Grande parte do código está armazenada em membros de PDS ou PDSE.

Não existe necessariamente uma extensão visível.

Mesmo assim, cada biblioteca possui um propósito muito bem definido.

Um membro pode conter COBOL.

Outro JCL.

Outro PROC.

Outro REXX.

Outro COPYBOOK.

Outro DCLGEN.

A organização continua existindo.

Apenas mudou de formato.


O mundo moderno conversa em JSON

Durante décadas o XML dominou integrações corporativas.

SOAP.

Web Services.

Mensagens estruturadas.

Hoje a maior parte das APIs REST utiliza JSON.

Exemplo:

{
   "cliente":"Maria",
   "saldo":3500.90
}

É simples.

Leve.

Legível.

O COBOL moderno já possui suporte para JSON PARSE e JSON GENERATE, permitindo que programas tradicionais conversem diretamente com aplicações web e microsserviços.

Isso demonstra como o ecossistema IBM Z continua evoluindo.


Git mudou a Engenharia de Software

Antigamente, equipes compartilhavam código copiando arquivos.

Imagine dez programadores alterando o mesmo programa COBOL.

Caos.

Hoje isso seria impensável.

O Git resolveu esse problema.

Na prática, o Git funciona como uma máquina do tempo.

Cada Commit registra exatamente o que mudou.

Quem mudou.

Quando mudou.

E por quê.

Se um erro aparecer meses depois, basta consultar o histórico.

Essa rastreabilidade é indispensável em ambientes regulados, como bancos e seguradoras.


Commit não é backup

Esse é um erro comum entre iniciantes.

Commit significa registrar uma alteração lógica.

Um bom commit deve representar uma unidade de trabalho.

Exemplo ruim:

Correções

Exemplo excelente:

Corrige cálculo de IOF para operações acima de R$ 50.000

Percebe a diferença?

O histórico passa a contar uma história.


Branches são universos paralelos

Imagine que a produção está funcionando.

Você precisa desenvolver uma nova funcionalidade.

Não faz sentido quebrar o código principal.

Então cria-se uma Branch.

Ali você trabalha livremente.

Quando tudo estiver pronto, ocorre o Merge.

Essa ideia revolucionou o desenvolvimento colaborativo.


Conflitos fazem parte da profissão

Todo desenvolvedor, cedo ou tarde, encontrará um Merge Conflict.

Isso acontece quando duas pessoas alteram a mesma região do mesmo arquivo.

O Git não consegue decidir automaticamente.

Então pergunta ao ser humano.

Resolver conflitos é uma habilidade importante.

Não é um sinal de incompetência.

É consequência natural do trabalho em equipe.


O Git também chegou ao Mainframe

Durante décadas o versionamento em ambientes IBM Z foi realizado por ferramentas como Endevor, Changeman, Librarian, Panvalet e SCLM.

Hoje o cenário mudou.

Zowe.

Git.

GitHub.

GitLab.

Azure DevOps.

Pipeline CI/CD.

Tudo isso já faz parte da realidade do IBM Z.

O desenvolvedor COBOL moderno trabalha tanto no ISPF quanto no VS Code.


Inteligência Artificial começa pelos dados

Quando ouvimos falar em IA, pensamos imediatamente em ChatGPT.

Mas antes de existir qualquer modelo existe algo muito mais importante.

Dados.

Sem dados não existe aprendizado.

É por isso que Machine Learning começa pelo Dataset.

Imagine ensinar uma criança a reconhecer gatos.

Você mostra milhares de fotografias.

Ela aprende padrões.

Modelos de IA fazem exatamente isso.


Features são as pistas

Suponha um sistema bancário que detecta fraude.

Cada operação possui informações como:

Valor.

Cidade.

Horário.

Dispositivo.

Cliente.

Canal.

Cada uma dessas características recebe o nome de Feature.

Quanto melhores forem as Features, melhor tende a ser o modelo.


Labels representam a resposta correta

Em aprendizado supervisionado existe um professor.

Cada exemplo já possui a resposta.

Operação fraudulenta?

Sim.

Não.

Essas respostas são chamadas de Labels.

O algoritmo tenta aprender a relação entre Features e Labels.


Treinar não é decorar

Aqui surge um dos conceitos mais importantes da IA.

Overfitting.

Imagine um aluno que decorou todas as respostas da apostila.

Na prova, qualquer pergunta diferente o confunde.

Foi exatamente isso que aconteceu com o modelo.

Ele decorou.

Não aprendeu.

No extremo oposto está o Underfitting.

O aluno nem conseguiu compreender o conteúdo.

O modelo é simples demais.

Também falha.

O objetivo sempre é encontrar o equilíbrio.


Accuracy nem sempre significa qualidade

Imagine um banco com um milhão de operações.

Apenas mil são fraudulentas.

Um algoritmo responde sempre:

Não é fraude.

Resultado:

999 mil acertos.

Accuracy de 99,9%.

Parece excelente.

Mas encontrou exatamente zero fraudes.

Por isso profissionais utilizam outras métricas.

Precision.

Recall.

F1-Score.

ROC-AUC.

Cada métrica responde uma pergunta diferente.


Redes neurais não pensam

Esse é um dos maiores equívocos atuais.

Uma Rede Neural não possui consciência.

Ela ajusta milhões ou bilhões de pesos matemáticos.

O comportamento impressionante dos grandes modelos de linguagem surge da enorme quantidade de dados, parâmetros e capacidade computacional.

Ainda assim, continuam sendo modelos estatísticos.


O futuro do COBOL não é competir com a IA

É trabalhar junto dela.

Hoje um desenvolvedor pode utilizar IA para:

  • explicar programas COBOL antigos;

  • gerar documentação técnica;

  • criar testes automatizados;

  • sugerir refatorações;

  • converter layouts de arquivos;

  • produzir exemplos em Java ou Python;

  • revisar SQL;

  • explicar ABENDs;

  • auxiliar na escrita de JCL e REXX;

  • acelerar a compreensão de sistemas legados.

A IA não substitui o conhecimento do negócio.

Ela amplia a produtividade de quem já conhece o ambiente.


O verdadeiro diferencial continua sendo o raciocínio

Ferramentas mudam.

Linguagens surgem.

Frameworks desaparecem.

Mas alguns fundamentos permanecem praticamente inalterados desde os primórdios da computação.

Entender algoritmos.

Conhecer estruturas de dados.

Interpretar erros.

Versionar corretamente.

Escrever código legível.

Documentar alterações.

Testar antes de entregar.

Compreender o domínio do negócio.

Esses princípios continuam válidos para COBOL, Java, Python, Go, Rust, JavaScript ou qualquer outra tecnologia.


O Programador COBOL Padawan e a Jornada para se Tornar um Mestre

Todo grande profissional já foi iniciante.

Ninguém nasce sabendo interpretar um S0C4, resolver um conflito de Git, entender uma métrica de Machine Learning ou projetar uma arquitetura distribuída.

Essas habilidades são construídas com estudo, prática e curiosidade.

O Programador COBOL Padawan deve enxergar cada erro como uma oportunidade de aprendizado, cada commit como um registro da sua evolução, cada extensão de arquivo como a porta de entrada para um novo ecossistema e cada conceito de Inteligência Artificial como uma ferramenta que amplia sua capacidade de resolver problemas.

No Bellacosa Mainframe, costumamos dizer que o objetivo não é formar apenas programadores que saibam escrever código. Queremos formar profissionais capazes de compreender sistemas inteiros, conversar com equipes multidisciplinares, integrar tecnologias clássicas e modernas e tomar decisões técnicas conscientes.

A jornada começa com um simples DISPLAY "HELLO WORLD".

Depois evolui para programas COBOL, JCLs, consultas SQL, integrações REST, pipelines DevOps, versionamento com Git, observabilidade, automação e, mais recentemente, Inteligência Artificial aplicada ao desenvolvimento.

O segredo nunca foi decorar comandos.

O segredo é compreender os fundamentos que atravessam gerações de tecnologias.

Quem domina esses fundamentos consegue aprender qualquer linguagem, adaptar-se a qualquer plataforma e continuar relevante mesmo quando novas ferramentas surgem.

E talvez essa seja a maior lição desta conversa: o COBOL Padawan que aprende a pensar como engenheiro de software não fica preso ao passado; ele usa a solidez do legado para construir o futuro.

Porque, no fim das contas, linguagens mudam, frameworks envelhecem, bibliotecas são substituídas e paradigmas evoluem. Mas a capacidade de analisar problemas, entender sistemas complexos e entregar soluções confiáveis continuará sendo o maior patrimônio de qualquer profissional de tecnologia.

Então, da próxima vez que encontrar uma mensagem de erro, criar uma nova branch, analisar um arquivo JSON ou ouvir falar de Machine Learning, lembre-se: você não está estudando assuntos isolados. Está construindo a base que sustentará toda a sua carreira como desenvolvedor.

E essa é uma jornada que vale cada linha de código.

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