Когда вы застреваете, переходите к работе над различными функциями, это источник провалов проекта?

16

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

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

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

Какой лучший способ избежать этой проблемы? (если есть)

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

Любые другие предложения?

codecompleting
источник
У вас есть эта проблема для себя? Или вы наблюдаете за этим некоторые из ваших товарищей по команде?
Док Браун

Ответы:

33

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

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

smp7d
источник
+1 за ветвление контроля версий. Мы видели коммиты, которые исправляли 10 проблем за один раз, но один был плохим, так что нет способа изолировать плохие изменения.
JBRWilkinson
8

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

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

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

Джон Бубриски
источник
1
+1 за вашу очень прагматичную идею провести неудачный юнит-тест (скажем, вместо комментария TODO), чтобы убедиться, что вы помните проблему, которую вы откладывали.
Адам Кроссленд
3

Это проблема? Не тогда, когда вам приходит в голову 10% функций, которые вы пытаетесь реализовать. Иногда вы проясняете свой ум, когда сначала делаете что-то другое.

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

Лучшим вариантом для этого случая часто является попытка разбить элемент, с которым вы работаете, на более мелкие подфункции или «функциональные фрагменты», которые можно реализовать, протестировать и отладить по одному. Для меня это помогает записать эти функциональные фрагменты, открытые проблемы, части, которые необходимо выполнить в списке, назначить им приоритеты (достаточно A, B, C) и в первую очередь поработать над вещами с наивысшим приоритетом.

Док Браун
источник
Хорошая точка зрения. Прыгать вокруг не должно быть нормой.
smp7d
3

По моему опыту, «прыгать вокруг» или, точнее, «прыгать вокруг» - это признак более насущной проблемы, одной из плохо поставленных целей.

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

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

Если у вас есть такая цель, как «сделать пользовательский интерфейс более простым в использовании», то почти невозможно сказать, каким должно быть следующее исправление или когда вы закончили «исправление пользовательского интерфейса» и можете перейти к чему-то другому. Если, с другой стороны, у вас есть цель, такая как «объединить эти выпадающие списки в поле поиска с автозаполнением» и «foo» должен автоматически завершиться до «Fooly Brand Baring», это совершенно очевидно, когда вы исправите эта проблема.

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

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

SingleNegationElimination
источник
0

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

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

jhewlett
источник
0

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

k3b
источник