Думать как программист

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

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

Итак, к делу.

Сначала определим, что такое «проблема». В данном случае я имею ввиду всё что угодно. Начиная от задачи по работе, заканчивая сбором документов для ипотеки.

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

Это самый важный шаг, но 90% людей его игнорируют.

2️⃣ Вторым шагом строим план. Можно (и полезно) даже нарисовать его. Расписываем все элементы задачи по пунктам. Если один элемент зависит от другого, то обозначаем это стрелочками. Если задача связана с посещением разных мест, то прямо рисуем карту, указываем маршруты и нумеруем их, чтобы было понятно в какой последовательности надо их пройти.

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

Если немного утрировать, то задача «включить телевизор» должна быть разбита на «взять пульт/сесть на диван/нажать кнопку». То есть прямо вот элементарные действия.

Если проблема всё-равно не решается, то значит либо некачественно выполнен 1-й шаг, либо задача недостаточно раздроблена на 3-м.