Можете ли вы поделиться своими секретами или лучшими практиками для решения проблем?

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

У вас есть специальный метод для решения сложных проблем? Я действительно хочу узнать о вашем великом секрете.


Резюме: Люди рекомендуют следующие вещи:

  • Сделай что-нибудь еще: пойди на рыбалку, погуляй,
  • Поговорите с другими людьми: разбейте проблему на части.
  • TDD
  • Опыт
  • Повторить и повторить
  • Сосредоточьтесь на понимании, в чем проблема

19 ответов

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

Просто иди и поговори об этом.

Для меня ваш вопрос можно ответить двумя способами. Один из них - как создать решение проблемы программирования, а другой - как решить проблему, которая существует (например, отладка).

Программирование:

  1. Пока не думайте о реализации.
  2. Убедитесь, что у вас есть вся необходимая информация.
  3. Начните разбивать проблему на части. Я использую планировщик для этого. В настоящее время использую My Life Organized.
  4. Не беспокойтесь о решении всей проблемы. Начните с того, что вы знаете, и начните с простого. Я использую PDL для описания решения.
  5. После того, как вы завершили пас, продолжайте возвращаться к 2 и повторите. Используя планировщик, я могу увеличивать уровень детализации и легко перемещать эти детали по мере того, как решение становится яснее.
  6. Если есть части головоломки, на которые у вас нет ответа, добавьте это к своему плану и опишите, каким будет следующий шаг для решения этой части. Это может быть больше исследований, разговоров с кем-то или получения более подробной информации от пользователей.
  7. Вернитесь к шагу 2 и повторяйте, пока не получите описание вашего решения.
  8. Реализуйте свое решение на выбранном вами языке. Вы, вероятно, можете использовать схему в качестве комментариев.

Отладка:

  1. Вы должны сделать все возможное, чтобы понять, что на самом деле происходит.
  2. Составьте список того, что вы знаете, чтобы быть правдой (факты).
  3. Сделайте все возможное, чтобы сделать его повторяемым как можно проще.
  4. Придумайте свой лучший подход к решению проблемы (проконсультируйтесь с другими, Google и т. Д.)
  5. Попробуйте свой подход, чтобы решить проблему.
  6. Если это исправит это, то посмотрите, сможете ли вы сломать это снова, а затем исправьте это по-настоящему. Помогает вам доказать, что вы действительно поняли и устранили проблему.
  7. Если это не помогло, отмените изменения и вернитесь к шагу 1 и повторите

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

Ну, я могу сказать вам, что не делать:

Придумайте решения с вашим не-IT-менеджером в зале заседаний через 5 секунд после того, как проблема обнаружена во время разговора с клиентом во время конференц-связи:)

  1. Написать юнит-тест
  2. Наблюдайте, как это терпит неудачу, затем заставьте это пройти
  3. Повторяйте, пока проблема не будет решена

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

Основано исключительно на опыте и когда я получаю мои лучшие откровения / моменты эврики:

  • Принять душ
  • Лежать в постели, пытаясь заснуть

Обязательные ссылки:

Концептуальный блокбастинг, Джеймс Л. Адамс

Как это решить, Г. Поля

и может быть даже

Hind Performance Hacks, Рон Хейл-Эванс

Опыт.


Серьезно, какого ответа вы ожидаете на свой вопрос?

Нет такого алгоритма, который позволил бы вам решать любые проблемы.

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

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

Я переопределяю снова и снова. И опять. Затем я разбиваю его на мелкие кусочки, которые могу.

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

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

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

Может быть, это тоже вещи для рассмотрения:

  1. Сначала делай надоедливые задания
  2. Не повторяйся
  3. Знайте, когда остановиться
  4. Просмотрите ваш код с коллегой

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

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

Я выключаю компьютер, достаю удочки и провожу несколько часов на рыбалке.

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

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

Я думаю, что самое главное, чтобы ваш мозг расслабился и позволил себе быть креативным. Эти цветные карандаши - способ стимулировать ваше творчество (попробуйте сами, звучит великолепно!); чашка чая (или @Martin: рыбалка) - это способ расслабиться. Некоторые из лучших идей в истории были обнаружены, принимая душ, кстати:)

Для решения проблем у меня есть следующие шаги в моей голове.

  • Вопрос - Узнайте, в чем заключается реальная проблема / вопрос. Много раз это довольно расплывчато или запутанно.

  • Факты - объясните все, что вы знаете, как факт, и выясните, какими будут неизвестные.

  • Картинка - рисую картинки, я все время использую свою доску.

  • Стратегия - определите, как вы можете решить эту проблему, и определитесь с лучшим выбором.

  • Ответ - Получить актуальное решение с помощью выбранной стратегии.

  • Проверка - Убедитесь, что ваше решение решает проблему с учетом фактов.

До:

  1. Прочитайте все, что вы можете найти о проблемной области.
  2. Не пропускайте темы, которые, по вашему мнению, не будут актуальны.
  3. Повторите шаги 1 и 2.

В течение:

  1. Разделите большие проблемы на более мелкие задачи.
  2. Определите свои критерии пригодности (напишите тесты).

Атер:

  1. Сделайте вскрытие решения / проекта.
  2. Попробуйте новые языки, изучите новые методы.
  3. Практика, практика, практика.

Три слова: разработка через тестирование

Так много ответов...

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

Самое простое, что я нашел, называется "колесо решения проблем". Посмотрите это на Google Search.

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

Я попробовал метод Кента, и он действительно работал для меня.

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

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

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

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

Другие вопросы по тегам