Хороший код понятие не формализуемое, сегодня. Существует множество практик сомнительных и не очень которые позволяют или нет, вам написать хороший код. Многое зависит от того как вы для себя определяете понятие хороший код.
Есть один важный параметр который присутствует почти всегда. Это способность других людей понимать написанный вами код. И чем проще его понять тем лучше. Это позволяет новому члену команды быстро влиться в проект, быстрее найти баг или выполнить рефакторинг. Простота позволяет тратить меньше интеллектуальных ресурсов для решения задачи, а значит и быстрее решить её с точки зрения временных затрат.
Но простота тоже не тривиальное понятие. Оно в частности зависит от того кто взаимодействует с объектом. Некоторый код(информация) для одно будет простой и понятной, для другого нет.
Ваша бабушка ничего не поймет даже в самом простом коде который очевиден для студента первого курса, а студент первого кода не поймет код написанный средним программистом на самом обычном проекте. (исключения не рассматриваем)
Для того чтобы понизить сложность вашего кода нужно стараться придерживаться простому правилу: Алгоритм это — совокупность минимально возможного количества, максимально простых элементов, на каждом уровне абстракции этого алгоритма.
Т.е. писать код с использованием как можно более простых и понятных остальным конструкций и при этом стараться сделать его как можно более компактным — умешьшить кол-во строк, простым языком. Это в общем можно назвать словом — лаконичность.
Второй критерий — компактности, самый простой. Уменьшай кол-во кода как только можно. Он работает, на самом деле даже самые простые структуры в большом объеме создают огромную сложность из-за количества связей. Очень многие фундаментальные математические и физические элементарные структуры, крайне просты и понятны по своей сути. Но когда они объединены в некоторую общую систему где количество этих структур велико, понять суть вцелом — крайне сложно. Я думаю что это можно понимать как комбинаторную сложность.
Второй критерий — использования простых структур, намного сложнее описать и дань по нему какие либо точные рекомендации. Скорее это некоторое ваше субъективное мнение о том как ваши коллеги думают и что они сочтут понятным и простым а что нет. В любом случае вы не прогадаете если будете стараться использовать базовые реагуляно используемые всеми конструкции вашего язык программирования и подходы, а в сложны ситуациях дважды подумаете могу ли я сфомировать алгоритм через эти просты структуры, не прибигая к исппользованию каких то специфических которые могу несколько уменьшить кол-во кода но повысят сложность. Важно это применять не только на уровне операторов языка но и блоков кода.
Таким образом если вы будете все время балансировать между использованием простых структур/элементов/блоков кода вашего языка и компактностью кода, вы будете стремить к лаконичности что улучшит простоту вашего кода для других людей.
Очень часто код который я встречал можно было переписать на меньший объем и в более простых терминах конкретного языка программирования. Что приводило к существенному улучшению простоты его восприятия.
Лаконичность, один из практических подходов который вы можете использовать при написании и изменении вашего кода.
Надеюсь что моё описание было кратким, понятным и полезно для вас.
Есть и другие важные подходы, например линейность кода. Но эта статья пытается объяснить один конкретный подход, а не дать универсальное решение — помните об этом когда будете писать комментарии и давать свои оценки.
Вопрос к аудитории:
Предлагаю читателям в комментариях дать определение того как вам представляется смысл понятия — линейность кода.
Автор: авторитет