Программирование В Науке: Полвека Наследия И Фортран 77

Александр Нозик, физик и программист, заведующий лабораторией методов ядерно-физических экспериментов компании JetBrains Research, заместитель заведующего лабораторией методов ядерно-физических экспериментов и магистратуры МФТИ — о том, как перенести научный код в современный стек и почему это сложно внедрить новые инструменты в науку.

Статья написана на основе выпускать подкаст «Люди и код» от Skillbox (декабрь 2021 г.

).

— Александр, расскажите, чем вы занимаетесь и какие проблемы решаете? — Моё основное место работы — Московский физико-технический институт (МФТИ), он же Физтех.

Кроме того, я работаю в Институте ядерных исследований РАН и JetBrains Research — это сообщество лабораторий, связанных с JetBrains. Компания поддерживает лаборатории и тем самым собирает вокруг себя научное сообщество.

Я занимаюсь физикой нейтрино, это основное направление моей научной деятельности.

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

— Чем наука отличается от коммерческой разработки по задачам? Как это влияет на выбор инструментов и языков программирования? — Наука всегда была и остаётся «быстрее, выше, сильнее», чем другие сферы.

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

Вспомним интернет-протокол HTTP: изначально он был создан для того, чтобы научные центры могли обмениваться большими объемами данных.

В одном из коридоров ЦЕРН даже есть табличка: «В этой комнате изобрели Интернет».

Если мне не изменяет память, в экспериментах по ускорению частиц на Большом адронном коллайдере в минуту генерируется 25 ГБ данных.

Для коммерческих проектов это просто непостижимо.

Мы работаем с объемами данных, которых больше нигде нет. Анализ данных и так называемая наука о данных уже стали частью отрасли.

«Так называемая», потому что до сих пор нет четкого определения, что это за наука.

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

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

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

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

Собственно, нечто подобное уже произошло в физике, и сейчас научное сообщество решает эту проблему.

Дело в том, что физики пишут вычислительный код на C++, а затем оборачивают его кодом Python. И мне кажется, что такой подход изжил себя: в Python очень сложно поддерживать большую кодовую базу, а здесь размер проектов растет именно на стороне пользователей кода — ученых.

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

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

Например, биоинформатика как отдельная область возникла относительно недавно.

В отличие от физиков, которым пришлось «перейти» на Python, они сразу начали работать с современными языками.

Но большинство наук по-прежнему используют библиотеки C, Fortran и C++ и пишут над ними надстройки Python. И сейчас те же проблемы с гибкостью.

Помимо Python, в различных областях науки пишут или пытались писать и на других языках.

Р.

Используется в статистике.

Это узкоспециализированный язык, который отлично подходит для решения статистических задач.

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

Написать это на R непросто.

Юлия Это довольно интересный язык со множеством конструктивных особенностей.

Попробуйте, если вам не хватает скорости или гибкости Python. Однако есть у Юлии и недостаток: набор инструментов у нее пока нестабильный.

Джулия была изобретена как альтернатива Python и MATLAB. Последняя используется до сих пор, но это проприетарная, «неживая» система.

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

Быстрый.

Еще Swift пытались сделать универсальным языком, но дальше iOS дело так и не вышло.

А потом появился Kotlin, который по синтаксису очень похож на Swift, но в то же время подходит для решения более широкого круга задач и позволяет работать с библиотеками из Java, JavaScript и C. Джава.

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

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

Котлин.

Сейчас я много пишу на Котлине.

Он имеет преимущества Java, но избавляет программиста от добрую половину «церемоний», а потому, на мой взгляд, имеет большие перспективы.



Каковы основные проблемы научных ИТ и как их пытаются решить?

— Вы упомянули, что в науке много интересного.

Интересно, это относится только к библиотекам Fortran и C++ или к чему-то еще? И какие там основные проблемы? «Это очень большая проблема, в которой нам придется разбираться долгое время».

Дело в том, что однажды разработка превратилась в отдельную профессиональную сферу.

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

Они работали на огромных машинах размером со шкаф, и все все понимали.

Но 15–20 лет назад выяснилось, что разработка программного обеспечения — это самостоятельная инженерная область.

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

Они придумали замечательные алгоритмы, но совершенно не подумали о поддержке кода, тестировании, CI/CD и особенно об архитектуре.

Например, системы сбора данных совершенно неспособны взаимодействовать друг с другом.

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

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

Более того, на изучение каждой системы может уйти несколько лет — настолько они сложны.

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

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

Чтобы почувствовать боль, найдите программу на Фортране 77 и попытайтесь понять, что там происходит.

Для справки: в Фортране 77 длина имени переменной ограничена восемью символами.

Это означает, что когда все совпадающие имена переменных закончатся, программа станет нечитаемой.

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

Но большинство научных программ по-прежнему пишутся на Фортране.

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

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

— Расскажите немного о том, что это за группы и чем они занимаются? — В их число входит наша лаборатория в Физтехе и в JetBrains Research. Мы пытались продвигать новый подход в ИЯИ РАН восемь лет назад, но столкнулись с сопротивлением.

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

Вам ответят: «А у нас все работает хорошо».

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

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

Есть и другие группы.

Например, недавно мы встретились с коллегами из Научного института CASUS в Дрездене.

Мы тесно сотрудничаем с учёными немецкого электронного синхротрона (DESY) по фундаментальным и прикладным исследованиям.

Геоинформатики в Германии также внедряют большие данные, как когда-то это было в биоинформатике.

Есть также отдельные инженеры, которых мы знаем по JetBrains Research в Новосибирске и Санкт-Петербурге.

В ЦЕРНе уже довольно давно есть собственная группа, работающая над Большим адронным коллайдером.

Хотя его основная задача — поддерживать существующие системы, а не разрабатывать новые.

ПРОТИВ? и Яндекс открыли лабораторию Lambda. Правда, пока они используют только методы машинного обучения и не касаются программной инженерии.

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

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

Мы с коллегами хотим создать сообщество для обсуждения актуальных вопросов ИТ в науке и обмена идеями.

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

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

Но они работают как предприятие: быстро решают конкретную задачу и не думают о развитии направления.

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



Какие проблемы существуют в обучении программированию учёных?

— Конечно, преподаватели старой школы отличаются от аспирантов и молодых ученых 30–35 лет. Кому легче объяснить, что необходим системный подход к проектированию и выбору оснастки? — Конечно, с молодыми легче договориться.

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

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

Дело не в том, что они этого не хотят, они просто не видят выхода.

Яркий пример: многие люди используют C++11 и даже не подозревают об этом.

Более того, на самом деле они почти не используют возможности C++ 11, а пишут на C++ 98. Если спросить типичного физика, который говорит: «Я знаю C++», об умных указателях (необходимая вещь для управления памятью в современном C++) , то, скорее всего, он ничего не расскажет.

Всем «знатокам» задаю один и тот же вопрос: «Как управлять памятью в C++Э» Большинство людей начинают говорить о новых, удалении и так далее.

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

Я имею в виду не работу в компании, а практику в веб-разработке или других востребованных областях.

С такими инженерами уже можно говорить на одном языке.

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

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

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

Таким образом, мы обучаем людей решению их задач и тестируем инструменты компании.

На Западе в развитие научного инструментария инвестируют такие гиганты, как Microsoft и Google, а в России — JetBrains и Яндекс.

Небольшие компании также догоняют эту тенденцию, но пока не знают, с чего начать.

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

— Вы сказали, что за годы науки накопилось много унаследованного кода.

Стоит ли его переписать на современный стек или можно оставить как есть, но при этом изменить слой кода Python? - Оба.

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

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

Конечно, невозможно в одночасье переписать всю кодовую базу, поэтому пока работаем с оберткой там, где это возможно.

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

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

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

Например, иногда необходимы суперкомпьютеры.

Таких задач немного, но они есть, и все в них завязано на суперкомпьютерах.

В большинстве случаев мощности персональных компьютеров достаточно.

Я считаю, что научная ИТ-инфраструктура должна как минимум не отставать от коммерческой.

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

Последнее уже реализовано в большинстве проектов, но дошло еще не до всех.

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

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

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

Сейчас много говорят о распределенных вычислениях и удаленной разработке, но пока такие проекты находятся на стадии пилота.



Как помочь науке и какие технологии изучить начинающим учёным

— Какие есть open source проекты по переносу старых библиотек в новые? Работаете ли вы с участниками и как волонтеры могут подключиться к крупным инициативам? — Да, буквально недавно мы обсуждали несколько таких проблем.

Недавно Дмитрий Костюнин из Технологического института Карлсруэ (KIT) выступил с презентацией по переводу КОРСИКА , одна из основных библиотек для моделирования, от старого Фортрана до современного C++.

Проект полностью открытый, приглашаются все, кто умеет программировать.

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

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

Основная проблема перевода заключается в том, что большинство задач написаны не на языке программирования.

Было несколько попыток привлечь профессиональных программистов к научным разработкам.

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

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

Собственно, в этом и есть главная красота машинного обучения.

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

В целом у застройщиков большой интерес к нашей сфере.

Ко мне часто обращаются энтузиасты и просят дать им какое-то задание.

— Что бы вы посоветовали тем, кто только приходит в науку или уже пришел, но без нормальной IT-подготовки? Каким минимумом вам нужно овладеть, чтобы делать хорошие дела? — Развивайте свой кругозор и знакомьтесь с разными областями программирования.

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

Желательно знать, как работают простые веб-проекты и сервисы.

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

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

Конечно, без опыта в инженерии ничего не сделаешь.

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

— Что посоветуете прочитать на эту тему? На кого мне подписаться, на кого подписаться? — Первое, что я рекомендую — это подписаться на Исследования JetBrains .

У них есть материалы по информатике и естественным наукам на русском языке, а также на Телеграмма Приглашения на семинары можно найти в Zoom. ЦЕРН регулярно публикует отчеты по разработке программного обеспечения.

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

Теги: #Наука #программирование #фортран #наследие

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.