Юриспруденция и программирование… Казалось бы, что может быть общего у этих двух совершенно не похожих и не связанных друг с другом сфер деятельности? Юристы — это стопроцентные гуманитарии (по крайней мере так считается), а программисты — это технари, копающиеся в машинном коде. Но правда в том, что эти две области знаний, как ни странно, имеют очень много общего. А, главное: у них одна основа — логика! Сейчас я попытаюсь это доказать на примере языка JavaScript.
Что такое Закон в широком смысле? Это язык программирования, на котором написано всё человеческое общество, социальные связи, взаимодействие субъектов права с объектами и между собой. Закон, как и язык программирования, имеет своё внутреннее устройство, логику, встроенные в него конструкции, типы, объекты и их методы. Физические и юридические лица, объекты права, такие как недвижимость, ценные бумаги, любые вещи — это всё типы данных, которые взаимодействуют друг с другом по определённым правилам. Общество с ограниченной ответственностью имеет свои особенности, но является разновидностью более общего понятия «коммерческие юридические лица», которое, имя свои особенности, также является разновидностью ещё более общего понятия «юридические лица». И если какие-то черты специальной конструкции не урегулированы напрямую, то они регулируются свойствами её более общего предка. Что это, если не классы и наследование?
Суды и другие гос. органы — это интерпретатор, который поддерживает функционирование всей этой системы в целом, а так же конкретных правоотношений, сделок и договоров в частности. А что такое, например, договоры? Это конкретные программы, написанные для конкретной цели, выполняющие конкретную функцию и основывающиеся на самом языке программирования и его синтаксисе — Законе. Каждый смысловой блок договора — функция. А, например, вот это: «ООО «СтройТорг», именуемое в дальнейшем Продавец, и ИП Петров А.П., именуемый в дальнейшем Покупатель, составили настоящий договор…». И далее вся программа/договор оперирует «продавцом» и «покупателем», а не конкретными ООО или ИП. Это же переменные! Вернее, в данном случае константы const, в которые записаны определённые значения.
Интересно, что в договоре могут отсутствовать многие условия, но это не значит, что их там нет. Это лишь означает, что эти условия регулируются самим законом и наследуются данным конкретным договором. При этом мы можем в договоре переопределить некоторые унаследованные (inherited) встроенные в язык свойства, если язык это позволяет. Это так называемые диспозитивные нормы закона (например: гарантийный срок начинает течь с момента передачи товара покупателю, если иное не предусмотрено договором купли-продажи). Некоторые же свойства переопределить нельзя. Это так называемые императивные нормы права (например: соглашение об устранении имущественной ответственности экспедитора или уменьшении ее размеров, установленных настоящим Федеральным законом, ничтожно).
А что такое вот эта фраза где-то в договоре: «передача товара производится продавцом покупателю в порядке, предусмотренном настоящим договором»? Это this. Обращение внутри объекта к самому себе, вернее к объектному литералу, на котором вызван метод…
Далее, в юриспруденции мы также можем видеть огромное количество условных конструкций if/else, причём как в конкретных договорах, так и в самом законе: «Если на товар не установлен гарантийный срок или срок годности, требования, связанные с недостатками товара, могут быть предъявлены покупателем … в пределах двух лет со дня передачи товара покупателю… Если на товар установлен гарантийный срок, покупатель вправе предъявить требования, связанные с недостатками товара, при обнаружении недостатков в течение гарантийного срока».
Помимо условных конструкций в тех же договорах мы можем встретить… циклы! Например такое условие: «Цена настоящего договора складывается из цены всех заявок Заказчика. По достижении цены договора суммы в размере 10 000 000 рублей настоящий договор считается автоматически расторгнутым». Это ни что иное, как цикл while. Начальное значение цены договора i = 0 руб. Каждая заявка Заказчика — это итерация, увеличивающая значение переменной i на некоторую сумму. Перед каждой следующей итерацией программа проверяет, не достигла ли общая цена i установленного лимита. Как только лимит достигнут, цикл прекращается — договор расторгается.
А есть ли в законе ошибки и их обработка? Естественно! Любое нарушение закона или договора — это ошибка, error, ненормальное положение вещей. Эта ошибка обрабатывается либо так, как описано в законе, либо путём функции handler, написанной самими сторонами в договоре. Любой блок договора с описанием обязанностей сторон вместе с корреспондирующим ему блоком про ответственность за нарушение обязанностей (неустойки за просрочку, штрафы за неисполнение и т.п.), это ни что иное, как конструкция try/catch. Если обязанности выполнены надлежащим образом, блок catch просто пропускается программой. Если обязательство нарушено, эта ошибка обрабатывается блоком catch (ответственность сторон). А если ошибка критическая, то это может привести даже к расторжению договора, то есть полной остановке программы (throw new Error).
Можно подобрать ещё массу таких примеров, демонстрирующих сходство юриспруденции и программирования, это лишь самые яркие…
В заключение хочу отметить, что выступление в суде, обоснование своих доводов и возражений, предъявление доказательств — это всё также строго упорядоченные процессы, подчиняющиеся логике и не допускающие произвольностей. Конечно, судебный процесс содержит в себе значительный элемент субъективности, пресловутый человеческий фактор. Но логика, причинно-следственные связи всё же на первом месте. Даже если вы чисто по-человечески убедили судью в своей правоте, но потеряли важное доказательство, документ, обосновывающий вашу позицию, вы скорее всего проиграете суд. Компилятор не будет додумывать за вас, что вы там имели ввиду, если вы пропустили ключевое слово, закрывающую скобку или критически важную точку с запятой. Поэтому логические рассуждения и внимательность чрезвычайно важны как в юриспруденции, так и в программировании.
Спасибо, что дочитали до конца. Мне просто захотелось поделиться своими наблюдениями, которые я собрал за время своего обучения frontend-разработке, имея за спиной при этом 16-летний юридический стаж, несколько сотен судебных дел и несколько тысяч договоров и соглашений. Успехов Вам в учёбе и работе! Двигайтесь только вперёд и наслаждайтесь процессом!