Mainframe e Distribuída - parte 3 - Linguagens
Tags: mainframe, programming
Published: 2023-08-27 03:31:14

Esta publicação faz parte de uma série para mostrar que muitos dos conceitos de desenvolvimento mainframe também estão presentes na distribuída. Neste post falarei sobre linguagens de programação.

---

## Linguagens de programação

Quando se fala de linguagem de programação no mainframe, entre as mais populares temos `COBOL`, `CICS` e `DB2`. Além de `PL/I` `IMS/DC`, `IMS/DB`, `VSAM`, `NATURAL`, `ADABAS`, e várias outras.

Até mesmo `Java`, `C` e `C++`, muito conhecidas na distribuída, também podem ser encontradas no mainframe.

Vale lembrar um pouco da história da programação na alta plataforma (mainframe), os conceitos de linguagem e ciclo de desenvolvimento são universais.


### Cartão perfurado

Já ouviu a expressão "programar em papel de pão"? O início do desenvolvimento de software no mainframe não estava muito longe disso, a programação era feita em cartões perfurados.

Cada cartão perfurado representava uma linha de código. Caso fosse arquivo a ser processado, cada cartão representava uma linha deste arquivo.

Cada cartão tinha um limite de 80 colunas.

No momento de processar os cartões, eles precisavam estar ordenados. Imagina a bagunça se alguém mudasse a ordem dos cartões (por conta disso as linguagens continham colunas reservadas para identificar a posição do código).

Por conta disso, os desenvolvedores na época precisavam:
- fazer códigos enxutos: códigos simples, organizados, de fácil manutenibilidade, com reaproveitamento de código. Assim, refletia em menos cartões, menos tempo de compilação, menos processamento e menor custo;
- codificar em uma quantidade limitada de colunas, por conta da limitação dos cartões, mas que de certa forma ajudava em um código mais legível;
- ter a consciência de que quanto mais complexo fosse o código, mais difícil seriam refatorações futuras e a inclusão de novas regras de negócio.

Coincidentemente, todos estes pontos adotados por conta de limitações da arquitetura da época, hoje são adotados no ciclo de desenvolvimento de software por motivos de boas práticas de programação e finops.

### COBOL

Uma das linguagens mais utilizadas no mainframe é o COBOL. O COBOL é uma linguagem estruturada em **DIVISION**s, **SECTION**s e **PARAGRAPH**s. Este formato de estrutura facilita muito a localização de partes do código e sua manutenção.

Mas olhando de uma maneira geral, o COBOL não é diferente de qualquer outra linguagem da plataforma distribuída. Basta olhar para as **DIVISION**s que são o nível mais alto da linguagem. Elas são distribuídas em `IDENTIFICATION DIVISION`, `ENVIRONMENT DIVISION`, `DATA DIVISION` e `PROCEDURE DIVISION`, respectivamente representam:
- parte do código que identifica o programa
- configurações e interfaces de I/O do programa
- variáveis utilizadas pelo programa
- código e lógica do programa

Ou seja, tudo que existe em outras linguagens de programação.

---

# Diferenças entre linguagens de alta e baixa plataforma

Romantismo à parte, ao retirarmos estas limitações herdadas do passado, as linguagens do mainframe não se diferenciam das utilizadas na distribuída. Até mesmo existem linguagens que foram portadas de uma plataforma para outra.

Lógica de programação, estrutura de dados, declaração de variáveis, alocação de memória, estruturas condicionais (if-else), operadores lógicos (and-or-not), entre outros recursos, são comuns entre as linguagens independente da plataforma.

A sintaxe da linguagem podem ser diferentes, porém os conceitos por trás delas são iguais. Para quem conhece mais da plataforma mainframe e quer for explorar as tecnologias mais recentes, é preciso estudo e curiosidade. Boas fontes de informação são: documentações oficiais, tutoriais, livros, podcasts e video-aulas.

Além de estudar a sintaxe de uma linguagem nova, vale investir um tempo para aprender as arquiteturas e ferramentas por trás das plataformas:

> Da mesma forma que no mainframe você já deve ter vivenciado a necessidade em aprender a usar o TSO, ROSCOE, REXX, o esforço vai ser parecido em desvendar Linux, Unix, AWS, Azure, etc.

&nbsp; 
> E quem já trabalhou com VSAM? Algum dia já teve que começar a trabalhar com DB2 ou até mesmo com banco de dados não-relacionais, como ADABAS ou IMS/DB? O esforço não vai ser muito diferente de ter que aprender MongoDB, MySQL, SQLServer, entre muitos outros.

&nbsp; 
> Ou então ter que aprender a mapear e desenvolver telas com IMS ou CICS? O esforço vai existir também para aprender um pouco sobre HTML, CSS, React, Angular e até mesmo frameworks ou linguagens nativas para dispositivos mobile.

&nbsp;
> Falando em CICS, muito utilizado para aplicações transacionais online, também podemos colocar na lista o conhecimento que se adquire ao aprender sobre requisições REST, API's, GRPC.

Existem bastante analogias entre o mainframe e a plataforma distribuída. A dica é sempre entender o conceito por trás das tecnologias, todas no final convergem para o mesmo lugar: resolver alguma necessidade ou problema.

E se você está migrando do mainframe agora, não tente aprender tudo de uma vez. Foque em algumas tecnologias, se dedique a elas e o resto virá naturalmente. Desenvolva projetos pessoais ou profissionais, pratique! O principal você já tem: lógica de programação e conceitos de máquina.

---

#  Paradigmas de programação

Para navegar com mais tranquilidade nos estudos de novas linguagens de programação, um capítulo importante para aprender são os **Paradigmas de Programação**.

A maior parte dos programas existentes no mainframe atualmente adotam o paradigma de programação `procedural`. É um paradigma derivado do paradigma `imperativo` e utiliza chamadas em `procedures`, que são conjunto de códigos agrupados em subrotinas ou estruturas de códigos.

Ao estudar novas linguagens de programação mais recentes, é interessante ter o conhecimento mínimo de outros paradigmas de programação, alguns deles: `programação orientada a objetos`, `programação funcional`, `programação orientada a eventos` e `programação reativa`.

Seguem alguns links de referência:

[Wikipedia: Comparison of programming paradigms](https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms)

[Wikipedia: List of programming languagens by type](https://en.wikipedia.org/wiki/List_of_programming_languages_by_type)