As quatro linguagens mães: COBOL

As quatro linguagens mães: COBOL

Você hoje deve estar programando no seu Python, Java, PHP, <%= ponha sua linguagem preferida aqui %>, e já deve ter pensando: Como surgiram as linguagens de programação? Como era na época do começo dos computadores? Por que as linguagens são tão diferentes entre si?

Para responder suas perguntas, fizemos uma série de artigos sobre origens das linguagens de programação com as quatro linguagens fundadoras: Fortran, COBOL, LISP e ALGOL, o contexto histórico, suas influências nos dias atuais e, um pouco de código, pois, somos programadores.

Vamos começar a nossa aventura pelo começo de tudo: a linguagem COBOL!

Contexto histórico

Década de 1950: Guerra-fria começando, investimentos massivos no desenvolvimento armamentista, científico e na corrida especial. Nestes usos,  os computadores já estavam fazendo muito trabalho científico e estavam sendo introduzidos em escala comercial.

Ainda não existiam computadores pessoais, muito menos celulares. Nesta década, IBM, Burroughs, Siemens e outros fabricantes já estavam vendendo computadores gigantes e caríssimos para governos e grandes empresas. O modelo de negócios destes fabricantes era a venda de hardware pelo seu alto custo e o software geralmente era um problema da empresa dona do computador. O computador era feito exatamente para as necessidades de cada fabricante.

IBM 704 - Um computador top para a época com capacidade de 40.000 instruções por segundo. Foram fabricadas apenas 123 unidades.
IBM 704 - Um bom computador para a época com capacidade de 40.000 instruções por segundo. Foram fabricadas apenas 123 unidades.

Programar nesta época era difícil porque softwares eram apenas criados com Assembly específico de cada computador e cada fabricante, ou seja, um software feito para uma máquina IBM não funcionaria em uma Elliot.

Além disso, Assembly é uma linguagem de baixo nível em que o programador precisa colocar instruções específicas de cada processador para fazer a computação, fazendo trabalho de trazer dados para a memória e fazer cada computação com as instruções do processador. Isto deixava computadores inacessíveis para cientistas, engenheiros ou especialistas que não trabalhavam com a tecnologia e queriam focar na matemática ou cálculos de negócios.

Instruções Assembly do IBM 704 do Manual da Máquina para fazer um cálculo.

A entrada de dados era muito rudimentar e utilizava cartões perfurados ainda, as saídas eram impressoras matriciais muito lentas (Imagina o quão terrível era debuggar na época).

Cartão perfurado como forma de entrada de dados em computadores‌. ‌

Porém, as nossas 4 linguagens mudaram tudo:

  • Fortran foi a linguagem iniciante focada em cientistas;
  • COBOL inaugurou a computação comercial;
  • LISP trabalhou com o início de inteligência artificial;
  • ALGOL descreveu algoritmos e influenciou muitas linguagens modernas.

Vamos começar a aventura com a computação comercial com o COBOL.

Advento da Computação Comercial

Um dos motivos de comprar um computador super caro a partir da década de 1950 era a computação comercial. Mas o que é isto? Como sabemos, empresas e governos precisam fazer muitos processamentos:

  • Cálculo de impostos sobre produtos e transações
  • Cálculo de folha de pagamento
  • Transações financeiras entre empresas
  • Controle de inventário
  • Cálculo contábil

E muitas outras aplicações, porém, tínhamos alguns problemas: as linguagens da época eram muito difíceis uma vez que o Assembly das máquinas e o Fortran ainda era um estreante totalmente focado em cálculo matemático. Além disso, um código feito para uma máquina não funcionava em outra máquina de outro fabricante, ou seja, não tínhamos portabilidade de código.

Neste contexto, nasceu o COBOL.

COBOL

IDENTIFICATION DIVISION.

PROGRAM-ID. HELLOCOBOL.

 

PROCEDURE DIVISION.

DISPLAY "HELLO, COBOL!".

STOP RUN.

HELLO, COBOL!

Grace Hopper e sua equipe trabalhando no COBOL.

Dado o problema de se precisar de criar software com propósito comercial, o Departamento de Defesa dos EUA patrocinou um projeto para criar uma linguagem para processamento de dados. A equipe de Grace Hopper em 1959 criou o Common Business Oriented Language, acrônimo para COBOL. Saiba mais sobre Grace Hopper aqui.

Diferente das outras linguagens desta lista, o COBOL não chamou a atenção de cientistas da computação da época. Somente a partir da década de 1970 o COBOL virou a linguagem preferida para processamento comercial devido a sua portabilidade e facilidade de programação.

Inovações e Código

Hoje é natural um código em Java ou Python rodar tanto em um Mac ou PC, mas em 1959 isto não era viável e esta foi a primeira façanha do COBOL: foi uma das primeiras linguagens a ter portabilidade, ou seja, a rodar em 2 computadores que foram feitos por fabricantes diferentes. Só para termos uma base de comparação, a linguagem Java que nasceu com uma forte proposta de portabilidade, só surgiu em 1995, 36 anos depois.

Outro característica marcante é a sua sintaxe com uma estrutura muito parecida com a escrita da língua inglesa, o que permitiu que muitos programadores pudessem aprender a linguagem rapidamente e focar mais nas regras de negócio e processamento do que no hardware no qual trabalhavam.

Vamos ver um "pequeno" código em COBOL que atribui valores a 4 variáveis:

            IDENTIFICATION DIVISION.

            PROGRAM-ID. VARIAVEIS.


            DATA DIVISION.

              *> Esta sessão se define as variáveis

              WORKING-STORAGE SECTION.

              *> Define um número com sinal, 3 dígitos,

              *> e dois números decimais. Será 0 por padrão

              *> S: SINAL

              *> 9: valores numéricos

              *> V: PONTO DECIMAL

              *> Foi atribuído o valor -123.45.

              *> 01 no início descreve registro de entrada

              01 PRIMEIRA-VAR PIC S9(3)V9(2) VALUE -123.45.

              *> define uma string de 6 caracteres

              *> inicializa com abcdef

              01 SEGUNDA-VAR PIC A(6) VALUE 'ABCDEF'.

              *> Podemos agrupar variáveis

        01 ENDERECO-REVELO.

    05 NUMERO PIC 9(4) VALUE  2537.

      05 RUA PIC X(15) VALUE 'AV. PAULISTA'.

       05 CIDADE PIC X(15) VALUE 'SAO PAULO'.

       05 PAIS PIC X(15) VALUE 'BRASIL'.

      

            *> Aqui o código é executado

            PROCEDURE DIVISION.

              DISPLAY "1a VARIAVEL :"PRIMEIRA-VAR.

              DISPLAY "2a VARIAVEL :"SEGUNDA-VAR.

              DISPLAY "GROUP VAR :"ENDERECO-REVELO.

              STOP RUN.


Isto irá imprimir:

1a VARIAVEL :-123.45

2a VARIAVEL :ABCDEF

GROUP VAR :2537AV. PAULISTA   SAO PAULO      BRASIL  

Gostaria de chamar a atenção a estrutura do COBOL, tudo é posicional inclusive a saída.

Vemos no endereço que o texto ocupa exatamente o espaço que lhe foi reservado. Fato curioso: até hoje o COBOL mantém a estrutura posicional e limite de 80 colunas por linha (E você reclamando da indentação Python!)

Outro ponto de destaque do código COBOL está na organização e para isto ele usa o conceito de divisões:

  • Divisão de identificação do programa,
  • Divisão de dados para declaração de variáveis e
  • divisão de execução do código.

Tudo muito bem organizado para processamento de dados.

Curiosidades

Um dos culpados do BUG do Milênio foi o COBOL. O motivo era simples: como computadores tinham pouca memória e disco, os anos eram representados por 2 dígitos em vez de 4, assim, 1994 virava apenas 94. Com a chegada do ano 2000, isto se tornaria um problema para cálculo de anos, porque `99 > 00` seria falso. Para resolver este problema em larga escala, vários programadores de COBOL aposentados foram chamados para poder corrigir o problema e, como vimos, o Bug do Milênio foi uma ameaça que nunca aconteceu.

Outro fato curioso é a própria verbosidade do COBOL. Há 300 palavras reservadas para descrever comandos e ações. Em comparação, a linguagem C tem 37 palavras reservadas e Python tem 33 palavras reservadas. Devido a esta alta complexidade, outras linguagens ganharam espaço.

Por fim, um fato que prevalece até hoje é que um código em COBOL não pode ter mais de 80 caracteres por linha, incluindo espaços. Apesar do limite ser uma absurdo em máquinas modernas, a limitação vem dos cartões perfurados que eram a forma de fazer a entrada de softwares e dados nos mainframes antigos.

O que aconteceu com o Cobol?

"Se está funcionando, não mexa!" é a máxima da área de tecnologia que é amplamente usada para software feito COBOL. Aplicações como processamento de transações bancárias, cartões de crédito, folhas de pagamento ainda estão em COBOL e permanecerão assim por um bom tempo. E mesmo sendo um “vovô das linguagens”, o COBOL roda em modernos mainframes.

Mainframes de grandes datacenters. Dá para rodar o Chrome com muitas abas sem travar.

Para se ter uma ideia da estabilidade do COBOL neste contexto, 95% de processamento de cartão em ATMs no mundo e 80% de transações financeiras passam por software feito em COBOL, segundo uma estimativa feita pela Reuters.

Cenas dos próximos capítulos

COBOL abriu muitas portas para a computação comercial. Mas como começou tudo? Qual foi a primeira linguagem de alto nível? Acompanhe nosso Blog e veja a próxima linguagem da série: Fortran.