Ну, мера, которую я использую, или, как мне кажется, я использую, заключается в следующем:
Для каждого независимого, единственного, однострочного, функционального требования типа «возьми или оставь» сделайте снимок базы кода перед его реализацией. Затем осуществите это, включая поиск и исправление ошибок, допущенных в процессе. Затем запустите diff
между кодом базы до и после. diff
Покажет вам список всех вставок, удалений и модификаций , которые реализованы изменения. (Например, вставка 10 последовательных строк кода - это одно изменение.) Сколько было изменений? Как правило, чем меньше это число, тем более понятен код.
Я называю это избыточностью исходного кода, потому что это похоже на избыточность кода с исправлением ошибок. Информация содержалась в 1 чанке, но была закодирована как N чанков, которые должны быть выполнены вместе, чтобы быть последовательными.
Я думаю, что это идея DRY, но она немного более общая. Причина, по которой хорошо, что этот счет является низким, заключается в том, что если для реализации типичного требования требуется N изменений, и, как ошибочный программист, сначала вы выполняете только N-1 или N-2 из них правильно, вы помещаете 1 или 2 ошибки. В дополнение к программированию O (N), эти ошибки должны быть обнаружены, найдены и устранены. Вот почему маленький N это хорошо.
Поддерживаемость не обязательно означает читабельность для программиста, который еще не изучил, как работает код. Оптимизация N может потребовать выполнения некоторых вещей, которые создают кривую обучения для программистов.
Вот пример.
Одна вещь, которая помогает, - это если программист пытается предвидеть будущие изменения и оставляет инструкции в комментариях к программе.
Я думаю, что когда N уменьшается достаточно далеко (оптимум равен 1), исходный код читается больше как предметно-ориентированный язык (DSL). Программа не столько «решает» проблему, сколько «излагает» проблему, потому что в идеале каждое требование просто повторяется как отдельный фрагмент кода.
К сожалению, я не вижу людей, которые учатся делать это очень много. Скорее, они, кажется, думают, что ментальные существительные должны стать классами, а глаголы - методами, и все, что им нужно сделать, - это повернуть ручку. По моему опыту, это приводит к коду с N или более 30.