Já que eu já escrevi anteriormente sobre COBOL, pensei em fazer alguns posts sobre a linguagem, sua história e detalhes sobre como programar.
COBOL, acrônimo de "Common Business-Oriented Language, é uma linguagem de programação mais antiga, que ainda é muito usada hoje em dia em aplicações no sistema financeiro. A linguagem pertence à segunda geração das linguagens de programação, sendo uma das linguagens de alto nível mais antigas ainda ativas. Possui como característica marcante uma boa precisão e rapidez na aritmética de ponto flutuante, sendo alguns dos motivos pelo qual a linguagem permanece viva mesmo depois de tanto tempo.
história
A primeira especificação da linguagem foi desenvolvida e apresentada em 1959 por Grace Hopper, almirante da marinha americana e uma das pioneiras no desenvolvimento de linguagens de programação, em um evento de informática da universidade da Pensilvânia (EUA). Após esse evento o departamento de defesa começou a patrocinar e assumiu o projeto, criando três comitês (de curto, médio e longo prazo) para a criação de uma especificação oficial da linguagem.
O comitê de curto prazo criou a especificação oficial do COBOL em dezembro de 1959, inspirado em linguagens como FLOWMATIC (linguagem desenvolvida por Grace Hopper um pouco antes) e COMTRAN (linguagem da IBM desenvolvida por Bob Berner), enquanto os comitês de médio e longo prazo nunca foram utilizados.
Em 1960 surgiram os primeiros compiladores COBOL. Em dezembro de 1960 o mesmo programa COBOL foi rodado em dois computadores diferentes (um da RCA e outro da Univac de Remington), mostrando a compatibilidade entrer diferentes versões da linguagem. Em 1968 o American National Standards Institute (ANSI) desenvolveu uma especificação do COBOL que resolvia alguns problemas de compatibilidade entre as diferentes versões do COBOL.
Em 1991 as especificações COBOL passaram a ser responsabilidade da International Organization for Standardization (ISO), que lançou as últimas especificações, incluindo a COBOL 2002, que corrige diversos problemas. Uma nova especificação do COBOL (COBOL 2010) está em andamento, e, possivelmente, trará a especificação oficial do COBOL orientado a objetos (algo que hoje existe no Microsoft COBOL).
Controvérsias
Embora COBOL seja uma linguagem boa para executar operações em lote, sua estrutura dificulta a criação de aplicações interativas ou voltados para web. A maioria dos programadores vê o COBOL apenas como uma relíquia da idade da pedra na TI, algo que não deveria mais estar em utilização. Então por que a linguagem não morre?
A resposta para isso é a existência de programas legado. Muitas das vezes a documentação das regras de negócio de um sistema é muito rasa ou até inexistente, enquanto que a conversão do sistema para outra linguagem pode ser muito cara e até prejudicar a integridade e a confiabilidade do sistema.
Você converter um programa COBOL para uma outra linguagem, como Python, é algo trabalhoso, e que pode gerar erros por causa das diferenças que existem entre as linguagens, isso se você não considerar eventuais falhas nas regras de negócio e na própria precisão das duas linguagens (um problema que ocorre ao refatorar a maioria dos programas, mas não vamos entrar nesse tipo de detalhe agora).

A melhor definição que eu encontro para COBOL seria "tortura psicológica", assim, aprender COBOL poderia se classificado como "tortura auto inflingida", e ensinar COBOL seria "sadismo" (claro que isso é apenas uma piada, mas muitas pessoas)
COBOL como linguagem de programação
Cobol é uma linguagem 100% procedural que não possui suporte a diversos recursos que as linguagens de hoje em dia possuem, como variáveis locais, recursividade, alocação dinâmica de memória e programação estruturada ou orientada a objetos.
Apesar de ser uma linguagem razoavelmente simples, o aprendizado da linguagem é difícil, já que, como não possui bibliotecas padrão, possui um grande número de palavras reservadas.

Esse tipo de coisa faz com que a linguagem seja um saco de se programar algumas vezes, já que, como a linguagem tem muitos pequenos detalhes e é extremamente verbosa, ela não apresenta vantagem nenhuma para programadores novatos, e outras linguagens menos verbosas e mais simples, com mais documentação e uma comunidade mais ativa, acabam atraindo até mesmo os mais experientes para fora da linguagem.
Estrutura básica de um programa COBOL
Um programa COBOL consiste em quatro divisões básicas:
Identification division: é a parte do programa que tem as informações do programa, como nome do programa, autor e informações de uso.
Enviroment Division: é a parte que conecta o programa com o ambiente operacional como uma interface, o que possibilita que sejam gravados dados em arquivos em uma unidade de armazenamento físico, e que os dados do armazenamento sejam lidos pelo programa.
Data division: é a seção que são declaradas as variáveis, as constantes e os tipos de dado que irão alocar memória durante o processo.
Procedure division: é a seção onde serão colocados os procedimentos que manipulam os dados contidos na divisão de dados. Essa seção possui uma estrutura hierárquica dividida em seções, parágrafos, sentenças e comandos. Todo programa COBOL deve ter ao menos um parágrafo, uma sentença e um comando.
Parágrafos da Identification division
PROGRAM-ID. (nome do programa). – é o parágrafo onde o nome do programa é especificado.
AUTHOR. (nome). – é onde se define o nome do autor do programa.
DATE-WRITTEN. (texto). – é onde se deve indicar a data em que o programa foi escrito.
DATE-COMPILED. (texto). – é onde se deve indicar a data em que o programa foi compilado.
SECURITY. (texto). – é onde se inserem as informações sobre a segurança e acesso do programa.
REMARKS. (texto). – é onde fazemos comentários sobre o uso do programa e outras informações relevantes para o utilizador.
Seções da Data Division
Seção 1 – FILE SECTION: aqui são definidas todas as variáveis e constantes usadas no programa e que realmente serão gravadas em arquivo.
Seção 2 – WORKING-STORAGE SECTION: aqui são definidas todas as variáveis e constantes utilizadas pelo programa que serão usadas só em tempo de execução (como variáveis utilizadas para armazenar valores temporários e operadores lógicos).
Lembrando que todas estas seções devem ser obrigatoriamente criadas se o programa fizer uso de algum recurso que as exija.
Variáveis em COBOL
COBOL não possui tipos definidos de variáveis, e todas as variáveis em COBOL são expressas em “Picture clause”.
Picture clause
"Picture clause" é um elemento em programação que serve para descrever um tipo de dado, usando caracteres simples que indicam o tipo de item da variável e o seu tamanho.
Uma “picture clause” é feita de vários caracteres de formato, cada um representando uma porção dos dados. Cada caractere de formato pode se repetir ou vir acompanhado de um número de repetição, que especifica o número de vezes que o item formatado ocorre na variável de dados.
A tabela a seguir apresenta os caracteres de formato:

Declaração de variáveis
Todas as variáveis e constantes utilizadas devem ser declaradas dentro da DATA DIVISION e nas seções corretas, de acordo com as suas finalidades no programa.
Toda variável deve ser declarada da seguinte forma:

Números de nível
Em COBOL, é possível hierarquizar as variáveis, para facilitar o trabalho dos desenvolvedores. Os números de nível vão de 01 a 49 e os números 77 e 88 são níveis especiais que permitem um uso diferenciado para as variáveis.
Variáveis que servem como raiz para outras variáveis que não tenham nível 77 ou 88 não possuem “picture clause”.
Um exemplo:

O nível 88 é utilizado para especificar os chamados “condition-names”. Um “conditionname” é utilizado para mostrar e especificar um valor específico ou uma faixa de valores específicas para uma determinada variável. Para entender com uma maior facilidade, acompanhe a seguinte declaração de variável:

Caso você precise trabalhar com a variável “CHAVE” no programa, podemos apenas trabalhar apenas com as condições, facilitando assim a leitura do código do programa. Por exemplo, uma instrução “IF CHAVE = 0” tem o mesmo efeito de uma instrução “IF CHAVE-OFF”. Essa é uma maneira de simular uma estrutura booleana em COBOL.
Se quiser, pode estudar mais COBOL lendo essa apostila, ou pode esperar futuros posts.
E você? O que achou? Conta aí nos comentários. Me segue também na Odysee, todos os meus conteúdos saem primeiro lá, junto com material exclusivo.