Есть ли какая-то польза от одержимости созданием кода «красиво»?


34

Иногда я трачу смехотворное количество времени (часов) на то, чтобы сделать код «красивым». Я имею в виду, чтобы все выглядело симметрично. Я на самом деле быстро прокручиваю весь класс, чтобы увидеть, не выпрыгивает ли что-нибудь как не «красивое» или «чистое».

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

Я просто полностью ОКР или в этом есть какая-то польза?


8
Я просто использую Ctrl-E, D;)
Город

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

2
Почему бы не создать программу для автоматического форматирования кода, чтобы вы были счастливы и не тратили время?
Джетти

1
Форматирование делает его читаемым, поэтому это важно, но определенно будьте «умными» - используйте автоформаторы. Если это форматирование не достаточно хорошее - тогда вы можете быть ОКР.
Catchops

1
Ну, @ Тейлор, у тебя Laravel просто потрясающе
Mr.Web

Ответы:


32

Используйте автоформатер. Если вы действительно тратите столько времени на ручное редактирование кода, я хотел бы предположить, что вам не очень скучно / скучно, потому что для этого нет абсолютно никаких причин. Ctrl + K, Cntrl + D в VS отформатирует весь документ. Вы можете использовать что-то вроде Style Cop, если хотите что-то более тяжелое.

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


1
Почему именно жирный второй абзац?
Стивен Джеурис

5
@FrustratedWithFormsDesigner: не акцентируется, если подчеркивается половина поста . : P
Джон Перди

2
@ Steven, @Jon - отмечено и отредактировано.
Морган Херлокер

3
Слегка ироничная цепочка комментариев. ;)
TaylorOtwell

2
@StuperUser, больше похоже на ленивость и автоматизацию :)

10

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


3
+1: Всего отходов. Другие люди имеют разные мнения и симпатичные и переформатируют ваш код, а также пишут жалующиеся вопросы о том, почему вы не следуете их идеальному форматированию.
С.Лотт

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

@ Стивен Джеурис: Вы говорите об обфускации? Если так, то почему? Вопрос не звучал так. Это звучало как трата времени. Откуда вы взяли, что код был так плохо отформатирован, что его невозможно было прочитать?
S.Lott

@ С.Лотт: Нет, я не говорю о запутывании. Поместить весь код в одну строку было бы ужасной путаницей. :) Я пытался подчеркнуть, что, не изменяя ничего, он может помочь вам лучше понять код. Посмотрите на ответ Невилла для более подробного объяснения. PS: Кроме того, я считаю, что это действительно пустой ответ. Конечно, когда вы изменяете что-то, что не позволяет вам лучше понять код, который бесполезен, но это очень субъективно, и это на самом деле вопрос.
Стивен Джеурис

6

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

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


5

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

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

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

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


Вы помешали мне написать мой собственный ответ. ; p Очень хорошо поставлено!
Стивен Джеурис

+1 за то, что отметили, что структура и соглашения о присвоении имен важнее формата.
Морган Херлокер

4

Нет, ты не полностью ОКР. Самым большим комплиментом, который я когда-либо слышал как программист, было: «Ваш код настолько чист, что мой младший брат мог понять это».

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

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


3

Нет - быть одержимым тем, чтобы код выглядел красиво, не имеет смысла .

Вот некоторые кусочки мудрости, которые я нашел полезными:

Спросите, почему код должен быть аккуратным.

Вы можете или не можете тратить свое время в зависимости от вашего определения довольно.

Фундаментальная теорема форматирования гласит, что хорошая визуальная компоновка показывает логическую структуру программы. Делать код красивым стоит чего-то, но стоит меньше, чем показывать структуру кода. [стр. 732, Code Complete 2-е издание, Стив Макконнелл]

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

Это усложнит обнаружение изменений и вызовет ненужные конфликты слияния, если другие члены команды редактируют файл. Если вам необходимо внести изменения в форматирование, убедитесь, что другие члены группы не работают с этим файлом. [Перефразировано, стр. 93, Прагматическое управление версиями с использованием Subversion, 2-е издание]

Также Мартин Фаулер говорит о «ношении двух шляп» и переключении между ними в течение дня. Одна шляпа для добавления функций, одна шляпа для рефакторинга.

  1. Вы рассматриваете возможность добавления новой функции (Feature Hat)
  2. Вы просматриваете существующий код, чтобы получить понимание, приводя порядок в порядок. (Рефакторинг Hat)
  3. Зафиксируйте изменения.
  4. Добавьте функцию. (Feature Hat) и так далее ....

[Перефразированный pg 57ish, Refactoring, Martin Fowler]

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

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


2

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

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


1

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


1

Вы должны создать чистый код, но это не должно занять несколько часов.

Для C есть gnu-программа gnu-indent gnu-indent , в eclipse есть по крайней мере средство форматирования кода для Java, и я думаю, что есть инструменты для большинства других языков. Нужно сделать несколько щелчков мышью, чтобы правильно сделать отступ в файле, и несколько минут, если вы хотите нарушить правила для определенных целей - как я делаю для коротких операторов switch-case:

 switch (foo) {
      case a:  foo (a);             break; 
      case b:  foob ();             break;
      case c:  /* intent. empty */
      case d:  foocd ();            break; 
      default: allPrettyAligned (); break; 
 }

что сложно указать.


1

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

Прочтите эту классическую статью «Делать неправильный код неправильным», и вы поймете, почему люди обычно думают, что отступы (что можно сделать автоматически) тривиальны:

http://www.joelonsoftware.com/articles/Wrong.html

В частности, этот список:

Хорошо, пока я упомянул три уровня достижений как программист:

1 Вы не знаете, очистить от нечистого.

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

3 Вы начинаете пахнуть тонкими намеками на нечистоту под поверхностью, и они нападают на вас достаточно, чтобы протянуть руку и исправить код.

Есть еще более высокий уровень, о котором я действительно хочу поговорить:

4 Вы сознательно проектируете свой код таким образом, что ваш нос для нечистоты делает ваш код более вероятным, чтобы быть правильным.

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


0

«Часы»? Ну, я бы сказал, что ваш ответ - «а», а не «или»: да, у вас ОКР, но в этом есть некоторая выгода.

Вероятно.

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

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

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


0

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

Однако я буду осторожен, чтобы не переформатировать ваш код ради ваших коллег или будущих разработчиков. Довольно для тебя может быть не красиво для меня. :)


0

Вы узнаете проблему (компульсивное поведение) и симптом (одержимое форматирование).

Как насчет причины и лечения?

  • Ты работаешь слишком много часов?
  • Вы расстроены, скучно, тревожно?
  • Какова ваша следующая задача? Это то, что вы не хотите делать?
  • Когда у вас был последний отпуск? Продвижение? Признание за достижение?
  • Это проблема, связанная с выгоранием?
  • Ты на марше смерти?

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

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

http://dev.co.ua/docs/Edward%20Yourdon%20-%20Death%20March.pdf

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

Теперь дайте себе разрешение действовать на это.


-4

Святой бычий!
Вы, ребята, никогда не слышали о отступе?

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

ммм - но он работает только на C и некоторых, но не на всех C ++ .... (wtf? почему GNU не обновляет его?)


2
Спасибо за ваш первый ответ. Не уверен, кто за него проголосовал, но, пожалуйста, быстро ознакомьтесь с рекомендациями для ответов на вопросы программистов Stack Exchange programmers.stackexchange.com/questions/how-to-answer . Ваш ответ может быть пересмотрен в соответствии с этими критериями, чтобы выиграть один или два голоса.
DeveloperDon
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.