Як ви залишаєтесь продуктивними при роботі з надзвичайно погано написаним кодом?


63

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

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

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

Однак я виявив себе абсолютно непродуктивним, незважаючи на те, що працював над чимось простим, як додавання журналу. В принципі, мені просто потрібно пройти кодовий крок за кроком і додати деякі дзвінки в слід. Однак ідіотизм коду настільки дратує, що я втомився протягом 10 хвилин після початку . На початку я додавав usingконструкції, зменшував гніздування шляхом перетворення if, перейменував змінні на читабельні імена - але проект великий, і врешті я відмовився. Я знаю, що це не завдання, яким я повинен займатися, але принаймні зменшення безладу дало мені якусь психологічну винагороду, щоб я міг продовжувати свою діяльність. Тепер фокус перестав працювати, і я все ще маю 60% своєї роботи.

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

Це не лише одна велика зухвалість, адже у мене справді виникає актуальне питання:

Чи є спосіб зберегти продуктивність і не боротися з вітряками?

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


Угорська нотація непогана, прочитайте оригінальний документ, щоб побачити, про що він говорив :)
Woot4Moo

14
Я знаю, що угорська - це не погано. Саме тому я написав Система Угорська, а не Угорська програми (оригінал). Я не бачу сенсу використовувати Система Угорська в C #, оскільки вона має чудову систему і IDE. Мати 10 змінних у тому ж обсязі, з яких все починається, objє непростою, оскільки це в основному нечитабельно.
День

2
Я б хотів, щоб я міг дати це питання більше ніж одним голосом!
o6tech


9
Я видуваю пару, задаючи бурхливі запитання на стеці, які мене зворять.
Ерік Реппен

Відповіді:


32

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

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

Ви в основному створюєте тут власну мережу безпеки. Гламури, ні, але важливо так!

Отже, якщо говорити, як слід мотивувати себе? Коли у мене є завдання знущання розуму на роботі, я ставлю собі цілі. Закінчіть виконання завдання х до кінця тижня. Якщо я домагаюся своєї мети, я винагороджую себе. Новий ресторан, який я хочу спробувати? Ідіть у п'ятницю ввечері, якщо я закінчу. Щойно вийшов новий фільм? Подивіться на вихідні, якщо я закінчу.

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

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


Особливо мені подобається пункт про мотивацію в п'ятницю. Смішно, що поточний реліз також запланований на п’ятницю. Я думаю, що варто додати, що мотивація подяки є зворушливою. Вам потрібно переконатися, що хтось буде вдячний за вашу роботу, або ж змінити те, над чим працюєте. Щире "спасибі" часто відкидає неспокійні години.
День

1
@gaearon - Я радий, що пропозиції вам корисні. Потрапляючи через товариство з хорошим рівнем мотивації, зрештою окупиться. Минулого року на своїй нинішній роботі мені довелося зробити щось подібне до того, що ти робиш. Цього року мені дали абсолютно новий додаток, щоб писати з нуля. Люди помітять, що ви робите та як добре працюєте.
Тіанна

3
-1 Навіщо пов’язувати своє робоче життя та особисте життя? Це схоже на постійне перебування понаднормових годин -I didn't finish my under-estimated task by Friday - so I need to stay at home and feel bad.
Vorac

@Vorac ~ Я сказав, що це я роблю, щоб мотивувати себе. Усі різні. І я можу вас запевнити, я не працюю ЗЗ послідовно. Знайдіть щось, що вас мотивує, і використовуйте це. Я вважаю, що матеріальна винагорода найкраще працює, коли у мене є завдання, яке я не хочу робити.
Тяньна

1
@ IntegrityFirst ~ Для мене так. Я затримаюсь, щоб закінчити свій список тодо. Я буду бюджетувати свій час, щоб переконатися, що я потрапив. Це моя цілісність до себе і до моїх колег, щоб щось закінчити, коли я скажу, що завершу. Але, якщо я виявлю, що щось не вдасться зробити за час, про який я сказав, я змінюю план і повідомляю свого керівника про це. І якщо я закінчу трохи пізно, кіно / ресторан буде там наступного тижня. :)
Тяньна

30

Зберігайте файл фрагментів коду кандидата для подання на thedailywtf.com. Навіть якщо ви насправді не збираєтесь їх надсилати, це дає вам яскраву сторону у пошуку коду, який ще гірший за середній.


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

24

Я опинився в подібній ситуації, на яку я поклав завдання очистити великий корпус погано написаного, масово скопійованого та вставленого коду.

Щоб зберегти мотивацію та розум, я написав сценарій, який називався current_scoreLOC у проекті (який постійно зменшувався, оскільки я усував дублювання та перейшов на кращі алгоритми) і порівняв його з LOC, коли я починав. Кожного разу, коли мене не відволікають або розчаровують гори коду, з яким я стикався, біг current_scoreдавав би мені відчутний прогрес і нагадував би мені, скільки я вже досяг. І було цікаво бачити, як високий бал я міг набрати, коли вирішував особливо поганий розділ коду.

Я б шукав подібні показники, які ви зможете легко скриптувати, щоб дати собі відчуття прогресу і перетворити його на гру сортів. Рядки коду (просто запустіть wc -l), цикломатична складність (яка повинна знижуватися, коли ви очищаєте ті неприємні вкладені "ifs"), рядки коду, які торкнулися вас замість вашого попередника (я думаю, що FishEye може сказати вам це для $ 10) і т. Д. Можна навіть без особливих проблем написати сценарій Perl, щоб порахувати кількість блоків коду, у яких ще немає заяв реєстрації.


Я використовую SourceMonitor
UmNyobe

13

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

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


2
Ця книга про рефакторинг існуючого коду, щоб зробити його перевіреним; Я не думаю, що це значно допоможе на шляху мотивації.
Біллі ONeal

2
Хороший момент @Billy ONeal, але наявність тестового коду та пов'язаних з ним показників може показати прогрес, який може бути мотивуючим.
StuperUser

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

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

1
@StuperUser Коли я читаю, можу сказати, що він застарів і може дати корисні поради для початківців користувачів.
BЈоviћ

6

Спробуйте розбити проект на шматки. Кожен день дізнайтеся, як працює конкретний шматок. Намагання зрозуміти все це, мабуть, те, що вас напружує.

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


Так, я працюю шматками, і над цим я вже працюю вже деякий час, тому маю приблизне уявлення про кожен компонент. Все-таки це не дуже допомагає, тому що зазвичай крихітні фрагменти логіки потребують часу, щоб зрозуміти, - і я злюся, коли розумію, що метод 30 рядків, на який я витратив 10 хвилин, насправді може бути переписаний у 2 рядки. Що стосується компанії, то, на жаль, я єдиний розробник цього проекту, і зараз я працюю в офісі клієнта, тому немає нікого, з ким би я міг реально поговорити.
День

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

@gaearon ах-ха! Ти єдиний кодер. Тож хлопець перед вами був єдиним кодером. Ви можете піти з багатьма, коли ви єдиний кодер (як ви помітили від свого попередника). Майте це на увазі, коли ви шукаєте наступну роботу. ;)
davidhaskins

@Ramhound Я думаю, що оглядів коду не буде. Б'юсь об заклад, що формальних тестів на інтеграцію не буде. Я працював на цих посадах кілька разів. Зазвичай люди хочуть лише коду, який працює досить добре, і вони хочуть його якомога швидше. Пояснення "найкращих практик" - це як розмова зі стіною, ІМХО.
davidhaskins

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

6

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

Як приклад, коли я переглядаю фрагмент коду, я постійно буду робити нотатки. Це моя розмова з самим собою. Сам акт написання допомагає більше думок виходити і допомагає мені краще зрозуміти речі. Через деякий час у мене може з’явитися Еврика і мені потрібно намалювати невелику діаграму з «більшою картиною» на папері, щоб проілюструвати, що я тільки думав, або які шматки я просто склав разом. Я завжди роблю це лише на папері, позбавляючись від усіх відволікань комп’ютера. Це дозволяє мені бути більш методичним і продуманим щодо того, що я роблю.

Це в основному зручний спосіб вечної розмови з експертом з домену :)


3

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


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

1
"це не додає продуктивності в роботі над викидним кодом" . Ви повинні пройти великі частини коду, працюючи над своїм розумінням цього, виконуючи завдання з низьким ризиком (ведення журналів). Ці знання, які ви здобуваєте, дуже допоможуть, якщо мова йде про перезапис. Якщо немає перезапису, спробуйте сподіватися на нагороду, яку ви відчуєте, коли ви очистили велику кількість програми, наскільки краще буде база коду завдяки вашим послідовним і наполегливим зусиллям.
квентін-зірин

2

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


Система сильно покладається на погану практику, тому щоб переписати метод належним чином, мені доведеться переписати весь проект (що, мабуть, я зроблю в підсумку, але у мене є певні терміни поточного випуску).
День

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

2

Гаміфікуйте свою роботу. Наприклад, дайте собі 5 балів щоразу, коли ви ставите гарне запитання про код, і 10 балів щоразу, коли ви відповідаєте на нього. Кожен раз, коли ви переробляєте метод чи додаєте нову функцію, надайте значок. Після накопичення достатньої кількості балів ви отримуєте привілеї, такі як кава-брейк або печиво. Після завершення всього проекту ви отримуєте привілей ставитись до чогось, чого ви дійсно хочете.


0

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

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


0

Майкл Перо може допомогти "Ефективна робота зі спадковим кодом".

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


На жаль, це проект SharePoint, а це означає, що він майже незаперечний. Раніше я писав прохолодні пісочниці для SharePoint, використовуючи Microsoft Moles, але це вимагає багато додаткової роботи.
Ден
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.