amarao_san

Categories:

Поток сознания: энтропия в коде

Предварительные тезисы:

1. Понятие энтропии кода. 

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

(промежуточный тезис — хороший код имеет низкую энтропию)

2. Понятие полезности кода.


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

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

Из этого получается, что действия, которые повышают энтропию кода, повышают и энтропию системы, которая этот код применяет.

4. Увеличение связности и сайд-эффектов ведёт к увеличению энтропии.

Если мы рассмотрим программу, которая состоит из двух областей кода, то какие программы будут иметь меньшую энтропию? Те, у которых есть случайные связи (в изобилии) между двумя областями, или те, у которых почти полная изоляция с минимальным взаимодействием? Очевидно, что пространство вариантов программы с «минимальным взаимодействием» меньше, чем пространство всех вариантов связей разных кусков программ друг с другом.

(Мысленный эксперимент: Пусть у нас есть три переменные А1, Б1, В1 и А2, Б2, В2, относящиеся к областям 1 и 2. Рассмотрим два варианта множества программ: (1) множество всех программ, в которых области взаимодействуют через соотвествие А1-А2 и (2) множество программ, в которых области взаимодействуют через соответствие: A1-A2, A1-Б2, A1-В2, A1-(A2-Б2), A1-(A2-В2), ... (A1,Б1В1)-(А2,Б2,В2). Очевидно, второе множество сильно больше первого, то есть этропия у программы в которой области взаимодействуют через одну переменную меньше, чем если там «шути что».)

Теперь, собственно, мысль:

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

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


Error

default userpic

Your IP address will be recorded 

When you submit the form an invisible reCAPTCHA check will be performed.
You must follow the Privacy Policy and Google Terms of use.