Рефакторинг законодательства

Jul 29, 2021 12:36


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

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

Сохранение смысла при изменении текста (насколько это нужно - обсудим ниже) в рефакторинге представляет основную трудность. Исследования лингвистов в установке эквивалентностей текстов тут не сильно помогут - изменения смысла при слишком опрометчивом изменении текста могут оказаться неочевидными и не очень предсказуемыми. Сейчас нельзя просто взять и упростить в тексте "среднее общеобразовательное учреждение" до "школы" - к закону тут же примажутся Высшая школа экономики, театр "Школа современной пьесы", автошкола, школа диабетиков в районной поликлинике и т.п.
Но средство для сохранения смысла в программировании тоже есть. Текст закона надо "накрывать тестами" - видимо, и автоматизированные тесты, и описание сценариев для тестирования вручную можно обобщить до одного процесса: описание возможных ситуаций, при которых закон может быть применён или отказаться быть применяемым. Как правило, ситуации описываются на каждое "условие" или на каждый "вариант".   Подобный текст с вариантами будет на порядок длиннее самого закона и займёт много рабочего времени законодателей, что кажется расточительством - однако, для улучшения качества и надёжности текстов это крайне полезно.
Изменение текста в таком случае будет корректным, если оно сохранит возможное действие закона при каждой ситуации - и не будет, если действие закона хотя бы в одной ситуации изменится. Хочется, конечно, совместить и улучшение текста, и улучшение смысла, но принцип "двух шляп" теоретика рефакторинга Фаулера советует нам каждый раз выбирать какое-то одно.
Описание тестовых ситуаций, к тому же, послужит удобным и понятным комментарием к тексту закона. Его можно написать и заранее к ещё не написанному законопроекту - что соответствует принципу Test Driven Development - и потом дописать законопроект к этим тестам. Если происходит "баг" - кто-то применяет закон так, что это противоречит той идее, ради которой он писался, или происходит ещё что-то вредное - эта ситуация становится тестовой, в которой сработает следующая, исправленная версия закона, сохранив при этом все предыдущие.
Вернёмся, наконец, к вопросу смысла. Процесс принятия законов мне представляется последовательностью выявления следующего:
  1. Жизненная проблема, требующая решения в законодательстве.
  2. Принципы - этические, научные, политические, идеологические (да, в парламентах заседают политики, члены партий) - которые могут определить решение этой проблемы.
  3. Общие принципы решения данной проблемы, спроецированные на неё из п.2
  4. Логика решения проблемы в законе. Вырабатывается с учётом вляния других явлений на возможные ситуации, наличия в стране ресурсов для решения проблемы, необходимости компромисса между фракциями и так далее.
  5. Текст нового закона, выражающий эту логику.

Мы видим, что одного наличия хороших принципов в п.2, как полагают наиболее политически активные граждане, для качественного законодательства недостаточно. Появляется сложность, и она может появиться как в пункте 4, так и в пункте 5. Для устранения чисто языковой сложности в самом тексте нужен рефакторинг - но рано или поздно упрощение текста упрётся в сложность лежащей за ним логики. Логику тоже можно и нужно упрощать, но делать это стоит ещё аккуратнее с тщательным составлением и рассмотрением тестовых ситуаций - за изменениями их исходов могут пойти изменения в судьбах людей.
Работа программистом привела меня к другому отношению к различным правилам и законам. Нормативный документ - вообще говоря, не священное писание, которое не надо трогать, но и не бумажка, написанная бюрократами, чтобы мешать людям жить как они хотят. Это - инструмент для улучшения качества жизни и работы людей, для решения жизненных проблем. И этот инструмент требует обсуждения и усовершенствования. О законе можно сказать, что он "хорош" и "работает", если его "тупое", формальное, буквально применение, независимо от личных качеств исполнителей, приводит именно к тем результатам, ради которых он принимался. Его будут исполнять живые люди, но пусть нам не придётся надеяться на то, что они заткнут проблемы закона - пусть его исполняют так, как машина исполняет программный код.

вопросы

Previous post Next post
Up