Коротко о себе. Дмитрий. 38 лет. Прошел путь от учителя истории до системного администратора в интернет провайдере.
Первые шаги в программировании были успешными (спасибо Андрею Новикову (мой технический руководитель, который впервые открыл для меня основы функционального программирования). Выбор пал на Python, как универсальный инструмент, с помощью которого решались задачи по автоматизации разнообразной сисадминской рутины.
Но мне, как человеку любознательному, этого было недостаточно. Написать небольшой скрипт - полдела. "Нужно двигаться дальше" - сказал я себе и увлекся автоматизацией сетей. Python с богатым набором сетевых библиотек оказался здесь как нельзя кстати. Но чем глубже я погружался в тему, тем чаще посещала мысль: "нет крепкой программерской базы, необходим фундамент".
Последнее искал и находил на Хекслете три года тому назад. Но меня отбросило назад обрушившимся информационным потоком и сложностью некоторых задач. Сдаваться - не в моем характере. Дополнительно - успел оценить плюсы увлечения программированием. Кодинг прочищает мозги. Помогает смотреть на проблему, как систему. Разложив последнюю на составные части, можно обнаружить некоторые закономерности ...
Вернувшись на Хекслет, первым делом осмотрелся. Сохранилась та ламповая атмосфера, о которой ранее столько писали люди. Вздохнул с облегчением. Число курсов значительно выросло. Поставил жирный плюс. Уууууиии! Мой любимый Python. Вернулся ... и в рекурсивном стиле споткнулся о знакомые уже грабли. Бум!
Первый шаг - попытка объяснить самому себе, что есть рекурсия. Как результат - легкая неудовлетворенность выбранным методом и отсутствием глубокого понимания механизма работы рекурсивных функций.
Второй шаг - попытка объяснить другому человеку (в моем случае, это технический руководитель, который одобряет мое увлечение программированием). Ближе к цели. С формулировкой понятия рекурсивная функция руководитель соглашается и рисует на листе бумаги схему как дополнительный бонус.
Третий шаг - вдохновляюсь вебинарами Хекслета и литературой по функциональному программированию. (это может быть любая книга по функциональному программированию). Концепция важнее инструмента.
Четвертый шаг - иногда возвращаюсь к математическим первоистокам. Смотрю на Youtube видео-лекции по математике. Это могут быть темы школьной программы или по-хорошему жуткий хардкор с Савватеевым.
Пятый шаг - const flashBack = () => "материалы Хекслета по основам программирования". База - это наше все.
Шестой шаг - под занавес рабочего дня решил пройти испытание "Добавляем цифры". Испытание в рамках курса PHP: Основы. Произвел декомпозицию. (Разделяй и властвуй). На этом этапе вынужден был остановиться. Рабочий день закончился и нужно было покидать офис. Возвращался я домой, неторопливо наслаждаясь последними деньками уходящего бабьего лета. И вдруг вот оно - озарение. Эту функцию можно реализовать через рекурсию! Включил диктофон и наговорил: "Установить предел, определить выражение в цикле, пусть функция возвращает результат выражения через саму себя". Переступил порог дома и за пять минут написал на JS решение. Здорово! Испытание на PHP: еще 5 минут и синтаксически причесал код под PHP.
Подытожим.
Внимательно читайте задания учителя. Понимание проблемы - залог успеха. Смотрите на проблему с разных сторон. Ищите методы и подходы для решения задачи. Пусть крепнет ваш пытливый ум.