четверг, 4 января 2024 г.

Об использовании Питона в высшем образовании

There should be one—and preferably only one—obvious way to do it.

Тим Петерс о дзене, который питонисты так и не постигли (2004)

Python programmers are smart

Пол Грэм о питонистах, писавших в прошлом на других языках (2004)

Yoooooooooooooouuuuuuuniiiiiiicoooooooode

Гвидо ван Россум о пользе перехода с Python 2 на Python 3 (2005)



Наступил 2024. Питон — самый популярный язык в мире по рейтингу TIOBE. Самый известный программный продукт ушедшего года — ChatGPT — написан на Питоне. Питон легко выучить, и программисты на Питоне делают головокружительную карьеру в разработке. Питон — универсальный язык, на котором можно писать любые программы.

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

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

Все нижеизложенные цифры — свежие (даны по состоянию на 2023) и вряд ли заметно изменятся в пользу Питона в будущем, т. к. язык существует более 32 лет, он старше своих нынешних конкурентов (кроме Bash, Tcl и C/C++) и свой потенциал взрывного роста давно исчерпал.

 

Рейтинги

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

В рейтингах, составленных на основании опросов пользователей Stackoverflow, Питон уступает JS (а среди профессионалов — и SQL). В целом ориентироваться на подобные рейтинги бесполезно, т. к. их показатели, во-первых, ничего не значат, а во-вторых, меняются чаще, чем образовательные учреждения могут менять свои учебные программы. (В вышеупомянутом TIOBE Питон лидировал в 2010, но опустился на 8-е место в 2013).

По количеству открытых репозиториев на Github Питон занимает второе место (после JS и перед Typescript). В исходных кодах пакетов современного дистрибутива Debian Bookworm Питон находится на 3-м месте по общему количеству строк кода (6.2%), после C и C++. Короче говоря, никаких признаков доминирования Питона в индустрии не обнаруживается.

 

Простота

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

Медлительность исполнения

Интерпретатор CPython (основная используемая реализация языка) — одна из самых медленных реализаций скриптового языка на свете. Программы на Питоне исполняются медленнее, чем аналогичные им на Си, в разы и десятки раз. В некоторой степени эта проблема может быть решена выводом интенсивных вычислений через ffi во внешние библиотеки, реализованные на Си (например, как сделано в numpy). Но такая схема работает лишь до тех пор, пока в вычислениях нет ветвлений. Ветвления, выраженные в коде на Питоне, не могут быть помещены в numpy. Показателен пример задачи поиска числа в отсортированном массиве. (Решение состоит из метода бисекций, содержащего ветвления.) В numpy метод бисекций реализован в функции searchsorted, которая по неизвестным причинам работает медленнее, чем функция bisect из стандартной библиотеки, оперирующая обычным питоновским списком, а не numpy-массивом. Также searchsorted работает медленнее, чем рукописный метод бисекций, оперирующий numpy-массивом; причины этого тоже неизвестны.

Несовместимости

Большая часть библиотек разрабатывается в отдельности от языка. При одновременном использовании нескольких библиотек возникают несовместимости между библиотеками, разрешимые в лучшем случае инсталлированием рекомендованных версий (для упрощения этого процесса в Питоне созданы виртуальные окружения, содержащие копии всех библиотек, нужных программе), а в худшем — правками со стороны пользователя после часов отладки и чтения форумов. Проблема усугубляется тем, что минималистичный синтаксис языка поощряет скрытое взаимодействие библиотеки с интерпретированной моделью пользовательской программы. Протоколов для такого рода взаимодействий не разработано, из-за чего и происходят наиболее сложные поломки. Примеры: pytorch и pyinstaller, numba и scipy. Проектам на C/C++/Java/C# и на многих других языках такие поломки не свойственны.

Отсутствие тредов на уровне ОС

Номинально треды в Питоне есть, но без параллельного выполнения байт-кода. Следовательно, параллельный режим доступен лишь для операций ввода-вывода и вызовов внешних библиотек (ffi). Все остальные операции выполняются последовательно на одном ядре CPU. Причиной этого является глобальная блокировка интерпретатора (GIL), созданная в CPython с первых дней его существования. Необходимости в GIL не было: например, в интерпретаторе Tcl она отсутствует. Тем более нет этой проблемы в языках без интерпретатора: C/C++/C#/Java/Go. Параллельное выполнение в Питоне можно получить в режиме мультипроцессинга, т. е. с помощью не тредов, а отдельных процессов. Такое решение приводит к увеличению расхода памяти (в каждом из процессов сидит целый независимый интерпретатор) и к необходимости обмена данными через разделяемую память (а не просто память процесса, как было бы при обычных тредах).

Разнообразие и изменчивость

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

Так, притчей во языцех является установка библиотек. Их можно ставить в системную инсталляцию Питона, или завести локальную инсталляцию Питона и ставить библиотеки в неё, или инсталлировать через PIP в локальную директорию site-packages, или через PIP в виртуальное окружение. Само виртуальное окружение можно сделать с помощью venv или virtualenv (это разные вещи с похожими названиями); также существуют pyenv, pyenv-virtualenv, virtualenvwrapper, pyenv-virtualenvwrapper и pipenv. Но и это ещё не всё: существует также conda и её вариации anaconda и miniconda. Рано или поздно разработчику приходится узнавать об этих средствах и о том, в каких отношениях они находятся между собой. Ни о какой простоте разработки (равно как и о самой разработке) при этом не идёт и речи.

Разнообразие проявляется и в интерфейсах библиотек, которые постоянно меняются. В сообществе питонистов не принято заботиться об обратной совместимости версий. Программа, которая не обновлялась 5 лет, скорее всего не будет работать со свежими версиями пакетов, от которых она зависела 5 лет назад. Она также может не заработать и с новыми версиями библиотек (после внесения нужных изменений в код, зависящий от них), потому что в библиотеках появились новые ошибки. (Стандарты тестирования питоновских библиотек бесконечно далеки от стандартов, применяемых например в SQLite, написанном между прочим на Си образца 1989 г.)

Принципы разработки библиотек вовсе не идут вразрез с принципами разработки самого Питона. В 2008 г. вышел Python 3, несовместимый с Python 2 на уровне не только библиотек, но и синтаксиса, что доставило проблем разработчикам в течение последующих 11 лет. Известна история компании Dropbox, которая начала миграцию с Python 2 на 3 в 2015 и закончила в 2018; руководил процессом лично создатель языка, Гвидо ван Россум, работавший в компании. Через год после миграции он ушёл на пенсию, а ещё через 2 месяца поддержка Питона 2 на python.org была официально прекращена.

Эта и другие истории о печальных последствиях нарушения обратной совместимости не научили сообщество разработчиков ничему. Работавшие ранее вещи в Питоне 3 регулярно удаляют и ломают, намеренно. (Пример: список для 3.13.) Грядущий процесс избавления от GIL сломает множество программ, и процесс восстановления займёт много лет. В общем, программы на Питоне будут устаревать и ломаться всегда, это одна из культурных особенностей языка. Программистам на Питоне нужно бежать, чтобы просто оставаться на месте.

В языках C, C++, Java, C# и многих других обратной совместимости уделяется огромное внимание. Аналогичных принципов придерживаются разработчики программ на этих языках. (Одним из наиболее ярых защитников обратной совместимости является Линус Торвальдс.) Новые возможности добавляются, но старые не удаляются. Если новые возможности несовместимы со старым API, заводится новая версия API, но старая продолжает поддерживаться. Ломать совместимость без веских причин нельзя.

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

 

Универсальность

На Питоне можно написать любую программу. На любом языке можно написать любую программу. Люди пишут тетрисы на sed, 3D-графику на Powershell и TLS на Javascript, а также занимаются машинным обучением на Форте. Всё это позволяет гордиться человечеством, но не имеет никакого отношения к практическим вопросам о том, какие языки нужно учить и на каких языках нужно писать.

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

А больше нигде Питона и нет. Знаете ли вы мобильные приложения на Питоне? Десктопные (кроме Dropbox, над которым, как сказано выше, работал создатель языка, и, кстати, там используется не совсем Питон, а его доморощенная модификация с JIT под названием Pyston)? Для микроконтроллеров? Операционные системы? Базы данных? Системы виртуальной реальности? Всё это бывает, но в маргинальных количествах.

Мобильные приложения пишутся на Java/Kotlin/Objective C/Swift/JS. Десктопные — на C++/C#/Java/JS. В микроконтроллерах, ОС и БД царит Cи. В системах виртуальной реальности — C#/C++/JS.

Но поговорим о питоновских нишах.

Скрипты

Скрипты бывают системные (для нужд ОС) или внутри больших приложений. Системные скрипты на Питоне хороши так же, как скрипты на Bash, Perl, BAT, Powershell и Tcl, т. е. никак. Питон вполне годится для системного скриптования, но по историческим причинам не занимает первое место в этой нише и вряд ли когда-либо займёт.

Скрипты в приложениях и видеоиграх? В Adobe преимущественно используется JS и его производные. В GIMP и Autocad — преимущественно Лисп. В Microsoft Office — преимущественно VBA. В World of Warcraft и Dota используется Lua. В Minecraft — JS. В играх Valve — Squirrel. Питон нередко встречается как опция (например, в Excel в 2023 появилась экспериментальная поддержка), но, как и в системных скриптах, никогда не станет лидером.

Веб-фреймворки

На Питоне написано множество скриптов, реализующих серверную часть веб-приложений. Для этих скриптов сделаны популярные фреймворки (Django, Flask). Получается достаточно хорошо, если не считать свойственных Питону проблем с быстродействием, памятью и отсутствием тредов.

Тем не менее Питон используется лишь в 1.4% сайтов, а лидером серверной веб-разработки является PHP (76.7%). Питонисты смотрят на PHP свысока и считают его отсталым языком, но большая часть этих претензий относится к PHP 5-й версии (2004), тогда как в PHP 7 (2015) язык был подвергнут серьёзной переработке, а в 8-й версии получил вдобавок JIT-компилятор и стал полноценным современным языком. С обратной совместимостью ситуация в PHP не лучше, чем в Питоне, но всё же PHP 8 используют 17.5% сайтов — в 12 раз больше, чем Питон.

Среди популярных сайтов доля Питона выше, чем в среднем, но далека от доминирующей.

  • Google Search — в основном написан на C++, на Питоне только поисковый робот

  • Youtube — написан на Питоне, но собственно раздача видеоконтента является обязанностью специальной сети доставки контента (Media CDN); на каком языке она написана, не говорится, но вряд ли на Питоне.

  • Facebook — написан преимущественно на Hack, произошедшем от PHP.

  • Twitter — написан на Java, Scala, Ruby. Возможно есть и Питон, но в небольших количествах.

  • Википедия — написана на PHP

  • Reddit — на Питоне, отдельные части на Go

  • ВК — написан на KPHP, произошедшем от PHP

  • Поиск Яндекса — преимущественно на С++ и Java

Излишне упоминать, что серверные скрипты на Питоне не являются полноценными веб-серверами и обычно работают в связке с последними. Веб-серверы (Apache, nginx) написаны на Си.

Машинное обучение

Практически все нейросетевые модели разрабатываются на Питоне. Он действительно прекрасно для них подходит. Модели представляют собой последовательности однородных математических операций с массивами чисел, что позволяет автоматически вычислять необходимые в машинном обучении градиенты (см. дифференцируемое программирование). Недолговечность программ на Питоне в этом случае также не является проблемой, т. к. жизненный цикл моделей короток. Не является проблемой и быстродействие, т. к. ветвления и сложные структуры данных (самые слабые места языка с т. з. быстродействия) в нейросетевых моделях не используются, а математические алгоритмы, лежащие в основе питоновских библиотек для машинного обучения, реализованы на Си или CUDA. Так, в Pytorch менее половины кода написано на Питоне, в Tensorflow — менее трети.

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

Кратко пройдёмся по биографиям нескольких знаменитых разработчиков в этой области. Андрей Карпатый писал на C++ и C, и до сих пор изредка пишет. Грег Брокман начинал карьеру с изучения теории языков программирования. Алексей Крижевский, Илья Суцкевер и Джеффри Хинтон, создавшие знаменитую нейросеть AlexNet, написали её на CUDA. Излишне добавлять, что все эти разработчики учились в хороших университетах США и Канады и стали тем, кем они стали, благодаря широте полученного ими образования и опыта, а не благодаря Питону, на котором они пишут сейчас.

Наука

Заблуждение о том, что Питон играет в науке какую-то значимую роль, имеет две причины:

  • Многие люди считают нейросети инструментом науки, хотя в действительности нейросети в научных исследованиях используются сравнительно редко, 8% в среднем и ещё меньше, если исключить информатику

  • Научные работники не склонны к написанию полноценных программ; им требуется инструмент, позволяющий с помощью минимального количества кода осуществлять операции с данными и визуализацию в интерактивном режиме. Исторически для этого применялись Matlab, Mathcad и Mathematica, но в 2015 г. появился Jupyter Notebook и немедленно завоевал популярность. Произошёл переход от очень плохих средств программирования к просто плохим (к тому же Jupyter, в отличие от своих конкурентов, бесплатен).

В остальном (кроме машинного обучения и Jupyter) использование Питона в науке минимально, в основном для биндингов к библиотекам на C/C++, одноразовых скриптов, о которых их авторы забывают через неделю, или студенческих поделок, созданных для дипломной работы, которые потом продолжают другие студенты того же руководителя. Более распространённые в науке языки — вышеупомянутые C/C++, а также Фортран; специально для научных вычислений был разработан язык Julia.

Автор все графики в своих статьях делал на gnuplot и может заверить, что обработку и визуализацию несложных данных можно делать на gnuplot + awk быстрее, чем у питонистов запустится PyCharm.

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

 

Образование

В 2008 г. в Массачусетском технологическом институте был прекращён знаменитый курс 6.001 «Структура и интерпретация компьютерных программ», основанный на Лиспе. Один из авторов курса — профессор Джеральд Сассман — по собственному желанию перешёл с преподавания Лиспа на преподавание Питона. При этом ему и его коллегам Питон не нравился, что он объяснил тем, что все они, включая его самого, — «old farts». На первый взгляд это может показаться заменой менее популярного языка на более популярный, т. е. уступкой моде, но в действительности дело обстояло более печальным образом. Джеральд Сассман не просто перестал преподавать Лисп, а перестал преподавать программирование в том виде, в котором преподавал его 28 лет. Он решил, что профессия программиста, который создаёт программы с нуля, более не востребована, и сменил курс 6.001 на 6.01 (программирование роботов на Питоне с помощью готовых библиотек).

Между тем новые программы всё ещё нужны, и будут нужны всегда (см. Айзек Азимов, «Профессия», 1957). Начинать подготовку специалиста с решения задач путём манипуляции готовыми компонентами — значит забивать его голову преходящими концепциями и лишать фундаментальных знаний. Сассман был совершенно прав в выборе языка для этой цели и неправ в выборе самой цели.

В Питоне принята низкая культура программирования (если не считать культурой любование краткостью синтаксиса, даже если этим синтаксисом написана программа, работающая квадратичное время вместо линейного). Питон держит начинающего программиста в неведении относительно истинной модели выполнения программ (на CPU или на GPU). Синтаксис Питона поощряет использование неэффективных структур данных. Программисты на Питоне часто пишут программы для себя, а не для других. (Более того, в последние годы чаще пишут Jupyter-блокноты, чем программы.) Питонисты считают, что уже выучили окончательный язык программирования, и это самое страшное: если Питон является первым из изучаемых языков, то он становится и единственным. Профессиональные знания не удерживаются в голове студента, профессиональные навыки не формируются.

 

Карьера

Зарплаты разработчиков на Питоне не имеют заметного отрыва от зарплат разработчиков на других языках. Например, начинающие на Питоне получают немного меньше, чем такие же на C++/C#/Java, и немного больше, чем такие же на JS и PHP (данные Хабр.Карьеры). По количеству вакансий Питон занимает 2-е место (20%) после JS (30%), третье место у Java (18%, данные DevJobsScanner). Но всё это не имеет большого значения. Для каждого индивида существенная разница в зарплате достигается не при переходе на другой язык, а при повышении уровня квалификации (что и видно по кратным разницам в зарплатах между начинающими, средними и старшими разработчиками). Нет причины учить именно Питон или начинать именно с Питона; нужно учиться хорошо писать программы.

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

 

Что же учить вместо Питона?

Если вы прочли текст от начала до конца и задаётесь этим вопросом, ответ такой: в первую очередь нужно учить Microsoft PowerPoint. Да, да, да.

Пользователей PowerPoint в мире не менее полумиллиарда. Powerpoint используется практически во всех отраслях науки и техники (и даже искусства). Презентации в Powerpoint показывают все люди — от школьников до миллиардеров, от микробиологов до астрофизиков, от стажёров до директоров. Это инструмент, поистине объединивший человечество (за исключением вооружённых сил США, в которых запретили презентации в 2010-х годах). Учите Powerpoint, остальное приложится. Успех ждёт вас.



вторник, 28 января 2020 г.

Государство и наука

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

Вид на Зимнюю канавку. Автор: Александр Петросян (источник)

Почему так красива застройка центра Петербурга? По совокупности трёх причин.

  1. Петербург с начала XVIII в. застраивался по генеральному плану.
  2. В течение двух веков здания, которые было недостаточно красивыми, сносились и на их месте строились новые.
  3. С 1920-х гг. исторические здания сносить запрещено.

Аналогично застройке центра Петербурга, на пульте управления государственной наукой в России сейчас включена кнопка номер три. В ситуации, когда планирование слабое, а механизм положительного отбора не работает, актуальна консервация. И если этот подход неплохо работает для зданий, то для научных организаций он влечёт своеобразные последствия, которые мы сейчас и разберём.

Консервация

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

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

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

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

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

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

  • Поставить директором лояльного человека и закрыть направление внутри института, уволив половину сотрудников? ТК РФ не позволит уволить никого без веского основания. А ещё есть профсоюзы. В «лучшем» случае — возникнет многолетняя окопная война внутри института, как сейчас происходит в ГАО РАН. Война, в редких случаях, может закончиться, но никогда не может закончиться победой одной из сторон.

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

  • Сократить несогласным зарплаты до минимально допустимых по закону? Это можно, и это приведёт к упадку атакуемого научного направления, но никогда не приведёт к его исчезновению. Если какие-то сотрудники не выдержат пытку и уволятся, на их место придут другие, готовые работать за гроши. А ещё есть гранты.

  • Объединить институт с другим и растворить его направления в других? Объединить можно, но фактически это мало что изменит. Люди продолжат работать, как всегда работали. Даже спустя десятилетия после объединения институтов не произойдёт объединения коллективов, изначально работавших над разными темами.

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

    Характерен пример морской навигации. С появлением средств спутниковой навигации наука определения положения судна по наблюдениям Солнца, Луны, планет и звёзд, казалось, должна была сойти на нет. В США это и происходило — до тех пор, пока не оказалось, что штурманы, способные делать свою работу без GPS, практически исчезли. А это означает, что США не готовы к войне, в которой противник собьёт или заглушит навигационные спутники. Поднялся шум, и классическое образование штурманов восстановили. В России происходило то же самое, с задержкой по времени. В настоящее время выпуск вспомогательных справочников — Ежегодников — продолжается; более того, появилось новое приложение: создание компьютерных программ, анализирующих фотоснимки неба на корабле и выполняющих задачу определения положения для штурмана.

Борьба

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

Многих, однако, такое положение дел по разным причинам не устраивает. Одни несогласные придают наибольшее значение событиям в науке, которые произойдут в течение их собственной жизни и по их собственной воле. Другие переживают о том, что Россия отстаёт в научном развитии от иностранных государств. В конце концов, образовательные программы рассчитаны на людей, в которых есть творческий интерес — и выпускники, оный интерес не потерявшие и при этом не уехавшие из страны, устраиваются работать в государственные научные организации. Потому что других нет.

Теперь рассмотрим руководителя, находящегося в точке столкновения противоборствующих стихий — воды бюрократии и огня научной мысли. Вода льётся сверху, огонь... ну, вы поняли. Встречаются руководители, подчиняющиеся воде и работающие в режиме «приказы вниз, отчёты наверх» — по лености или, наоборот, активно, в целях продвижения собственной карьеры. К счастью, таких личностей меньшинство. Остальные берегут вверенных им сотрудников и вечно лавируют в поиске компромисса между прихотями чиновников и потребностями достижения научных целей. Руководитель находится на положении князя под игом Золотой Орды. Спорить с ханом нельзя, навлечь гнев хана нельзя, не выплачивать дань нельзя, отвергнуть милость хана немыслимо. Можно лишь, умело пользуясь выданным ханом ярлыком, не допускать превращения княжества в Орду.

Общие принципы принятия решений в государственных научных организациях следующие:

  • Если предлагают деньги, надо брать. Отказываться от денег недопустимо, потому что в следующий раз не предложат.
  • Если требуют работать, надо выполнить работу в минимально возможном объёме. Нередко этот минимально возможный объём близок к нулю, см. ниже.
  • Внутренние дела организации, такие как занятость работников и структура выплат, скрываются с не меньшим тщанием, чем скрывалось устройство сицилийской мафии. Юридически в отдельных аспектах требуется прозрачность; она формально обеспечивается, но за ней скрывается второе дно.
  • Любые попытки государства вмешаться во внутренние дела организации встречают твердокаменное сопротивление на фоне полного подчинения на словах.

Численность внутренней армии, отражающей вмешательство государства, повышается с размерами организации, и, соответственно, с объёмом финансирования. В минимальном варианте можно обойтись канцелярией во главе с учёным секретарём. Это позволит соблюдать базовый уровень отчётности — конечно, не без помощи рядовых сотрудников. (Бухгалтерию, отдел кадров и пр. не считаем, поскольку они есть в любой организации вообще, а нам интересна государственно-научная специфика). Далее, если организация в рамках прикладных исследований выполняет опытно-конструкторские работы (ОКР), то для рутинного оформления проектной документации появляется нормоконтроль. Если в организации создаются оригинальные объекты интеллектуальной собственности (изобретения, программы, базы данных), то рано или поздно возникают патентный и юридический отделы. И, само собой, для хранения документации нужен архив в отдельном помещении с железной дверью. Для воспроизводства научных кадров появляется диссертационный совет и отдел аспирантуры. Для облегчения публикационной ноши аспирантов, да и обычных сотрудников, в организации заводится свой журнал и, соответственно, издательский отдел. При работе с военными появляется военпред. При работе с секретными документами — Первый отдел (филиал ФСБ в научной организации). И так далее. Отделы растут в размере и в количестве. Их сотрудники добросовестно работают с девяти до шести пять дней в неделю, обслуживая интересы организации как части государственной машины. Научные сотрудники, глядя на всё это, морщат нос и считают себя самыми главными, а всех остальных — своей обслугой, и они неправы, потому что, как уже говорилось, их картина мира неадекватна происходящему в России.

Вмешательства в научные дела со стороны государства не происходит, не считая редкого принуждения к пиар-акциям военно-политического толка. Например: российской армии нужен ГЛОНАСС — российская наука работает на ГЛОНАСС — российские астрометристы участвуют в обслуживании наземного сегмента ГЛОНАСС. Россия дружит с Кубой — российская наука дружит с кубинской наукой — российские астрономы строят обсерваторию на Кубе. Россия дружит с Китаем — китайские строители строят радиообсерваторию в России.

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

Тем не менее, прямой вред науке, наносимый этими инициативами, минимален. В конце концов, Эйнштейн опубликовал свои труды по Специальной теории относительности, работая в патентном бюро, а Кеплер, изобретая оптику и открывая законы движения планет, подрабатывал составлением гороскопов. Что касается международного сотрудничества, то однозначным благом для любой области науки является возможность сотрудничества с США и, в редких случаях, с Европой. К счастью, пути сотрудничества с США в данный момент не перекрыты. В этом смысле Россия более удачлива, чем Китай, которому США не разрешают сотрудничать с собой в области астрономии и освоения космоса. Двери европейской науки для России и вовсе широко распахнуты и вряд ли закроются в ближайшие 50-100 лет.

Помогательство

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

Омоложение руководящего состава

В 2014 г. был издан закон, по которому возраст директора института или его заместителя ограничивается сверху 65 годами. Денежной компенсации за исполнение закона не предлагалось. Подразумевалось, что с омоложением руководителей и сами институты войдут в период творческого расцвета. В действительности это не произошло и не могло произойти. Сам принцип отбора прежде по возрасту, чем по профессиональным качествам, более чем спорен. Кроме того, из науки в России произошёл отток молодых кадров в 1990-е. Сейчас в институтах примерно поровну молодёжи и пожилых людей, и по пальцам можно пересчитать таких, которым по 40-50, что есть самый подходящий для начинающего руководителя возраст.

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

Кратко: не дали денег, попытались вмешаться в структуру управления → провал.

Увеличение зарплат научным работникам и преподавателям в вузах

В 2012 г. правительству было поручено сделать так, чтобы средняя зарплата научных сотрудников и преподавателей вузов достигла к 2018 г. удвоенной средней зарплаты по региону. Государственное финансирование организаций, в которых эти сотрудники работают, не увеличилось (во всяком случае, после 2014 г.); осталось два очевидных выхода — изыскивать дополнительное финансирование (включая частное) или сокращать знаменатель формулы, т. е. количество сотрудников. В обоих сценариях можно усмотреть какие-то положительные черты, но поиск дополнительного финансирования требует усилий, а сокращение штата идёт вразрез с традициями и политически недопустимо (также см. выше о ТК РФ и профсоюзах). Большая часть институтов выбрала неочевидный выход в виде сокращения ставок при сохранении зарплат: если вместо 1 человека станет 0.25 человека при той же зарплате, значит зарплата вырастет в 4 раза. В вузах сделали то же самое, либо пошли на другой трюк: ввели должность под названием «тьютор», не входившую в формулу средней зарплаты, и часть преподавателей сделали «тьюторами» при фактическом сохранении обязанностей. Тем временем, постепенно всем становится ясно, что истинный уровень зарплат не повышается в подавляющем большинстве научных организаций, что позволяет им сообща исподтишка формировать дискурс, в котором вина за неповышение зарплат возлагается на правительство.

Кратко: не дали денег, фактически потребовали сокращения штата или поиска новых источников дохода → провал.

Увеличение количества публикаций в рейтинговых журналах

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

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

В реальной научной деятельности публикации являются следствием работы увлечённых людей над интересными задачами и их, людей, желания поделиться своими находками с миром. См. пример сайтов ArXiV и MathOverflow, на которых наука прямо-таки бурлит без всяких официальных публикаций и рейтингов. А ещё есть конференции и личные контакты. В тигле общения и экспериментов из неиндексируемой руды идей выплавляется научный результат и за ним следует статья. Приравнивать научную деятельность к публикациям — значит ставить телегу впереди лошади. Вытягивание публикационной активности не обязательно должно привести к повышению активности научной. Тем более за восьмилетний срок.

И не привело. Финансирование вузы освоили с большим рвением, выполнение же поставленной задачи организовали по стандартной схеме: увеличением объёма макулатуры, в роли которой в данном случае выступили те самые индексируемые статьи. Возник новый рынок, товаром на котором являются публикации в журналах, входящих в системы цитирования SCOPUS и Web of Science. Эти системы обслуживаются зарубежными коммерческими организациями. В итоге немалая часть целевого финансирования осела на счетах этих организаций, а также на счетах российских и зарубежных интеграторов-посредников, организующих публикацию «под ключ». Особенной неразборчивостью в средствах заработка отличается SCOPUS, куда за деньги может попасть фактически любой новый журнал, и начать публиковать статьи на любые темы без рецензии. Через два года, когда «мусорность» журнала становится чересчур очевидна, его всё же исключают из индекса, после чего хозяева исключённого журнала открывают ещё один, и всё повторяется.

Предложение помощи в публикации статей

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

Тем временем международные рейтинги вузов динамически адаптировались к увеличенному количеству мусорных статей, больших коллективов авторов и артелей самоцитирования. Настройки учёта статей в рейтинге были изменены — не говоря уже о том, что статьи изначально не являлись единственной или определяющей составляющей рейтинга. В итоге ни один из 21 вуза, получившего целевое финансирование, не вошёл в топ-100. Показателен пример Казанского федерального университета, который, увлёкшись публикациями в «мусорных» изданиях, ещё и опустился в рейтинге, т. е. уронил репутацию во всех смыслах. Единственным российским вузом из топ-100 был и остаётся МГУ, который целевое финансирование не получал. Хороший материал по теме приведён в статье «Ведомостей» от 8 сентября 2019 г.

Похожая история в последние годы развернулась в академических институтах, которые, хоть в международных рейтингах и не участвуют, но тоже попали под ряд инициатив ФАНО (а сейчас — Минобрнауки), нацеленных на повышение «эффективности» институтов, выраженной в количестве индексируемых публикаций. Ещё одним слагаемым этой «эффективности» было количество патентов, что привело к появлению массы патентов, представляющих собой не изобретения, а научные идеи, к тому же изложенные в форме, непригодной для чтения.

Кратко: дали денег, не вмешивались в дела, но поставили недостижимые цели → провал.

Борьба с коррупцией

Выполнение научно-исследовательских работ (НИР) и опытно-конструкторских (ОКР) по государственному заказу подчиняется общему закону 94-ФЗ о госзакупках. С учётом сумм, выделяемых государством на науку, смешно говорить о сколько-нибудь заметной коррупции, но закон есть закон.

По 94-ФЗ вся цепочка расходов от федерального агентства к его головному институту, от него к дочерним и сторонним, и от них к частным фирмам, должна осуществляться на конкурентной основе с чётко заданными критериями выбора поставщиков/подрядчиков. (Частные фирмы далее по цепочке могут выбирать как угодно, на них закон не распространяется.)

Вспомним о том, что организации-исполнители научных работ десятилетиями одни и те же. Связи между ними также не имеют тенденции образовывать новый узор с каждым новым госзаказом. Организации, давно настроенные на совместную работу, повторяют её по одному и тому же сценарию из года в год. Аналогично с поставщиками оборудования: у каждой организации есть предпочитаемые поставщики, к которым она обращается годами. Поставщик, не желая потерять расположение клиента, работает честно, быстро и идёт навстречу в сложных ситуациях. (Начиная с необходимости соблюдения 94-ФЗ, которая сама по себе является сложной ситуацией, и далеко не все поставщики готовы работать с государственными организациями по этой причине.) Знакомый поставщик может брать дороже других, зато все спокойны за результат.

Получается, что государство заставляет организации менять партнёров, а организации этого не хотят. Возникает всеобщий сговор по формальному соблюдению закона. Соблюсти его можно двумя способами: объявить конкурс или запросить котировки. При запросе котировок сценарий зависит от масштаба. При выполнении НИР организации договариваются между собой. НИИ А выдаёт коммерческое предложение (КП) на выполнение НИР X с ценой выше, чем НИИ Б, который на эту работу претендует. Сам НИИ А претендует на НИР Y, на который НИИ Б даёт КП с ценой выше, чем А. С заказами меньших масштабов, при закупке оборудования, сама фирма-поставщик может завести себе псевдоконкурентов, которые выдают КП на бо́льшие суммы. Человекочасы, потраченные на работу по соблюдению антикоррупционного закона, организации включают в цену, т. е. государство в итоге оплачивает свою же инициативу по борьбе с коррупцией.

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

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

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

  1. Нашёлся поставщик/подрядчик, отличный от предполагавшегося изначально;
  2. он смог участвовать в борьбе за заказ;
  3. он предложил меньшую цену и выиграл;
  4. он сделал свою работу не хуже, чем ожидалось от изначального кандидата.

Ситуации в научных проектах, когда бы всё это произошло, исчезающе редки.

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

Мегагранты

Не все государственные научные инициативы проваливаются. Хорошим примером являются мегагранты, введённые постановлением правительства в 2010 г. Это финансирование, выделяемое под конкретные направления с тем условием, чтобы возглавлять новое направление был приглашён учёный с мировым именем из-за рубежа (при этом не обязательно иностранец; по факту большая часть мегагрантов выданы гражданам России). Реализация новых направлений происходила в виде создания новых лабораторий в различных университетах; финансирование шло через эти университеты. Процедура выбора приглашаемых руководителей была организована так, что приехали одновременно квалифицированные и деятельные люди, готовые искать молодых специалистов на новом месте, организовывать семинары и конференции и писать содержательные статьи в приличные журналы. Бюрократическая нагрузка на новые лаборатории была не очень большой, к тому же были использованы макулатурные ресурсы университетов. Существующие департаменты этих университетов не были затронуты; таким образом, сопротивление среды было минимальным. Приехавшие из-за рубежа грантополучатели, находясь вне паутины теневых договорённостей с местными деятелями науки, смогли сконцентрироваться на своём деле. По итогам программа были признана успешной и продолжается до сих пор, расширившись и на НИИ. Старые мегагранты продлеваются (но не все) и появляются новые.

Кратко: дали денег, поставили достижимые цели, не потребовали модификации существующей системы → успех.

Госзаказы

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

Консенсус

По общей договорённости, государственные чиновники не обладают (а если обладают — не имеют возможности пользоваться) знаниями, позволяющими им:

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

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

В таких условиях естественным образом возникла следующая модель жизненного цикла госзаказов:

  • Каждый крупный (головной) исполнитель формирует ТЗ на новую работу с расчётом, что эта работа будет поручена ему. Он может заранее выбрать себе субподрядчиков и обратиться к ним за помощью в формировании отдельных частей ТЗ, а может не обратиться. Формирование ТЗ — ни головного, ни субподрядчиков — не оплачивается. ТЗ составляется с максимально туманными формулировками, с тем, чтобы впоследствии было проще сделанную работу притягивать за уши к ТЗ. Прочая деятельность, от которой зависит получение будущих заказов, также ведётся бесплатно, и порой в колоссальных объёмах.
  • Для определения судьбы проекта госзаказчик собирает комиссию, в которую приглашаются представители всех организаций, исторически имеющих отношение к данной области науки. Плюрализм в комиссии считается явлением неуместным. Если в комиссии произойдёт спор, председатель будет вынужден либо воспользоваться своим положением, чтобы принять чью-то сторону, либо собрать для разрешения спора ещё одну комиссию, более высокого ранга. Споры увеличивают риск того, что финансирование не будет выделено вовсе. Чтобы такого не происходило, члены комиссии договариваются между собой заранее. Непосредственно развитию науки в этих теневых договорённостях уделяется меньшее внимание, чем дележу финансового пирога. Вплоть до того, что часть заказа могут отдать определённому исполнителю не для того, чтобы он выполнил эту часть хорошо, или выполнил вообще, а для того, чтобы он, будучи участником проекта, не смог выступать против него в комиссиях.
  • Всё то же самое происходит при приёмке работы и её отдельных этапов.

Сроки

Жизнь государства подчинена годичным циклам. Государственный бюджет формируется по годам, федеральные целевые программы (ФЦП) формируются на целое число лет. Выполнение НИР и ОКР делится на этапы, соответствующие годам. Соответственно на этапы, т. е. на года, делится при заключении договора финансирование. Между этапами оно может пересматриваться, но пересматривается редко и преимущественно в сторону уменьшения (из-за секвестра финансирования).

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

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

Срок сдачи работы зависит от положения исполнителя в цепочке. Головные исполнители сдают работы государству в конце ноября. От своих субподрядчиков они принимают работы в начале ноября, чтобы оставить время на объединение результатов в единое целое. Если и те имеют своих субподрядчиков, они вычитают ещё месяц. Сдача всей документации и защита (доклад с последующей поркой) обычно происходит за две-три недели до формального закрытия договора, с последующей авральной доработкой по результатам порки.

Срок заключения договора не регламентируется, кроме очевидного требования, чтобы договор был заключён раньше, чем работа будет сдана. Хоть на один день. Действует то же правило, что и со сдачей, с обратным знаком: чем дальше исполнитель находится в цепочке субподрядов, тем позже заключается договор. Несложное следствие из этого такое, что формальная продолжительность работы тем меньше, чем дальше исполнитель находится от головного. Нередко приходится начинать работать под залог того, что договор будет заключён и что в ТЗ в последний момент не будут внесены изменения. Торг насчёт ТЗ может идти долго, но не дольше, чем позволяют сроки сдачи. Поскольку обе стороны заинтересованы в сделке (в первую очередь; и лишь во вторую очередь — в самой работе), то торг нередко превращается в игру «кто первым струсит».

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

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

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

Непотопляемость

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

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

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

НИР провалить вовсе невозможно, потому что материальных объектов (не считая макетов) в НИР не создаётся. Программно-математические модели и научно-технические отчёты (НТО) можно не сделать, но невозможно не сдать. В ТЗ на НИР нет критериев квалификации сделанной продукции. Любой документ, соответствующий ГОСТу, годится. В том числе документация на программу, состоящую из десяти строк. Или база данных, состоящая из одного файла, к тому же взятого с зарубежного сайта. Или научный отчёт, являющийся копией прошлогоднего с минимальными обновлениями.

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

  • Работа, вероятнее всего, состоит из многих несвязанных между собой фрагментов. Из-за антикоррупционного законодательства государственному заказчику проще заказать одну большую работу, чем несколько поменьше. Это экономит и накладные расходы исполнителей на составление договоров, ведение канцелярии, согласование титульных листов, борьбу с борьбой с коррупцией, командировки и пр. Фактическая близость объединяемых фрагментов в научном смысле не интересует руководителей. Исследования по обеспечению работы ГЛОНАСС под землёй и под водой идут в одной работе с реализацией пульсарных шкал времени. Строительство лунного лазерного дальномера соседствует с созданием национального астрономо-геодезического стандарта.

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

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

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

Вывод из этого следующий. Работу следует принять любой ценой — с рекомендациями по доработке, с переносом сроков и т. д. Если не принять невозможно, то любой ценой следует свалить всю вину на кого-то, кто находится далеко от круга участников. Лучше всего — на другое ведомство. Например, если заказ гражданский, но его как-то касается министерство обороны, то все участники с готовностью обвинят в неуспехе его.

Проблемы простого работника

Всем известно, что сотрудники институтов чином выше завлаба никакой наукой и прикладными задачами не занимаются. У них попросту нет на это времени. У завлабов время есть — не более 25-30%, остальное отнимает бюрократия и околонаучные процессы — разные заседания, совещания, экспертные оценки и пр. В вузах схожая ситуация, с дополнительным фактором в виде преподавательской нагрузки. В результате содержательная часть работы по госзаказу наиболее часто достаётся более молодым сотрудникам, у которых времени побольше, вплоть до студентов. В определённом смысле это удачно, потому что неопытность исполнителя, хоть и может привести к огрехам в содержательной части, не представляет финансовых рисков, см. выше про непотопляемость. А для самого работника будет польза в виде приобретённого опыта. Тем не менее, лучше быть предупреждённым о следующих вещах.

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

    • НТО, представляющий собой коллекцию фрагментов научных статей, написанных авторами отчёта, и других написанных ими ранее текстов. Работа по согласованию фрагментов, оформлению и адаптации под текущую тему может быть проведена или не проведена.
    • Глава НТО, представляющая собой некачественный перевод англоязычной статьи. Статья-оригинал может быть хорошей или второсортной; во втором случе все глупости из неё сохраняются в переводе. Ссылка на оригинал может (i) присутствовать, (ii) присутствовать, но без явного указания, что из неё заимствована вся глава, (iii) отсутствовать.
    • Иллюстрации к НТО, предствляющие собой экранные снимки, сканы или даже фотографии иллюстраций к зарубежной статье или книге. Без перевода поясняющих подписей на русский. Ссылка на оригинал может присутствовать или отсутствовать.
    • Программа, ни разу не запускавшаяся (и не работающая, конечно) ни на одной машине, кроме машины её автора. Автор мог всю жизнь работать на одной ОС и компилировать программы одним компилятором в одной конфигурации сборки. Помимо привязки к ОС и компилятору, в программу могут быть вбиты абсолютные пути к входным и выходным файлам.
    • Программная документация, содержащая орфографические ошибки и оформленная максимально непригодным для чтения и редактирования образом. О соответствии ГОСТу и речи нет.
  • Невозможно полностью отделаться от работы по оформлению. Градус бюрократического маразма в ней может приводить в уныние.

    Фрагмент оформленного по всем правилам документа. Может показаться, что содержательная часть оставлена за кадром? Нет, увы, он целиком такой.

    Речь не только об НТО и программной документации. Договор требует массы сопроводительной документации. Её количество практически не уменьшается от головного исполнителя к вторым и третьим — потому что соответствующие формулировки договора и ТЗ копируются ниже по цепочке без изменений. Все государственные исполнители должны работать по одинаковой схеме, чиновники за этим следят. Логические соображения не учитываются. Например, субподрядчик, не имеющий военпреда, может быть вынужден работать по военному ГОСТу (вообще говоря, недоступному ему) — исключительно потому, что головной исполнитель работает по военному ГОСТу.

    Приведём для иллюстрации перечень сопроводительной документации, требуемый при работе с Роскосмосом.

    • Технический акт приемки этапа, содержащий перечень всей сделанной работы.
    • Информационная карта (ещё один своеобразный перечень всей сделанной работы).
    • Выписка из протокола внутреннего заседания совета организации, на котором рассматривались результаты работы (в действительности количество людей, готовых собираться ради рассмотрения этих результатов, равно нулю).
    • Акт о разработке (для программы или базы данных).
    • Уведомление о получении результата интеллектуальной деятельности, способного к правовой охране (для будущей регистрации программы или базы данных в федеральном реестре).
    • Реферат (тоже для регистрации).
    • Согласия всех авторов на указание сведений о них (тоже для реестра). Включает паспортные данные авторов.
    • Согласия всех авторов на обработку персональных данных, указанных в предыдущем пункте, во исполнение федерального закона о персональных данных. Эти согласия также включают паспортные данные. Фактически никакой охраны персональных данных не происходит, поскольку в пылу срочной сдачи и постоянной переделки документов все эти согласия в виде сканов путешествуют между организациями по электронной почте и о приватности никто не заботится.
    • Аннотационный отчёт (короткая версия НТО, которая никому не нужна).
    • Перечень созданного имущества (да, бумажные отчёты и компакт-диски с программами — это имущество, оно должно иметь инвентарные номера и храниться на складе).
    • Сохранная расписка (то же самое, что в предыдущем пункте, по другой форме и с упором на хранение на складе).
    • Перечень результатов интеллектуальной деятельности. В него входят и НТО (как «произведения науки»), и программы. То есть то же самое, что и в предыдущих двух пунктах — но на этот раз не как имущество, а как объект интеллектуальной собственности.
    • Сведения о результате научно-технической деятельности (то же самое, что в предыдущих трёх пунктах, по другой форме и неизвестно зачем).
    • «Форма 1» по учёту результатов интеллектуальной деятельности. Ещё одна анкета для ещё одного федерального реестра, но со спецификой применения, а не охраны прав. Требуется для программ и баз данных, но не для НТО.

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

  • При долгой работе неизбежно замечается несовершенство обстановки в научной организации. Это нормально. Хуже, что это несовершенство невозможно исправить никакими инициативами снизу. «Снизу» в данном случае находятся все сотрудники, не входящие в верхнюю десятку руководителей. Мнение этих сотрудников по научным вопросам может цениться. Предложения, не затрагивающие сложившийся порядок вещей, типа «поставить вешалку в прихожую» или «принять на работу студента», могут приниматься. Мнения же по любым другим вопросам игнорируются. Такая схема является закономерным следствием истории развития организации, которая, как и всякий живой организм, подчинена внешним условиям.

Заключение

Наука в России, несмотря на лошадиные дозы формалина, всё ещё жива и развивается — по большей части за счёт терпения и усилий преданных ей (науке или России — выбирайте по своему усмотрению) людей. Для справедливости ещё раз отметим опыт мегагрантов, в котором государство сыграло положительную роль. Кстати, внимательный читатель мог отметить нарушение мегагрантами основополагающего принципа: часть созданных лабораторий перестаёт получать финансирование, вместо них заводятся новые. Это даёт надежду на реализацию положительного отбора. Также вспомним о том, что научное сотрудничество с заграницей не запрещено и ценится с обеих сторон. В 2019 г. попытка ограничить это сотрудничество вызвала такой шквал возмущения в прессе, что Минобрнауки дало задний ход.

Вызывают уважение, граничащее с изумлением, успехи Росатома, который при равных исходных данных с Роскосмосом (советское наследие, атмосфера войны и секретности, иностранные заказы) за последние 30 лет нисколько не сдал позиции, коммерчески успешен и радует инновациями на мировом уровне. Объяснением этому может быть то, что Росатом представляет собой государство в государстве — и правительство Росатома хорошо делает свою работу.

Напоследок вернёмся к самому началу: наука в России делается преимущественно в государственных учреждениях. Почему это так? Ведь наука — это не печатание денег и не содержание тюрем. Нет закона, делающего науку прерогативой государства. Нет и законов, запрещающих частным организациям выполнять научные госзаказы. Государство не мешает науке развиваться в частных организациях и даже может платить им за исследования.

Три верхние позиции всемирного рейтинга университетов занимают частные университеты США (MIT, Стэнфорд, Гарвард). Наиболее известная организация в США и в мире, ведущая космические исследования — это Лаборатория реактивного движения (JPL), являющаяся подразделением NASA — государственного агентства. Но есть нюанс: при том, что имущество JPL — это имущество NASA, работники JPL — это работники Калифорнийского технологического института (Caltech), занимающего четвёртую строчку всемирного рейтинга. Это тоже частный институт.

Это не означает, что вся наука должна быть частной. Последующие строки рейтинга заняты британскими государственными университетами и Швейцарской высшей технической школой (ETH). Да и в США есть сильные государственные университеты, а также Центр космических полётов Годдарда (NASA GSFC), сотрудники которого являются государственными служащими. GSFC является ближайшим конкурентом JPL; в целом американские государственные организации в США конкурируют с частными, находясь в равных условиях.

Бытует мнение, что лишь прикладная наука может развиваться частным образом, тогда как фундаментальные исследования нужны лишь государству. Это не совсем так. Фундаментальные исследования нужны исследователям. Нередко эти исследователи познают устройство мира, параллельно работая над вполне прикладными задачами. Карл Янский, инженер Белловских лабораторий, занимавшийся изучением радиопомех, открыл космическое радиоизлучение, идущее из центра Млечного пути. С этого открытия в 1933 г. началась радиоастрономия. Эдвард Лоренц, работая в MIT над численным расчётом модели погоды, обнаружил в 1961 г. явление математического хаоса. Впрочем, в этом случае нельзя сказать, что теория хаоса началась с этого открытия; она началась с работ Пуанкаре в XIX в. и была развита Колмогоровым в середине XX в. В свою очередь, Пуанкаре и Колмогоров заинтересовались теорией динамических систем, решая более практические задачи расчёта орбит планет и течения жидкостей, работая на профессорских должностях в государственных университетах.

Подытожим: для здорового развития полезна и государственная наука, и частная. В России исторически сложился сильный перекос науки в сторону государства, и частной науки в стране почти нет, но на самом деле чуть-чуть есть, см. например Независимый московский университет, JetBrains, Яндекс.

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

Вид на Пьяцца-дель-Кампо в Сиене. Автор: Филип Каппер (источник)

пятница, 10 января 2020 г.

Итоги года

... и заодно всех восьми лет работы в ИПА РАН.
  • Исследованы перспективы размещения радиотелескопа на Луне. Кратко: такой инструмент, работая в совокупности с земными радиотелескопами, позволит многократно уточнить точность привязки лунной системы координат к земной и точность карты внегалактических радиоисточников; а также открыть новые явления в динамике лунной коры и строении активных ядер галактик. Статья (препринт).
  • Показано, что лазерная локация Луны при нынешней точности и частоте наблюдений (благодаря инфракрасному лазеру) может быть применена не только для анализа динамики Луны и системы «Земля-Луна», но и — впервые с 1980-х годов — для уточнения суточных параметров вращения Земли, что актуально для реализации связи между земной и небесной системами отсчёта. Статья (препринт).
  • Показано, что радиоинтерферометрические наблюдения внегалактических радиоисточников, расположенных близко к Солнцу на небесной сфере, чувствительны не просто к электронной плотности плазмы в солнечной короне, но и к асимметрии этой плотности, что открывает возможности для использования радиоинтерферометрии со сверхдлинными базами (РСДБ) для сравнения различных моделей строения солнечной короны. Статья (препринт). Презентация.
  • Разработан метод численного интегрирования систем дифференциальных уравнений с запаздывающим аргументом (включая отрицательное запаздывание, т. е. опережение). Такие уравнения встречаются в описании движения небесных тел, подверженных приливам, в частности системы «Земля-Луна». Метод является расширением классического многошагового метода численного интегрирования с предиктором и корректором. Статья (препринт). Презентация. Исходный код.
  • Придуман предметно-ориентированный язык программирования (DSL) под названием Landau для описания динамических систем. Особенность Landau и его компилятора — в поддержке автоматической генерации кода для вычисления производных вычисляемых величин по произвольным параметрам, в т. ч. при интегрировании этих производных вместе с самими уравнениями, описывающими динамическую систему. Создан транслятор (на Racket), преобразующий код на Landau в код на Racket или C. Статья. Презентация. Исходный код.

пятница, 30 марта 2018 г.

GOSTdown: автоматическая вёрстка документации по ГОСТам

Введение

В данном посте описаны решения, которые легли в основу GOSTdown — набора шаблонов и скриптов для автоматической вёрстки. GOSTdown предназначен для тех, кому приходится писать и оформлять научно-технические отчёты (НТО) или программы по Единой системе программной документации (ЕСПД). Такие документы нередко имеют крупный размер, создаются долго и несколькими людьми, и перед сдачей проверяются на соответствие ГОСТам. Традиционно для создания таких документов используется Microsoft Word. Исполнители привыкли делать в Word, заказчики привыкли принимать в Word. Заказчиков мы обсуждать не будем, а поговорим об исполнителях и их проблемах.

Проблема

При создании документации нередко требуются следующие вещи:
  • Нумерация глав и разделов, генерация оглавления
  • Вставка и нумерация формул, таблиц и рисунков
  • Нумерация и форматирование многоуровневых списков
  • Ссылки на главы, разделы, формулы, таблицы и рисунки
  • Ведение перечня использованных источников, генерация списка литературы и ссылок на него в тексте
  • Автоматический подсчёт и вставка в текст количества страниц, таблиц, рисунков, приложений
  • Вставка текста из других документов и оформление его под стиль
  • Протоколирование изменений, внесённых разными людьми
  • Слияние изменений, сделанных разными людьми в своих копиях документа
Само собой, подразумевается отсутствие ручной работы. Никакой перенумерации ссылок или сравнения двух документов «на глаз». Никакого выставления отступов и промежутков индивидуально для абзаца. Рутинные задачи должен делать компьютер.

Строго говоря, Word имеет средства для всех вышеперечисленных задач. Да, для всех. С параллельным редактированием и слиянием изменений Word в одиночку не справится, но установка сервера Sharepoint решит и этот вопрос.

Допустим, существуют люди, которые используют Word и его возможности, и у них всё получается. Им будет неинтересно читать дальше. Этот пост может представлять интерес для людей, у которых:
  • Какие-то заголовки упорно не появляются в оглавлении, а другие, которые в нём не нужны — упорно появляются
  • Текст документа пестрит сообщениями [ошибка! источник ссылки не найден] или ненадёжными прямыми номерами, вставленными отчаявшимися коллегами
  • Постоянно ломается форматирование многоуровневых списков
  • Съезжает форматирование при вставке пункта списка из буфера обмена, вне зависимости от способа вставки
  • Отслеживание изменений невозможно, потому что от «Отформатировано: русский» рябит в глазах
  • Нет Sharepoint, а если он и появится, никто не научится им пользоваться
  • При сохранении doc-файла в .docx работа Word необъяснимо и фатально замедляется
  • Любая попытка привести в порядок зоопарк стилей в 100-страничном документе делает всё только хуже
  • Есть необходимость редактировать основной текст документа в iOS или Android, и при этом не портить оформление при сохранении.

Решение

Решение заключается в том, чтобы редактировать документ в формате, основанном на тексте (plain text), а для чтения, печати и сдачи осуществлять преобразование текста в docx-файл, оформленный по всем правилам.

Исходный текстовый формат позволит легко отслеживать и сливать изменения (в идеале — с применением git или иной системы контроля версий). Автоматизированная процедура преобразования в docx пронумерует всё необходимое, расставит номера ссылок и применит стили оформления.

Пример исходного текста в Markdown:

Результат в PDF, сохранённом из docx:

Полный пример документа см. в репозитории. Там же находится руководство пользователя (README.md). Примеры результатов см. в архиве артефактов репозитория.

Остальное — технические детали, в которых всё самое интересное.

Выбор исходного формата и конвертера

С конвертером всё просто: он фактически единственный и называется Pandoc. Он обладает уникальным движком преобразования латеховских формул в формулы Word 2010.

Pandoc — универсальный инструмент для преобразования более чем 20 форматов друг в друга. Но схема его работы такова, что любые преобразования идут через внутреннее промежуточное представление документа в самом Pandoc. Модель внутреннего представления не содержит всех возможностей всех исходных форматов (и наоборот, содержит возможности, которые присутствуют не во всех исходных форматах). Это фактически приводит к выбору формата для нашей задачи. Есть только один формат, на 100% соответствующий внутреннему представлению Pandoc: Markdown. Точнее, Pandoc’s Markdown (формат Markdown сам по себе существует во многих вариациях).

Формулы в Pandoc’s Markdown вводятся в формате LaTeX. Для библиографии доступны разные варианты, включая BibTeX. Это привычно многим сотрудникам научных организаций, которые занимаются написанием статей.

Иллюстрации в Markdown вставляются в виде внешних файлов в форматах PNG, JPEG и EMF (последний — для графиков и векторных рисунков).

Ссылками в Pandoc занимаются т.н. фильтры: pandoc-citeproc (для библиографических ссылок) и pandoc-crossref (для всего остального). Эти фильтры — отдельные программы, запускаемые из Pandoc и работающие с документом в его внутреннем представлении.

Библиография

Существует два ГОСТа: 7.1-2003 (Библиографическая запись. Библиографическое
описание) и 7.0.5-2008 (Библиографическая ссылка). При создании списка
литературы в программной и научно-технической документации формально требуется применять ГОСТ 7.1. Но реально его никто не применяет из-за нелепых требований:
  • вставлять пометку «[Текст]» в ссылки на любые тексты (т.е. практически во все ссылки);
  • повторять имя первого автора дважды (включая случай, если автор всего один);
  • писать полный список авторов после названия (до трёх включительно), а если их четыре и более, то упоминать только первого «и др».
ГОСТ 7.0.5 обходится без этих требований, поэтому его более охотно используют
вместо 7.1 — ту его часть, которая называется «затекстовые ссылки», про
которые, впрочем, сказано, что «Совокупность затекстовых библиографических
ссылок не является библиографическим списком».

В пакете pandoc-citeproc, используемом в Pandoc, есть стилевой файл в формате CSL 1.0.1, основанный на ГОСТ 7.0.5 с отдельными элементами ГОСТ 7.1.

В целом, правила ГОСТов (как 7.1, так и 7.0.5) настолько сложны, что автоматизировать библиографию по всем правилам невозможно. Вышеупомянутый формат CSL 1.0.1, задуманный как универсальный окончательный формат для формирования всей библиографии на свете, разумеется, не подходит в полной мере для этих ГОСТов.

В частности, в ГОСТе есть разумное требование: английские ссылки должны быть с английскими вспомогательными словами (Vol., No., pp., ed. и прочие), а русские — с русскими. В CSL 1.0.1 такой опции не предусмотрено. Опция появилась в расширении CSL-M, которое не поддерживается в pandoc-citeproc. Это препятствие удалось частично преодолеть ценой установки вспомогательного поля «note» в русскоязычных статьях и дополнительных изменений в CSL-файле.

Шаблон

Pandoc работает с основным текстом документа. Такие вещи, как титульный лист и колонтитулы, легко создаются пользователями в Word в режиме WYSIWYG, тогда как их создание в Pandoc затруднено или невозможно. Для разрешения этого противоречия в GOSTdown существует файл-шаблон в формате docx, который содержит следующее:
  1. Формат колонтитулов (Pandoc «подхватывает» этот формат при генерации документа с основным текстом)
  2. Перечень стилей, которые впоследствии использует Pandoc при генерации docx-файла
  3. Собственно неосновное содержимое документа, т.е. небольшая часть содержимого, которая не генерируется из Markdown.

Постобработка

Напомним, Pandoc преобразует файл основного текста в формате Markdown в аналогичный файл в формате docx. Сразу после получения этого файла возникает задача вставки его в нужное место шаблона (после титульного листа). Этим занимается скрипт постобработки. И не только этим: файл, сгенерированный Pandoc, хотя и содержит необходимые стили, всё же не является готовым продуктом. Для получения готового продукта необходимо следующее:
  1. Установка стилей нумерации и отступы для списков и вложенных списков (Pandoc в настоящий момент не обладает механизмом шаблонизации списков)
  2. Исправление выравнивания номеров формул (нумерованные формулы pandoc-crossref генерирует как таблицы из двух колонок)
  3. Исправление горизонтального выравнивания ячеек таблиц, в которых есть только формула и больше ничего (Word в таком случае берёт настройки выравнивания из формулы, а не из ячейки, а Pandoc не заботится о том, чтобы выравнивание в формуле совпадало с оным в ячейке.)
  4. Установка стилей таблиц (Pandoc не умеет этого делать)
  5. Установка стилей ненумерованных заголовков (они отличаются от стилей нумерованных, а Pandoc присваивает всем заголовкам одного уровня один стиль).
  6. Разные другие мелочи по части форматирования
  7. Вставление оглавления средствами Word
  8. Подсчёт количества страниц, рисунков, таблиц, приложений, литературных источников, и вставка этих чисел в необходимое место документа.
  9. Сохранение полученного документа не только в docx, но и в PDF.
Всё это делается с помощью Word COM. Фактически, любая инсталляция Word на Windows открывает возможности для программного управления содержимым документа так же, как пользователь делал бы это вручную в программе. Широко известно применение этой технологии в макросах (VBA), но макросы не очень удобны тем, что сами хранятся в документе. Менее известен следующий факт: с COM-объектами без труда можно работать в скриптах Powershell. Это и реализовано в GOSTdown, см. скрипт для запуска Pandoc и постобработки.

Вопросы и ответы

1. Где рамочки с боковыми ячейками для подписей?

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

2. Всё это точно по ГОСТу?

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

3. Почему шрифты не Arial и Times New Roman, а какие-то другие?

Требований по гарнитуре нет в ГОСТах (за исключением ГОСТов на стандарты и на конструкторскую документацию). В представленных шаблонах используются общедоступные гарнитуры фирмы «Паратайп»: PT Serif (с засечками), PT Sans (без засечек) и PT Mono (моноширинный) Объяснение, почему паратайповские шрифты идеально подходят для документов на русском языке, см. здесь.

4. Почему docx-файлы такие большие?

Из-за вышеупомянутых шрифтов, встроенных в файл. Можно отключить встраивание шрифтов (за него отвечает опция -embedfonts), и тогда файлы станут адекватного размера, но если на компьютере вашего коллеги или заказчика не установлены шрифты PT Serif, PT Sans и PT Mono, то при открытии документа в Word шрифты заменятся на шрифты по умолчанию, и документ в итоге будет выглядеть не так, как было задумано.

5. Почему не LaTeX?

Государственные заказчики не возьмут LaTeX-файл, т.к. не знают, что это такое. В принципе, если заказчику не нужен исходник и достаточно PDF-файла, то можно использовать и LaTeX.
Pandoc умеет генерировать docx-файлы из LaTeX, но генерация осуществляется с потерями из-за разницы в идеологиях LaTeX и Word в области стилей. Теоретически возможен вариант генерации и LaTeX и docx-файлов из одного исходника в Markdown с помощью Pandoc, но в реальности такое средство пока не создано.

6. Почему не Google Docs? Там даже формулы появились

Да, и даже доступны дополнения (Add-ons) для нумерации и библиографии. В Google Docs удобные средства совместной работы, но ограниченные средства форматирования. Нет стилей (кроме небольшого исходного набора). Проблематична вставка векторных рисунков. Нет поддержки офлайновой работы. (На самом деле есть, но тогда перестаёт решаться проблема слияния изменений.)

7. Почему не LibreOffice?

Во-первых, потому, что в LibreOffice/OpenOffice крайне плохо обстоит дело с отображением формул. Позвольте не называть остальные 17 причин.

8. Как преобразовать имеющийся docx в Markdown?

Конечно же, с помощью Pandoc (он ведь преобразует в любую сторону). Конечно, информация о стилях исходного документа при этом потеряется. Возможно, после конвертации потребуется ручная правка. Дополнительные проблемы могут возникнуть с формулами: Pandoc распознаёт в docx-файлах только формулы, набранные средствами Word 2010 (не MS Equation и не MathType). Известен трюк с участием LibreOffice для пересохранения формул MS Equation в Word 2010. Для более позднего MathType он, кажется, не работает.

9. Чем редактировать Markdown?

Любым текстовым редактором, начиная с notepad.exe. Например, для Windows есть Notepad++, для Linux — Emacs, для всех десктопных ОС — Visual Studio Code. Все они бесплатные.
Преимущество текстового представления в том, что вносить правки в текст можно хоть со смартфона в самолёте (и если настроен GitLab CI, вы сразу получаете готовый документ).

10. Что такое Gitlab CI и как мне получить docx, редактируя файл не на Windows?

См. соответствующий раздел руководства. Машина с Windows (удалённая) всё же понадобится, см. раздел «Системные требования».

11. Чем редактировать Markdown так, чтобы сразу видеть результат?

Это сложнее. Вам потребуется или вышеупомянутый Visual Studio Code, или Atom. Потребуется также установить расширение Markdown Preview Enhanced (MPE). Альтернативное расширение — Markdown Preview Plus (MPP), только для Atom. Эти расширения используют Pandoc для того, чтобы делать из вашего Markdown-файла HTML-файл для предпросмотра. Прочие средства редактирования Markdown, в т.ч. онлайновые, рассчитаны на другие диалекты Markdown и не будут отображать Pandoc’s Markdown в полной мере.

Пользовательские настройки для MPE в VS Code таковы:
{
    "markdown-preview-enhanced.usePandocParser": true,
    "markdown-preview-enhanced.pandocArguments":
       "--filter=pandoc-crossref, --filter=pandoc-citeproc"
}
При нажатии Ctrl+k v включается предпросмотр, который, хоть и не совпадает в точности с будущим docx-файлом, аккуратно отображает все формулы, таблицы, блоки кода и изображения (кроме EMF).


12. Таблицы неудобно редактировать в виде текста, что делать?

В Visual Studio Code и Atom существуют многочисленные расширения для упрощения работы с Markdown, в т.ч. с таблицами. Таблицы самого сложного вида (с многоабзацевыми ячейками) они, к сожалению, не поддерживают. Такие таблицы поддерживает Emacs и его table-mode.

13. Мне нужны вещи, которые есть в Word, но отсутствуют в Markdown, что делать?

Если речь идёт об относительно небольшом фрагменте документа, не укладывающимся в формат (например, сложная таблица с объединёнными ячейками), то пользователь может держать этот фрагмент в отдельном docx-файле, редактируя его в Word. Вставка фрагмента в основной текст может делаться скриптом, аналогично тому, как сейчас сам основной текст вставляется в шаблон на место %MAINTEXT%.

Благодарности

В создании GOSTdown принимала активное участие Алёна Водолагина (ИПА РАН), также помощь оказывал Даниил Аксим (ИПА РАН). Разумеется, GOSTdown не был бы возможен без замечательного ПО: Pandoc, pandoc-citeproc и pandoc-crossref (автор последнего — Николай Якимов, МАИ). Ну и Microsoft помогла своими Word COM и Powershell, чего уж там.