Автор: Ариан Арора

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

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

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

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

В этом посте моя цель - научить вас этому.

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

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

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

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

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

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

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

Лучший способ - это а) иметь структуру и б) практиковать ее.

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

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

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

Есть рамки

Чтобы найти правильную схему, я последовал совету Тима Феррисса по обучению 4-часовой повар.

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

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

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

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

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

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

Вот шаги:

1. Поймите

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

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

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

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

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

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

2. План

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

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

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

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

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

Примечание: у программистов есть отличный инструмент, чтобы помочь им в этом… Комментарии!

3. Разделить

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

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

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

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

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

Решив все подзадачи, соедините точки.

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

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

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

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

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

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

4. Застрял?

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

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

Но не волнуйся, друг. Это случается со всеми!

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

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

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

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

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

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

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

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

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

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

Упражняться

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

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

Как практиковаться? Есть варианты, черт возьми!

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

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

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

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

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

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

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

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

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

Вывод

Вот и все, ребята!

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

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

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

Уф… Довольно круто, правда?

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

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

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

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

Каждый раз вы чему-то узнаете.

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

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

А теперь иди, реши несколько проблем!

И удачи 🙂

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

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

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