Після написання коду, чому я відчуваю, що «я б написав краще» через деякий час? [зачинено]


12

Я працюю над своїм хобі-проектом у С ++ більше 2 років. Кожного разу, коли я пишу модуль / функцію, я кодую це з великим розміром. Тепер дивіться проблему,

do {
  --> write the code in module 'X' and test it
  --> ... forget for sometime ...
  --> revisit the same piece of code (due to some requirement)
  --> feel that "This isn't written nicely; could have been better"
} while(true);

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

Це загальне почуття для багатьох людей? Чи є ця мова специфічними явищами? (Тому що в C ++ можна писати одне й те саме по-різному).

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


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

1
Якщо ви подивитесь на свій старий код і не думаєте "чорт, чому я тоді цього не зробив ?!", то з моменту написання цього коду ви недостатньо навчилися.
sbi

Відповіді:


17

Це явище дуже поширене і не характерне для програмістів. Щоразу, коли ви виконуєте інтелектуальне завдання, ви помітите десятки місць, де можна було б удосконалитися - після того, як пройдете деяку відстань. Запитайте будь-якого мудрого () людини WO - хто коли - небудь писав дисертацію, і вони скажуть вам одне: «Не дивіться на нього Ви будете знайти помилку на перший погляд.»

В основному є дві речі, щоб уникнути циклу рефакторингу:

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

Прочитай це. en.wikipedia.org/wiki/Buyer's_remorse Дуже корисно.
S.Lott

3

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

Єдине, що ви можете передбачити щодо виробничого коду в реальному світі, це те, що ВИНАГО зміняться. Не намагайтеся вгадати, як це зміниться, які нові методи ви навчитесь завтра. Словом, не намагайтеся зробити свій код "ідеальним". Просто зробіть це так добре, як ви можете, з вашими нинішніми знаннями. Також переконайтеся, що ваш код ретельно перевірений та розширюваний.

Я витрачаю 20% -30% свого часу на рефакторинг існуючого коду. Я працюю в технічній компанії, і «менеджмент» ніколи не скаржився на зміну існуючого коду. Однак я розумію, що це може бути проблемою в деяких компаніях. Мартін Фаулер навіть має в ньому розділ у своїй книзі про реконструкцію .

Підсумовуючи це, це звичайне відчуття в моєму досвіді, але воно не є негативним.


2

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


2

Це загальне почуття для багатьох людей? Чи є ця мова специфічними явищами?

Це означає, що ви розширюєте свої знання та погляди.

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


"... поверніться та вдосконаліть свій код." - хто заплатить вам за це? Як тільки ваш код працює, рухайтеся далі. Коли ви навчаєтесь та зростаєте як програміст, Ви завжди будете знаходити кращі способи вчинити, і відчуєте, що ваші попередні зусилля можна вдосконалити. Не встояйте перед бажанням робити що-небудь із цього приводу - повернення та вдосконалення вашого старого коду - це здебільшого вища трата часу.
Dawood ibn Kareem

1
@David Wallace - Якби нікому ніколи не довелося повертатися до старого коду, ми б не метушилися з цього приводу.
JeffO

1
"Як тільки ваш код працює, рухайтеся далі" - ви б не повірили, які помилки я бачив у виробничому коді, тому що код спрацював;)
BЈовић

@Jeff O - це дуже правда. Якщо я буду підтримувати старий код, я б подумав виправити його, будь то мій код чи чужий. Але якщо за проектом не стоїть кілька доларів, який вимагає збереження цього коду, тоді немає способу виправдати витрачений час на його прибирання. Якщо, звичайно, не баггі.
Давуд ібн Карім

@VJovic - якщо у виробництві були помилки, це тому, що код НЕ працює. Я думаю, що в ОП говорили про код, який працює правильно, але некрасиво.
Давуд ібн Карім

2

Мені завжди хотілося, що людина бере уроки математики для зміцнення своїх навичок у попередньому класі. Алгебра здавалася важкою, поки ти не взяв Алгебра II; Тоді навички, які ви засвоїли в алгебри, стали корисними. Це одне і те ж саме в програмуванні, написанні, обробці деревини чи будь-що інше.

Коли ви проходили курс програмування, ви дізналися про If-then-else, який робив багато речей, поки ви не дізналися про комутатори. Коли ви дізнаєтесь щось нове, ви проходите цей прогрес, все роблять.


2

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

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


1

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

Якщо у вас немає цього почуття, це означає одну з двох речей:

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