Ода красивому коду Евгений Золотов
Ода красивому коду
Евгений Золотов
Опубликовано 04 апреля 2014
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 Наконец, третий и, возможно, самый приятный для программистской братии вывод: «наведение» красоты, её достижение — отнюдь не чисто механический процесс. Красивый код нельзя получить решейпингом, ренумерацией, оптимизацией. Для этого обязательно понадобится голова! И это в некотором смысле дарит нам надежду. Ведь роботы, которые уже подминают под себя фастфуд и журналистику, однажды доберутся и до программирования (доберутся-доберутся, вспомните комментарии к «Ошибке в автомобильном софте»!) — но и тогда, похоже, местечко для нас, человеков, всё-таки останется.
К оглавлению
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Мобильник выдохся. Что дальше? Евгений Золотов
Мобильник выдохся. Что дальше? Евгений Золотов Опубликовано 10 января 2014 В физике есть понятие насыщенного раствора. Это точка, по достижении которой увеличивать концентрацию — например, сахара в кружке чая — простым добавлением реагента уже
В киберспорте только мужчины. А девчонки-то где? Евгений Золотов
В киберспорте только мужчины. А девчонки-то где? Евгений Золотов Опубликовано 28 февраля 2014 Я не сторонник равноправия полов. Нравится или нет, богом или эволюцией нам дан разный набор хромосом — и логично предположить, что и способности у нас в
4K? Всё ещё слишком рано! Евгений Золотов
4K? Всё ещё слишком рано! Евгений Золотов Опубликовано 06 декабря 2013 Если только вы не обретаетесь на забытом богом острове в Тихом океане (как там «Инмарсат», не тормозит?), то готов ручаться, уже задумывались над тем, как защитить близких от страшной
Забудьте о Microsoft, она проиграла! Евгений Золотов
Забудьте о Microsoft, она проиграла! Евгений Золотов Опубликовано 21 января 2014 Когда сравниваешь тёплое с мягким, всегда можно отыскать плоскость, в которой такое сравнение окажется полезным. Вот вчера речь шла о совершенно разных категориях цифрового
BlackBerry всё Евгений Золотов
BlackBerry всё Евгений Золотов Опубликовано 24 сентября 2013 «Когда умирают тираны, в первый момент наступает замешательство: возможно ли это, неужто и они состоят из смертных молекул?»Это сказано про человека, не про компанию. Но именно эти слова
Apple и её «чудеса» Евгений Золотов
Apple и её «чудеса» Евгений Золотов Опубликовано 25 марта 2014 После возвращения Стива Джобса в Apple, у этой компании появилось странное свойство «особого качества». Попросту говоря, её продукции приписывали (и продолжают по сей день) чудесные свойства,
XP: обратный отсчёт Евгений Золотов
XP: обратный отсчёт Евгений Золотов Опубликовано 24 марта 2014 Две недели остаётся до «официальной отставки» Windows XP — и по мере того, как утекают последние часы и сутки, ситуация обретает ощутимый драматический оттенок. 8 апреля 2014 года Microsoft
До свидания, BlackBerry, и — прощай? Евгений Золотов
До свидания, BlackBerry, и — прощай? Евгений Золотов Опубликовано 19 августа 2013 Вот уже неделя как канадский мобильный гигант BlackBerry выставлен на продажу. Теперь это не слухи и не домыслы досужих аналитиков: внутри компании организован комитет по «поиску
Смартфон за $20: а что хорошего? Евгений Золотов
Смартфон за $20: а что хорошего? Евгений Золотов Опубликовано 08 мая 2014 Смартфон шагает по планете. Пусть из каждых шести землян, пользующихся мобильной связью, пока лишь двое (по самым смелым оценкам — больше трёх) делают это с помощью смартфонов — с
Аркаим: искусство вспоминать Евгений Золотов
Аркаим: искусство вспоминать Евгений Золотов Опубликовано 06 мая 2014 Эти праздники мы с друзьями (девчатами из «Яндекса»: да, я везунчик) провели в поездке по Южному Уралу — и большую часть времени потратили на Аркаим. По загадочности, количеству
Тоска по аналОгу Евгений Золотов
Тоска по аналОгу Евгений Золотов Опубликовано 11 апреля 2014 Признаться, до этой весны я не думал, что однажды снова возьму в руки «винил». Последние грампластинки домашней коллекции отправились на помойку где-то во второй половине 90-х, но прошло
Новая жизнь старого железа Евгений Золотов
Новая жизнь старого железа Евгений Золотов Опубликовано 10 января 2013 года Всплеск числа активаций смартфонов и планшеток, зафиксированный в прошедшие праздники (см. "Молчание Samsung"), сейчас усиленно анализируется на предмет выявления новых
Читалки: перевёрнутая страница Евгений Золотов
Читалки: перевёрнутая страница Евгений Золотов Опубликовано 11 января 2013 года В новогоднем сумасшествии с десятками миллионов подаренных планшеток и смартфонов (см. "Новая жизнь старого железа" и "Загадочный дефект Galaxy S III") есть ещё один момент,
Антивирус мёртв. Что делать? Евгений Золотов
Антивирус мёртв. Что делать? Евгений Золотов Опубликовано 12 мая 2014 Борьба с компьютерными вирусами и цифровой заразой вообще — тема особая. Это непрекращающееся состязание меча и щита в его наивысшей технологической форме. Для широкой публики
Балмер всё Евгений Золотов
Балмер всё Евгений Золотов Опубликовано 26 августа 2013 Стив Балмер уходит из Microsoft. Честно, думали ли вы дожить до этого дня? Стив оставит пост CEO и компанию в течение следующих двенадцати месяцев, как только для него будет подобран достойный