Постоянно рефакторинг моего собственного кода... очень плохая практика

У меня есть странный вопрос.

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

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

Эй, иногда только потому, что он выглядит чище для моих глаз.

Мне больно? Я тоже перфекционизм? Я единственный, у кого есть эта проблема?

Ответы

Ответ 1

Взгляните на TDD. Основная посылка:

  • написать неудачный тест
  • написать код, чтобы пройти тест
  • агрессивно рефакторинг

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

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

НТН

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

Однако, как только вы пройдете пару циклов интеграции и UAT-тестов, я бы начал осторожно относиться к рефакторингу. В конце концов, вы потратили время и силы на проверку кода, который у вас есть; рефакторинг будет тратить эти усилия на испытания и потребовать повторения всего цикла испытаний.

Ответ 7

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

Ответ 8

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

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

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

Я бы сказал, продолжайте рефакторинг фрагмента кода, если вы:

  • не имеют более важных задач в вашей очереди
  • вы устраняете проблему, связанную с производительностью.
  • другие товарищи по команде думают, что ваш код сосет (грязный код) и должен быть организован лучше! в этом случае вы единственный разработчик, поэтому вам нужно судить о своих вещах.
  • вы написали 40 строк кода для чего-то, что ВЫ ЗНАЛИ, могли быть написаны в 2 строках, но нужно было быстро его освободить.

Messy code = объявление переменных по всему месту, а не использование объектно-ориентированного принципа, а не инкапсуляция фрагментов кода и повторная запись одного и того же кода несколько раз, зацикливание везде! неприятные соединения, комментарии и т.д. и т.д.

У кого-нибудь больше случаев?

Ответ 9

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

Вы можете указать несколько причин для этого:

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

Из них, я бы сказал, отбросить # 1 и # 2 и придерживаться только # 3. Вот почему. Рефакторинг не должен изменять поведение, поэтому реорганизованный код должен выполняться идентично оригиналу (для этого есть некоторые предостережения о крайнем случае, но никогда не рассматривайте рефакторинг как подход к оптимизации). Правила оптимизации:

  • Не
  • См. Правило №1;
  • Если вам абсолютно необходимо профиль, тогда оптимизируйте только медленные биты.

И оптимизация, как правило, больше связана с переписыванием, чем с рефакторингом. Рефакторинг может помочь вам оптимизировать работу (метод извлечения приходит на ум), но он, как правило, не сделает ваш код более эффективным. Так что не рефакторинг "чтобы сделать ваш код быстрее"; рефакторе в процессе создания кода быстрее, потому что вы оптимизируете - не по прихоти.

В отношении повторного использования - YAGNI. Когда "поздний проект" приходит - если когда-либо - и вы знаете, что что-то, что вы могли бы взять взаймы из предыдущего проекта, если бы это было немного иначе - время для редизайна, чтобы удовлетворить новые потребности. До того, как этот проект существует, вы уже реорганизовали код первого проекта, чтобы в идеальном случае удовлетворить его (однопроектные) потребности; только когда возникает новая потребность, еще одна идея более желательна. Не ожидайте. Подождите, пока вам не понадобится управлять своим дизайном.

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

Ответ 10

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