Как вы можете объяснить «красивый код» непрограммисту? [закрыто]


44

Разговаривая с другом, не являющимся программистом, я случайно упомянул концепцию «красивого кода», и она хотела понять, что это значит, но я немного растерялся, как объяснить это кому-то, у кого нет контекст вообще.

Когда весь код в любом случае выглядит как чепуха, как вы можете объяснить, что делает один фрагмент кода красивее другого? Аналогии тоже могут быть полезны.


12
Можете ли вы объяснить красивый код программисту, не показывая код? Описание само по себе является искусством.
Кодзиро

9
Если нам удастся придумать здесь хорошую идею, возможно, я смогу использовать ее, чтобы описать прекрасное доказательство для нематематика.
Дэвид Торнли

Красивый код может быть тот, который использует более простые и меньше идей при правильном выполнении работы. По иронии судьбы предыдущая задача поиска простых идей может быть сложной работой, и мы этим восхищаемся. - Извините, я не могу сейчас найти способ объяснить это более естественным образом кому-то.
LatinSuD

Красивый код - это когда вы устанавливаете шрифт IDE в Comic Sans. вздох
Кирк Бродхерст

Ответы:


88

Языковая аналогия

Подумай о своей самой любимой истории. Это, вероятно, красиво написано. Для не говорящих по-английски, просто потому, что они не могут понять или понять, почему это красиво, не умаляет его красоту.

Строительная аналогия

Рассмотрим плохо построенный дом. У этого есть двери и окна, которые очевидно заложены кирпичом. Раствор треснут в одном углу, где фундамента было недостаточно. И никто не может понять, почему существует лестница, ведущая на второй этаж, который не существует. Туалет построен рядом с кухней без вытяжного вентилятора и расположен так, что преобладающие ветры будут дуть неприятные запахи болота через остальную часть дома. Дымоход из открытого камина находится в 5 см от дерева, готового к возгоранию.

Сравните это с домом, где все находится там, где оно должно быть, это низкие эксплуатационные расходы, идеально изолированы, так что немного солнечного тепла будет согревать его зимой, энергия восстанавливается из вентиляции, так что у вас есть и свежий воздух, и комфортная температура и незначительные счета за электроэнергию. Он построен из невоспламеняющихся материалов, так что он не может сгореть от огня. Он выдержит 9.0 землетрясения и торнадо F5. Строительство только на 30% дороже, чем в другом доме, но окупит разницу через 5 лет. И это эстетично.

Графический интерфейс похож на внешний вид дома. Пользователь может распознать красоту в графическом интерфейсе, точно так же, как он может оценить красивый дом. Но, возможно, еще важнее то, что настоящая красота дизайна домов и программ - это то, что невидимо для непосвященных, но важно или приятно иметь независимо.


19
Эта строительная аналогия идеальна!
Даниэль Вандерслёйс

1
+1 @ user21007: Давным-давно я был информационным архитектором для огромных сайтов - каждый получает аналогию конструкции и концепцию систем, которые просто работают и чувствуют себя хорошо.
промахи

1
Хорошая аналогия для продуктов с графическим интерфейсом. Не очень хорошо для фреймворков и библиотек.
День

1
Вид напоминает мне об этом объявлении: youtube.com/watch?v=p9tjs-6wbsI
JohnL

4
В прошлом я много использовал аналогию с языком: «Я работаю с этим уродливым кодом ...» «Подождите, что вы имеете в виду под уродливым?» «Понимаете, пишите, что это»
DistantEcho

28

Думай об автомобиле.

Большинство из нас смотрят на машину и видят только кузов. Если кто-то починит некоторые вмятины и покрасит автомобиль, он будет выглядеть намного красивее. Это в основном та же машина, но это все, что мы видим.

Механик открывает машину и смотрит на двигатель. Они видят, насколько хорош этот двигатель. Они видят, что все устроено так, чтобы к ним было легко добраться, поддерживать и работать. Они видят детали и знают, как все было продумано. Опытному механику двигатель ухоженного высококачественного автомобиля становится прекрасным. Они не могут объяснить вам, что делает его красивым, но их представление о красоте, вероятно, приведет к снижению затрат на техническое обслуживание, увеличению срока службы автомобиля и повышению производительности. Все это повышает ценность этой машины, даже если вы ее не видите.

Когда вы смотрите на веб-сайт или приложение, вы смотрите на него так, будто большинство из нас видит автомобили. Когда я смотрю на код, я смотрю на него так, как механик смотрит на двигатель автомобиля. Вы никогда не сможете испытать красоту этого кода, как я, он буквально невидим для вас. Но эта красота важна так же, как красота механика. Он определяет, насколько хорошо работает программное обеспечение, какие у него будут проблемы, насколько легко его можно улучшить и так далее. Все это увеличивает ценность этого программного обеспечения, даже если вы его не видите.


11

Весь код присутствует, требуется, и ни один из них не требует объяснения.


2
@zdan: Я бы сказал, что те, кто считает это красивым, обладают необходимыми знаниями (следовательно, в глазах смотрящего). К тому же, умный! = Красивый ИМО.
Стивен Эверс

2
@zdan: Когда требуется много подобных объяснений, это не «красивый код», а «умный взлом».
Мейсон Уилер

1
БПФ - очень умный взлом, но вы не можете назвать его красивым.
Kyte

1
Я согласен со SnOrfus по большей части. Однако для меня красивый код должен быть не только необходимым, достаточным и понятным, но и субъективно чувствовать себя совершенным и легким. Я полагаю, что большая часть кода может соответствовать критериям, выставленным SnOrfus, но при этом чувствовать себя довольно громоздко или несовершенно. Я бы назвал такой код красивым.
asoundmove

1
Я думаю, что идея «что-то, что сводится к основам, но не более», находится на правильном пути. Тем не менее, что-то не поддерживаемое и написанное не на том языке для этой задачи, также подходит под это определение. Кроме того, требуя, чтобы это не требовало объяснения, вполне вероятно, что большинство задач, соответствующих вашему определению, также должны быть тривиальными. Я не думаю, что «Hello World» можно назвать красивым.
user21007

5

Я бы сослался на стихи:

У хорошо написанного стихотворения есть иное чувство, чем у выдержки из плохо переведенного руководства на ту же тему.


Это тоже была моя мысль, но не все любят или понимают стихи. Музыка тоже пришла на ум: хорошая песня против плохой, но это тоже довольно субъективно.
БП

Что за ... 25 интерфейсов + 25 классов все наследуют от абстрактных классов? Я просто хотел красную тачку. И, может быть, несколько кур.
Эрик Реппен

5

Проблемы кодирования связаны с концептуализацией, поэтому красивый код представляет собой замечательную концептуализацию проблемы.

Например, нам нравится , когда одна задача может быть сведена к существующей решаемой задачи, предоставляя понимание в природе самой проблемы .

Иногда переосмысление проблемы может заставить ее казаться такой простой; Мы говорим об элегантных решениях, которые требуют простых уловок, которые упрощают сложную задачу.

Для меня Quicksort - прекрасный пример: выберите случайный элемент из массива, а затем сравните с ним все остальные элементы массива; если число меньше его, положите его в стопку А; если число больше его, поместите его в кучу B. Теперь, согласно неравенству треугольника, ни один элемент в куче A никогда не нужно будет сравнивать с любым элементом в куче B. Рекурсировать на A и B, и все готово ,


5

Напоминает мне об этом:

http://imgs.xkcd.com/comics/lisp.jpg

Источник: XKCD - LISP


5
Лучше иметь это в качестве ссылки, особенно если текст для наведения отсутствует.
user151019

1
И ховертекст - в данном случае половина шутки.

4

Никакой нетривиальный код не может быть идеальным, потому что идеальный код требует одновременного удовлетворения часто конфликтующих целей. Таким образом, красивый код прекрасно уравновешивает все важные атрибуты для поставленной задачи и приближается к одновременному выполнению всех этих требований, чем большинство может подумать. В произвольном порядке:

  • читабельность
  • сжатость
  • КПД
  • гибкость
  • ясность
  • прочность
  • Безопасность / идиот-взрывозащищенность
  • завершенность
  • консистенция
  • Простота использования (для API)

2

Картины Джексона Поллока - пример чего-то прекрасного для одних и бред для других.


Хмммм ... я не чувствую этого.
Динамичный

Программирование - больше ремесло, чем искусство (или наука в этом отношении). Не то чтобы я тоже стучал.
Эрик Реппен

1

Если человек хорошо разбирается в математике, мне нравится сравнивать красивый код с элегантным решением проблемы.


1

Некоторые аспекты хорошего кода:

  1. Он имеет большое количество мелких деталей, которые все указывают в одном направлении
  2. она последовательна по структуре , каждая часть повторяет один и тот же шаблон
  3. но это не повторяется , вместо этого каждая часть отличается
  4. это также не позволяет поведение , которое считается недействительным
  5. имеет наименьшее количество возможных состояний
  6. вы можете понять все поведение кода , читая прототипы функций
  7. не имеет побочных эффектов
  8. выполнение этого гарантировано остановить
  9. он не использует никаких дополнительных функций, доступных в языках программирования
  10. это не слишком сложно по сравнению со сложностью решаемой проблемы
  11. в нем нет ошибок или неопределенного поведения
  12. он может быть скомпилирован с компиляторами от нескольких разных поставщиков
  13. у него нет зависимостей от кода, который не используется

0

Для меня язык (и) - мои инструменты.

И, как любой мастер, я предпочитаю, чтобы мои инструменты были в отличном состоянии.

Чем лучше состояние кода, относительно ясности концепции, удобства сопровождения и читабельности. тем лучше код.

Поэтому для меня чтение хорошо написанного кода похоже на открытие набора инструментов с хорошо продуманными инструментами.

Я использовал эту аналогию пару раз с успехом. Особенно люди с более практичным или художественным образованием, похоже, понимают концепцию чистого / красивого кода таким образом.


0

Я думаю, это зависит от того, что вы подразумеваете под красивым кодом.

Для меня код красив, когда он читается. Помимо возможных проблем с концепциями программирования, неспециалист мог читать и, по крайней мере, на высоком уровне, понимать, что делает код.

Как уже обсуждались в некоторых других ответах, код также может быть красивым в том смысле, что он обеспечивает сложную функциональность путем объединения нескольких простых концепций. Не уверен, какая аналогия будет лучше, если объяснить это непрограммисту, это зависит от непрофессионала. Головоломка игрушки приходят на ум, как NeoCube .


0

По моему скромному и личному мнению, красивый кодекс похож на хорошую книгу-роман:

  • Вы можете прочитать его от начала до конца / вам не нужно переходить к будущим страницам книги, чтобы понять текущую страницу.
  • в ней нет ненужных повторений / книга скучна, если она всегда говорит одно и то же.
  • цель каждой части очевидна почти каждый раз / вам не нужно иметь словарь рядом с вами, чтобы читать книгу (если это не поэзия / кодекс игры в гольф xD).
  • он состоит из подструктур доступных размеров и сложности (модули, функции, операторы и т. д.), он не имеет слишком много «вложений» / глав, параграфы и предложения должным образом сбалансированы; он не использует слишком много уровней подчинения предложений и т. д.
  • это приятно для глаз эстетически (красиво с отступом, блоки правильно разграничены и т. д.) / как книга с правильным набором текста.

0

Это похоже на скудную подлую компанию, где каждый знает свою роль, легко понять, кто в чем хорош, и нет дублирования усилий.

Против

Офисное пространство, где отстаивают посредственность, три менеджера не имеют ничего лучше, чем сообщать вам о TPS отчетах,! @ # $ Ing ФАКС-МАШИНА НИКОГДА НЕ РАБОТАЕТ !!! и любой данный сотрудник может получить только около 15 минут фактической работы в неделю. Сотрудник может даже больше не работать там технически, потому что кто-то забыл уволить его (на самом деле трудно сказать, потому что никто не работает эффективно, и трудно оценить, чего они пытаются достичь). А для того, чтобы что-то практическое было сделано, необходимо ориентироваться в нелепо сложной системе, о которой кто-то читал и думал, что в своем резюме он будет выглядеть аккуратно, даже если на самом деле это не решит проблему, с которой он столкнулся.


-1

Здесь нет «красивого кода», есть «элегантные алгоритмы» и «элегантные дизайны». Дизайн может быть понят не программистами.

Я ненавижу программистов, которые спорят о «прекрасном коде», потому что, так или иначе, они либо не знают, как интерпретатор или компилятор его переварит, и что будет делать машина, так что это больше похоже на то, как дети показывают маме, как Его история замечательна, но на самом деле это не так.


-1

Вы объясняете людям, почему хорошая картинка хороша? Нет. Вы показываете им картинку (потому что, вы знаете, картинка говорит более 1000 слов). Поэтому лучше всего показать им небольшой кусочек кода, который действительно элегантен, красив, совершенен (и, возможно, для сравнения, как его закодировал бы Джо Средний).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.