Я собрал это вместе накануне вечером на COBOL-е

Когда-то вы программировали для машины, а не для языка. Это называлось сборкой, и у каждой компьютерной системы была своя версия. Это было на низком уровне: каждая строка - это отдельная инструкция для компьютера. Абстракция была минимальной. Вот "Hello World!" написано на сборке для 32-битного процессора Intel:

global  _main
    extern  _printf

    section .text
_main:
    push    message
    call    _printf
    add     esp, 4
    ret
message:
    db  'Hello, World!', 10, 0

И мир закричал и сказал: «Мы не можем это читать! Мы не можем этого написать! Нет ли лучшего способа ?! »

И Грейс Хоппер сказала: «Держи мое пиво».

Контр-адмирал Грейс Хоппер входила в команду разработчиков UNIVAC I в 1950-х годах. У нее была революционная идея программирования компьютеров на английском языке; ее боссы сказали ей нет. Спустя три года и одна опубликованная научная статья, она выпустила компилятор A-0, который привел к A-1, -2 и -3 (названный каким-то маркетинговым гением ARITH-MATIC) и B-1 (названный FLOW -МАТИЧЕСКИЙ).

«Манипулирование символами было хорошо для математиков, но не годилось для процессоров данных, которые не были манипуляторами символов. Очень немногие люди действительно манипулируют символами. Если да, то они становятся профессиональными математиками, а не обработчиками данных. Это было началом COBOL, компьютерного языка для процессоров данных ». - Грейс Хоппер

В 1959 году исследование показало, что средняя стоимость программирования инсталляции данных составляла около 800 000 долларов; на перевод программ для работы на новом оборудовании было потрачено около 600 000 долларов. Новые языки программирования выходили, по-видимому, ежемесячно, и удачи в получении всего, что написано на одном языке, для работы на другой машине.

Были созваны собрания. Были сформированы комитеты. Посоветовались с Грейс Хоппер. Были сделаны выводы, а именно, существует потребность в общем бизнес-ориентированном языке, который можно было бы использовать в различных средах, от банковского дела и страхования до коммунальных услуг и инвентаризации. Он должен быть независимым от машины, изменяемым и простым в использовании. И они были готовы сделать это за счет машины: мощность компьютеров была дорогой, но дешевеющей, а человеческая сила - нет. Заставьте работать машину, а не человека.

Эта группа назвала себя CODASYL, и то, что они в конечном итоге (очень в конечном итоге; это был большой комитет), разработали, называлось COBOL, что означает CO mmon B usiness O разразился L негодованием. Оно было раздутым или полным компромиссов, или и того, и другого, в зависимости от того, кого вы спросили. Первая спецификация, COBOL 60, имела множество логических недостатков. К 1970 году он не менее четырех раз пересматривался и стандартизировался, и к тому времени он стал самым широко используемым языком программирования в мире.

А инерция - это ужасная вещь: в опросе ИТ-профессионалов, проведенном Computerworld в 2012 году, 58% респондентов заявили, что их организации много используют COBOL. Исследователи из центра исследований программного обеспечения Lero в 2014 году заявили, что количество транзакций COBOL (в основном финансовых) превышает количество запросов в Google в 200 раз.

Итак, давайте еще раз вернемся к 6-стороннему ролику для игры в кости Эдди, издание COBOL:

IDENTIFICATION DIVISION.
PROGRAM-ID. DICEROLLER.
DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUMDICE PIC 9(1) VALUE 2.
   01 WS-DIE PIC 9(1).
   01 WS-TOTAL PIC 9(2) VALUE 0.
   01 WS-INDEX PIC 9(1) VALUE 1.
PROCEDURE DIVISION.
    DISPLAY "Rolling " WS-NUMDICE " dice.".
    
    PERFORM WS-NUMDICE TIMES
        INITIALIZE WS-DIE.
        COMPUTE WS-DIE = FUNCTION RANDOM (5) * 6 + 1.
        DISPLAY "Dice #" WS-INDEX ": " WS-DIE.
        ADD WS-DIE TO WS-TOTAL.
        ADD 1 TO WS-INDEX.
    END-PERFORM.
    
    DISPLAY "Total: " WS-TOTAL.
STOP RUN.

Вы можете попробовать запустить этот код здесь, но если у вас получится заставить его работать, вы станете лучшим программистом, чем я. Цикл никогда не будет повторяться более одного раза. Интересно, является ли это ограничением онлайн-компилятора в CodingGround, но я не уверен.

Первое, что меня поразило, - это разделение. Программа COBOL разделена на четыре части:

  1. Раздел идентификации: как называется программа. Это единственное обязательное деление.
  2. Раздел среды: для указания файлов ввода и вывода. (Не требуется для ролика для игры в кости.)
  3. Разделение данных: где определены переменные. Переменные определяются условием изображения с типом данных и длиной байта: PIC 9 (4) идентифицирует числовой тип данных длиной 4. Есть дополнительные указатели для знака и десятичных знаков.
  4. Разделение процедур: где происходит волшебство.

Второе, что бросается мне в глаза, и я уверен, что вы тоже, это многословие. Адмирал Хоппер не дурачилась, когда хотела основать язык программирования на английских словах; в COBOL более 300 зарезервированных слов. Для сравнения, в Ruby их около 40. Положительным моментом является то, что код самодокументируется. Он буквально объясняет, что делает код.

Фактически структура программы определена как английская бумага: символы составляют утверждения, которые составляют предложения, а затем абзацы и разделы. Это подкрепляется тем, что каждое предложение заканчивается точкой, как в письменном английском.

COBOL критиковали за многословность и неэлегантность. В хакерском сообществе он имеет репутацию создателя монолитного, неподдерживаемого спагетти-кода, за которым трудно следить и который используется только для скучных вещей.

Слабый, многословный и дряблый язык, используемый разработчиками кода для выполнения скучных бессмысленных вещей на мэйнфреймах динозавров. - COBOL, Файл жаргона

Использование COBOL калечит ум; поэтому его обучение должно рассматриваться как уголовное преступление . - Эдсгер В. Дейкстра

Так что, конечно же, COBOL не используется для создания крутых вещей или забавных вещей. Тем не менее, он действительно работает, и, учитывая его постоянное распространение во многих отраслях, работающему программисту было бы полезно познакомиться с языком.