Разговаривая с другом, не являющимся программистом, я случайно упомянул концепцию «красивого кода», и она хотела понять, что это значит, но я немного растерялся, как объяснить это кому-то, у кого нет контекст вообще.
Когда весь код в любом случае выглядит как чепуха, как вы можете объяснить, что делает один фрагмент кода красивее другого? Аналогии тоже могут быть полезны.
aesthetics
Daniel Vandersluis
источник
источник
Ответы:
Языковая аналогия
Подумай о своей самой любимой истории. Это, вероятно, красиво написано. Для не говорящих по-английски, просто потому, что они не могут понять или понять, почему это красиво, не умаляет его красоту.
Строительная аналогия
Рассмотрим плохо построенный дом. У этого есть двери и окна, которые очевидно заложены кирпичом. Раствор треснут в одном углу, где фундамента было недостаточно. И никто не может понять, почему существует лестница, ведущая на второй этаж, который не существует. Туалет построен рядом с кухней без вытяжного вентилятора и расположен так, что преобладающие ветры будут дуть неприятные запахи болота через остальную часть дома. Дымоход из открытого камина находится в 5 см от дерева, готового к возгоранию.
Сравните это с домом, где все находится там, где оно должно быть, это низкие эксплуатационные расходы, идеально изолированы, так что немного солнечного тепла будет согревать его зимой, энергия восстанавливается из вентиляции, так что у вас есть и свежий воздух, и комфортная температура и незначительные счета за электроэнергию. Он построен из невоспламеняющихся материалов, так что он не может сгореть от огня. Он выдержит 9.0 землетрясения и торнадо F5. Строительство только на 30% дороже, чем в другом доме, но окупит разницу через 5 лет. И это эстетично.
Графический интерфейс похож на внешний вид дома. Пользователь может распознать красоту в графическом интерфейсе, точно так же, как он может оценить красивый дом. Но, возможно, еще важнее то, что настоящая красота дизайна домов и программ - это то, что невидимо для непосвященных, но важно или приятно иметь независимо.
источник
Думай об автомобиле.
Большинство из нас смотрят на машину и видят только кузов. Если кто-то починит некоторые вмятины и покрасит автомобиль, он будет выглядеть намного красивее. Это в основном та же машина, но это все, что мы видим.
Механик открывает машину и смотрит на двигатель. Они видят, насколько хорош этот двигатель. Они видят, что все устроено так, чтобы к ним было легко добраться, поддерживать и работать. Они видят детали и знают, как все было продумано. Опытному механику двигатель ухоженного высококачественного автомобиля становится прекрасным. Они не могут объяснить вам, что делает его красивым, но их представление о красоте, вероятно, приведет к снижению затрат на техническое обслуживание, увеличению срока службы автомобиля и повышению производительности. Все это повышает ценность этой машины, даже если вы ее не видите.
Когда вы смотрите на веб-сайт или приложение, вы смотрите на него так, будто большинство из нас видит автомобили. Когда я смотрю на код, я смотрю на него так, как механик смотрит на двигатель автомобиля. Вы никогда не сможете испытать красоту этого кода, как я, он буквально невидим для вас. Но эта красота важна так же, как красота механика. Он определяет, насколько хорошо работает программное обеспечение, какие у него будут проблемы, насколько легко его можно улучшить и так далее. Все это увеличивает ценность этого программного обеспечения, даже если вы его не видите.
источник
Весь код присутствует, требуется, и ни один из них не требует объяснения.
источник
Я бы сослался на стихи:
У хорошо написанного стихотворения есть иное чувство, чем у выдержки из плохо переведенного руководства на ту же тему.
источник
Проблемы кодирования связаны с концептуализацией, поэтому красивый код представляет собой замечательную концептуализацию проблемы.
Например, нам нравится , когда одна задача может быть сведена к существующей решаемой задачи, предоставляя понимание в природе самой проблемы .
Иногда переосмысление проблемы может заставить ее казаться такой простой; Мы говорим об элегантных решениях, которые требуют простых уловок, которые упрощают сложную задачу.
Для меня Quicksort - прекрасный пример: выберите случайный элемент из массива, а затем сравните с ним все остальные элементы массива; если число меньше его, положите его в стопку А; если число больше его, поместите его в кучу B. Теперь, согласно неравенству треугольника, ни один элемент в куче A никогда не нужно будет сравнивать с любым элементом в куче B. Рекурсировать на A и B, и все готово ,
источник
Напоминает мне об этом:
Источник: XKCD - LISP
источник
Никакой нетривиальный код не может быть идеальным, потому что идеальный код требует одновременного удовлетворения часто конфликтующих целей. Таким образом, красивый код прекрасно уравновешивает все важные атрибуты для поставленной задачи и приближается к одновременному выполнению всех этих требований, чем большинство может подумать. В произвольном порядке:
источник
Картины Джексона Поллока - пример чего-то прекрасного для одних и бред для других.
источник
Если человек хорошо разбирается в математике, мне нравится сравнивать красивый код с элегантным решением проблемы.
источник
Некоторые аспекты хорошего кода:
источник
Для меня язык (и) - мои инструменты.
И, как любой мастер, я предпочитаю, чтобы мои инструменты были в отличном состоянии.
Чем лучше состояние кода, относительно ясности концепции, удобства сопровождения и читабельности. тем лучше код.
Поэтому для меня чтение хорошо написанного кода похоже на открытие набора инструментов с хорошо продуманными инструментами.
Я использовал эту аналогию пару раз с успехом. Особенно люди с более практичным или художественным образованием, похоже, понимают концепцию чистого / красивого кода таким образом.
источник
Я думаю, это зависит от того, что вы подразумеваете под красивым кодом.
Для меня код красив, когда он читается. Помимо возможных проблем с концепциями программирования, неспециалист мог читать и, по крайней мере, на высоком уровне, понимать, что делает код.
Как уже обсуждались в некоторых других ответах, код также может быть красивым в том смысле, что он обеспечивает сложную функциональность путем объединения нескольких простых концепций. Не уверен, какая аналогия будет лучше, если объяснить это непрограммисту, это зависит от непрофессионала. Головоломка игрушки приходят на ум, как NeoCube .
источник
По моему скромному и личному мнению, красивый кодекс похож на хорошую книгу-роман:
источник
Это похоже на скудную подлую компанию, где каждый знает свою роль, легко понять, кто в чем хорош, и нет дублирования усилий.
Против
Офисное пространство, где отстаивают посредственность, три менеджера не имеют ничего лучше, чем сообщать вам о TPS отчетах,! @ # $ Ing ФАКС-МАШИНА НИКОГДА НЕ РАБОТАЕТ !!! и любой данный сотрудник может получить только около 15 минут фактической работы в неделю. Сотрудник может даже больше не работать там технически, потому что кто-то забыл уволить его (на самом деле трудно сказать, потому что никто не работает эффективно, и трудно оценить, чего они пытаются достичь). А для того, чтобы что-то практическое было сделано, необходимо ориентироваться в нелепо сложной системе, о которой кто-то читал и думал, что в своем резюме он будет выглядеть аккуратно, даже если на самом деле это не решит проблему, с которой он столкнулся.
источник
Здесь нет «красивого кода», есть «элегантные алгоритмы» и «элегантные дизайны». Дизайн может быть понят не программистами.
Я ненавижу программистов, которые спорят о «прекрасном коде», потому что, так или иначе, они либо не знают, как интерпретатор или компилятор его переварит, и что будет делать машина, так что это больше похоже на то, как дети показывают маме, как Его история замечательна, но на самом деле это не так.
источник
Вы объясняете людям, почему хорошая картинка хороша? Нет. Вы показываете им картинку (потому что, вы знаете, картинка говорит более 1000 слов). Поэтому лучше всего показать им небольшой кусочек кода, который действительно элегантен, красив, совершенен (и, возможно, для сравнения, как его закодировал бы Джо Средний).
источник