Как справляться с давлением при доставке при сохранении устаревшего кода?

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

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

Изменить

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

Изменить

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

Изменить

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

Ответы

Ответ 1

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

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

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

Кроме того, есть много инструментов, которые помогут вам реорганизовать ваш код. Поэтому, если вы столкнулись с каким-то вонючим кодом, просто подумайте о том, как его реорганизовать и сделать.

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

Ответ 2

Попробуйте свои лучшие требования. Код не идеален.

Ответ 3

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

Пусть менеджмент имеет дело с сроками, я имею дело с кодом. Время для меня не имеет отношения.

Ответ 4

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

EDIT:
О, и попросите, чтобы руководство получило лицензию Visual Assist. Этот плагин действительно помогает с быстрым и легким рефакторингом.

Ответ 5

Мой совет: не впадайте в панику, все требует времени. С большей практикой и временем я уверен, что написание элегантного кода станет вашим инстинктом.

Ответ 6

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

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

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

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

Ответ 7

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

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

Однако существуют способы смягчения проблемы:

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

  • Метод извлечения - ваш лучший друг. Это просто и эффективно.

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

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

  • Не паникуйте! Понимание неизвестного кода всегда сложно начинать, но реальность такова, что вы (к сожалению?) В конце концов поймете безумие в какой-то момент.

Ответ 8

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

Другой подход нетехнический: убедите своего менеджера, что хороший код приведет к более $$$ через некоторое время.

Ответ 9

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

Однако есть вещи, которые вы можете сделать.

  • Создайте среду unit test (желательно то, что вы не пишете, например, NUnit, JUnit, unitpp, Perl:: Test и т.д.). И начните писать тестовые примеры, чтобы доказать, что ваш код всегда будет работать так, как вы ожидали. У вас будет свобода писать код в любом случае.
  • Упростите процесс сборки/тестирования, создав или обновляя файлы make, которые компилируют и тестируют ваш код.
  • Версия Контролируйте себя. Просто потому, что у вас есть централизованная система контроля версий, если для вас недостаточно разумно, например, стиль checkin/checkout, CVS, очень медленный, чтобы сделать что-либо, затем установите Bzr или Git на свой локальный компьютер и контроль версий. По крайней мере, вы можете отслеживать свои изменения.
  • TODO, как кто-то предложил раньше, я использую это, чтобы помещать заметки, когда я не согласен с тем, как все реализовано.
  • Наряду с TODO добавьте документацию к вашему коду, который может использоваться генераторами, такими как Javadoc или Doxygen.

Выполняя вышеуказанное, вы можете медленно вносить изменения со своими сверстниками, не оказывая влияния на "более медленных" людей (даже если это ваш лидер/клиент/менеджер). Поскольку он просто улучшает вашу работу, показывает лидерство среди ваших сверстников, делает вещи более увлекательными для всех, кроме людей с медленными последствиями, которые, вероятно, подумают, что вы после их работы.

Ответ 10

Найдите силу, чтобы сказать "нет".

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

Ответ 11

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