Большая разработка — дело коллективное, и это хорошо. Что бы ни взбесило тебя в условных Go или JS, точно найдется сотня-другая разрабов с такой же болью. Преодолевать ее вместе легче — и когда ломаешь голову над рабочей задачей, и когда просто собираешься с товарищами поныть, как все плохо.
Но почти в каждой компании в этот момент найдется человек со взглядом на сотню ярдов в пустоту, который будет вспоминать, как 10 лет назад в своем НИИ ШМИИ ИПИАН «Меловой период» его заставляли переписывать гигантскую систему с Лиспа на Си. И у всех в этот момент пробежит холодок по спине — потому что никто не застрахован от рефакторинга чего-нибудь древнего и страшного.
Слушать про эти языки, похожие на рыб-монстров из океанских впадин, — все равно что смотреть ужастики. Любопытно, волнующе — но не дай бог оказаться на месте рассказчика.
Здесь мы собрали вместе людей, которые писали на Prolog, Forth, ABAP и X++, и дали им выговориться.
Что это за языки
Вагиф, Prolog
— В незапамятные времена — с 1985 по 1990 год — я пользовался языком Prolog.
Я учился в МИЭМе (ныне — часть ВШЭ), и ходил на группу прикладной логики. Там заинтересовался символьными вычислениями, попробовал Lisp, но Prolog особенно привлек меня своей декларативностью — описываешь правила предметной области, а дальше все идет как бы само.
Тогда был большой интерес к искусственному интеллекту, все говорили о японском проекте компьютеров пятого поколения, которые должны были решать задачи научных вычислений и сверхбольших баз знаний. Помню еще старались отделять базы данных от баз знаний — мол, «что ты мне базу данных подсовываешь, dBase какой-то, мы знания обрабатываем!»
Тогда не было осознания, насколько огромных вычислительных ресурсов требуют такие задачи — а главное, что к ним не всегда применимы обычные логические умозаключения. Казалось (мне по крайней мере), что задекларировав достаточное количество правил предметной области, получишь возможность пропускать все это через мощные компьютеры, которые тебе и диагнозы поставят, и теоремы докажут.
Тогда казалось, что мы решим все задачи.
Лиза, ABAP
— Я SAP-разработчик и пишу на ABAP. Это проприетарный язык, по синтаксису – тот же COBOL. Он используется собственно в SAP SE и компаниях, занимающихся разработкой и консалтингом для бизнес-приложений и промежуточного ПО SAP. Конкретно я пишу модули SAP ERP, их расширения и все такое.
Фил, X++
— У меня был Язык X++. Это внутренний ЯП Microsoft, который они сделали специально для своего ERP-проекта Axapta, потому что нужен был язык, в котором можно было писать SQL-запросы прямо в коде, с компайл-тайм чеками и полной поддержкой синтаксиса и фич базы. Язык, конечно, достаточно отсталый. При этом он работает на .NET, а туллинг ему сделали почти как у C#.
До работы с этим языком я был классическим джуниор-шарпистом – не умел работать с базами данных, знал только один язык программирования, и вообще плохо себе представлял, во что вляпался.
Василий, Forth
— Я начинал работать в конторе, которая занималась всякой автоматизацией на микроконтроллерах. Местные деды (в самом лучшем значении этого слова – люди зарабатывали внедрением своих разработок на заводах по всей стране) начинали кодить на древних МК, еще когда их делал Intel, и происходило все это на ассемблере. Им чем-то не угодил C, и они очень вдохновились идеей Форта. Поэтому я и угодил в разработку на этом языке.
Каково на них писать
— Лиза, ABAP: У нас просто древнейшие тулзы. Я начинала работу с платформы SAP NetWeaver, очень не хватало всех этих подсветочек и прочих свистелок из более популярных IDE, вроде той же Intellij IDEA. Пока не привыкла, казалось, что пишешь в блокноте.
Интерфейс тоже древний. Есть новые темы, но они не очень удобные, поэтому я обхожусь без них. В целом, SAP GUI – причина боли меня как маковода, но всё же одно из самых удобных мест для разработки под SAP, пусть и умирающее. Модные ребята сейчас переходят на VS Code, адекватные – на Eclipse, я до сих пор сижу в чём начинала.
Главное удобство языка — нативная поддержка SQL, хотя и было бы странно ее отсутствие.
— Фил, X++: Первое что бросилось в глаза — невероятно уродский синтаксис и кодстайл. Это было в 2015-ом, а они там на полном серьезе фигачили всякие префиксы в стиле field-db-name. X++ был во многом похож на C#, только огромного количества привычных фич просто не было, а вещи, которые в том же C# автоматизируются на раз-два, здесь приходилось топить в тоннах бойлерплейта.
Для меня было большой проблемой, что этот язык приходилось прямо учить. Вот казалось бы, фич — кот наплакал. А вот так сесть и начать кодить не вышло, приходилось тратить многие часы на чтение спецификации. На английском, конечно, который я знал достаточно плохо.
— Василий, Forth: В Форте смысл в том, что ты пишешь примитивную форт-машину и минимальный словарь для сетевого обмена, заливаешь на контроллер и все: у тебя там аналог операционки с компилятором и расширяемой стандартной библиотекой, и ты все это программируешь и дебажишь через терминал на языке высокого уровня. Динамически. Прямо на камне. На своей, лично написанной форт-машине. Вот она, видите, в стеке байтике перекладывает.
А при миграции на другую архитектуру достаточно переписать только базовый минимум. И все ваши любовно наработанные годами библиотеки («словари» в реальности Форта) остаются с вами. Можно даже сделать свой процессор на FPGA с личной системой команд и запустить на нем Форт. Некоторые пункты и по современным меркам звучат неплохо.
— Вагиф, Prolog: Хорошая иллюстрация программирования на Прологе – вычисление производной в символьном виде. Математики говорят, что, в отличие от интегрирования, дифференцировать можно научить даже лошадь. Лошадь может и можно научить, но попробуйте написать программу символьного дифференцирования на Си. На Прологе такая программа занимает столько же строк, сколько есть правил дифференцирования, т.е. укладывается в одну страницу. Это все выглядело многообещающе, и мы другом и коллегой всерьез занялись идеей написания медицинской экспертной системы на Прологе. У нас несколько лет был небольшой кабинет в институте эндокринологии – там мы писали базу знаний, собирая эти знания у местных врачей. Врачи толком не понимали, что из этого может получиться, но заражались нашим энтузиазмом и полагались на нас. Так к 1990 году родилась экспертная система «Эндокрин», приказавшая долго жить, когда ее создатели уехали работать в другую страну.
Худший опыт, который стал уроком
— Василий, Forth: Для обучения Форту нам показали пару примеров и дали в руки книгу Броуди по основам языка. Она запомнилась мне картинкой про swap — эта психотравма навсегда со мной:
Потом потребовалось написать приложение мониторинга под Винду, и почему-то так получилось, что надо писать под WinAPI — что тогда было нормально, но не на Форте.
Мне еще повезло, я писал что-то вроде простенького UI-фреймворка, а коллеги делали утилиты с графиками, кучей контролов, отображением состояния конечных автоматов. Те преимущества, которые Форт давал для разработки под embedded, не работали под десктоп. Ну или их надо было специфически готовить, и был ли бы от этого профит – неизвестно. Точно не в скорости разработки.
Кончилось все, когда мой приятель психанул, переписал за неделю свою часть на C++, а на Форте писать зарекся. Мне же дали новый ARM-контроллер, я установил нормальную IDE с дебаггером и тоже ушел писать на C++.
— Вагиф, Prolog: О причинах заката Пролога многое написано, они примерно те же, что и причины неудачи японского проекта пятого поколения. Вычислительные ресурсы переоценили, символьные вычисления переоценили.
Вместе с тем язык обладал очень интересным подходом к поиску решений по правилам, пробегаясь по множеству возможных решений вперед и назад (так называемый backtracking). К нему по-прежнему возвращаются, есть нынешние версии – думаю, в основном для исследовательских целей. Есть SWI-Prolog, я читал об использовании его для анализа человеческой речи. Есть разработанный в Австралии язык Mercury под .NET, фактически на базе Пролога. Для ранних версий дотнета (под Моно) разрабатывался язык P# – Пролог, транслируемый в C#.
Я считаю, что владение Прологом меня очень развило как разработчика, подготовило к восприятию разных парадигм программирования. То, что я сейчас работаю на F#, отчасти можно списать на это — я довольно рано осознал, что надо стремиться выходить за пределы мейнстримных языков. Тогда, даже оставаясь на них, начинаешь писать по-другому.
— Лиза, ABAP: Сложно найти язык, который решает поставленные задачи лучше, чем созданный специально для этих задач. На пафосных питонах и джаваскриптах очень геморройно работать с бухгалтерией (отчеты, формы, внутренние структуры и прочее).
Конечно, язык с очень узкой сферой применения не может тягаться с мультитулами вроде C# или Java, поэтому количество ярых фанатов ABAP стремится к нулю. Но умрет он только со смертью платформы, а платформа слишком много где используется и тесно вплетена в процессы корпораций вроде Johnson & Johnson, Mercedes-Benz и им подобных, переходить на что-то новое очень дорого и пока нецелесообразно.
Вообще, ABAP мне позволил заглянуть во внутренние процессы компаний-гигантов – пощупать, что у них и как, это интересно. Плюс опыт работы с коллегами вдвое (иногда – втрое) старше тебя или заказчиками, которые могут целиком купить твой город.
— Фил, X++: Я работал с истинными фанатами этой технологии – такие, знаете, старички, для которых вся молодежь – формошлепы, которые только либы дергать умеют. Дай им волю, они переписали бы все свои проекты на хранимки. Для меня было странно, что они так хорошо разбираются в перформансе, но при этом не могут писать нормальный код — такой, который смог бы понять обычный разраб, а не такой задрот как они. У меня неплохо получалось закрывать задачи, но я чувствовал, что учусь вещам, которые нигде не буду применять – и быстро свалил.
Заодно с тех пор зарекся работать на очень старых проектах – это камни, которые никогда не оживут.
Спасибо за помощь со статьей пацанам из Мы обречены, посмотрите их подкаст.