Как мыслить как программист — уроки решения проблем

1656641055 kak myslit kak programmist uroki resheniya problem

Ричард Рейс

aNP21-ICMABUCyfdi4Pys7P0D2wiZqTd3iRY
Ричард Рейс

Если вы интересуетесь программированием, возможно, вы уже видели эту цитату:

«Каждый в этой стране должен научиться программировать компьютер, потому что он учит думать». — Стив Джобс

Вы, наверное, тоже задавались вопросом, что значит мыслить как программист? И как ты это делаешь?

По сути, это все о более эффективный способ решения проблемы.

В этом сообщении моя цель – научить вас этому.

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

Почему это важно?

Решение проблем – это метанавыки.

У всех нас проблемы. Большой и маленький. То, как мы с ними справляемся, иногда, ну… достаточно случайно.

Если у вас нет системы, это, вероятно, то, как вы решаете проблемы (именно это я делал, когда начал кодировать):

  1. Попытайтесь решения.
  2. Если это не сработает, попробуйте другой.
  3. Если это не сработает, повторяйте шаг 2, пока вам не повезет.

Слушай, иногда тебе везет. Но это самый плохой способ решения проблем! И это огромная, огромная трата времени.

Наилучший способ состоит в том, чтобы: а) иметь структуру; практикуя это.

«Почти все работодатели ставят, прежде всего, навыки решения проблем.

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

Демонстрация вычислительного мышления или способности решать большие, сложные проблемы столь же ценна (если не больше), чем базовые технические навыки, необходимые для работы». — Рейтинг хакеров (2018 Developer Skills Report)

Иметь каркас

Чтобы найти правильную структуру, я следовал советам в книге Тима Ферриса об обучении «Шеф-повар за 4 часа».

Это побудило меня взять интервью у двух действительно впечатляющих людей: К. Джордан Болл (1-е или 2-е место среди 65 000+ пользователей на Coderbyte) и В. Антон Спраул (автор книги «Думай как программист: Введение в творческий решение проблем». «).

Я задал им те же вопросы, и угадайте что? Их ответы были очень похожи!

Вскоре вы тоже их узнаете.

Примечание: это не значит, что они все равно делали. Все люди разные. Ты будешь другим. Но если вы начнете с принципов, которые, как мы все соглашаемся, хороши, вы добьетесь значительного успеха гораздо быстрее.

«Самая большая ошибка, которую допускают новые программисты, состоит в том, что они сосредотачиваются на изучении синтаксиса вместо того, чтобы учиться решать проблемы». – В. Антон Шпраул

Итак, что делать, когда вы сталкиваетесь с новой проблемой?

Вот шаги:

1. Понимать

Точно знать, что вас спрашивают. Большинство сложных проблем сложны, потому что вы их не понимаете (поэтому это первый шаг).

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

Вы помните, как застряли на проблеме, вы начинаете ее объяснять и мгновенно видите дыры в логике, которых вы не видели раньше?

Большинство программистов знают это чувство.

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

«Если вы не можете объяснить что-либо простыми словами, вы этого не понимаете». – Ричард Фейнман

2. План

Не погружайтесь в решение без плана (и однажды надейтесь, что вы справитесь). Спланируйте свое решение!

Ничто не поможет, если вы не можете записать точные шаги.

В программировании это означает, что не начинайте взламывать сразу. Дайте своему мозгу пора проанализировать проблему и обработать информацию.

Чтобы получить хороший план, ответьте на этот вопрос:

«С учетом входных данных X, какие шаги необходимо выполнить, чтобы вернуть исходные данные Y?»

Sidenote: Программисты имеют отличный инструмент, который поможет им с этим… Комментарии!

3. Разделить

Обратить внимание. Это самый важный шаг из всех.

Не пытайтесь решить одну большую проблему. Вы будете плакать.

Вместо этого разбейте его на подпроблемы. Эти подпроблемы решить гораздо легче.

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

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

Решив каждую подпроблему, соедините точки.

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

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

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

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

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

Убавьте проблему до точки, когда вы знаете, как ее решить, и напишите решение. Затем немного разверните задачу и перепишите решение, чтобы она отвечала, и продолжайте, пока не вернетесь с того места, с которого начали». – В. Антон Шпраул

4. Застрял?

Сейчас вы, вероятно, сидите там и думаете: «Привет, Ричард… Это круто и все, но что, если я застрял и не могу даже решить подпроблему??»

Сначала глубоко вдохните. Во-вторых, это справедливо.

Но не волнуйся, друг. Такое случается с каждым!

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

На самом деле вот три вещи, которые стоит попробовать, когда столкнешься с сильным ударом:

  • Настройка: пройдите шаг за шагом свое решение, пытаясь найти, где вы ошиблись. Программисты это называют отладка (фактически, это все, что делает отладчик).

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

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

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

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

Дополнительное примечание: еще один способ переоценки – начать заново. Удалите все и снова начните с новыми глазами. Я серьезно. Вы будете удивлены тем, насколько это эффективно.

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

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

Практика

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

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

Как практиковать? Есть варианты из Wazoo!

Шахматы, математические задачи, судоку, го, монополия, видеоигры, криптокиты, бла… бла… бла….

На самом деле, распространенной моделью среди успешных людей является их привычка «решать микропроблемы». К примеру, Питер Тиль играет в шахматы, а Илон Маск – в видеоигры.

«Байрон Ривз сказал: «Если вы хотите увидеть, как может выглядеть лидерство в бизнесе через три-пять лет, посмотрите, что происходит в онлайн играх».

Перемотайте вперед до сегодняшнего дня. Илон [Musk]Род [Hoffman]Марк Цукерберг и многие другие говорят, что игры были основой их успеха в создании их компаний». — Мэри Микер (отчет об интернет-тенденциях за 2017 год)

Значит ли это, что вы просто должны играть в видеоигры? Вовсе нет.

Но что такое видеоигры? Верно, решение проблем!

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

К примеру, мне нравятся вызовы кодирования. Каждый день я стараюсь решить по крайней мере одну задачу (обычно на Coderbyte).

Как я уже сказал, все проблемы имеют одинаковые модели.

Вывод

Это все, уважаемые!

Теперь вы лучше знаете, что значит «думать как программист».

Вы также знаете, что решать проблемы — это невероятный навык, который нужно развивать (метанавички).

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

Фу… Достаточно круто, правда?

Наконец, я желаю вам столкнуться со многими проблемами.

Вы правильно прочли. По крайней мере, теперь вы знаете, как их решить! (также вы узнаете, что с каждым решением вы улучшаетесь).

«Просто когда вы думаете, что успешно преодолели одно препятствие, появляется другое. Но именно это делает жизнь интересной.[…]

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

Каждый раз ты чему научишься.

Каждый раз вы будете развивать силу, мудрость и перспективу.

Каждый раз несколько больше конкуренции отпадает. Пока все, что останется, это ты: самая лучшая версия тебя». – Райан Холидей («Препятствие – это путь»)

Теперь решайте проблемы!

И лучшей удачи?

Особая благодарность К. Джордану Боллу и В. Антону Спраулу. Все хорошие советы поступили от них.

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

Добавить комментарий

Ваш адрес email не будет опубликован.