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

Вот то, что я делаю, чтобы изменить ситуацию, близкую к отчаянию, к рабочему решению.

0. Решите это вручную.

Это один из самых основных методов создания алгоритмов.

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

Повторяя этот процесс для разных массивов, вы увидите появление закономерностей.

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

Очевидно, что это не самый эффективный способ сделать это, но это решение.

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

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

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

  1. Отдохните

…или уйти с работы и вернуться на следующий день.

Иногда новая перспектива или просто отдых творят чудеса.

Иногда чрезмерные усилия на самом деле вредят вашим способностям, поэтому, если вы слишком много времени уделяете одной и той же задаче и чувствуете, что застряли — сделайте себе чашку кофе, позвоните жене или даже прогуляйтесь по зданию, затем вернуться к новому началу…

2. Точно сформулируйте проблему

..как будто вы спрашиваете кого-то, кто этого совсем не знает.

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

Например, вы можете застрять из-за невозможности подключиться к БД — сказать «Моя хранимая процедура не выполняется» — это не то же самое, что сказать «Я получаю сообщение об ошибке от механизма БД, что имя пользователя или пароль приложения неверны, для пользователя :XXX», или «Код не может найти хранимую процедуру, даже если она существует, а строка подключения направлена ​​в правильную БД» и т.д.

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

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

3. Спросите коллегу.

Это очевидно, но, к сожалению, не очевидно, КАК это сделать.

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

4. Изолируйте техническую проблему

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

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

Я не помнил, как вы это делаете, и не знал инфраструктуры, но знал, как подойти к проблеме.

Я запустил .NET Fiddle, своего рода чистую онлайн-среду разработки, написал там перечисление с описанием, а затем написал код для получения описания.

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

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

5. Задайте вопрос на StackOverflow.

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

6. Думайте нестандартно.

Вот классическая загадка:

Нарисуйте 4 прямые линии, не отрывая ручки, которые проходят через все точки.

Далее совет

.

.

.

.

Линии не обязательно должны быть полностью в квадрате точек.

И вот ответ.

.

.

.

Начните снизу слева и двигайтесь либо вправо, либо вверх.

Видите ли, нестандартное мышление состоит из двух вещей:

  1. Обнаружение коробки
  2. Вопрос это

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

Вот как это проявляется в программировании:

Предположим, вы получили задание на экспорт веб-страницы в pdf. Требование возникло из-за особой необходимости для конкретного пользователя экспортировать страницу. И предположим, вы загружаете какую-то библиотеку, которая это делает, но тексты в PDF-файле отображаются перевернутыми. А вы отлаживаете часами и не можете понять почему.

Посмотрим..

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

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

Вы предположили, что страницу следует экспортировать в pdf, но, может быть, вы можете просто предложить пользователю использовать встроенные функции браузера для печати страницы, если это отвечает потребностям?

Каждое решение и предположение сомнительны.

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

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

Итак, вот они, мой список из 6 эффективных техник, которые вы можете использовать, когда застряли.

Я надеюсь, что это поможет вам в вашей работе отлично.

Автор Орен Аббоу, бакалавр наук, тренер разработчиков программного обеспечения,
автор онлайн-курса
Как стать старшим разработчиком — помимо навыков кодирования
( Купон здесь)

Свяжитесь со мной по адресу — [email protected]