У когось іншого є проблема рефакторингу? [зачинено]


17

Схоже, що після того, як я написав значну кількість коду, я отримую це тривожне відчуття, ніби я цього не зробив найкращим чином, і я закінчуюсь постійно рефакторингу і витрачаю занадто багато часу на проект, або ніколи не отримую це робиться іноді. Чи трапляється це коли-небудь з ким-небудь, і як ви з цим справляєтеся?


16
Вам потрібні суворіші терміни :)

Ви тут говорите про код, який ви пишете для себе (проекти для любителів) або код, який ви пишете як частину своєї роботи?
Carson63000

Це звучить як дублікат програмістів.stackexchange.com
questions/8988/…

1
Ви випадково десь у житті дещо анальні? Я знаю, що я можу бути надзвичайно неповносправним і вдосконалюватися, якщо дозволю собі ...
Хамфрі Богарт

1
Ідеальний - ворог досить доброго. Робіть добру роботу. Зробіть це, щоб воно працювало. Не переглядайте це, якщо ви не зможете показати емпіричні докази того, що він баггі чи не створює проблем з роботою.
Blrfl

Відповіді:


18

Мені подобаються ці моменти, коли вони трапляються зі мною.

Причина: якби я не озирнувся на свою роботу і не думав, що є щось, я міг би зробити краще, ніж я б не просувався як розробник. Тому, коли трапляються ці моменти просвітлення, прийміть їх і візьміть до відома те, що ви дізналися. Розгляньте свій графік поточного проекту та, якщо можливо, перефакторний код, якщо це неможливо, виберіть урок і використовуйте його в майбутніх реалізаціях для проектів.

Так чи інакше, вчитися на власних помилках - це чудова річ!


8

Ось кілька правил для обмеження цієї діяльності та підвищення продуктивності:

  • наприклад, встановіть таймер на 25 хвилин
  • робіть це лише тоді, коли у вас є гідне покриття тесту.
  • спробуйте зробити ваш рефакторинг корисним для розробки наступних кількох функцій

1
Я згоден з вами, але про (3) ... Я б подумав про наступні декілька функцій, лише якщо я впевнений, що ці функції повинні бути включені до наступної версії, тому що як ні, ви можете потрапити в YAGNI (You Ain ' t Потрібно). Пропоную прочитати книгу Мартіна Фаулера та Кента Бека "Рефакторинг: вдосконалення дизайну існуючого коду".
Оскар Медерос

1
@Oscar: погодився. Я мав на увазі уникати рефакторингу заради себе та створення YAGNI.
ажеглов

7

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


3

Якщо чесно, я б більше хвилювався, якби ви викручували величезні копії коду і думаєте, що це все ідеально і не потрібно рефакторингу ...

Коли я був молодшим і недосвідченим, я був дуже зарозумілий щодо своїх можливостей програмування, і завжди схилявся до уявлення, що можна дуже добре проектувати і планувати, - і що як тільки я дістанусь до етапу впровадження, я просто вирву його, і це " Буду всі ідеальні.

Реальність майже навпаки. Деякі навіть кажуть, що як тільки ви почнете кодування, ви повинні перейти в режим технічного обслуговування. Ідея тут полягає в тому, що етап "Впровадження" SDLC насправді не існує як такий, тому що ви ніколи не слід відкладати виправлення помилок чи рефакторинг і робити вигляд, що код, який ви створюєте, "свіжий" та ідеальний.

Все, що було сказано, я вважаю, що МОЖЕ бути занадто нав’язливим щодо рефакторингу. Я просто ще цього не бачив. І чим більше досвіду у мене є, тим більше я думаю, що це було б добре, якби більше програмних команд явно відмовилися працювати в жорсткі терміни та йти в технічну заборгованість. Зрештою, це найпоширеніша причина, чому рефакторинг відкладається в реальному світі.


2

Я б запропонував не залежати виключно від відчуття або кодового запаху.

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

Визначте способи розбивання рефактора на досяжні шматки та визначте їх пріоритетними. Запропонуйте дисципліні зосередитись лише на розмаху кожної частини, уникаючи дотичних, які можуть підірвати ваше завдання.

Також визначте, які одиничні тести ви можете написати проти існуючого коду, перш ніж продовжувати. Якщо вже є обширні тести, це чудова річ. Відсутність одиничних тестів є чудовою можливістю зробити деякі.


1

Без сумніву, я потрапляю в цю пастку, але для подальшої підтримки / налагодження важливий певний рефакторинг.

Під час написання основного фрагмента коду стає дуже просто провести через рядки коду метод, який зараз пишеться. Коли я завершив основний фрагмент коду, розміщую коментар з перегляду коду todo: code . Потім через кілька днів я зроблю огляд коду та рефактор відповідно. Якщо у мене виникають проблеми з читанням через кілька днів, що станеться через кілька місяців або навіть років.


1

Я потрапляю в цю пастку, коли вперше вивчаю мову чи технології. Наприклад, коли ви вперше дізнаєтесь Java, уявіть, що ви пишете веб-додаток із сервлетом, думаючи, що це правильний шлях. Тоді ти розумієш, що є jsp, і думаєш, о, це новіше, що, мабуть, правильно. Потім, як тільки ви пройдете на півдорозі, ви знайдете Струц і, можливо, деякі речі EJB, після чого ви знайдете весну (на основі XML), після якої ви знайдете класні анотації @MVC, після чого ви виявите це занадто багатослівним і ви зіпсовані за вибір між зернистим / граалем та скалою / ліфтом! Це ідеально підходить для особистих проектів, оскільки справа полягає в тому, щоб навчитися, а не обов’язково досягати певного терміну.

Я раніше був убер-рефактором і на роботі. Але, як я набув більше досвіду, я став більш виборчим щодо того, що буду рефактор. Виявляється, що виходячи з компанії, ви не берете з собою код, і зазвичай інші інженери можуть зірвати код майже швидше, ніж ви можете його виправити.


1

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

Наприклад, мені одного разу довелося написати новий модуль коду для існуючої програми. Я написав це певним чином, і наступного дня я більше задумався і зрозумів, що зможу переробити його і зробити його більш абстрактним, оскільки ми були впевнені, що його потрібно буде продовжити вниз для інших цілей. Тому я переробив код. Тоді я вирішив, що це трохи надто загальне, і я об'єднав деякі класи та інтерфейси, які в основному робили те саме, використовуючи Generics (C #), щоб отримати той самий функціонал. У цей момент я, мабуть, мігподальший рефактор, щоб зробити його ще кращим, але він "досить хороший" - код добре написаний, відповідає правильним моделям дизайну та інженерним концепціям та є розширюваним. Я б перефактурував його знову лише в тому випадку, якщо вимоги змусили мене переоцінити код або якщо була мовна особливість, яка могла б зробити код більш зрозумілим та / або більш читабельним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.