Comments 100
fAdd = &("{x, y| x + y}")
z = eval(fAdd,{1,2})
@0,0 say z // output: 3
Система бронирования (продажи) авиабилетов, созданная еще в СССР, работала на неком «большом компьютере». Не мейнфрейм, но его младший брат.
Техника эта выходила из строя… В СССР ее больше не производили, а заграничную покупать было слишком дорого (это же техника класса — для поддержки старых систем, дешевле она с годами не становится).
Написали эмулятор. На обычном персональном комьпютере (мощном, надо полагать) эмулировали старое железо.
Написать эмулятор оказалось проще, чем переписать софт бронирования авиабилетов.
Собственно мы и сейчас подобные вещи наблюдаем — VDS/VPS/Docker…
Потом его, все же — переписали.
Но далеко не сразу.
Он несколько лет успешно жил на эмуляторе.
До сих пор выпускается среда Дельфи.
Да, она сменяла пару раз владельцев.
Да, она растеряла былую популярность.
Да, она на фоне JS, PHP — почти никакое количество программистов.
Но почему мертвой-то?
Такая востребованная система как Дельфи — а у Борланда/Инпрайза она была где-то на предпоследнем месте по важности в течение весьма и весьма длительного времени.
Они тогда то ли на БД фокус перевели…
Потом правда вернулись, когда акционеры поняли что пахнет горелым. Но было поздно.
от которого Вирт открещивается как только может, а из-за возможности лепить кнопки на форму
Опять эти стародвание байки про «ляпнул кнопки на форму и готово». Откуда? Я СЕМЬ лет пишу на Дельфи по работе. За эти семь лет у меня было ровно 2 (ДВА) таска, связанных с окнами. Больше ничего связанного с UI не было вообще — серверная часть.
Я хочу, например, иметь обобщенные списки и вообще полноценные коллекции объектов, хочу перемещаться по ним как положено, при помощи итератора, а не как этому вашему компилятору взбредет в голову
Есть коллекции в этом языке. Итератор — спорная вещь.
В новых версиях Delphi обобщенные типы (generics) есть. И итераторы есть. И свой собственный итератор можно написать. А вы говорите язык не развивается...
Я хочу, например, иметь обобщенные списки и вообще полноценные коллекции объектов
Так я в 2005м году открыл для себя Аду.
Непревзойдённые (почти) качества в языке–таки имеются. Я рассматриваю Delphi как 2 языка в одном, и второй, менее мейнстримный язык, очень привлекателен. В первом языке — ручное управление памятью, единоличное владение и try…finally для объектов, а во втором — счётчик ссылок и RAII. Это можно видеть на примере, как реализаованы мейнстримный TJSONObject с ручным управлением памятью и мой CVariant. Диапазонные типы имеются, пусть даже ими сложнее пользоваться, чем в Аде (В языке Ада цикл от -1 до 0 не выбрасывает исключение нарушения диапазона, потому что система типов двухуровневая, для диапазонов обычно не создаются новые диапазонные типы, с которыми будут проблемы, как в Delphi, а делается ограниченный подтип существующего типа, и арифметические операции по умолчанию возвращают результаты в самом широком подтипе типа). Но даже такая плохонькая система типов может повышать целостность, особенно, если начать диапазон с -1 и не бояться использовать его в for. По крайней мере, в диапазоне от -1 до 15 не затесается 50.
Язык нативный, подходит для низкоуровневого программирования, при этом особенности компилятора позволяют контроллировать целостность. К сожалению, проверки по умолчанию отключены, как если бы каждый первый встречный писал на Delphi видеокодеки, но их хотя бы можно включить, и я видел, как всплывает вот это вот всякое, когда во всём проекте резко врубить все проверки, и как всё оздаравливается, если исправить ошибки, вызывавшие эти исключения. В C++ коде для vector<> вы так просто в проекте проверки галочкой в настройках не включите. Мне приходилось делать другой шаблон, который заменял operator[] на at(). Что касается контроля диапазонов, в Java для сравнения, свой тип нельзя определить, а для встроенных типов переполнение не проверяется. В C# ключ /checked нужно использовать при компиляции, тоже под видеокодекописателей язык заточен, наверное.
Наравне с C++ и Objective-C, Delphi и Ada позволяют в том или ином виде использовать RAII и счётчики ссылок, в то время, как многие разработчики инструментов разработки посходили с ума и заколебали остальных своей сборкой мусора. ARC в Objective-C очень распиарен, но хронологически в Delphi он был раньше, жаль только, что он был в немейнстримной версии языка.
Я рассматриваю Delphi как 2 языка в одном, и второй, менее мейнстримный язык, очень привлекателен. В первом языке — ручное управление памятью, единоличное владение и try…finally для объектов, а во втором — счётчик ссылок и RAII
Золотые слова. Именно этот баланс, возможность когда надо, ковыряться руками, а когда не надо — доверить компилятору и привлекает.
Другими словами, Вирт, который создал Паскаль еще в более древние времена, чем 20 лет, должен был, по вашему предсказать тенденции программирования на многие десятилетия.
Имхо, вполне достаточно из достижений Вирта того, что Паскаль серьезно повлиял на многие современные языки.
почти все крупнейшие банки в мире работают с мэйнфреймами IBM и COBOL у них — основной язык программирования
Ну еще есть вариант перевести на мейнфрейм несколько (или кучу) БД Oralce и запускать их под Linux'ом.
А дело то не в железе, а напротив — в ПО.
И довольно внятно описано, что это не просто — почитайте то место в статье, где говорится о переходе на DB/2
А так оно сейчас и делается. В большинстве случаев, правда, сами базы крутятся под AIX'ами, но тем не менее связка AIX+RHEL+Oracle — работает во многих крупных банках.
Да, не приведи господь к такому!
Или успешный и счастливый тот, что сменил 50 мест работы и стал большим начальником?
Люди по разному устроены.
Что плохого, что человек назубок знает свою систему и любой рабочий вопрос решает точно зная что и где искать?
Не всем надо новшества каждый день.
Кроме того там же написано, в статье — она множество новых вещей реализовала. И это ей очень нравилось.
(Хотя складывается впечатление, что замену уволенному программисту на Коболе найти нереально, т. е., чтобы тебя выгнали, это незнамо как надо налажать.)
Разумеется, не в Гугль.
А только в ДРУГОЙ БАНК.
2. Я менял в корне языки программирования за свою карьеру уже несколько раз. Никаких проблем, кроме небольшой потери производительности на пару месяцев.
Вы преувеличивайте знание языка программирования.
Это же не человеческие языки, которые можно учить годами только для того чтобы достичь уровня шестилетки-нейтива.
Гораздо большую пользу несет опыт работы программистом вообще, а не на конкретном языке программирования.
В то же время у меня есть коллеги, сидящие по 20 лет на одном языке, которые знают их хуже меня и совсем не стремятся применять какие-либо новые методики, библиотеки, инструменты и пр. и пр.
Знание языка — ничего не значит. Его вес около нуля.
При подборе персонала в серьезные конторы, если только вы не на джуниора идете, никто не будет вас спрашивать об итераторах и пр. вещах имеющих непосредственное отношение к языку.
Вообще-то, "знать язык" сегодня означать знать парадигму его использования (в том числе — какие тут приёмы и как их реализуют) и его библиотеку.
Трудно изучить только ПЕРВЫЙ язык. Потом все идет по накатанной.
Изучение нового языка, чтобы уже хоть как-то начать программировать на нем — занимает считанные дни (скажем для Go это вообще часы).
Библиотека, особенности методов использования — это и занимает «некоторое падение производительности первые пару-тройку месяцев».
То что человек 20 лет работал на Коболе ни в коем образом не является для него проблемой, из-за которой он умрет с голоду, когда банк откажется от Кобола.
Да при чём тут студенты. Если вы десять лет программировали на C, хорошо программировали, в ядро линукс коммитили, то посади вас за незнакомые вам Python и PyQT — за считанные дни вы это точно не освоите. Пару месяцев точно будете писать очень неэффективный и непонятный (то есть, плохой) C-подобный код, из велосипедов и костылей, постоянно чертыхаясь. А потом до вас дойдёт, вы изучите основы библиотки, основные приёмы работы и код начнёт улучшаться, а вы в свою очередь постепенно начнёте писать его быстрее.
Дело не в том, чтобы синтаксис языка выучить. Опять же, это не проблема. Не в этом дело.
Кто вас куда сажает.
Не нравится Python — идите писать на Go.
В чем проблема — не понимаю. Неоднократно менял языки, парадигмы и пр. и пр.
Падение доходов за это время было только 1 раз и только 1 месяц продолжительностью — когда я из фирмы перешел на чистый фриленс.
Но это не связано со сменой языка программирования.
Все переходы на другой язык программирования максимум что — останавливали рост моих доходов на пару месяцев. Не более того.
В UNIX так никогда не было, это ущербное представление.
В вашем воображении.
Скажите, зачем потребовались ioctl? Какое это имеет отношение к файлам, когда файлы можно читать, писать, перемещаться по ним?
Про Plan9 я знаю. В нём действительно «всё есть файл», во всяком случае, система гораздо ближе к этой парадигме.
Оно не из воздуха возникло.
Все же вот уже полвека IBM — поставщик мейнфреймов в крупнейшие банки мира.
ООП — модный претендент на серебряную пулю.
Но со времен Smalltalk прошло много лет. И человечество уже переосмыслело концепции объектов и сочло, что полноценные объекты во многих случаях слишком неудобны (громоздки).
Для этого и в языки программирования вносят изменения: полноценные «классы» нередко урезают до простых «интерфейсов».
Так что я бы не настаивал на том факте, что объекты — это архиудобно для программирования.
Не умерла.
Разработанная для AS/400 не предназначенная для PC она на PC и не переносилась.
До сих пор там и живет для чего разработана.
DB/2 применяется гораздо шире чем вы думаете.
Даже 1С — и та реализовала поддержку DB/2 для своего основного продукта.
Наряду с MS-SQL, Oracle и Postgres
Вроде база DB2 была встроена в систему уровнем даже ниже ОС — OS/400 использовала DB2 для своих задач. Даже в сегодняшних системах такого не припомню.
Вот RPG/400 поначалу сильно напрягал — старый (оставшийся с перфокарточных времен) позиционный язык. Пришлось написать для нее «IDE» на макросах редактора типа Multiedit.
типа случая с забытой точкой в конце оператора IF, стоившей некой страховой компании миллиардов долларов, согласно легендеВ статье же об этом.
Что тебя больше всего шокировало?
— Мой коллега однажды забыл добавить точку в конце инструкции для программного модуля в самой важной части нашей системы, которую мы называем «кассой». Она отвечает за обработку всех денег. В результате на 16 часов остановилась работа всего банка, исключительно из-за модуля, который продолжал выполняться, хотя должен был остановиться после той инструкции. Это буквально повесило нашу систему, устроив, можно сказать, DoS-атаку самой себя.
Ну или случалось повсеместно.
$ find. -type f -name "*.sh" -exec rm -fr {} \;
если вы забудете заменить первую точку на слэш, произойдет непоправимое. Это уже не выстрел в ногу, как в примере из статьи, это отстреливание шаров напрочь. И кто здесь виноват, bash, что ли?
Зачем тут заменять первую точку на слеш?
В итоге вместо
$ rm -rf app/cache
написал
$ rm -rf app /cache
То есть добавил всего один пробел случайно перед слэшем. В итоге удаленная директория app целиком. Пришлось повозиться немного с восстановлением файлов в IDE, хорошо, что все в истории есть.
А по поводу жуткого легаси — это было и будет проклятьем банков (ну ок, может быть это проклятье снимет блокчейн). Потому что невозможно изменять систему на ходу. Зачем и во имя чего переписывать на новые технологии уже оттестированный код в условиях, когда нужно писать и писать свежие формы, отчеты, обработки и тому подобное? Время и ресурсы есть только на то, чтобы позаботиться о стабильности текущего состояния и проверить, что в перспективе стабильность не пропадет.
Да, системы со временем таки обновляются. Но на эти изменения уходят года. Год на планирование, год на выбор новых систем, год на проверку и пару лет на полную замену. Когда новая система вступила в бой — она уже устарела на 2-4 года, а ей еще теперь работать 10 лет.
Маме автора действительно нужен памятник — редкая порода инженеров, способных десятками лет поддерживать систему не забывая о развитии этой системы
Это конечно не топ-10, просто региональные банки с парой сотен тысяч клиентов.
Занимался автоматизацией средних оптовых фирм. Не банки. Не крупные фирмы.
По моему наблюдению с момента первых изменений до окончания работ по адаптации софта — при внедрении новой версии системы учета — проходит те же 2 года.
Так что не только в банках такие сроки.
А что там за фирмы?
А какие плюсы и минусы работы в Малазии?
Было бы даже подозрительно — если было бы иначе.
Не хотелось бы хвастаться, но наши мамы круче. Моей например 76, она до сих пор работает и создавала с нуля ПО для одного из самых успешных советских проектов. К сожалению взять у нее интервью не получится из-за глубоко вьевшейся привычки к секретности. Я сам узнал чем именно они с отцом занимаются когда мне было уже за 30 и я работал в Москве, из воспоминаний детства остались только бесконечные рулоны бумаги с распечатками восьмеричных кодов. Так что даже не знаю что про себя сказать — то ли я потомственный программист, то ли наоборот, самоучка.
Также есть такая вещь как UNIX System Services, куда вполне можно подключиться по SSH. А конец эпохи мэнфреймов предрекали уже не раз :)
COBOL — это императивный, процедурный язык, а с 2002 года — объектно-ориентированный.
С датировкой что–то явно не то. COBOL был одним из языков, которые реализовали Direct-to-SOM. Учитывая, что последнюю версию SOM для мейнфреймов выпустили в 1997м году (потом в IBM посходили с ума, прекратили разработку SOM и переключились на Java), и COBOL тут не какой–то, а именно IBM, то объектно–ориентированным он стал ну явно не позже, чем закрыли SOM.
Интервью с мамой, банковским программистом на COBOL'е