Код
#статьи

COBOL жив! Что? Да!

Раскрываем секреты бессмертия. Разбираемся, что происходит со старичком Коболом в 2021 году, кому и почему он ещё нужен.

Говорят, если некстати упомянуть Кобол в приличном обществе, то можно прослыть некрофилом. Однако же год назад про этот язык программирования вспомнили многие.

Что случилось?

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

В апреле 2020 года губернатор Нью-Джерси бросил клич о помощи: «Нужны COBOL-программисты, чтобы внести правки в ПО (программное обеспечение) на мэйнфреймах сорокалетней давности». СМИ тут же разнесли повсюду ужасную новость: такие важные программы, да ещё и в таких важных службах занятости, до сих пор работают на этом древнем COBOL, программистов не хватает, мы все умрём.

Вот только позднее выяснилось, что виноват был вовсе не Кобол: проблема была в промежуточной прослойке, написанной на Java. В итоге запросы просто не добирались до бэкенда на COBOL.

Что это за Кобол такой

COBOL — акроним от COmmon Business Oriented Language.

Первая версия языка увидела свет в 1959 году, ещё до появления массовых персональных компьютеров.

И в то время, и сейчас программное обеспечение на Коболе работает в основном на мэйнфреймах. Если не вдаваться в подробности, то это огромные, мощные и отказоустойчивые железки. Правда, так обстоят дела сегодня, а в шестидесятые, чтобы программе хватало ресурсов, приходилось вручную управлять памятью и считать каждый байт — даже на мэйнфреймах. COBOL давал достаточно средств для гибкого управления памятью. Теперь о подобной экономии уже мало кто задумывается.

COBOL — высокоуровневый, императивный, процедурный, а с 2002 года и объектно-ориентированный язык. Его также относят к группе предметно-ориентированных языков: специфичных для конкретной области бизнес-программирования (они хорошо приспособлены к работе с большими массивами разнородных данных).

Кобол крут в финансах

И вот почему.

В результате повторяющихся вычислений с плавающей точкой накапливаются значительные ошибки округления. Настолько значительные, что это может стоить жизни: так, в 1991 году система управления зенитно-ракетным комплексом Patriot неправильно рассчитала время, поэтому не смогла перехватить иракскую ракету Scud. В результате погибли 28 человек, а около ста получили ранения.

Подобные ошибки — боль для большинства языков.

Особо критичны они при работе с финансами. Так, чтобы реализовать денежные операции в банковских программах на Java, программисты пишут отдельные классы для сумм и здорово заморачиваются с правилами округления.

COBOL от этого избавлен:

  • Во-первых, десятичные вычисления в нём ведутся с фиксированной точкой, а не с плавающей, как во многих современных языках. И производят их простые процессорные инструкции — те же, что и для целых чисел.
    В итоге операции проходят быстрее, чем в случае с плавающей точкой: не нужны отдельный сопроцессор и сложные правила округления.
  • Во-вторых, диапазон памяти для хранения переменных разных типов у COBOL не зависит от компилятора или архитектуры компьютера, где запускается код. Поэтому программы на этом языке одинаково работают на системах с 8-битной и 64-битной архитектурой.
    Для сравнения: язык C++ гарантирует только минимальный размер блока памяти для каждого типа.

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

«Hello, Cobol world!»

Но известен (в узких кругах) язык не точностью вычислений, а своей многословностью и многобуквенностью.

В Коболе сотни зарезервированных слов. Для сравнения: в двенадцатой версии Java их всего 53.

Матерью, а иногда и бабушкой Кобола называют Грейс Хоппер — американскую учёную и контр-адмирала флота США. Она считала, что программы должны быть понятны не только кодерам, но и людям со стороны бизнеса — управленцам, то есть тем, кто за приложения платит.

Кроме того, на полноценном, «незашифрованном» языке легче научиться писать любому, кто этого хочет (ладно, всё же нужно знать английский).

Вот, например, программа на FORTRAN — ещё одном старом языке:

TOTAL = REAL(NINT(EARN * TAX * 100.0))/100.0

В ней используются функции, названия которых непосвящённым скажут мало.

А это предложение на Коболе:

MULTIPLY EARNINGS BY TAXRATE GIVING SOCIAL-SECUR ROUNDED

И уже можно догадаться, что оно рассказывает о вычислении социальных выплат и округлении суммы до центов.

Естественный порядок слов без сокращений — это одна сторона медали. Всё, конечно, становится понятнее, но поглядите, как многабукаф!

Усугубим. Раз уж мы заговорили на Коболе — поздороваемся с миром на нём:

COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
    DISPLAY 'Hello, world!'.
    STOP RUN.

Чтобы вы оценили масштаб бедствия — то же самое на Python:

print("Hello, world!")

Почему же именно на COBOL спустили всех собак?

Первый очевидный ответ — да потому что он древний! Его считали устаревшим ещё в восьмидесятые годы, что уж говорить про наше время. Над ним смеются, его приверженцев называют динозаврами. Его критикуют все кому не лень. Небезызвестный Дейкстра и вовсе заявил: «COBOL калечит ум, поэтому обучение этому языку должно наказываться по закону».

В вину несчастному Коболу ставят даже его избыточную понятность. Среди программистов ходит шутка: «Если код трудно написать, то и читать его должно быть не легче». А если код написан так, что его способен понять и ваш начальник-ламер, то, может, ваши навыки не так уж уникальны и ценны? Неприятное ощущение 😏

Если серьёзно, в Коболе и правда нет многих привычных нам (по более новым языкам) вещей: в нём нельзя динамически распределять память, нет доступа к низкоуровневым функциям операционной системы. Большинство версий языка даже не поддерживают рекурсию. В общем, вряд ли вам захочется писать на нём компилятор.

КАЗНИТЬ, нельзя помиловать

На первый взгляд (ладно, на второй и третий тоже) кажется очевидным, что Кобол — это такой всемирный технический долг, а весь код на нём нужно переписать на другие языки, используя лишь современные подходы и технологии.

Некоторые так и поступают — например, Австралийский банк Содружества. Но даже у него — крупнейшего банка страны — переход занял пять лет. А обошлась такая перестройка примерно в 750 млн долларов. Это больше годового бюджета государства Сан-Марино.

Казнить нельзя, ПОМИЛОВАТЬ

Есть и другая точка зрения: «работает — не трогай». 

Конечно, сама мысль, что ПО на древнем языке может быть не хуже, а то и лучше чего-то современного, расходится с принципами Кремниевой долины. Стартапу не похвастать тем, как стар их продукт, иначе не видать ему венчурных инвестиций. Напротив, легче продать свежее и смелое, инновационное. Но, как скажет вам любой программист, чем код новее, тем больше в нём ошибок.

В этом плане у COBOL большая фора — код на нём отлаживался десятилетиями. Для банков и правительственных учреждений стабильная работа крайне важна: из-за любой ошибки реальные люди могут потерять свои реальные деньги. Добавим к этому риску стоимость замены программного обеспечения (о чём говорилось выше) — и поймём, почему COBOL до сих пор востребован и почему это вряд ли изменится в ближайшее время.

Хотите сказать, на нём до сих пор пишут?

Ещё как пишут.

В мире до сих пор работает 200–250 миллиардов строк на COBOL, и каждый год пишется ещё порядка полутора миллиардов. Правительства, финансовые учреждения, службы страхования и налоговые — активные пользователи этих строк. Примерно 43% банков США используют программы на Коболе, и в 95% случаев при снятии денег в банкомате клиенты взаимодействуют с системой на этом языке.

250 миллиардов строк кода — много это или мало? Трудно сказать. Но вот по данным британской компании Micro Focus, у десятков тысяч организаций в мире есть системы на COBOL, а счёт конечных пользователей, ежедневно взаимодействующих с COBOL-приложениями, идёт на десятки миллионов.

Кто все эти динозавры? Мы с вами.

Как сказал Дерек Бриттон (Derek Britton), директор Micro Focus, «каждый раз, когда вы звоните в колл-центр, проверяете баланс счёта или переводите деньги, оплачиваете ипотеку или страховку, обращаетесь в госучреждение, отправляете посылку, заказываете цветы или покупаете что-то в онлайн-магазинах, бронируете тур или авиабилет, торгуете акциями или просто смотрите статистику любимой спортивной команды за сезон, вы взаимодействуете с COBOL».

Программы на COBOL работают в Deutsche Bank, Société Générale, JPMorgan, UPS, IBM. Современные, самые быстрые мэйнфреймы IBM серии Z поддерживают Кобол из коробки. Согласно опросу той же Micro Focus, 70% компаний, использующих этот язык, выбирают обновление и модернизацию своих кодовых баз COBOL, вместо того чтобы полностью отказаться от мэйнфрейм-систем.

И снова дело в том, что наращивать мощности оборудования и прикручивать новые программные компоненты, используя средства интеграции, гораздо дешевле, чем переписывать старый код на современные языки.

А ещё в рейтинге популярности языков программирования TIOBE Кобол стоит выше более известных Scala, PL/SQL и Kotlin.

И за это платят? Деньгами?

Ещё какими деньгами.

Быстрый поиск вакансий по ключевому слову «Cobol» в LinkedIn с регионом USA выдаёт около четырёх тысяч позиций только за последний месяц. Из них тысяча — с годовым окладом больше 100 тысяч долларов (около 630 тысяч рублей в месяц по нынешнему курсу).

Похожие результаты можно найти и на других подобных ресурсах:

Среднегодовая зарплата COBOL-программиста на апрель 2021 года с ZipRecruter

«Не первое наше родео»

Кобол настолько востребован, что программисты на нём обеспечены работой даже после выхода на пенсию. Отошедшего от дел Билла Хиншоу (Bill Hinshaw) так часто просили помочь с кодом на Коболе, что в свои 75 лет он основал фирму «кобольских ковбоев» — COBOL Cowboys, набрав туда других пенсионеров-программистов и «молодых» бойцов 40–50 лет.

Компания занимается консалтингом уже семь лет — и вполне успешна. Опытный сотрудник в ней получает около 100 долларов за час работы. Хиншоу считает, что программист на Кобол может зарабатывать в среднем на 20% больше, чем специалист такого же уровня на Java. Да и у клиентов денег куры не клюют: 90% бизнес-систем в компаниях из Fortune 500 работают на COBOL.

Хм, звучит интересно. Где-то ещё учат программировать на COBOL?

Да!

  • В проекте Open Mainframe доступны курсы и другие материалы о мэйнфреймах и Коболе — причём бесплатно.
  • IBM, как участник Open Mainframe и единственный оставшийся производитель мэйнфреймов, ежегодно проводит онлайн-конкурс Master the Mainframe, который имеет образовательную направленность.
  • Есть несколько курсов на Coursera и Udemy.
  • На YouTube тоже попадаются ролики, которые рассказывают об истории и основах COBOL.

Ну и, конечно же, можно поучиться в каком-нибудь из мировых университетов, где есть курсы по мэйнфреймам и Коболу. Например, в Robert Morris University.

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

Источник: Reddit; перевод Skillbox Media


Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована