Двадцать вопросов, которые помогают разработать алгоритм

    Как разработать алгоритм, решающий сложную задачу? Многие считают, что для этого нужно «испытать озарение», что процесс этот не вполне рационален и зависит от творческой силы или таланта.

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

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

    Вопрос №1. Кто?
    Начиная решать определенную задачу, составьте максимально длинный список людей, имеющих непосредственное отношение к ее решению. Выясните:
    — кто в первую очередь заинтересован в ее решении?
    — кто уже занимался решением этой или смежной задачи?
    — кто определяет, хорошо задача решена или плохо?
    — с кем можно советоваться по ходу решения задачи?
    — кто может проверить решение?
    — кто является автором статей в этой области?

    Вопрос №2. Для чего?
    Спросите себя несколько раз: «Почему я хочу решить эту задачу? Для чего это нужно?» Часто оказывается, что решение задачи A необходимо для того, чтобы решить задачу B, но при этом задачу B можно решить и другим путем. В этом случае, начиная думать над исходной задачей А, мы лишь теряем время.

    Вопрос №3. Как?
    Какими методами я буду руководствоваться, решая данную задачу? Как будет структурирован процесс ее решения? Есть ли готовые методологии, которые можно использовать?

    Вопрос №4. Что?
    Какие объекты присутствуют или подразумеваются в данной задаче? Нарисуйте их на бумаге и обозначьте стрелками всевозможные отношения между ними, связанные с данной задачей. Есть ли неучтенные или лишние объекты?
    В каждый объект должны приходить и из каждого объекта должны исходить примерно одинаковое количество стрелок. В противном случае, как правило, мы либо упускаем важные связи между объектами, либо придаем неоправданно большое значение некоторым связям.

    Вопрос №5. Когда?
    Посмотрите на задачу с точки зрения времени. Выясните:
    — как быстро должны работать отдельные блоки алгоритма?
    — какие внешние факторы, связанные со временем, могут повлиять на их работу?
    — сколько времени есть у вас на разработку, программирование и тестирование алгоритма?

    Вопрос №6. Где?
    Посмотрите на задачу с точки географической точки зрения. Ответьте на вопросы:
    — где, в каких странах, городах, районах будет использоваться ваше решение?
    — на каких компьютерных платформах оно будет работать?
    — какие еще вопросы, связанные с месторасположением и географией, имеют отношение к данной задаче?

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

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

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

    Вопрос №10. Частью чего является?
    Частью какой более масштабной задачи (или системы) является данная задача? А частью чего является эта более масштабная система?

    Вопрос №11. Из чего состоит?
    Какие более мелкие подзадачи являются частью исходной задачи? На какие части можно разбить исходную задачу? А на какие еще более мелкие части можно разбить подзадачи?

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

    Вопрос №13. Что вижу?
    Визуализируйте задачу, ее решение и все его компоненты. Нарисуйте их. Побудьте ребенком (или дизайнером), найдите наиболее подходящие цвета (даже для виртуальных, абстрактных объектов). Прочувствуйте визуальную гармонию этой задачи или найдите «некрасивые», проблематичные места, если такие есть.

    Вопрос №14. Что слышу?
    Это очень сложный и полезный вопрос, поскольку та мощнейшая часть мозга, которая отвечает за обработку звуковой информации, у большинства современных людей слаборазвита. При этом я знаю гениальных ученых и инженеров, которые именно «слышат» решение той или иной задачи.
    Итак, постарайтесь «услышать» взаимодействие всех элементов задачи (для этого удобным бывает закрыть глаза), услышать характерные звучания ее элементов. Услышьте разговоры и тембры голосов людей, применяющих решение вашей задачи на практике.

    Вопрос №15. Что чувствую?
    Этот вопрос также может показаться необычным, хотя и не в такой степени, как предыдущий. Ощутите тактильные, температурные, вкусовые, дыхательные ассоциации, вызываемые данной задачей. Некоторые решения могут показаться «крепкими», в то же время как другие «холодными» или даже «горькими».
    Подключите часть вашего мозга, отвечающую за ощущения, к анализу задачи. Конечно, это нестандартный путь анализа научной информации, но он также бывает полезным.

    Вопрос №16. Каким может быть идеальное решение?
    Пофантазируйте, как можно решить эту задачу в идеале; придумайте что-то совершенно невероятное — чем невероятнее, тем лучше. На этом принципе построен метод «мозгового штурма», когда предлагаются любые, даже самые неожиданные решения.
    Представьте себе, что у вас нет границ, а условия работы самые благоприятные. Что бы вы могли сделать в этой ситуации?
    Как можно было бы сделать решение этой задачи совершенно великолепным?

    Вопрос №17. Почему все закончится неудачей?
    Побудьте брюзгой и пессимистом-критиком. Найдите все причины, из-за которых у вас не получится решить эту задачу; а также все организационные проблемы, которые приведут к провалу этого проекта. Тщательно их запишите — чем больше, тем лучше.
    Когда вы выйдете из состояния критики, записанное станет бесценной информацией о тех опасностях, которые поджидают вас на пути решения задачи, и от которых следует уклониться.

    Вопрос №18. В чем польза для меня?
    Какие выгоды лично вы извлечете из решения данной задачи? Чему научитесь? Сколько заработаете? Какие важные связи и контакты приобретете? Как улучшите свою репутацию?

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

    Вопрос №20. В чем польза для общества?
    Как повлияет решение вашей задачи на все общество, в котором мы живем? Будет ли она общественно-значимой? Чем и как она поможет всему человечеству в целом?

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

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

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

    Оригинал статьи находится здесь
    gil-algorithms.com/articles/20_questions_on_generating_an_algorithm.html
    Поделиться публикацией

    Похожие публикации

    Комментарии 28

      0
      Спасибо за статью. Запишу себе в ToUse список :)
        +2
        Скажу больше — эти 20 вопросов помогают не только разработать алгоритм, но и весь проект в целом.

        Статья будет очень полезна начинающим разработчикам.
        • НЛО прилетело и опубликовало эту надпись здесь
          • НЛО прилетело и опубликовало эту надпись здесь
              +1
              Эх! Знал бы я ноты, я бы шлягер на эту тему написал. Главное зарифмовать все эти вопросы и присобачить мелодийку.
                0
                Полезная штука.

                Проблема в том, что большинство работы после обдумывания 20-ого пункта делать не хочется:)
                  0
                  Трудно представляю, как можно «услышать» или «почувствовать на вкус» задачу или решение, но попробую сделать в следующий раз. Чем чёрт не шутит, вдруг чем поможет.
                    0
                    Хорошая систематизация невысказанных мыслей. Я действительно применял большинство из этих методик неосознанно. Правда узнал и несколько новых, что ж, будем знать!
                      0
                      За статью спасибо. Хотя мне кажется, что пункты 1 и 2 надо местами поменять :) Вопрос «Зачем» и правда зачастую помогает тут же понять, что дальше двигаться и не нужно :)
                        +8
                        Разбил для удобства на такую схемку:


                        Майндмэп забирать отсюда.
                          +1
                          Пропущен крайне важный вопрос — каков идеальный результат? Для меня понимание идеального результата изменило взгляд на жизнь. Это результат, при котором цель достигнута, но ничего не произошло, т.е. задача решилась за счёт текущих средств.
                          Рекомендую посмотреть что такое ТРИЗ, крайне занятная вещь. Там тоже кстати алгоритм изобретений есть, получше мозговых штурмов.
                            0
                            Каюсь. 16 вопрос, но имеется ввиду немного другой результат.
                              0
                              Предполагалось, что это действительно вопрос №16 (по крайней мере я задумываюсь об «идеальном результате» ТРИЗ именно в этом месте, когда работаю).
                              Совершенно согласен, что ТРИЗ — это супер. Но для его подробного обсуждения требуется отдельная статья, да и книги по нему хорошие есть.
                              0
                              "...ничего не произошло, т.е. задача решилась за счёт текущих средств."
                              Не могу переварить.
                              Можно перефразировать/пояснить примером, пожалуйста?
                                0
                                Идеальная система — это система, которая не существует, но все функции при этом выполняются )
                                Определение, если не ошибаюсь, из ТРИЗ тоже )
                                  0
                                  Там был азбучный пример, когда в космический аппарат нужно было внедрить дополнительный прибор весом в 6 кило, в то время как вес аппарата был рассчитан с точностью до грамма и чего-то менять было крайне абсурдной идеей. В аппарате имелся утяжелитель для выравнивания центра тяжести, так вот этот утяжелитель просто заменили этим новым прибором. Т.е. система не изменилась, но полезные свойства появились.
                                  Или ещё была задача про то, как избавиться от твёрдой корки, образующейся на поверхности ковша для расплавленного металла (это шлаковая корка, потом непригодна), в то же время создав теплоизоляцию металла, сохранив тепло. Придумали идею, что если в ковше будет вода до того, как в него наливают расплавленный металл, то это образует «металлическую пену» на поверхности. Т.е. и корки нет, и теплоизоляция есть, но это ничего не стоило.
                                  Вообще эта теория помогла мне понять, какими должны быть интерфейсы, применив ИКР (идеальный интерфейс — которого нет, как утверждает Купер, и в то же время он быть должен, это противоречие решается).
                                  Теория также раскрывает закономерности развития технических систем, которые проявляются в всех изобретениях вокруг. Единственно странное — оптимизация программ, БД часто противоречит этим закономерностям, а всё остальное вполне предсказуемо. Т.е. можно до некоторой степени предсказать, куда будет развиваться любая технология.
                                0
                                Ух… Вопрос где? меня смутил: ) И вообще, о каких алгоритмах идёт речь? Поможет ли это всё изобрести конкретный, скажем, алгоритм поиска?
                                  0
                                  Попробуйте. Только сформулируйте четко задачу.
                                  Если хотите, можем вместе один раз пройтись по всем вопросам. Думаю, будет интересно.
                                  0
                                  Теперь я понял, что за вопросы задаю себе, когда собираюсь написать код:)
                                    0
                                    решение любой задачи сводится к сбору информации о наблюдаемом объекте. Причем этот принцип применим как для решения самых сложных научно-исследовательских задач

                                    Дальше этот поток сознания можно не читать, это классический пример bullshit
                                      0
                                      Самые первый вопрос в любом проекте: Зачем? и уже от него подветки делать надо. Изначальное дробление вопроса на подвопросы могут пессимизировать важность Главного Зачем. Вроде и прибыль хотел получить, вроде и клиентам это надо было, а чето нифига не пошло и никому не интересно.
                                        +2
                                        Не согласен:
                                        «зачем» это как проекция многомерного вопроса на линию, хуже тени.
                                        На любое внесённое предложение вопрос «зачем» звучит как презумпция
                                        ненужности.
                                        Если вопрос разработки поставлен, он уже имеет некоторое обоснование,
                                        которое укрепится или разрушится после анализа полученных ответов.
                                        Вот если проект уже перегружен, тогда всё новое имеет ничтожный вес перед
                                        приведением в порядок уже реализованного.
                                        Всё-таки топик об изначальном подходе к решению сложной задачи.
                                          +1
                                          Эти 20 вопросов появились не случайно. Есть такое направление психологии, которое считает, что это 20 hardware-зашитых в наш мозг методов мышления.
                                          Редко кто владеет всеми 20 в равной степени, чаще с детства человек выбирает 3-5 и применяет их во всех ситуациях. Разумеется, этот выбор у каждого свой.

                                          «Зачем?» — совершенно фундаментальный вопрос. Кстати, задавать его надо именно несколько раз подряд. Потому что ответ на первый «Зачем?» как раз, обычно, тривиален. А интересные вещи всплывают, когда получается раскрутить цепочку причин на 3-5 звеньев назад.
                                          Но остальные вопросы тоже ничем не хуже; кому что привычнее.

                                          Я всегда с людей начинаю, например (привычка).
                                          0
                                          Уважаемый автор, может быть Вы подскажите какую-нибудь стоящую литературу по теме технического творчества? Сложилось впечатление, что вы эрудированы в этом вопросе. Читал Альтшуллера и Джонса («Методы проектирования»). Хотелось бы расширить свои знания в этом вопросе, узнать новые методы.
                                            +1
                                            Не так-то просто ответить на этот вопрос. Что такое техническое творчество?

                                            Есть масса книг по управлению проектами, которые включают в себя в том числе решение сложных задач, возникающих в процессе их реализации. Здесь лучшая книга, которую я читал, это The Project's Manager Desk Reference, James Lewis, который последовательно излагает все известные методы.

                                            Есть масса книг по методологии программирования, их я знаю мало, но часто слышал (разные Agile, Waterfall, каскадное программирование, Joel on Software и т.п.)

                                            Про решение инженерных, изобретательских задач есть гораздо меньше исследований, почти все основаны на ТРИЗ.

                                            Есть методики креативного бизнес-мышления. Например, очень интересные книги Blue ocean strategy, Theory of Constraints, Good to Great. Эти методы можно применять и гораздо шире.

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

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

                                            Есть философские труды про методологию науки, к примеру Поппера.

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

                                                0
                                                Ну, с помощью НЛП можно включать turbo boost режим нашего мозга. Как оказалось, для решения изобретательских задач это тоже хорошо подходит.
                                            0
                                            С Вопроса №17 иногда прям нужно начинать))
                                            Спасибо, отличная статья!

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

                                            Самое читаемое