Problem solving на примере шахматных этюдов

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

Lichess screenshot

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

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

Первоначальный стресс от незнакомых проблем

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

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

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

Что помогает в работе - почитать все связанное с новой задачей, найти связанный код, выписать в блокнот непонятные моменты (в особенности вопросы типа “почему вообще все так странно устроено”), потом найти людей, которые могут ответить на эти вопросы. Когда ситуация становится более предметной, можно пробовать генерировать варианты решений. Самый быстрый и очевидный вариант решения. Самый экономный. Самый быстрый. Самый стратегически выгодный. Из этих решения выбрать имеющие рациональное зерно, записать в коротенький документ и обсудить с коллегами. И через несколько часов достаточно материала, чтобы делать первую версию решения. Может быть при запуске или даже в процессе реализации вылезут новые неожиданные грани и тогда придется подумать еще.

Ментальный прогрев

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

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

Наработка инструментов

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

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

Теория

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

Но и пугать своей обязательностью теория не должна. Сначала достаточно знать минимальные основы, чтобы сыграть свои первые партии, получая удовольствие от игры. Потом уже чуть более сложные разделы не будут пугать, а будут наполовину очевидными, с кучей “aha!” моментов. Потом снова нужна будет практика, потом на нее снова хорошо ляжет новый слой теории.

Новизна и нерешенность задачи

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

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

Адекватная сложность

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

Lichess создает идеальный поток. Он постоянно уточняет уровень игрока и уровень сложности задачек. Чем дольше играешь, тем лучше он тебя знает. И подбрасывает задачки в коридоре 100-200 пунктов. Нерешенные задачи снижают уровень игрока, решенные - повышают.Если не удается решить несколько задачек подряд, ир больше вероятность что получишь задачку полегче. Если успешно решаешь много подряд, то можешь получить и что-то позаковыристей. При этом не решив задачку не знаешь ее уровня сложности. Знаешь лишь что сложность должна быть в пределах разумного. Что решение возможно.

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

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

Эпилог

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

С Новым годом!

comments powered by Disqus