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

1) Выявление проблемы, требующей хорошего решения.
2) Придумывание решения или лучшего решения, чем уже существующее
3) Создание решения в виде продукта или услуги и
4) Упаковка, продвижение и маркетинг продукта.
5) Промывание и повторение.

Этот навык очень важен, потому что без него вам нечего продавать.

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

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

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

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

Уверяю вас, вы можете это сделать. Как и все остальное на планете Земля, этому можно научиться.

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

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

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

Демонстрация вычислительного мышления или способности решать большие и сложные задачи так же ценны (если не более), чем базовые технические навыки, необходимые для работы». - Hacker Rank (Отчет о навыках разработчиков за 2018 г.)

Вот шаги:

  • Понимать

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

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

Вот почему вы должны записать свою проблему, нарисовать диаграмму или рассказать о ней кому-то другому (или что-то еще… некоторые люди используют резиновую утку).
«Если вы не можете объяснить что-то простыми словами, вы не можете не понимаю». — Ричард Фейнман.

  • Планировать

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

Не начинайте сразу вводить коды. Дайте своему мозгу время проанализировать проблему и обработать информацию.
Чтобы составить хороший план, ответьте на вопрос:

«Учитывая ввод A, какие шаги необходимо предпринять, чтобы вернуть вывод B?»
У программистов есть отличный встроенный инструмент, помогающий им в этом… который называется Комментарии!

  • Разделить

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

Вместо этого разбейте ее на подзадачи, руководствуясь планом, который вы изложили во втором разделе (2). Эти подзадачи решить гораздо проще.
Затем решите каждую подзадачу одну за другой. Начните с самого простого и продвигайтесь к самому сложному. Самые простые, о которых я говорю, это те, на которые вы знаете ответ или как-то близки к этому ответу. И снова, «самый простой» здесь также означает, что решаемая подзадача не зависит от решаемых других.

Как только вы решили все свои подзадачи, соедините точки.
Соединение всех ваших «подрешений» даст вам решение исходной проблемы. Поздравляем!

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

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

Но подождите... вот еще кое-что, что поможет вам в дальнейшем.

Что делать, если вы застряли?

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

Не волнуйтесь, это не ваша вина, это случается со всеми, даже с лучшими из лучших!

Разница в том, что лучшие программисты/решатели проблем больше интересуются ошибками/багами, чем раздражаются.
На самом деле, вот три вещи, которые нужно попробовать, столкнувшись с неприятностями:

Отладка. Большая часть вашего времени, затрачиваемого на написание кода для приложения, будет потрачена на прокрутку ваших решений в поисках того, где вы ошиблись. Программисты использовали для этого уродливое слово, которое называется ОТЛАДКА (по сути, это все, что делает отладчик).

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

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

«Иногда мы настолько уходим в детали проблемы, что упускаем из виду общие принципы, которые могли бы решить проблему на более общем уровне.

Классическим примером этого, конечно, является суммирование длинного списка последовательных целых чисел, 1 + 2 + 3 + … + n, который очень молодой Гаусс быстро распознал как просто n(n+1)/2, таким образом избегая усилие, необходимое для того, чтобы сделать дополнение». — К. Джордан Болл
Примечание: еще один способ переоценки — начать заново. Удалите все и начните заново со свежим взглядом. Я серьезно. Вы будете ошеломлены тем, насколько это эффективно.

Исследования:

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

Предостережение:

Не ищите решение большой проблемы. Ищите решения только подзадач. Почему? Потому что, если вы не будете бороться (даже немного), вы ничему не научитесь. Если вы ничему не научились, вы зря потратили время.

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