Очень часто я застреваю при выборе лучшего дизайнерского решения. Даже для мелких деталей, таких как определения функций, поток управления и имена переменных, я трачу необычно длинные периоды на изучение преимуществ и компромиссов моего выбора.
Я чувствую, что теряю большую эффективность, тратя свои часы на незначительные детали, подобные этим. Несмотря на то, что я в глубине души знаю, что могу изменить эти вещи, если мой нынешний дизайн не сработает, мне трудно твердо выбрать один вариант.
Что я должен сделать, чтобы бороться с этой проблемой?
Ответы:
Два простых правила:
Когда вы начнете выполнять все эти действия, вы обретете уверенность в том, что сможете принимать простые решения сейчас, не ставя под угрозу свою способность реагировать на изменения позднее.
Помните, что проверка будущего означает облегчение изменения кода, а не попытки предвидеть все возможные пути изменения кода.
источник
Обычно, когда я так чувствую, мне нужно попробовать:
Если проблема связана с синтаксисом и небольшими кусочками, то:
источник
Очень легко думать о себе как о бездействии. Даже если вам удастся как-то найти лучшее решение прямо сейчас, которое может легко измениться до завершения проекта, и что потом?
Лучше выбрать достойное решение и работать с ним, чем сидеть и размышлять над тем, что будет лучшим решением. Лучшее решение неуловимо, а хуже субъективно. Если требования изменятся даже незначительно, ваше решение может оказаться хуже, чем решение, от которого вы отказались, потому что оно не было лучшим в то время.
источник
Я также учусь избегать паралича анализа, так что слава нам =) Это часто случается, потому что мы хотим сделать «лучший дизайн». На самом деле, «лучшее» находится в глазах смотрящего . Моя формула, чтобы избежать анализа паралича, заключается в применении достаточно хорошего принципа проектирования . Как мне это сделать? Я привожу переменные, такие как временные ограничения, планирую и спрашиваю себя, каков самый простой дизайн, который может выполнить работу (это не означает самый простой) без ущерба для качества, но в то же время я проверяю, что это тестируемый и открыты для расширения закрытого для модификации (ОСР)дизайн, а также. Что я подразумеваю под тестируемым и OCP? Ну, вместо того, чтобы искать то, что я считал лучшим, я подумал о дизайне, который может сказать мне, когда дела идут плохо, и попытаться сделать достаточно кода, который позволит мне реорганизовать и улучшить позже. Кроме того, попробуйте отделить код, который будет меняться, с кодом, который останется прежним. Рефакторинг становится проще, потому что код, который не должен изменяться, защищен от вашего будущего, вас или кого-то еще.
источник
Как насчет того, чтобы позволить вашему внутреннему чувству выбрать один из вариантов? Это должно происходить довольно быстро и хорошо сочетаться с таймбоксингом , который также предложил ammoQ . Вы можете попробовать ограничить 1 минуту, если параметры уже установлены, или 2 минуты, если вам нужно определить их в первую очередь. Или то, что кажется подходящим (определено заранее). Когда вы научитесь слушать свой внутренний инстинкт, ваш интуитивный выбор станет быстрее и лучше с практикой .
Если вас беспокоит возможность выбора не идеально, вот несколько советов по этому вопросу:
Удачи! :)
источник
Я думаю, что это уходит с небольшим опытом. Большая часть моего паралича происходит из-за того, что я пытаюсь представить, как будет выглядеть кодовая база намного дальше, чем мне нужно, поэтому, чтобы преодолеть ее, я просто делаю простейшую возможную вещь, которая будет работать, а затем двигаться дальше. Как только проект приобретет определенную форму, повторяющиеся единицы кода начинают выделяться, и достаточно просто абстрагировать повторяющиеся шаблоны и упростить код.
источник
Чтобы преодолеть ваше нежелание принимать решения, примените timeboxing : установите будильник на несколько минут; До этого мучайте свой разум, но когда сработает будильник, выберите лучший вариант, который вы нашли до этого.
источник
Создайте прототип. Помните, что прототип создан для того, чтобы его выбросить, поэтому не имеет значения, какие функции, имя переменной или даже грандиозную архитектуру вы используете. Вы просто строите это, чтобы доказать, что это работает.
После того, как вы его создали и выбросили, я был бы готов поспорить, что вам будет легче принимать эти решения.
источник
Я тоже страдаю от этой проблемы. Я бы сказал, что у вас недостаточно стимулов для завершения.
Например, когда я писал код рендеринга, у меня был большой стимул к завершению, потому что я знал, что если я покончу с ним, я смогу увидеть систему в действии и подумать о том, насколько я хорош для текстурирования квадрата, или трансформируя Верт. Но теперь, когда я рефакторинг (попытка 4, если вы хотели бы знать), я страдаю, потому что это много работы, и даже если я закончу, я просто увижу тот же старый квадроцикл. И я действительно не хочу снова проводить рефакторинг, и мне надоело снова и снова видеть один и тот же старый квад, и это больше не награда для меня.
Вам нужно разбить его на компоненты и вознаградить себя за их завершение, даже если это просто с некоторого консольного ввода-вывода, который показывает, что он работает.
источник
Я читал твой вопрос и думал о том же, что и другие постеры: ты не подходишь для этой работы; дайте себе лимит времени; сделать что-то еще на мгновение. После некоторых размышлений я не уверен, что какие-либо ответы действительно так полезны
Проблема с такими умственными проблемами заключается в том, что их нелегко решить, они являются частью вас, и, очевидно, вы заботитесь (возможно, слишком) о своей работе, не имеете уверенности, чтобы согласиться с собой, слишком неопытный, чтобы подумать, что ты первый выбор был правильным с самого начала, или слишком много стресса, чтобы сделать его совершенно правильным. Зачем еще беспокоиться о таких мелочах ?!
Теперь у меня похожие проблемы, но не столько с кодом .. обычно это то, что есть на ужин .. пицца или карри ... хм ... пицца, но тогда карри это хорошо, но я чувствую себя как карри, пицца дешевле , но тогда вы получите больше карри, но ... и так далее. :)
Поэтому я подумал - почему у меня нет подобных проблем с кодированием, и я думаю, что это просто потому, что у меня есть набор шаблонов, которые я использую регулярно. Если мне нужно определение функции, это просто ... оно будет в том же духе, что и любое другое определение функции, которое я когда-либо кодировал. Если мне нужен поток управления, сначала я решаю, нужен ли мне цикл for или цикл while, а затем создаю тот же старый код, который я использовал в прошлый раз, когда мне понадобилась одна из этих вещей. То же самое касается всего, я хочу очередь? Конечно, давайте вырезать и вставить мой «стандартный» код очереди (взят из последнего проекта, над которым я работал, или любого другого, который я помню, используя одну из этих вещей). Конечный результат ... Я беспокоюсь только о новых вещах, и, честно говоря, это приятно.
Итак, мой совет - начать создавать библиотеку фрагментов кода - я обычно отправлял их себе по электронной почте и помещал в папку, но с чем бы вы ни работали, лучше всего - и тогда вы начнете знать, что делать каждый раз. Вы всегда будете переходить к старому написанному вами коду и устранять проблему, готовясь к следующей проблеме. Вы обнаружите, что станете гораздо более быстрым разработчиком (серьезно, это единственный способ повысить производительность труда программиста) и, надеюсь, найдете время для забавных моментов, а не скучных повседневных вещей, которые вы уже много раз решали над.
Конечно, последняя часть всего, что важно, тоже - чем больше у вас работы, тем меньше роскоши вы тратите на размышления.
источник
Вот стратегия, которая объединяет предложения Рейна Хенрихса ( начните с простого, рефакторинг ) и ammoQ ( timeboxing ):
x
, затем усовершенствовать этоstring
, затем,name
пока время не истекло.userHandle
Возможные преимущества этого подхода:
источник
Когда я провёл исследование и у меня не осталось чёткого выбора, я даю себе время (обычно 5 минут), чтобы выбрать одно, а затем просто продвигаюсь вперед. Даже когда вы сталкиваетесь с препятствиями, на данный момент нет никакой гарантии, что вы бы не наткнулись на равное препятствие, приняв другое решение. Я не могу вспомнить время, когда я пожалел о своем решении.
источник
Обычно причина, по которой вы не можете решить, заключается в том, что разница незначительна или у вас недостаточно информации.
В случае а) Установите срок, чтобы придумать разумные варианты для рассмотрения. Не решайте, какой еще. В конце времени выберите один (случайным образом, если нет явного предпочтения) из указанных опций и другое ограничение по времени. Если в конце времени не будет принято четкое решение, то оно уже выбрано. Начните кодирование и рефакторинг, если вы явно ошиблись. Если босс спросит почему, скажите: «Я подбросил монетку, у вас есть лучший способ?»
В случае б) - вам нужно больше информации, и сидеть на своем большом толстом А .... весь день не собираюсь ее предоставлять. Выйдите из режима проектирования и перейдите в режим сбора информации. Прототипы, задавайте вопросы, читайте технические журналы. Что бы ты ни делал, не спи на нем слишком долго.
источник
Зачастую лучшим решением является попытка объяснить свое решение коллеге. Однако, поскольку вы не хотите делать это очень часто, следующая лучшая вещь - думать на бумаге - либо с помощью бумаги / ручки, либо с пустым окном блокнота.
Начните с написания абсолютно всего - просто чтобы войти в ритм письма. В окне блокнота вы можете просто напечатать «Я думаю на бумаге», а затем просто продолжить с потоком сознания. Через несколько секунд вы будете в ритме письма, поэтому нажмите несколько раз клавишу ввода и начните объяснять свою дилемму.
Сформулируйте проблему, затем укажите возможные решения, что хорошего в каждом из них и т. Д.
Хотя это не всегда работает, процесс вывода мыслей из вашей головы (ОЗУ) на внешний носитель (документ блокнота) дает вам больше свободы для создания новых подключений и просмотра решения с разных точек зрения.
источник
Я страдаю от той же проблемы. Что касается небольших проблем, то, как я пытаюсь с этим справиться, это использовать первый дизайн, который, на мой взгляд, не глуп. Нет смысла пытаться найти оптимальный дизайн; трудно, если не невозможно, рассуждать обо всех нюансах любого дизайна, о котором вы можете подумать, не написав его. По мере написания кода вы обнаружите, что можете вносить небольшие улучшения. Если все сделано правильно, я считаю, что довольно легко найти подходящее решение таким образом.
Для более серьезных проблем, я думаю, что стоит сначала продумать ваши варианты, но время это стоит. Большие проблемы имеют большие пространства для решения, вы не можете оценить каждую возможность, и вы не должны пытаться.
TLDR; Выберите разумное решение, улучшайте его по мере продвижения.
Это также актуально:
от http://www.codinghorror.com/blog/2008/08/quantity-always-trumps-quality.html .
источник
Я никогда этого не понимал. Когда я был инструктором, я бы сказал что-то вроде:
Можно подумать, не слишком сложно, и 95% людей написали что-то вроде:
Но иногда был тот, кто сидел, как кролик, парализованный в свете фар. Я бы сочувственно спросил, в чем проблема, и они сказали бы: «Я не знаю, как это назвать!».
Это люди, которые должны искать другую карьеру. Как и ты должен.
источник