0 Какой прекрасный код!
10 Пускай тот, кто устал от данной фразы, первым кинет в меня камень. Это редкая и возможно самая полезная похвала, какой лишь может удостоиться программист. Деньги? Деньги платят за функционал. Но красоту программы способен оценить только человек, осознающий, как она трудится, чего стоило её написать. Неуловимое, всегда ускользающее, неизменно желанное для автора уровень качества. Так запрещено ли его формализовать? Дабы отныне в дальнейшем точно писать лишь прекрасный код?
20 Красота — понятие размытое. Мы используем его направо и налево, к живому и неживому, ухитряемся кроме того сравнивать на конкурсах, но не хотим, быть может, и опасаемся согласиться себе, что до конца не понимаем значение этого понятия – быть прекрасным. «Википедия» определяет красоту как свойство объекта вызывать у наблюдателя эстетическое (в смысле — не привязанное к практической пользе) удовольствие. Неприятность в том, что в произвольных двух точках пространственно-временно массива каноны красоты разнятся.
30 Уже древние греки расходились в вопросе, осознавать ли красоту конкретно — визуально, измеряя математически — либо вычислять категорией более большого, нравственного порядка. И с того времени «стандарт» переписывали несчётное число раз, додавая одно и отвергая второе: симметрия, целостность, чистота и без того потом, и без того потом. Хорошим образчиком того, как изменчиво познание красоты, помогают эталоны красоты женской: поставьте рядом одну из палеолитических Венер и сегодняшнюю манекенщицу!
40 Другими словами, определиться кроме того с пониманием женской красоты мы были не в силах. В то время, когда же дошло до машинного кода — субстанции, с которой человек ни при каких обстоятельствах ранее дел не имел (программы для ткацких станков не в счёт), — возможно было гарантированно затевать с чистого страницы. Опыт цивилизации в этом отношении нулевой. Кроме того всезнающая «по поводу» молчит и самое близкое, что предлагает, — статью на тему красоты в математике (откуда мы кое-что почерпнём). Вот так и получается, что самый надёжный метод сформулировать критерии прекрасного кода — задать вопрос людей, каковые его пишут. За последние десять лет данный вопрос иногда звучал на просторах Сети то в том месте, то тут, так что я постарался обобщить — и вот что оказалось (дополните либо исправьте, в случае если что-то потерял).
50 В первом приближении красота кода — это внешняя эстетика текста программы: прекрасно организованная структура, выровненные строчки, сгруппированные по смыслу элементы, пригнанные к формату комментарии. Но это пошлое познание, родственное попытке приравнять красоту к функциональности. Копните чуть глубже — и выяснится, что важную роль тут играется простота. Похоже, прекрасный код должен быть максимально несложным — таким, дабы в нём не осталось ничего лишнего, но наряду с этим он решал бы задачу, для которой написан. Простоты, в большинстве случаев, никто не требует, но перемещение с ориентиром на неё даёт целый букет нужных особенностей.
60 Простота содействуют скорейшему пониманию программы просматривающим её. Она гарантирует, что в коде будет минимум слабых мест и ошибок. С высокой возможностью делает код минимальным по размеру, наименее требовательным к системным ресурсам и максимально стремительным. Наконец, простота наверняка свидетельствует, что проект не «рос по ходу дела», а был шепетильно продуман, спроектирован ещё перед тем, как создатель коснулся клавиатуры. Такая программа относительно легко возможно расширена, в то время, когда пригодится добавить в неё новый функционал.
70 Не сообщу за всех, но лично для меня эталоном простоты, моей «киберпалеолитической Венерой», окончательно останется маленький отрывок на ассемблере Intel 8080. Всего одна команда. Вот она:
XOR A
Надеюсь, те, кто программировал в аккумуляторная эру, пережили на данный момент пара приятных секунд. Суть данной операции — в обнулении регистра A. Того же возможно достигнуть прямо, присвоением (MVI A,0), но «исключающее Либо» разрешает сделать это меньше, сэкономив один байт. Совсем не лишнее, в то время, когда вся оперативная память умещается в 64-килобайтную страницу! Но, лишь ли из экономии так писали? XOR A была как удачно предугаданная нота в музыкальной гамме: она дарила то самое эстетическое удовольствие!
80 Из этого примера очевидна и ещё одна читабельность вещь: и важная простота кода — не синонимы. Прекрасно читаемый код получается не только благодаря красивой реализации метода, но и наглядной визуальной структуре текста программы и, основное, хорошим комментариям. Как будто бы лёгкий макияж, что не скрывает, а подчёркивает, оказывает помощь оценить красоту естественных линия, комментарии и структура делают план творца понятным с первого взора.
90 Читабельность — это быстро возросшие шансы, что красоту программы оценит кто-то ещё, не считая вас. А также что по большому счету код возможно сочтён прекрасным. Так как не все согласны, что настоящий код возможно красив: одно дело — чистая «математика», реализация метода в чистом виде, второе — настоящий мир, повседневные задачи, где приходится иметь дело с некрасивыми, не хорошо предсказуемыми вещами наподобие орфографических неточностей, ненадёжных электрических контактов, невнимательных пользователей.
100 Кстати, самое время отыскать в памяти и о ранееупомянутой красоте математических построений. Так вот: математики сходятся во мнении, что красота матобъекта обратно пропорциональна затраченным на его познание упрочнениям. В точку! По окончании для того чтобы возможно кроме того дать согласие с навязшим на зубах стереотипом, что программированию необходимо учить параллельно с математикой!
110 Но давайте подведём результат. Что мы узнали? В первую очередь – красота кода не зависит от языка. Программа возможно прекрасной на ассемблере и Malbolge — нашёлся бы человек, желающий и талантливый её оценить!
120 Потом, красота отнюдь не тщетна с практической точки зрения. Программы, как и рукописи, не горят. И через какое-то время с написанным вами кодом практически неизбежно нужно будет иметь дело кому-нибудь ещё (быть может, и вам самому). Исходя из этого лучше сходу попытаться писать красиво, уменьшить труд того, кто примет ваше детище.
130 Наконец, третий и, быть может, самый приятный для программистской братии вывод: «наведение» красоты, её достижение — отнюдь не чисто механический процесс. Прекрасный код нельзя получить решейпингом, ренумерацией, оптимизацией. Для этого в обязательном порядке пригодится голова! И это в некоем смысле дарит нам надежду. Так как роботы, каковые уже подминают под себя фастфуд и журналистику, в один раз доберутся и до программирования (доберутся-доберутся, вспомните комментарии к «Неточности в автомобильном софте»!) — но и тогда, наверное, местечко для нас, человеков, всё-таки останется.
P.S. В продолжение темы: «Goto *#@», «Шизофрения в цифровом мастерстве».