Как научиться решать задачи в программировании
Перейти к содержимому

Как научиться решать задачи в программировании

  • автор:

Лучший алгоритм решения задач по программированию на Python

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

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

Формулировка задачи

Задача: написать функцию, принимающую одно целочисленное значение и возвращающую сумму целых чисел от 0 до этого значения включительно. При использовании нецелочисленного значения функция должна возвращать 0.

Итак, при передаче функции числа 5 она вернет сумму целых чисел от 0 до 5 или (0+1+2+3+4+5), которая равняется 15. Если передаваемое значение относится к другому типу, отличному от целого числа, такому как строка или число с плавающей точкой и т. д., функция вернет 0.

Разработка плана

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

Попробуем что-нибудь в таком роде:

Мы определили функцию add , принимающую значение num . Внутри нее в виде комментариев схематично прописываются шаги. Если передаваемое функции значение является целым числом, то мы складываем числа от 0 до этого значения включительно и затем возвращаем сумму. Если же оно не принадлежит к типу целых чисел — просто возвращаем 0. После этого прописываем несколько примеров конкретных входных данных для получения желаемого вывода.

Распишем подробнее следующий шаг псевдокода:

Это можно сделать несколькими способами. Как будет выглядеть псевдокод, если мы попробуем выполнить этот шаг с помощью цикла for ?

Теперь постараемся справиться с задачей на основе разработанного плана!

Цикл for

С помощью цикла for задача решается следующим образом:

Проанализируем этот код.

Сначала с помощью функции type проверяем, является ли передаваемое значение num целым числом.

Если тип — целое число, создаем переменную sum и присваиваем ей значение 0.

Затем с помощью цикла for и функции range перебираем целые числа от 0 до входного значения. Обратите внимание, что функция range создает одноименный итерируемый объект, который начинается с 0 (если не указано конкретное начальное значение) и переходит к числу, меньшему, чем завершающее цикл значение (поскольку оно единственно возможное). Следовательно, к этому значению нужно прибавить 1 (num+1), так как требуется сложить все целые числа от 0 до num включительно.

Функция range создает итерируемый объект range , что позволяет перебирать в нем элементы в цикле for , прибавляя каждое число или x к переменной sum .

По завершению итераций функция возвращает sum .

И наконец, если передаваемое функции значение не является целым числом, возвращаем 0.

Вариант кода без комментариев.

Протестировав функцию add , получаем правильные результаты.

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

Итак, приступаем к новому способу решения.

Функция reduce

Функция reduce принимает итерируемый объект и приводит его к единичному суммарному значению. У нее может быть 3 аргумента, два из которых являются обязательными: функция с 2 аргументами и итерируемый объект.

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

Лямбда-функция служит в качестве аргумента, а объект range используется как итерируемый объект. Reduce() приводит range к единичному суммарному значению sum , которое мы возвращаем.

Тернарные операторы

С помощью тернарных операторов можно еще больше сократить код, оформив инструкцию if/else в одну строку следующим образом:

x if C else y

С — это условие, которое проверяется в первую очередь. Если оно True, то вычисляется x, иначе — y, после чего возвращаются соответствующие значения.

В коде это можно реализовать так:

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

Далее разберем еще один способ.

Функция sum()

Он состоит в применении встроенной функции Python — sum() . Она принимает итерируемый объект и возвращает сумму его элементов. Возможен вариант с передачей начального значения, если его первично требуется добавить к элементам.

Опробуем эту функцию в деле:

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

Заключение

В данной статье мы продемонстрировали, что решение задачи по Python разными способами улучшает навыки программирования за счет пополнения копилки знаний. Сформулировав задачу, мы рассмотрели этапы ее решения. Сначала наметили последовательность действий с помощью псевдокода, после чего реализовали задуманное разными способами, используя сначала цикл for , а затем функцию reduce . Применение тернарных операторов позволило еще больше подсократить код и при этом сохранить его читаемость. И наконец, благодаря встроенной функции sum наряду с тернарными операторами мы нашли наиболее лаконичный и пайтонический способ решения поставленной задачи.

Самоучитель для начинающих программистов

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

Шаг 1: Выберите язык программирования
Первый шаг — выбрать язык программирования, который вы хотите изучать. Существует множество языков программирования, каждый из которых имеет свои преимущества и недостатки. Однако, если вы начинаете с нуля, рекомендуется выбрать язык, который легко изучить и имеет большое сообщество разработчиков, такой как Python или JavaScript.

Шаг 2: Изучите основы
Когда вы выбрали язык программирования, следующий шаг — изучить основы. Начните с изучения базовых концепций, таких как переменные, типы данных, операторы и условные операторы. Эти концепции являются основой любого языка программирования, поэтому очень важно понимать их.

Шаг 3: Напишите свою первую программу
Когда вы изучили основы, напишите свою первую программу. Это может быть простой скрипт, который выводит текст на экран или решает математическую задачу. Не бойтесь делать ошибки — это нормально в процессе изучения.

Шаг 4: Практикуйтесь
Чтобы стать лучшим программистом, нужно практиковаться. Решайте задачи и проекты, которые помогут вам применять свои знания на практике. Попробуйте реализовать какой-нибудь проект, который вам интересен. Например, создайте веб-приложение или игру.

Шаг 5: Общайтесь с сообществом
Чтобы получить больше информации и научиться лучше, не забывайте общаться с сообществом программистов. Участвуйте в дискуссиях, задавайте вопросы и обменивайтесь опытом. Также существуют множество онлайн-курсов и ресурсов, которые могут помочь вам на пути к изучению программирования.

Основная терминология в программировании:

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

  • Код (code) — это набор инструкций, который компьютер может выполнить. Код может быть написан на разных языках программирования, таких как Python, Java, C++, JavaScript и других.
  • Компилятор (compiler) — это программа, которая преобразует исходный код на одном языке программирования в машинный код, который может быть понят компьютером.
  • Интерпретатор (interpreter) — это программа, которая читает исходный код на одном языке программирования и выполняет его построчно.
  • Переменная (variable) — это область памяти, которая хранит значение, которое может изменяться в ходе выполнения программы. Переменные могут иметь разные типы данных, такие как целые числа (int), строки (string), дробные числа (float) и другие.
  • Функция (function) — это блок кода, который может быть вызван из другого места программы. Функции могут принимать параметры и возвращать значения.
  • Алгоритм (algorithm) — это последовательность инструкций, которые описывают решение задачи.
  • Условие (condition) — это конструкция, которая выполняет разные действия в зависимости от того, выполняется ли заданное условие.
  • Цикл (loop) — это конструкция, которая позволяет выполнять блок кода несколько раз.
  • Массив (array) — это структура данных, которая содержит набор элементов определенного типа. Каждый элемент в массиве имеет свой индекс, который позволяет обращаться к нему.
  • Объект (object) — это экземпляр класса, который содержит свойства и методы. Объекты используются в объектно-ориентированном программировании.

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

Основные концепции:

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

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

  • Переменные и типы данных — переменные используются для хранения значений, которые могут быть изменены в ходе выполнения программы. Важно понимать различные типы данных, такие как числа, строки и булевы значения.
  • Условные конструкции — условные конструкции используются для выполнения различных действий, в зависимости от значения переменной или другого условия.
  • Циклы — циклы используются для повторного выполнения блока кода определенное количество раз или до тех пор, пока не будет выполнено определенное условие.
  • Функции и методы — функции и методы используются для повторного использования блоков кода и их организации в отдельные модули.
  • Объектно-ориентированное программирование — объектно-ориентированное программирование (ООП) использует классы и объекты для описания объектов и их свойств, а также методов, которые могут быть вызваны на этих объектах.
  • Алгоритмы и структуры данных — алгоритмы и структуры данных используются для эффективной организации и обработки данных.

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

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

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

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

Большое количество книг по всем языкам программирования ты можешь найти в канале — Библиотека

Грокаем алгоритмы: Гайд по алгоритмам для тех, кому сложно решать задачи

Грокаем алгоритмы: Гайд по алгоритмам для тех, кому сложно решать задачи главное изображение

Грокать алгоритмы или не грокать? Что делать, если вам не хочется решать сто задач к вашему следующему собеседованию?

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

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

Коротко расскажу о себе, чтобы вы убедились в моей экспертности. Я программирую уже 20 лет, за это время я много раз менял место работы. Всего я прошел около 30 воронок найма — больше 120 собеседований. Плюс к этому у меня есть опыт с той стороны баррикад: я провел около 300 технических собеседований и больше 200 собеседований по системному дизайну.

Где мы грокаем алгоритмы

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

Самая большая проблема LeetCode в том, что сайту не хватает продуманной системы обучения. У него много разных задач, в которых легко потеряться. Сколько нужно таких задач, чтобы подготовиться к собеседованию? Я бы предпочел двигаться по продуманной программе, в конце которой я смогу ощутить уверенность в собственных знаниях. Но системы нет, а я ленивый, и вообще — не хочу решать 500+ задач.

Одно из популярных решений для этой проблемы — решать задачи, которые относятся к одной структуре данных (например, прорешать несколько задач с деревьями). Какая-то система обучения появляется, но это решение меня все равно не устраивает. Например, что делать, если задачу можно решить при помощи разных структур данных?

Какую систему обучения придумал я

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

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

Самые распространенные паттерны для решения задач

Читайте также: Это снова я, резиновая уточка: что такое метод Фейнмана и почему с его помощью так просто изучать программирование

Метод скользящего окна

Контекст: Мы используем этот метод, когда у нас есть входные данные с заданным размером окна.

Задачи для этого паттерна:

Метод двух указателей

Контекст: Мы используем два указателя, чтобы перебрать все входные данные. Обычно два указателя движутся в противоположных направлениях с фиксированным интервалом.

Задачи для этого паттерна:

Нахождение цикла

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

Задачи для этого паттерна:

Интервальное слияние

Контекст: Этот метод применяют, если есть пересекающиеся интервалы. Например, на этом изображении мы видим, что интервалы a и b могут пересекаться шестью разными способами:

Задачи для этого паттерна:

Цикличная сортировка

Контекст: Если входные данные лежат в заданном интервале, используйте цикличную сортировку.

Задачи для этого паттерна:

In-place Reversal для LinkedList

Техника: Эта техника описывает эффективный способ перевернуть связи между узлами в LinkedList (класс Java). Часто мы ограничены in-place, то есть мы должны использовать исходные узлы.

Задачи для этого паттерна:

Поиск в ширину

Контекст: Это метод для решения задач с деревьями.

Задачи для этого паттерна:

Поиск в глубину

Контекст: Тот же, что для предыдущего метода.

Задачи для этого паттерна:

Двоичная куча

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

Задачи для этого паттерна:

Подмножества

Контекст: Если задача требует перестановки или комбинаций элементов, используйте подмножества.

Задачи для этого паттерна:

Усовершенствованный бинарный поиск

Контекст: Эта техника использует логический оператор для наиболее эффективного поиска элементов.

Задачи для этого паттерна:

Наибольшее K элементов

Контекст: Эта техника используется, чтобы найти наибольший/наименьший или наиболее часто встречающийся набор k-элементов в коллекции.

Задачи для этого паттерна:

Читайте также: Как решить задачу, если непонятно, с чего вообще начать: советы от Хекслета

K-образное слияние

Контекст: Используйте эту технику, если у вас есть список отсортированных массивов.

Задачи для этого паттерна:

Рюкзак 0-1

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

Задачи для этого паттерна:

Неограниченный рюкзак

Контекст: То же самое, что в предыдущем паттерне, но только каждый элемент может быть выбран повторно сколько угодно раз.

Задачи для этого паттерна:

Числа Фибоначчи

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

Задачи для этого паттерна:

Наибольшая последовательность — палиндром

Контекст: Имеется в виду задача, которая может быть использована как для последовательности, так и для строк. По сути это задача на оптимизацию.

Задачи для этого паттерна:

Наибольшая общая подстрока

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

Задачи для этого паттерна:

Чтение префиксного дерева

Контекст: Это специфичная для структуры данных техника, с помощью которой читают или создают префиксное дерево.

Задачи для этого паттерна:

Острова в матрице

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

Задачи для этого паттерна:

Путь проб и ошибок

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

Задачи для этого паттерна:

Система непересекающихся множеств

Контекст: Если данные раскиданы по непересекающимся множествам, то они решаются одним и тем же способом.

Задачи для этого паттерна:

Поиск уникального маршрута

Контекст: Этот паттерн подойдет для прохождения по любому многомерному массиву.

Задачи для этого паттерна:

Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях

Думай как программист. Урок по решению задач

image

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

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

Данный пост ставит целью научить вас этому.

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

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

Решение задач — это базовый навык.

Мы постоянно решаем задачи. Большие и маленькие. Как мы это делаем? Иногда хорошо… если повезет.

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

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

«Большинство работодателей считает более важным навык решения задач.

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

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

Системный подход

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

Это привело меня к интервью с двумя действительно впечатляющими людьми: C. Jordan Ball (занимает 1-е или 2-е место из 65 000 пользователей Coderbyte) и V. Anton Spraul (автор книги «Думай как программист. Креативный подход к созданию кода.»).

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

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

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

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

Итак, что делать, когда вы сталкнетесь с новой задачей?

Разберем по шагам:

1. Понимание

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

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

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

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

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

“Если вы не можете объяснить что-то простым языком, то вы не понимаете этого.”

2. Планирование

Не начинайте решать задачу без плана, надеясь не запутаться в ней. Планируйте свое решение!

В программировании не надо «идти напролом». Дайте вашему мозгу время для анализа и обработки информации.

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

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

Примечание: у программистов для этого есть отличный инструмент. Комментарии!

3. Декомпозиция

Это самый важный шаг. Будьте внимательны!

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

Вместо этого разделите её на подзадачи. Решить их будет гораздо проще.

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

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

Соединение всех маленьких задач даст вам решение исходной.
Поздравляем!

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

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

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

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

Уменьшайте задачу пока не поймете как её решить. Запишите решение. Затем разворачивайте задачу до момента, пока не вернетесь к начальному вопросу.

4. Застряли?

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

Прежде всего сделайте глубокий вдох. Не волнуйтесь. Это происходит со всеми!

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

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

    Отладка. Проверяйте шаг за шагом, где вы могли ошибиться в своем решении. Программисты называют это дебаггингом.

«Искуство отладки заключается в выяснении разницы того, что вы написали в программе, и того, что вы хотели написать»

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

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

Практика

Не надейтесь стать профессионалом через неделю. Для того, чтоб хорошо решать задачи, нужно решить много задач!

Практика. Практика. И еще раз практика. Только со временем вы сможете сказать: «Эта задача может быть легко решена с помощью <подставьте свое решение сюда>».

Как тренироваться? Есть интеренсые варианты!

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

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

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

Быстрая перемотка вперед. Илон Маск, Рид Хоффман, Марк Цукерберг и многие другие говорят, что игры были основополагающими для их успеха в создании своих компаний.

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

Но в чем суть большинства игр? Правильно, в решении задач!

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

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

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

Вывод

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

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

Обратите внимание, теперь вы также знаете, как практиковать свои навыки решения задач!

Наконец, я хочу, чтобы вы столкнулись с множеством задач.

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

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

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

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

С каждым разом будет все меньше конкуренов. И в конце останется только ваша улучшеная версия.»

Теперь идите решать задачи!

И пусть вам сопутствует удача!

Особая благодарность C. Jordan Ball и V. Anton Spraul. За полезные совет которые они дали.

Кроме того, я не мог бы преобрести своих знаний в области программирования так быстро без Lambda School. Не могу не поблагодарить и не рекомендовать их.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *