«Второй по ценности актив в США — после нефти — это 240 миллиардов строк кода на COBOL»

image

Когда Томас впервые начал программировать, это был 1969 год. Он был ребенком, только что окончившим среднюю школу в Торонто, без каких-либо конкретных жизненных целей. Его отец был плотником, но ему не повезло пойти по стопам своей семьи; Томас был неусидчивым. «Мой отец знал, что я не смогу скрепить два куска дерева молотком», — смеется он.

Поэтому его мать предложила что-то странное и новомодное: Как насчет… компьютерного программирования?

В 1969 году компьютеры все еще были странной диковинкой, размером с большой шкаф. Но компании по всему миру понимали, что они бесценны для любых задач, требующих быстрого счета, например, для подсчета заработной платы. Работу предлагали всем, кто мог научиться хоть немного кодировать. Поэтому Томас нашел «какую-то захудалую школу» в центре Торонто и в течение следующих двух месяцев изучал актуальный на тот момент компьютерный язык: COBOL (Common Business-Oriented Language).

После окончания школы его взяли на работу в отдел сортировки чеков крупного канадского банка. (Он не хочет, чтобы я упоминал его название в целях конспирации банка; «Томас», — это псевдоним, если вы еще не догадались). Тогда Томас еще не был программистом в банке, но в течение следующих нескольких лет он дал понять, что хочет им стать, и его работодатель оплатил ему кучу самых настоящих курсов по кодированию в колледже, и в 1978 году он начал долгую карьеру в банке в качестве программиста.

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

В течение следующих нескольких лет Томас хорошо освоил язык COBOL и написал тысячи бесценных строк кода. Когда банк проводил платежи, именно его код каждый день помогал им все правильно подсчитать. В 70-е, 80-е и 90-е годы он и его коллеги-кодеры написали, вероятно, десятки миллионов строк COBOL. Есть одна система, которой он особенно гордится, — молниеносная программа, которая может обрабатывать «от трех до пяти миллионов транзакций в день. Это мое детище!» Он написал первые фрагменты этой программы в 1988 году.

И что самое интересное — этот код работает и по сей день.

Томас ушел на пенсию из банка в 2007 году в возрасте около 60 лет, и когда он уходил, банк все еще полагался на систему, которой к тому времени было 20 лет и которая была написана, когда у Томаса было гораздо больше волос и когда песня Фила Коллинза «Groovy Kind of Love» была популярной в хит-парадах. Сегодня коду уже более трех десятилетий. Но он по-прежнему обрабатывает миллионы записей в день. Он считает, что большая часть кода, написанного им и его коллегами в те времена, до сих пор работает, так как банк не может без него функционировать.

На самом деле, в наши дни, когда звонит телефон в доме, куда Томас уехал на пенсию — в маленьком городке за пределами Торонто, — периодически звонит кто-то из банка. Эй, говорят они, не могли бы вы помочь… обновить ваш код? Может быть, добавить в него новые функции? Потому что, как выяснилось, в банке больше нет никого, кто понимал бы COBOL так же хорошо, как Томас, кто мог бы погрузиться в него и подправить его для выполнения новой задачи. Почти все ветераны COBOL, мастера перфокарт, которые создавали важнейшие системы банка в далеком прошлом, которые знают COBOL вдоль и поперек, ушли на пенсию. Они покинули стены банка, как и Томас. И мало кто из молодых программистов заинтересован в изучении пыльного компьютерного языка 50-летней давности. Они гораздо больше увлечены новыми оживленными областями, такими как бурно развивающаяся в Торонто индустрия искусственного интеллекта. Они изучают новые современные языки программирования.

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

Переживет ли его COBOL?

«Возможно».

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

Этот банк не единственный. Программы на COBOL — некоторые из них написаны так давно, что цветное телевидение еще не было в ходу — повсюду в нашей повседневной жизни.

Задумайтесь: Более 80% личных операций в финансовых учреждениях США проводятся с использованием COBOL. Полностью 95% времени, когда вы проводите по своей банковской карте, где-то на заднем плане работает COBOL. Bank of New York Mellon в 2012 году обнаружил, что у него 112500 отдельных программ COBOL, составляющих почти 350 миллионов строк; вероятно, это типично для большинства крупных финансовых учреждений. Когда ваш начальник выдает вам зарплату, есть вероятность, что она была рассчитана с помощью COBOL. Если вы инвестируете, ваши биржевые торги тоже проходят на нем. Так же как и здравоохранение: Страховые компании в США используют «механизмы вынесения решений» — программное обеспечение, которое определяет, сколько врач или фармацевтическая компания получит за услугу — которые были написаны на COBOL. Интересно, почему, когда вы делаете покупки в розничной сети, вы видите продавца, набирающего текст на терминале старого образца, с зеленым текстом на черном фоне? Это потому, что система инвентаризации использует COBOL. Или почему вы видите, как агенты по бронированию авиабилетов используют тот же черный экран с зеленым шрифтом, чтобы изменить ваш рейс? «О, это COBOL — это точно COBOL», — смеется Крейг Бейли, старший инженер в компании Faircom, которая производит программное обеспечение, помогающее фирмам управлять этими старыми системами.

Никто точно не знает, сколько COBOL существует на свете, но, по оценкам, до 240 миллиардов строк кода спокойно обеспечивают работу многих важнейших частей нашей повседневной жизни. «Второй по ценности актив в США — после нефти — это 240 миллиардов строк COBOL», — говорит Филип Теплицки, который десятилетиями работал на COBOL в банках США.

Нам часто говорят, что технологии процветают благодаря своим новым, новаторским инновациям — готовности делать новые смелые вещи с кодом, «двигаться быстро и ломать стереотипы», знаменитое высказывание на стене в Facebook молодого Марка Цукерберга. И это, безусловно, правда, что каждый день мы видим совершенно новый код, написанный на более современных и перспективных языках. Если вы видели новый потрясающий искусственный интеллект, который может писать предложения как человек, то при его создании использовался Python, хорошо известный новый компьютерный язык. Когда Facebook запускает новые функции в своем приложении для браузеров, кодеры часто используют JavaScript, еще один " популярный" язык.

Но что насчет старых, крупных отраслей, играющих центральную роль в экономике? COBOL все еще всесилен. Это затрудняет внедрение инноваций. Как можно возиться, прикручивать новые функции, используя древний язык, который не интересует энергичных молодых кодеров? Если крупные старые банки не являются фирмами, продвигающими такие услуги, как Venmo, Square или другие модные «финтех» продукты, то из этого следует, что COBOL является частью проблемы. Но если это так, то почему, собственно, Томаса все еще беспокоят на пенсии, чтобы он продолжал работать? Почему мы не можем обойтись без него?

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

Программисты начали разрабатывать COBOL в 1959 году. Когда десять лет спустя, в 1969 году, он был наконец выпущен, это был первый язык, сделавший компьютеры полезными для повседневной жизни. В конце 50-х годов компьютеры только что вышли из «экспериментальной» стадии. Повседневные компании начали задумываться о том, может ли быть полезным собственный компьютер для обработки цифр. Проблема заключалась в том, что до появления COBOL кодирование было загадочным и сложным для изучения. Программисты часто писали программы, используя некоторые варианты так называемых «ассемблерных» языков, где команды могли быть ужасно заумными. (Например, команда «LXA A,K» означает «взять число, загруженное в ячейку A памяти компьютера, и загрузить его в „индексный регистр“ K.) Хуже того, производители компьютеров часто придумывали свои собственные специальные языки для своих ЭВМ. Если вы написали отличный код для машины, он не мог работать на компьютере другой компании.

image

Грейс Хоппер и команда разработчиков COBOL.

Новое поколение амбициозных программистов считало это безумием. Одной из них была Грейс Хоппер, контр-адмирал военно-морского флота США, работавшая на раннем экспериментальном компьютере и обладавшая ярким характером. (Именно она популяризировала фразу: „Проще попросить прощения, чем спрашивать разрешения“). Хоппер считала, что языки программирования должны быть более похожи на английский, чтобы их было легче изучать и читать. В 1955 году она разработала язык под названием „FLOW-MATIC“, который был нацелен именно на это; чтобы переместить число из позиции A в позицию D, например, вы просто напишите „TRANSFER A TO D“.

В 1959 году программист по имени Мэри Хоуз решила, что ее отрасли необходимо разработать язык, который был бы так же прост в написании, как FLOW-MATIC, и который мог бы работать на любой машине. Она собрала группу экспертов — в том числе многих из зарождающейся индустрии бизнес-компьютеров — для создания языка, работая вместе с Министерством обороны. Цель заключалась в том, чтобы создать язык, который мог бы прочитать и понять средний менеджер компании, даже если он не был обучен программированию.

В результате этой десятилетней работы, в которую внесли большой вклад многие женщины-суперзвезды, такие как пионер компьютерных наук Джин Саммет, был создан язык, очень похожий на FLOW-MATIC, который был прост для восприятия. Например, чтобы сложить два числа, можно было написать „ADD Num1, Num2 GIVING Result“. Чтобы выполнить вычисление три раза, вы напишете „PERFORM 3 TIMES“.

»Трудно переоценить значение COBOL", — говорит Мар Хикс, доцент истории в Иллинойском технологическом институте и автор книги " Программируемое неравенство". «Он делал нечто совершенно исключительное в вычислительной технике. Он заполнял эту нишу, которая оставалась незаполненной в первые годы развития вычислительной техники. И это изменило способ, посредством которого вы могли бы подумать о написании программ».

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

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

То, что старый код может быть не только хорошим, но и в решающих аспектах превосходить новый, противоречит многим мифам Кремниевой долины.

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

Так же и с банками: днем они лихорадочно принимают транзакции, запросы от клиентов на ввод и вывод денег со счетов. Ночью у них есть несколько часов, чтобы свести баланс всех этих операций. Если вы задавались вопросом, почему чек, который вы положили на депозит, не проходит некоторое время, то это отчасти потому, что оба банка должны выполнять свои огромные задания на COBOL после ухода дневного персонала. В Citibank код Теплицкого проходил через огромный комплекс с 248 мэйнфреймами.

«У вас есть шести-, восьмичасовое окно, когда вы должны сделать, извините за выражение, хренову тучу работы — вы должны провести все транзакции в определенном порядке», — говорит он мне. «Нужно большое, большое железо, чтобы прогнать миллиард транзакций через шестичасовое пакетное окно. Это просто ужас».

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

COBOL? Он был создан для работы на мейнфреймах, которые сами по себе были созданы специально для обработки миллиардов транзакций, чтения и записи потоков данных в быстром темпе. Это было похоже на высокооктановое топливо, разработанное специально для спортивного автомобиля. С годами «компиляторы» COBOL — программное обеспечение, которое берет английский синтаксис компьютерного кода и преобразует его в единицы и нули, которые может выполнить компьютерный чип, — совершенствовались все больше и больше, так что «скомпилированный код» COBOL стал исключительно быстрым. Это означает, что отчасти COBOL лежит в основе многих жизненно важных вещей, которые мы делаем, потому что он действительно очень хорош в этом.

«У них было 50 лет, чтобы сделать это как следует», — замечает Билл Хиншоу, руководитель COBOL Cowboys, агентства, предоставляющего COBOL-программистов.

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

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

Адриана Штерн (на этот раз не псевдоним!), еще один кодер, с которым я беседовал, работавшая в крупных канадских банках, начала свою карьеру в 80-х годах, когда в системах еще устранялись некоторые странные ошибки. Однажды она обнаружила, что определенный банковский терминал в Квебеке посылает системе буквы с акцентом — а первоначальный программист никак не ожидал, что такое произойдет.

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

Штерн проработала в банках 30 лет, и, по ее данным, 85% ее работы составляло не написание новых смелых функций для банка, а «техническое обслуживание». Считайте это своего рода цифровой сантехникой, устранением утечек, чтобы все работало постепенно все более и более гладко.

«Это была тяжелая работа — ты горишь свечой с двух концов», — сказала она мне.

Именно поэтому системы на языке COBOL сейчас так надежны. Их отлаживали больше, чем практически любой код на планете". Шикарное новое приложение в стиле TikTok может быть запущено и пользоваться огромной популярностью даже при наличии большого количества ошибок. Если количество отметок «нравится» на вашем последнем сообщении немного ошибочно, ничего страшного. В отличие от этого, если крупный розничный торговец неправильно подсчитает свои запасы или банк вдруг не сможет отправить деньги? Это вызывает финансовый хаос в масштабах страны.

«Весь ВВП мира находится в движении в [банковской] сети в любой момент времени», — как отмечает Теплицкий. «Каждый день банк переворачивает вдвое больше своих активов, выходя и входя. У клирингового банка, скажем, в Нью-Йорке, это может быть больше… Так что огромное количество денег находится в движении в сети и в больших внутренних системах, обеспечивающих ее работу. Они не могут выйти из строя! Если они выйдут из строя, миру придет конец. Мир закончится».

COBOL не просто быстрый; он также «стабильный, стабильный, стабильный», как сказал мне Томас. Один из процессов, который он разработал, каждый месяц берет файл с примерно 2,4 миллионами государственных пенсий и кладет нужные суммы на банковские счета людей. «Мы проверяем их и перечисляем за 11 минут. За 20 лет ни разу не было сбоя».

Эта идея — что старый код может быть не только хорошим, но и в решающих аспектах превосходить более новый — противоречит многим мифам Кремниевой долины. Стартапы, финансируемые венчурным капиталом, обычно рассказывают о блестящем и новом. Основатели не хвастаются тем, насколько старая у них кодовая база. Совсем наоборот: они хвастаются тем, что их код является передовым, написанным за всю ночь 21-летними гениями с горящими глазами. Но, как скажет вам почти каждый программист, чем новее и свежее написанное программное обеспечение, тем больше вероятность того, что оно будет кишеть ошибками.

Наглядный пример сказанному можно наблюдать во время пандемии. В первые дни Covid-19 предприятия массово закрывались. Уволенные работники кинулись в Интернет, чтобы подать заявление на получение пособия по безработице, а веб-сайты правительств многих штатов рухнули под нагрузкой. В Нью-Джерси губернатор заявил прессе, что их системы COBOL отчаянно нуждаются в помощи, чтобы справиться с новыми требованиями. «Буквально, у нас есть системы, которым более 40 лет», — отметил он.

Но технологи, работавшие за кулисами над устранением проблем, знали, что проблема не в COBOL, вычисляющем цифры. Это старое оборудование работало нормально. Нет, сбой произошел в более новых вещах — программах, обеспечивающих работу самого веб-сайта.

«То, что вышло из строя, было веб-приложением между мэйнфреймом и внешним миром. Именно оно и развалилось», — говорит Марианна Беллотти, программист и писательница, которая много лет работала с правительственными системами и наблюдала за работой системы Нью-Джерси. Но признать, что «о, наши веб-системы сломались», слишком стыдно, как отмечает историк Хикс.

Беллотти видела, как то же самое происходило с другими государственными учреждениями, например, с налоговой службой. Однажды ее позвали помочь с веб-приложением Налогового управления, которое не работало. Когда они провели расследование, то обнаружили, что, действительно, проблема была в более новых программах, «в этом куске плохо написанного кода на Java». Мейнфрейм, работающий на COBOL, напротив, мчался как Ferrari.

«Мейнфреймы, — говорит она, — реагировали в течение миллисекунд».

image

Однако «стабильность» и старость могут создать парадокс — проклятие успеха. Потому что, когда код работает хорошо и никому не нужно его проверять, в конце концов, люди уходят. Они перестают смотреть на него, перестают его проверять. А это значит, что они перестают понимать, как именно он работает.

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

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

Дэйв Гуарино видел это воочию. Он разработчик программного обеспечения, много лет проработавший в Code For America, некоммерческой организации, которая берет талантливых программистов и помогает правительствам обновлять свои древние сервисы. Несколько лет назад он помогал писать новое веб-приложение, чтобы калифорнийцам было проще подавать заявки на получение талонов на питание. Веб-приложение, так сказать, плавало поверх старых программных систем Калифорнии; пользователи взаимодействовали с приложением, а оно передавало их запросы десятилетиями устаревшему коду, работающему на мэйнфреймах Калифорнии.

И вот тут-то и возникла проблема. В какой-то момент его команда захотела создать способ для получателей продовольственных талонов заказать встречу с государственным чиновником. В старых калифорнийских системах уже был раздел, который мог принять подобный запрос. Но в поле, где нужно было ввести «Когда вы можете встретиться?», старая система позволяла ввести только 40 символов — и она не позволяла использовать дефисы, поэтому нельзя было использовать краткую форму, например, «Пн-Ср», чтобы показать, что вы свободны с понедельника по среду.

Какая боль, подумал Гуарино. Поэтому он встретился с человеком, который управлял этой старой программной системой. «К сожалению, да, это реальные ограничения», — сказал ему тот. И это была проблема языка COBOL; он был написан несколько десятилетий назад. «Так что же вы можете сделать?

Можете ли вы сделать поле больше или что-то еще?» спросил Гуарино. «А он прямо так и сказал: „Нет! Мы ничего не можем сделать“. Тот код на COBOL никто и никогда не тронет. У государства не было достаточно денег, чтобы оплатить огромные затраты времени сотрудников, которые потребовались бы для погружения в эту кодовую базу.

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

»Исправлять что-то было очень рискованно, потому что можно было повредить то, что уже работало", — говорит она мне. Поэтому чаще всего вместо того, чтобы интенсивно переписывать старый код, они просто добавляли небольшие новые кусочки кода, исправляя все по краям. «Люди продолжали добавлять маленькие кусочки и кусочки, и это стало выглядеть как маленький Франкенштейн», — смеется она. Что, конечно, только делало систему потенциально более непостижимой и запутанной для последующих поколений.

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

Ошибка Y2K возникла в результате старого проектного решения. Когда программисты первых версий COBOL записывали даты в свои программы, они использовали две цифры: 1971 год, например, был «71». Это было связано с тем, что машины 60-х и 70-х годов имели очень мало места в памяти.

Удаление двух знаков было большой проблемой. «Все программы очень бережно относились к памяти — каждый байт был дорог», — говорит мне Томас. Кроме того, программисты 60-х и 70-х годов и представить себе не могли, что их программы будут по-прежнему использоваться 30 лет спустя, когда наступит 2000 год.

Но по мере приближения 2000 года двузначные даты стали огромной дилеммой. В новом тысячелетии программа COBOL не знала, означает ли «00» 2000 или 1900 год. Если банк рассчитывал проценты по вкладу, сделанному «01», он мог ошибочно предположить, что вклад был сделан в 1901 году, и выдать клиенту 99 лет бесплатных процентов. Огромное количество банковских, розничных и зарплатных операций зависят от дат, поэтому необходимо было обновить миллиарды строк программ. По мере приближения 2000 года банки вызвали своих старожилов с пенсии, заплатив им за то, чтобы они проанализировали кодовые базы, нашли все места, где использовались даты, и все исправили.

«Мы потратили два с половиной года на подготовку к Y2K», — смеется Томас. «Это одна из причин, почему многие программисты, такие как я, так хорошо знают наши системы. Потому что нам пришлось пройти через каждую программу».

Несмотря на это, в банке Томаса у них не было времени, чтобы действительно устранить проблему. В некоторых случаях банки и фирмы не меняли код, чтобы использовать полную четырехзначную дату, например «2016». Вместо этого они использовали «скользящее правило». Они выбирали достаточно далекий год в будущем, например 2045, и делали его новой точкой останова. Таким образом, если COBOL видит двузначную дату, которая больше 45, он предполагает, что она относится к 1900-м годам — так, «87» означает 1987 год. А если он видит число меньше 45, он предполагает, что это 2000-е годы — так, «33» означает 2033 год.

Это означает, как отмечает Томас, что проблема Y2K не является для них полностью решенной. Они просто отбросили эту проблему на задний план. В 2045 году они вполне могут снова впасть в панику. А это значит, что еще больше команд на COBOL придется исправлять специалистам по COBOL.

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

«Буквально в понедельник утром нам звонят и говорят: „Боже мой, проект приостановлен — такой-то и такой-то скончался“, — рассказывает Бейли.

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

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

Нам постоянно звонят из компаний и спрашивают: „У вас есть кто-нибудь, кто умеет работать с COBOL?“. Они в отчаянии», — говорит Мэрилин Зеппетелли, бывший сотрудник IBM, работавший на их мэйнфреймах, а теперь преподающий в Marist College.

Marist — один из немногих университетов, где регулярно преподают COBOL. Многие программы по компьютерным наукам не преподают или, конечно, не рекламируют его. Действительно, академические круги давно отвергают COBOL. Когда в 70-х годах этот язык получил широкое распространение, элитные ученые-компьютерщики пренебрежительно отнеслись к нему, утверждая, что COBOL поощряет ужасные стили кодирования, которые выходят из моды. Одним из примеров был оператор «GOTO»: COBOL позволяет вам сказать программе внезапно перескочить с одной строки на другую, скажем, со строки 899 на строку 217. По правде говоря, компьютерщики были правы! Такой тип кодирования приводит к неорганизованным программам, которые трудно читать («спагетти-код», как они его называют), и языки, появившиеся после COBOL, в основном отказались от GOTO. В любом случае, клевета осталась. Для людей, серьезно настроенных на расширение границ вычислительной техники, COBOL был языком неудачников, каким-то захолустьем.

«Использование COBOL калечит мозг; поэтому его преподавание должно рассматриваться как уголовное преступление», — писал в 1975 году известный компьютерщик Эдсгер Дейкстра. COBOL был скорее языком рабочего класса, вторжением «синих воротничков» в священство кодирования. К тому же, когда в 80-х годах появились более дешевые настольные ПК, они стали новым захватывающим местом для выполнения кода. Любой мог иметь такой ПК на своем столе; изучение COBOL требовало доступа к огромному компьютеру-мейнфрейму, которые были в основном только в банках или крупных розничных сетях. «Когда малые и средние машины стали действительно популярны, [университеты] перевели все свое обучение на эти платформы, и мейнфреймы как бы отошли на второй план», — отмечает Цеппетелли. В наши дни смартфоны сделали COBOL еще менее актуальным для студентов: «Он просто не кажется таким же привлекательным, как некоторые другие платформы».

В связи с небольшим числом прибывающих специалистов многие банки, государственные учреждения и предприятия розничной торговли уже давно стали полагаться на стороннюю COBOL-работу. Они держат в штате небольшое ядро кодеров, знающих язык, а когда им нужно написать что-то новое, нанимают фирмы, имеющие в штате несколько кодеров COBOL, например «COBOL Cowboys» Билла Хиншоу, или фирмы в Индии.

Некоторые фирмы, опасаясь, что в ближайшие годы будет слишком трудно найти программистов на COBOL, пытаются переписать всю свою систему на современных языках. Это почти всегда адская задача: вы должны продумать каждую вещь, которую делает ваше сложное, десятилетиями создававшееся программное обеспечение, и воссоздать каждый крошечный шаг на новом языке. Три года назад New York Times переписала свою систему тиражирования газет на языке COBOL на Java; это было вполне успешно, но заняло больше времени, чем ожидалось, из-за «сложной» задачи — по словам кодеров — убедиться, что новая система делает то же самое, что и старая.

И это были счастливчики. Банк Содружества Австралии попытался переписать основную систему на новом языке; проект обошелся вдвое дороже, чем они ожидали, — 1 миллиард австралийских долларов. Лен Санталусия, давний эксперт по мэйнфреймам, однажды работал с финансовым учреждением DTCC, изучая возможность перевода их COBOL на Java.

«У них, вероятно, около семидесяти пяти миллионов строк кода COBOL, — рассказывает он мне, — и они выяснили, что это обойдется им так дорого, что на восстановление уйдет, возможно, пара жизней. Это было просто смешно. А у них денег больше, чем у Бога».

Так что банки пожимают плечами и думают: «К черту. Если ничего не сломалось, не надо чинить. Пусть работает старый COBOL. „Эти программы работали изо дня в день, из дня в день, 24 часа в сутки, 7 дней в неделю в течение 30 и 40 лет. Так зачем нам их менять?“ — говорит Томас.

А пока банки просто стараются поощрять как можно больше людей изучать COBOL. „У вас будет работа на всю жизнь“, — смеется Томас.

Проблема для банков, однако, заключается в том, что, хотя их COBOL может быть стабильным, ожидания их клиентов не стабильны. Как вы, наверное, понимаете, картина финансовой индустрии быстро меняется. Транзакции все чаще осуществляются через приложения типа Venmo, которые позволяют людям переводить деньги друзьям; сервисы вроде Coinbase позволяют людям покупать криптовалюту; появляются новые приложения для кредитования, такие как Tala и Upstart. Люди теперь ожидают все более простых способов управления своими деньгами с помощью программного обеспечения.

Именно здесь банкам, которые должны унаследовать преимущество в перемещении денег, приходится сложнее. Им трудно быстро внедрять новые интересные функции, потому что им приходится иметь дело со своими „технологическими наборами“ юрского периода, отмечает Денис Райан, бывший банкир, который сейчас является директором по развитию Showoff, ирландской фирмы, создающей финтех-приложения. Эти старые бэкенды, работающие на COBOL, хранят данные разрозненными кусками — »у них много барьеров", — отмечает он. И, конечно, опасно слишком много переписывать старый код: «У вас есть проблемы с ресурсами, технические проблемы, операционные проблемы, проблемы с рисками».

Но стартап может делать все, что захочет. Здесь нет старых систем. Они находятся в ситуации, которую программисты любовно называют «зеленым полем». Вместо того чтобы покупать мейнфреймы за сотни тысяч долларов для хранения и обработки данных, они просто арендуют место в «облачной» системе, как у Amazon. Они могут писать код на новых языках, поэтому они могут нанять практически любого молодого студента, желающего изучать компьютерные науки. И им даже не нужно создавать все самим: Когда Showoff разрабатывает новое финтех-приложение, он может использовать существующий сервис для решения сложной задачи — например, использовать Stripe для обработки платежей — вместо того, чтобы пытаться создать это программное обеспечение самостоятельно.

«Это снимает с команды довольно много трудностей, связанных с операционной деятельностью, так что они могут масштабироваться, — отмечает он, — и работать над продуктом, не беспокоясь об инфраструктуре». Другими словами, им не нужно беспокоиться о COBOL.

Проблема банков заключается в том, что, хотя их COBOL остается стабильным, ожидания их клиентов таковыми не являются.

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

В 1960 году комитет, разрабатывавший COBOL, работал всего один год, но один из его членов, руководитель RCA Говард Бромберг, беспокоился, что они продвигаются слишком медленно. По его мнению, если не выпустить COBOL быстрее, деловой мир пойдет дальше! Производители компьютеров выпустят свои собственные уникальные языки, и деловое программирование превратится в вавилонское смешение языков.

Поэтому Бромберг решил «в порыве гнева» послать сообщение главе комитета COBOL Чарли Филлипсу, который работал в Министерстве обороны. Бромберг купил надгробие, которое было увенчано гранитной иконой «жертвенного агнца», и на нем было высечено слово «COBOL». («Что это за имя?» — спросил его изготовитель надгробия).

Затем Бромберг положил надгробие в ящик и отправил его Филлипсу в Пентагон. «По всей отрасли ходили слухи, что COBOL умирает», — вспоминала позже Грейс Хоппер.

60 лет спустя надгробие стоит в Музее компьютерной истории в Маунтин-Вью, Калифорния, а COBOL по-прежнему управляет миром.




image

Вакансии
НПП ИТЭЛМА всегда рада молодым специалистам, выпускникам автомобильных, технических вузов, а также физико-математических факультетов любых других высших учебных заведений.

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

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

Если вам интересно попробовать свои силы в решении тех задач, которые у нас есть, пишите в личку.



О компании ИТЭЛМА
Мы большая компания-разработчик automotive компонентов. В компании трудится около 2500 сотрудников, в том числе 650 инженеров.

Мы, пожалуй, самый сильный в России центр компетенций по разработке автомобильной электроники. Сейчас активно растем и открыли много вакансий (порядка 30, в том числе в регионах), таких как инженер-программист, инженер-конструктор, ведущий инженер-разработчик (DSP-программист) и др.

У нас много интересных задач от автопроизводителей и концернов, двигающих индустрию. Если хотите расти, как специалист, и учиться у лучших, будем рады видеть вас в нашей команде. Также мы готовы делиться экспертизой, самым важным что происходит в automotive. Задавайте нам любые вопросы, ответим, пообсуждаем.

Комментарии (72)


  1. vis_inet
    13.09.2021 22:48

    Спасибо, очень познавательно.


  1. Sergunka
    13.09.2021 23:19
    +1

    Особенно приятно было почитать про перфокарты и вспомнить юность. Я так же написал свою первую программу в 1978 году и она уместилась на одной перфокарте так как советский перфоратор располагал литеры не поперек перфокарты, а вдоль, что позволяло разместить в разы больше информации на одной карте.
    Так же в то время был часто задаваемый вопрос среди студентов программистов - у тебя есть "крошка"?


    1. sshikov
      14.09.2021 16:51

      >что позволяло разместить в разы больше информации на одной карте.
      Агащазблин. Особенно если учесть, что одна дырка — один бит, а число дырок не меняется, если карту развернуть на 90 градусов :)


      1. kuza2000
        14.09.2021 18:29

        Вот я тоже не понял, как можно уместить там больше, чем один символ в колонке. Может, они просто писали на них?)))

        Перфокарты я застал на практике, когда учился. ЕС-ЭВМ.


        1. sshikov
          14.09.2021 18:35

          Ну, там колонка 12 дырок — ну и бит. И 80 в длину. Это максимальная емкость, как ты ни крути. Строго говоря, символов по 8 бит естественно в теории разместить можно больше — в полтора раза, если применить другую кодировку, но больше чем 80х12 бит информации все равно нельзя (и порядок записи на это конечно никак не влияет).


          1. Sergunka
            14.09.2021 19:57
            +1

            Технически в моем посте речь шла не о кодировке, а машинных кодах для Минска-32. Насколько мне память не изменяет длина слова там 37 бит т.е. в одну строку можно было залить два слова. Но вроде как для простоты писали одна строка одно слово. Задачка как сейчас помню вроде была вычислительная в цикле т.е. вполне помещалась на одной перфокарте.

            У IBM вполне возможно был такой подход в ранних реализациях до языков программирования. В той конфигурации когда пришли ЕС ЭВМ уже был классический стандарт 80 символов на перфокарту. Я вообще сомневаюсь, что дамп памяти можно было набить и тем более грузить через перфосчитыватель в стандартном режиме. Обычно все ж если надо было подгрузить PSW пользовались тумблерами панели.

            Если коротко, то когда перешли на ЕС ЭВМ количество перфокарт резко возросло так как на одной перфокарте можно было поместить 80 символов. В советском варианте исходя из предположения один символ 8 бит можно было последовательно набить 80х11 = 880 т.е. 110 символов если писать на том же Алгол-60.


            1. sshikov
              14.09.2021 20:23
              +1

              Не, ну возможно вы имели в виду что-то другое, но у вас неспециально получилось так, что если кодировать информацию по строкам — то на перфокарту помещается больше, чем если кодировать по столбцам (или наоборот). Такой смысл довольно явственно читается в вашем комменте. Что конечно же не так — потому что дырок-то одинаковое количество, как их ни считай.

              А то что можно было бинарные коды считывать и записывать — да, конечно, без сомнения. Скомпилированные в частности. По сути я читал на ЕС перфокарты от М-222, которые пробивались по строкам, потому что у М-222 тоже было кажись 48 битовое слово.


              1. Sergunka
                15.09.2021 00:11
                +2

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


                1. sshikov
                  15.09.2021 07:19
                  +1

                  Понимаю)


  1. Redrik05
    13.09.2021 23:28
    +3

    Читал про Томаса пару лет назад


    1. Hivemaster
      14.09.2021 09:44
      +7

      Уже было на Хабре в прошлом году https://habr.com/ru/post/532554


      1. Itelma Автор
        14.09.2021 15:25

        Наш недосмотр.
        Жалко удалять пост, тут уже написали интересные комментарии.
        Если админы попросят скрыть — скроем дубль.


  1. kareon
    14.09.2021 00:39
    +16

    Читал когда-то "Глубину в небе" Винджа, где прекрасно описана специальность "компьютерного археолога". А ведь это книга еще конца XX века...

    Не могу удержаться от цитирования:

    Фам Нювен несколько лет провел, обучаясь программировать и исследовать. Программирование восходило к началу времен. Как та навозная куча за замком отца. Когда ее промыло ручьем на десять метров в глубь, обнаружились искореженные корпуса машин – летающих машин, как говорили крестьяне, еще от тех великих дней колонизации Канберры. Но та навозная куча была чистой и свежей по сравнению с тем, что лежало в локальной сети «Репризы». Были программы, написанные пять тысяч лет назад, когда человечество еще не покинуло Землю. И самое чудесное (самое ужасное, как говорила Сура) было то, что, в отличие от бесполезных обломков прошлого Канберры, эти программы все еще работали! И через миллион миллионов запутанных нитей наследования многие из старейших программ все еще выполнялись во внутренностях системы Кенг Хо. 


    1. sim2q
      16.09.2021 02:52

      Тогда стоит всю главу привести как они разворачивали архив на Земле и прекрасный пример закладки в firmware (спойлерить не буду:))


  1. ya_ne_znau
    14.09.2021 01:04
    +5

    Кто эти два человека, ответившие, что написали много программ? Отзовитесь!


    1. tchkEn
      14.09.2021 07:03

      Скорее всего сотрудники банков, которые до сих пор используют старые АБС. Им постоянно приходится создавать новые дополнения чтобы все соответствовало меняющимся условиям


  1. hw_store
    14.09.2021 01:45
    +25

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


  1. Raimon
    14.09.2021 03:20
    +15

    Много обобщений на основе одного человека из одного банка... из пальца высосанные обобщения на всю страну. Ну такое.

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


    1. Nubus
      14.09.2021 04:41

      В банковской сфере есть и другая проблема, нельзя просто взять и вырубить старый рабочий модуль. Нужно создавать дупликат, и переключение проводить live. А если учесть что формат данных который понимает COBOL не подходит. Придется создать с 0 систему выполняющую те-же функции, как-то конвертировать старые БД в новый формат, протестировать и не дай бог у вас ошибка типа Y2K, банк не сможет просто так отозвать переводы на неправильныe проценты, даже через суд.


      1. SpiderEkb
        14.09.2021 09:19
        +4

        В банковской сфере есть и другая проблема, нельзя просто взять и вырубить старый рабочий модуль. Нужно создавать дупликат, и переключение проводить live.

        Да, это так. А еще нужно убедиться что новый модуль работает не хуже - не медленнее, потребляет не больше ресурсов, не конфликтует с остальными 100500 параллельно работающими процессами...

        А если учесть что формат данных который понимает COBOL не подходит. Придется создать с 0 систему выполняющую те-же функции, как-то конвертировать старые БД в новый формат

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

        Я работаю в банке. Банк работает на платформе IBM i (бывшая AS/400). Это не мейнфреймы, IBM позиционируют ее как middleware. В мире достаточно популярна в финтехе, банках, страховых компаниях, госстурктурах. Система удивительно цельная. Там сразу интегрирована и БД (DB2) и компиляторы нескольких языков (COBOL, RPG, CL, C/C++), поддержка SQL, в том числе и интерактивная (выполнение отдельных SQL запросов из командной строки). И там доступ к БД возможен из любого языка. Более того, двумя способами - вставкой в код SQL запросов (позволяющих использовать как на вход, так и на выход используемые в программе переменные), так и прямым, noSQL обращением к таблицам и индексам.

        Вместо COBOL IBM продвигает RPG. Тоже очень старый язык, ориентированный на работу с БД и коммерческие вычисления (типы данных с фиксированной точкой, много форматов даты и времени и функций работы с ними и т.п.). Но этот язык живой и развивающийся - поменялся синтаксис - от изначального FIXED (где каждая буковка должна быть на свей позиции - наследие эпохи когда программы писались на специальных бланках) с линейным кодом перешли к нормальному процедурному FREE.

        Да, это легаси все равно. В том смысле что здесь нет модных фреймворков. Точнее, они есть, но на более высоких слоях. А на нижнем, core, слое, где работает АБС, там легаси. Быстрый, эффективный до предела, надежный как скала легаси. Потому что цена ошибки - не дизлайк от пользователя, а огромные репутационные потери и штрафы со многими нулями от регулятора "на ненадлежащее исполнение обязательств перед клиентами". Т.е. код, работающий на core уровне является mission critical. И там используются только сверхнадежные решения.

        Естественно, что на фронтах и промежуточных слоях используются современные стеки технологий. Но там нет бизнес-логики, они не имеют доступа к данным. Они только формируют запросы к ядру и представляют пользователю ответы.


        1. ignat99
          14.09.2021 13:32
          +1

          То есть исходников этого кода ни кто почти не видел, и там, вероятно, есть возможности запуска злономеренного кода?


          1. Aleksandr-JS-Developer
            14.09.2021 19:39
            +1

            да, только код на COBOL придется писать


            1. Wan-Derer
              29.09.2021 09:07

              И компилировать на этой же машине :)


          1. Pacha32
            14.09.2021 20:45

            возможности, наверняка, есть, а вот со специалистами, кто мог бы этот код написать, вероятно, все сложно.


          1. SpiderEkb
            15.09.2021 11:42
            +1

            Речь про код ядра?

            Там, к счастью, не COBOL, а RPG. И исходники все выкуплены и залиты в наш гит.

            И мы (и я в том числе) их постоянно дорабатываем (оптимизация, доработки по изменениям и новым бизнес требованиям).

            Фактически у нас несколько уровней. Легаси только на уровне core. Там mission-critical, более 90% всей бизнес-логики банка (а это очень сильно не только счета-проводки, там еще до черта всего) и требуется предельная эффективность.

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

            Каких-то радикальных нерешаемых проблем с теми, кто все это дело разрабатывает у нас нет и в обозримом будущем не предвидится.


            1. ignat99
              15.09.2021 13:45

              Так ведь банки все разные. Код у разных манфреймов разный.

              Видел я этот манфрейм (сразу после установки) в ЦБ РФ в 1996 году в Клиринговой палате.

              А у вас в Альфа-Банке АБС Equation под IBM PowerS на платформе IBM i (AS/400). Языки разработки — RPG, C/C++, CL, SQL


              1. SpiderEkb
                17.09.2021 16:44
                +1

                Ну я как бы знаю что у нас :-) И именно в этом слое (IBM i/RPG) работаю

                IBM i ими самими позиционируется как middleware. Мейнфреймы у них считаются IBM z

                COBOL у нас не используется, но поддерживается в рамках ILE (т.е. компилятор есть в системе - хочешь, пиши). Просто функционально RPG не хуже, но писать на нем проще в плане синтаксиса.

                Тут правильно сказали - проблема не в коболе, а в платформе на которой он работает. Человек, выучивший синтаксис кобола, но не понимающий особенности и тонкости платформы, ничего путнего на нем не напишет сложнее Hello World.

                И наоборот, знающий платформу сможет писать под нее на любом доступном на ней языке.


  1. MinimumLaw
    14.09.2021 07:22

    Обнадеживает. Дает надежду на то, что не смотря на взрывной рост популярности "безопасных" языков... Людям хорошо знающим "небезопасные" работы хватит и до, и на пенсии. И на масло к хлебу всегда заработать можно будет. А уж без икры можно и пережить.


    1. inferrna
      14.09.2021 11:34
      +1

      Хм, а разве это не очевидно? Как раз те сферы, где минимум творчества и максимум легаси, где от скуки дохнут даже мухи - вроде кобола, 1С, прочего асап, вот там как раз с покушать проблем не возникает. А молодые и шутливые часто перебиваются с хлеба на воду со своими интересными, но (пока) не приносящими прибыли проектами/языками/направлениями.


      1. WASD1
        15.09.2021 15:11

        Сравнивая ЗП в вакансиях / резюме скажем 1С vs Go такого не скажешь.

        ПС
        Хотя да я помню в 2010 году ЗП в соседнем отделе "миддл ABAP разработчика" около 300к.


  1. GerrAlt
    14.09.2021 08:24

    старая система позволяла ввести только 40 символов — и она не позволяла использовать дефисы, поэтому нельзя было использовать краткую форму, например, «Пн-Ср», чтобы показать, что вы свободны с понедельника по среду.

    Интересно чем плохо было бы использовать Пн:Ср, или даже [Пн1000, Пн1630)


  1. v1000
    14.09.2021 09:34
    +6

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

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


    1. sshikov
      14.09.2021 16:53

      Просто никто не хочет. Ниша — она и есть ниша, если эта работа закончится — другую на коболе найти не просто. А так кобол — язык как язык. Если бы приперло — я бы взялся на нем писать не долго думая. Он многословный, очень многословный, но совсем даже не сложный.


  1. K10
    14.09.2021 09:50
    +8

    Лучше бы про сам язык рассказали.


  1. tangro
    14.09.2021 10:19
    +9

    Так классические банки вымрут, да и всё. Ну, вернее, не вымрут, а "ужмутся" до минимального бекенд-функционала: сделать перевод, выдать кредит. А "фронтенд" банков будут делать молодые стартапы, на современных технологиях, со всякими свистелками и феерверками. Вот как типа Монобанк в Украине: на фронте модное мобильное приложение, на беке - какой-то старый банк, который даже не каждый и вспомнит, как называется. И вот в том старом банке, всякий Кобол и Джава могут бегать ещё 1000 лет для операций перевода денег, пока на фронте будут менятся мобильные платформы, веб-фреймворки и прочий тлен.


    1. AADogov
      14.09.2021 10:29
      +2

      Так ведь про это и статья, Кто будет обслуживать этот бекенд.


      1. tangro
        14.09.2021 12:35
        -1

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


  1. eldog
    14.09.2021 10:33
    +1

    Работаю в банке. Да, у нас есть майнфреймы и программы на кобол. И новые приложения ходят по сетке к ним чего-то от них получают. И вот теперь есть мысль увести часть инфраструктуры в облако, но с кусками, зависящими от майнфреймов это произойдёт... возможно, никогда. Откоадывается, и, предполагаю, будет откладываться на неопределённый срок.


    1. K10
      14.09.2021 10:57
      +1

      А в чем проблема постепенно переписать этот Кобол на современный стек?

      Зачем тянуть это старье?


      1. eldog
        14.09.2021 11:00
        +1

        Ну как в чём? В том, о чём написано в статье и комментариях. В человеко-десятилетиях работы. В десятках (сотнях?) миллионов денег. В необходимости поддерживать непрерывно работающий сервис.


        1. K10
          14.09.2021 12:05

          Вот интересно, эти программы до сих пор грузятся с магнитной ленты?


          1. eldog
            14.09.2021 12:08

            К счастью, я не знаю. От меня запрос в сеть улетает, мне ответ прилетает.


          1. ehabarov
            14.09.2021 12:49
            +2

            Нет конечно. :) В качестве "первичного носителя" магнитная лента не используется очень давно (точно более 20 лет). Используются внешние СХД, сейчас все чаще "Full Flash".

            При этом, магнитная лента вполне себе используется и сейчас как второй/третий уровень для хранения резервных копий и миграции "холодных" данных. Емкость современных магнитных картриджей очень неплоха, 20ТБ сырой емкости на картридж размером 25ммx110ммx125мм.


            1. ignat99
              14.09.2021 13:37
              +1

              Как там с четвёртым уровнем распечатки на бумаге операционного дня?

              Предусматривают ли пятый уровень (как в будиских тибетских монастырях) хранение каменных штампов готовых для печати на ткани с исходниками COBOL и другими важными данными?


              1. ehabarov
                14.09.2021 13:57
                +2

                Насколько я помню, финансовые организации, в соответствии с законодательством стран, где они работают, обязаны хранить исторические данные очень много (десятки) лет. При этом, по правилам, нужно хранить несколько копий, географически удаленно друг на друга. Т.е. "потерять" эти данные финансовая организация не имеет права ни в коем случае.

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

                Практики, когда важные данные выгружаются на ленту (несколько копий) и развозятся по разным изолированным складам/хранилищам точно существуют и по сей день. Хранить магнитную ленту все таки проще и дешевле чем, например, жесткие диски сравнимого объема.


                1. ignat99
                  14.09.2021 14:07

                  Магнитные носители деградируют. Это же просто домены магнитные. Раз в несколько лет нужно их копировать на новые. IMHO

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

                  Банки должны хранить опер. дни 30 лет (если не путаю), архив УВД и администрации - 70 лет.

                  В тех же тибетских будистких монастырях. Cкрижали в библиотеке монастыря Гандан это только видимая всем часть архива ... а носители теже и для невидимой части :-) IMHO


                  1. ehabarov
                    14.09.2021 14:27
                    +2

                    Согласно спецификации IBM на картриджи 3592, они должны хранить данные порядка 30 лет. В самом документе, в разных местах написано "более 30 лет" и "до 30 лет". Сами картриджи разных моделей вышли уже после 2000г., поэтому эти данные приведены по тестам "ускоренного старения", так как даже самые старые картриджи из этой линейки "доживут" до указанного значения через 12 лет (2033 г.).

                    Ссылка на документ со спецификацией: https://www.ibm.com/downloads/cas/GLDJAXRP


                    1. ignat99
                      14.09.2021 16:43

                      Это при соблюдении условий хранения. То есть чистый сухой архив с индустриальным диапазоном температур.

                      А что если в воду попадут, температура будет выше 80 градусов или обледенение, насекомые решат там пожить и т.д.

                      Про электромагнитный импульс или механические повреждения (помнётся лента и т.д.) не говорим.

                      IMHO бумага\пергамент гораздо надёжнее.


                      1. ehabarov
                        14.09.2021 17:01
                        +1

                        Конечно, условия хранения должны быть соблюдены и это справедливо для любого носителя данных.

                        Для бумаги/пергамента тоже нужны определенные условия хранения, просто "диапазон" другой. Бумага тоже боится огня и влажности, ее могут "погрызть", используемые компоненты для печати могут выцвести, и т.п.

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


                      1. ignat99
                        14.09.2021 17:09

                        Книжная библиотека самое оно. Например чтоб распечатать всё ядро одной из первых версий Linux потребовалась примерно 400 страничная книга крупного формата. IMHO


  1. pehat
    14.09.2021 10:41
    +23

    Программирование на COBOL - как подростковый секс: все про него говорят, никто его не пробовал. При этом я ни разу не видел ответов на возникающие в меня вопросы:

    • почему до сих пор никто не написал транспилятор? Я не верю, что для написания полностью покрытого тестами транспилятора с древнего языка для более примитивных машин нужно невероятное количество людей с тайным знанием, тем более, что язык стандартизирован. Учитывая дату создания языка можно смело предположить, что объём его компилятора настолько мал, что даже при отсутствии стандарта его можно было бы дизассемблировать вручную. Учитывая то, что так нужны программисты на COBOL, можно предположить, что все его наследие до сих пор существует в исходных кодах.

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

    • Миллиарды строк кода на COBOL? Серьезно, MLoC до сих пор кем-то воспринимается как метрика сложности? Даже если вы не видели программу на COBOL, прочитайте хотя бы вступление в википедии, которое говорит, что «Кобол обычно критикуется за многословность и громоздкость, поскольку одной из целей создателей языка было максимально приблизить конструкции к английскому языку».

    • Утверждения, что COBOL настолько заточен под финансовые операции, что некоторые его особенности вроде деления кода на специальные секции или хранения денег в BCD не переносятся на современные языки, вообще не выдерживает никакой критики.

    • Ну и конечно, с большой долей вероятности российского программиста тупо не допустят к переписыванию этого древнего куска кода, потому что мало ли каких жучков эти хакеры там понаоставляют.

    В общем, очередная статья о том, что 75% транзакций в мире исполняются древним чёрным монолитом, который во всем мире могут починить полтора седовласых колдуна, причём делать это надо в акробатических условиях ручной перезаписи магнитной ленты на бешено высоконагруженном суперкомпьютере IBM/360. Хотелось бы обсудить вкус устриц с теми, кто их все-таки ел, а не читать про очередного деда, который уже сорок лет рассказывает американским журналистам про то, как же здорово он себе обеспечил job security.


    1. ehabarov
      14.09.2021 11:43
      +6

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

      Далее, программы на COBOL существуют не в вакууме, обычно они исполняются в операционной системе и тесно связаны с существующими там данными (последовательные наборы данных, индексированные наборы данных), смежным ПО: СУБД (DB2, IMS, ADABAS и другие), обмен сообщениями (IBM MQ и др.), управление транзакциями (IBM CICS) и так далее. Соотвественно и COBOL-программист нужен не абстрактный (знающий только сам язык), а тот, кто на достаточном уровне знает все "окружение" в котором эта программа будет исполняться.

      Поэтому, с моей точки зрения, сложность не столько в малом количестве людей со знанием языка COBOL, а в том, что сложная система постепенно превращается в "черный ящик", потому что ушли те, кто знает как эта система устроена. А это уже вопрос к бизнесу. Процесс передачи знаний, их актуальности, проверка наличия в команде сопровождения нужных компетенций и восстановление этих компетенций - это большая и сложная задача, которая требует времени и финансирования. Абсолютно аналогичным образом любая новая система созданная сегодня на любых модных/современных технологиях может через 10-20-30 лет превратиться в такой же "волшебный черный ящик", если не останется специалистов, понимающих как она устроена.

      Про "мейнфреймы", а именно линейку серверов IBM Z.

      IBM регулярно обновляет и сами сервера и весь стек системного и прикладного ПО для них. Официально приобрести поддержку можно только на несколько последних поколений "железа" и ПО. Эксплуатировать и "железо" и ПО без поддержки можно, но на собственный страх и риск. Поэтому чаще в эксплуатации находятся более-менее актуальные версии и "железа" и ПО. Т.е. вполне нормальна ситуация, когда COBOL-программы, разработанные 10-20-30 лет назад, компилируются актуальной версией компилятора COBOL, линкуются с актуальными версиями библиотек смежного ПО и после тестирования продолжают эксплуатироваться. Т.е. сам комплекс программ "старый", но он откомпилирован и работает на вполне современном оборудовании и ПО и может показывать очень хорошую производительность.

      Насчет непрерывности. Правильно построенный кластер на основе систем z/OS позволяет поднимать уровень системного и прикладного ПО "на ходу", без простоя. Понятное дело, что происходит это поочерёдно на каждом из "узлов" кластера и отдельные узлы какое-то время будут поочередно недоступны, но перерыва в обработке транзакций не будет. Аналогично можно и сервера целиком заменить поочередно.


      1. ignat99
        14.09.2021 13:44

        30 лет это не проблема. Проблема с программами в 60 лет, которые уже 30 лет разрабатывались когда те времена 30 лет настали. Как раз тогда персоналки появились.

        А еще скоро Вторая солнечная вспышка, пора уже все важные программы на бумаге распечатать.


      1. AADogov
        14.09.2021 14:54

        Абсолютно аналогичным образом любая новая система созданная сегодня на любых модных/современных технологиях может через 10-20-30 лет превратиться в такой же "волшебный черный ящик", если не останется специалистов, понимающих как она устроена.

        Сейчас участвую в проекте по в написанию ТЗ для одной очень сложной промышленной системы. Заказчики потребуют что бы мы добавили требование о том что срок службы этой системы должен составлять минимум 60 лет. На мой вопрос кто будет через 60 лет в 2080 году с этим старьем работать никто не смог ответить.

        На моё предложение что для поддержания "актуальности" системы следует на этапе ТЗ определить регулярную модернизацию системы каждые 10 -15 лет. Мне сказали что денег на это не закладывали.


        1. WASD1
          15.09.2021 15:18

          Ну если заказчики таки хотят 60 лет - таки пишите.
          А там или шах или ишак (по факту сами придут к регулярной модернизации через 10-15 лет, только немного пожевав кактус).


    1. amarao
      14.09.2021 11:46
      +6

      Где-то есть уральный вагонный колёсоточильный завод со станками 1959 года.

      Где-то есть оклахомский деньгокладильный районный банк с кодом 1959 года.

      Это их проблемы. Когда их кобол таки скопытится (потому что последний человек, способный думать в парадигме кобола помрёт), то банк обнаружит, что вагоноточильный завод не может так больше жить. И просто закроет подразделение. Данные выгрузят, а обработкой "миллиарда транзакций за 8 часов" будет заниматься небольшой кластер (для надёжности) из нескольких обычных серверов СУБД, которые вполне могут себе позволить выдать 34кTPS на простейшие insert'ы в правильном порядке.


      1. pehat
        14.09.2021 17:34

        Нестыковочка. Если данные так просто можно выгрузить и переложить на обычные сервера, что мешает это сделать прямо сейчас?


        1. zaiats_2k
          14.09.2021 19:03
          +3

          Никто не хочет брать на себя ответственность.


        1. EragonRussia
          14.09.2021 21:04
          +1

          Спасибо конечно, но речь не про изучение ЯПа, а про развитие навыка на реальных проектах. Junior — это не парень с улицы, а неопытный, но всё же специалист.


    1. Alexwoodmaker
      14.09.2021 13:35
      +2

      Браво! Отличный комент по теме. Попутно стоит отметить, что сверстник COBOLа не менее древний FORTRAN за эти полвека пережил столько ренесансов, которые коболистам и не снились. Как раз в случае FORTRAN написанные библиотеки численных методов оказались настолько удачными и востребованными, что вошли в другие языки. 90% задач, решаемых на суперкомпьютерах, написаны на различных версиях правнуков FORTRAN-66.


    1. usa_habro_user
      14.09.2021 20:41
      +5

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

      Кстати, случай был любопытный:

      Я приехал в Штаты в 1997 году, как раз на момент начала истерии по "проблеме 2000 года", и резкому надуванию пресловутого "IT bubble". Тогда буквально каждый месяц, по нескольку раз, проводились огромные job fairs (притом в шикарных отелях, с отличной бесплатной закуской и выпивкой etc. & so on). Я, любопытства ради, ходил на особо крупные мероприятия; один раз пошел с приятелем-программистом, приехавшим лет на 5 ранее меня, и уже успевшим получить GC, и перевезти родителей. Он взял с собой и папу пенсионного возраста, который работал программистом на COBOL-е в СССР (потому папа, собственно, и "напросился"). Английский у папы был так себе, "программистско-бытовой", на уровне "русского магазина". Приятель (он был спецом по "новомодной" тогда Java) хотел "пошоппаться" на какую-нибудь могучую финансово контору и зарплату на $100K+, но job offer, притом прямо на job fair, получил тогда не он, а... его папа, увидевший знакомое слово и присевший побеседовать для улучшения английского :) И папа, как припоминаю, был впоследствии очень доволен. Правда, с этими людьми я уже очень долгое время не общаюсь: они переехали в другой штат давным-давно, а папа, скорее всего, давно на американской пенсии (если жив еще, конечно). Это был единственный раз, когда я видел "живого" программиста на COBOL.

      P.S. Сорри за длинную историю, убрал под спойлер.


    1. danfe
      15.09.2021 05:53

      почему до сих пор никто не написал транспилятор?
      Есть вполне живой (и продвинутый, судя по being used in commercial settings) GnuCOBOL, который как раз через транспиляцию в C и работает. При этом пятистрочный «hello world» превращается в сто с лишним строк кода на C, без учета комментариев и вайтспейса. Понятно, что там много стартового бойлерплейта, было бы интереснее посмотреть результат на какой-нибудь реальной программе, но, боюсь, поддерживать такой код будет еще труднее, чем оригинальный.


  1. kaljan
    14.09.2021 12:51

    Это уже традиция - раз в 8 лет на ИТ-сайтах начинают всплывать статьи про КОБОЛ и как нам нем все держится. Потом как ценят разрабов на КОБОЛ-е и что они могут зашибать нереальное бабло, и что они потихоньку мрут, да


    1. olku
      14.09.2021 20:38
      +1

      Таких 2 тысячи на https://community.openmainframeproject.org/c/calling-all-cobol-programmers/15 зарегались в надежде грести и периодически забегают в группу на ФБ. В прошлом году пробовал найти помимо основной работы практику в компаниях Германии и Швейцарии в стеке z/OS COBOL. Разослал более 20 резюме релевантным, в основном страховым и банкам, с проектами, библиотеками для 3 диалектов, статьями, CI/CD и этими вашими микросервисами в Докерах. Ага.


  1. duke_alba
    14.09.2021 13:43
    +3

    Я брал на работу молодого парня по Кобол. В качестве бонуса обещал ему, что через 5 лет он сможет выбирать страну, в которую хочет уехать. Так и вышло. Он давно в Нидерландах и по прежнему пишет на Коболе :-)

    PS Ну а пока спецы по Фортран-4 не очень востребованы, пишу на C++ и Go :-)


    1. bogolt
      14.09.2021 19:46
      +1

      А еще в Нидерландах на перле можно неплохо уехать, но статья же не про это?


    1. EragonRussia
      14.09.2021 20:47

      Какие вообще перспективы у джуна на коболе? С учётом специфики области ощущение, что ниже сеньорского уровня к работе не пустят, а учиться и расти банально негде.


      1. duke_alba
        15.09.2021 09:56

        Amdocs, Ensemble, Вымпелком. Вот на этом всём он из джуна стал специалистом по Коболу. Так что места до сих пор такие есть :-)


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


  1. RarogCmex
    14.09.2021 21:24

    Таки что с вакансиями? Я вот знаю, что если выучу условный Swift, то без работы не останусь. Если выучу Haskell, то уже намного сложнее, но всё равно работу найти можно.

    А вот если я засяду учить Cobol IBM/z, то получится ли у меня устроиться на работу?


  1. kasthack_phoenix
    14.09.2021 22:44
    +4

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

    HH показывает 5(!) вакансий на всю Россию, LinkedIn находит двадцать вакансий в Берлине с упоминанием этого яызка, но только одна из них — позиция разработчика. В Лондоне с его огромной банковской индустрией нужно аж 3(!) cobol-разработчика. Для сравнения, Java-разработчиков нужно пять с половиной тысяч.

    3 человека поддерживают весь существующий код? Звучит подозрительно.

    Попробуем зайти с другой стороны: предположим, что Cobol почему-то потерял популярность, оставаясь востребованным в индустрии. Разработчики существовали в каком-то периоде в прошлом. Сколько кода реально могло дожить до нашего времени и какую долю от работающего он может составлять?

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

    • Даже в 2002-м году, когда компьютеров было уже относительно много, а Cobol уже не был популярен, в США было всего 600k разработчиков против 3.9m в 2016-м.

    • Если же взглянуть на страны победнее, то на время расцвета Cobol там программистов вообще можно было пересчитать по пальцам: например, в Индии в 1985-м было семь тысяч разработчиков. Сейчас их около четырёх миллионов.

    Семь тысяч разработчиков на всю страну, из которых не все пишут на Cobol, согласно этим прохладным историям, за 20-30 лет(с 1969-го, когда Cobol был выпущен по 1990-2000-й, когда с него разработчики окончательно сбежали на Java / C / C++) должны были написать сравнимое количество кода с миллионами разработчиков в 21-м веке. Реалистичности добавляет и то, что на начало этого периода код писался и отлаживался на перфокартах, что не сильно способствовало продуктивности по сравнению с разработкой в интерактивной IDE.