Что такое красивый код? [закрыто]


30

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

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



4
Это просто фигура речи. Красота заключается в глазах смотрящего, и помимо этого, все зависит от ясности инструкций, которые вы положили в текстовом файле для решения проблемы, и от того, насколько легко вы или кто-либо другой можете изменить и сохранить ее в будущее. Кроме того, насколько красивее будет исходить ваш код - отступы, модульная структура, сложность, эффективность одновременно с удобством чтения, соглашения об именах и т. Д.
bad_keypoints


Ответы:


55

«Красота куплена по мнению глаз».

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

  • Ясность и прозрачность . Ясность - это то, как легко читатель может определить, что делает код. Прозрачный код делает то, что кажется. Если кажется, что код выполняет одну вещь, но на самом деле делает что-то другое (или что-то большее), это не прозрачно - это вводит в заблуждение.

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

  • Эффективность : предотвращение ненужного использования ресурсов (таких как процессорное время, память и ввод / вывод).

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


11
прекрасное объяснение, +1
коенмецу

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

@Jubbat Действительно - иногда самое эффективное решение на самом деле приводит к очень уродливому коду. (Например, классическая функция быстрого обратного квадратного корня)
Даррел Хоффман

@DarrelHoffman Правильно, хотя этот компромисс также является верным благодаря большему количеству переменных, которые определяют хороший код, а не только эффективность и остальное (есть хорошее подробное объяснение этого в «Code Complete» - к сожалению, я не помню, в каком разделе книга, ближе к началу наверное-)
DPM

@Jubbat: я согласен с тем, что эффективность обычно является второстепенной задачей, но я все еще думаю, что она учитывается в уравнении красоты
Игби Ларджман

20

Не позволяйте людям обмануть вас, думая, что красивый код - это следующее:

  • умные алгоритмы
  • скрытые языковые особенности
  • решение проблемы с наименьшим количеством нажатий клавиш

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

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

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


Так что же такое красивый код?

Красивый код = обслуживаемый код. ВОТ И ВСЕ!
Это формула!

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

Итак, реальный вопрос, который вы хотите задать, это: «Как мне написать более понятный код?». Боюсь, это более серьезный вопрос, и это довольно творческая дисциплина. Просто продолжайте писать код, но на этот раз не спрашивайте себя, может ли он быть красивее. Спросите себя, можете ли вы сделать его более ремонтопригодным.


4
для борьбы с проблемами, которые вы поднимаете, есть также совет c2.com/cgi/wiki?KillYourDarlings
jk.

4

Я считаю, что «Красивый код» не является объективным или особенно полезным термином. И мы не должны пытаться определить это.


Типичные словарные определения английского слова "beauty" выглядят так:

  • «1. сочетание всех качеств человека или вещи, которые восхищают чувства и радуют разум»
  • «1. качество, присутствующее в человеке или предмете, которое доставляет интенсивное эстетическое удовольствие или глубокое удовлетворение разуму или чувствам».
  • «1. Качество, которое доставляет удовольствие разуму или чувствам и связано с такими свойствами, как гармония формы или цвета, превосходство артистизма, правдивости и оригинальности».

(Источник http://dictionary.com )

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


Мы можем применить слово «красота» к коду, и очевидное значение состоит в том, что код «эстетически приятен».

Но сказать, что «красивый код» обладает определенным набором атрибутов (как предлагают другие Ответы), является противоречием очевидного значения эстетически приятного. Эстетика - это то, как люди ... отдельные люди ... воспринимают вещи.

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

Насколько я понимаю, красивый код - это код, который я считаю красивым, и это все. Это субъективно и индивидуально, и давайте просто оставим это.


2

Вот мой совет.

Посмотрите ответы на вопросы Как вы можете объяснить «красивый код» непрограммисту? и посмотрите, на какие характеристики они говорят, чтобы сосредоточиться. Затем возьмите книгу вроде Code Complete и прочитайте ее, чтобы узнать, как писать лучший код.

В какой-то момент он поразит вас, глядя на ваш старый код: «Это ужасно». Это будет прямая эстетическая реакция. И, взглянув на него, вы поймете, что вы просматриваете свой код, как программист, и видите уродство, потому что знаете, как должен выглядеть лучше выглядящий код.


1

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

Для меня красивый код это:

  • выразительный
  • краткий

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

Я бы не включил удобство сопровождения как часть того, что делает код красивым, потому что красота - это то, что вы видите / читаете, а не то, над чем вы действуете. Но опять же, это мое личное мнение.


0

Термин красивый код - это очень расплывчатый и абстрактный термин. Легко понять, что он представляет и что это значит, но его никогда не следует рассматривать как нечто большее, чем второстепенная цель.

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

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

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

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

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

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


0

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

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

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

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


0

У меня есть три критерия:

  • Просто: крайней мере, он должен быть читаемым человеком. Например, вы можете написать код, который работает на O (1) для решения с тоннами строк, но я предпочитаю, чтобы код, который работает с 0 (n), решал с несколькими строками. Это может измениться для экстремальных ситуаций, но для начала важна простота.
  • Многоразовый: код должен быть многоразовым, но не перезаписанным. Если вам нужна операция, вы должны определить ее так, как ее можно использовать годы спустя.
  • Отступ: Может быть, это не проблема для вас, но для начинающих это первое, что нужно решить.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.