Пользователь
0,0
рейтинг
5 октября 2013 в 15:34

Разработка → Дерек Сиверс: «Метод интервального повторения — лучший способ изучения языков программирования» перевод

Краткая справка: в 1998 году Дерек Сиверс основал компанию CD Baby и превратил ее в крупнейшего онлайн-продавца независимой музыки. В 2008-ом вырученные от продажи компании $22 миллиона Дерек передал в благотворительный траст на нужды музыкального образования.
Речи Дерека на TED просмотрели более 5 миллионов раз, а его собственная книга занимала первую строку в чарте книг для предпринимателей на Amazon.
Сам себя Дерек считает «вечным учеником».


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

Моя история



Признаюсь, я достаточно посредственный программист. У меня нет специального образования. Я просто учился кое-чему ввиду необходимости – я запустил небольшой сайт CD Baby, который со временем стал разрастаться, и поскольку я не мог позволить себе нанять специалиста, я просто потратил около 25$ на книги по PHP, SQL, Linux и Apache. Из них я почерпнул тот минимум знаний, который помог мне поддерживать сайт в рабочем состоянии. Годами я использовал этот скромный набор.

Однако позже, когда мне довелось работать бок о бок с НАСТОЯЩИМИ программистами, я был просто поражен объемом их знаний. Все эти команды и функции просто отскакивали от их пальцев. Мы пользовались одним и тем же языком, однако они хранили в памяти такое невероятное количество информации, что я почувствовал себя третьеклассником рядом с профессором университета. Мне захотелось добиться такой же скорости работы.

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

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

Интервальное повторение



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

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

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



Предположим, вы выучили новое иностранное слово. Повторите его спустя несколько минут после того, как услышали его, затем – через пару часов, затем – через день, затем – через 2 дня, затем – через 5 дней, затем – через 10 дней, 3 недели, 6 недель, 3 месяца, 8 месяцев и т.д. Через некоторое время оно накрепко засядет в вашей голове – нужно будет лишь изредка его повторять.

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

По этой ссылке: ankisrs.net можно скачать программу Anki – бесплатную и самую популярную программу такого рода. Существуют версии для Mac, Windows, Linux, iPhone, Android и т.д. Написана на Python.

Ну а теперь поговорим непосредственно о программировании.

Что если бы вы могли запомнить все в изучаемом вами языке программирования? Все команды, параметры, функции. Решения для сотен самых распространенных проблем – все это практически на уровне мышечной памяти? Представьте, как читаете книгу или документ и запоминаете все в мельчайших подробностях!

Ну ладно, пора переходить от вступления к делу.

Для начала выучи!



Начну с того, что проясню одну важную вещь:

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

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

(Именно поэтому использование чужих колод не так эффективно. Это же просто напоминалки.)

Формулируйте знания в виде небольших фактов



Вам предстоит создать огромное количество карточек. Вопрос — с одной стороны. Ответ – с другой.

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






С другими дисциплинами не все так просто – от вас потребуется немного творческого мышления.

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

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

Заменяйте долгие описания примерами с использованием кода


Если учите JavaScript, и сталкиваетесь со следующим правилом:

«Оператор сложения (+)… если хотя бы один операнд – строковый, второй также преобразуется в строковый, таким образом, результат сложения – объединение двух строковых операндов.»


Вы проверяете эту информацию на практике, изучаете вопрос вдоль и поперек, в итоге выясняете, что 1 + '1' таки равно '11'. После чего создаете карточку, которая поможет запомнить этот факт:



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

Ставьте себе вопросы с подвохом


Вот следующая выдержка из учебника по JavaScript:

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


Проверяете на практике, пробуете разные варианты, и создаете две карточки. Попытаемся подловить себя будущего:



… и за ней – практически идентичный вопрос…



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

Можете попробовать более изощренные варианты, которые заставят вас надолго запомнить «интересные» карточки:



Не забывайте также задавать себе небольшие задачки:



Запоминайте интересные приемы


Если вам попался интересный трюк, который вы хотели бы запомнить, превратите его в ответ на вопрос карточки.



Задавайте вопросы с несколькими вариантами ответов


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



Учите объемные понятия посредством коротких примеров


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



Другой пример:



Прочитайте «20 Rules of Formulating Knowledge» Петра Возняка


Рекомендую на эту тему почитать статью Петра Возняка “20 Rules of Formulating Knowledge” – там вы найдете очень много полезных советов. Статья находится здесь: http://www.supermemo.com/articles/20rules.htm.

Занимайтесь каждый день



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

Вы можете запомнить тысячи фактов, тратя на них по 20 минут в день. Для меня это утренний ритуал. Наливаю чашечку горячего чая. Открываю Anki. Пью чаек.

Можно сделать все гораздо интереснее – заставить себя отвечать на вопросы как можно быстрее.

Мне это напоминает воркаут для мозга. 20 минут «тяжелой атлетики» в день окупятся в виде моментальных и долгосрочных результатов.

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

Заключение



Я уже год практикую этот метод, и могу сказать, что он ЗНАЧИТЕЛЬНО повысил мою продуктивность. Поэтому я крайне настоятельно его рекомендую и вам.

Вы можете использовать этот подход в изучении чего угодно. Вдохновить на это может эта статья.

Не стесняйтесь, пишите мне (derek@sivers.org) в любое время, задавайте вопросы или просто делитесь успехами.

ОБНОВЛЕНИЕ



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

Также многие просили меня поделиться своими колодами по Ruby и JavaScript.
Вообще, я не думаю, что это правильно, потому что карточки Anki – это не источник знаний, а механизм, который помогает вам освежать эти знания в памяти. Само получение знаний должно идти из другой среды. Но, раз вам так хочется, вот мои колоды по Ruby и JavaScript состоянием на 7 января 2013г.
Чтобы импортировать их в программу, нажмите Файл → Импортировать.
Колода JavaScript
Колода Ruby
Перевод: Дерек Сиверс
@YuraYu
карма
23,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (45)

  • 0
    Спасибо за статью, а то я уже собирался изобретать велосипед и сам писать подобное, ибо все удержать в голове — ну просто никак.
    • +8
      Тут идет сильная подмена понятий.
      В заголовке статьи говориться о изучении языков программирования, а в самой статье о методах запоминания информации.

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

      Изучение языка программирования — это больше процесс понимания и осознания. Например, чтобы понять ООП, надо понять ООП. И учи тут что-то или не учи, пока не поймешь, не осознаешь, не прочувствуешь — ты не можешь эффективно использовать все возможности языка.
      Чтобы стать програмистом на каком-то языке надо поработать на нем 100-500 часов, а не карточки зубрить.
      • +2
        Некоторые нюансы неплохо и запомнить, а порой не получается.
      • 0
        Мне все же кажется, что из понимания фундаментальных вещей следует принципиальная способность решить задачу, а вот запоминание каких-то приемов, идиом, синтаксических особенностей, как раз влияет на продуктивность. Грубо говоря, если я не понимаю прототипного ООП, то я вряд ли смогу хорошо спроектировать сложную систему на JS, о скорости решения задач тут речь не идет, а то что я помню, что элемент в массив вставляется с помощью arr.splice(index, 0, el) — это то, что влияет на скорость кодинга на конкретном языке программирования.
        • +2
          Проблема в том, что даже фундаментальные вещи, которые ты понял, со временем забываются. В Анки необязательно заносить карточки описывающие функции, можно создавать карточки с фундаментальными вопросами.
      • +3
        Если вы запомните все правила дорожного движения, вы станете более хорошим водителем.
  • +2
    «Если за конструктором нового массива следует простое число, то в результате создается пустой массив длиной в обозначенное этим числом количество элементов. Любая другая комбинация аргументов дает на выходе массив, содержащий эти самые аргументы.»
    Лучше написать «натуральное положительное», во избежание путаницы)
    • 0
      Ну, или «обычное», как вариант)
    • +1
      я бы посмотрел на «натуральное отрицательное» :)
      • +3
        Иногда в множество натуральных включают 0
      • +2
        Тогда, чтобы уже совсем никакой путаницы не было — «положительное целое»! :DD
    • +6
      Интересно было бы посмотреть на язык с перегрузкой конструкторов по простоте числа :)

      var a = new Array(5); // [null, null, null, null, null]
      var b = new Array(6); // [6]
    • 0
      Исправил, спасибо.
  • +2
    Довольно давно для изучения английского использую Anki. Как-то и не задумывался над тем, чтобы подобную практику использовать для улучшения своих навыков в программировании.

    Спасибо за статью.
  • +2
    Anki отличная программа, недавно нашел, и очень ей доволен.
    Хочется плугин, который бы сам подтягивал перевод со звуком из google translate, никому не попадался?
  • +1
    Спасибо за перевод!
    Надеюсь, метод и программа помогут мне эффективнее изучать немецкий.
  • 0
    Спасибо за Anki, раньше не встречал.
    Посмотрим, что же из этого получится и на сколько эффективно такое обучение.
  • +4
    Не спорю, что программа, вероятно, очень полезна, но… все ваши знакомые НАСТОЯЩИЕ программисты думаете тоже ее используют или может practice makes perfect? :)
  • 0
    Теперь наконец-то изучение испанского пойдет быстрее. От всей души благодарю за чудесную статью!
    • +1
      Попробуйте Duolingo. Там похожая система, но не по словам, а по целым предложениям, которые предлагается переводить туда-обратно, проговаривать, записывать на слух и т.д.
      • +1
        Никто не запрещает в Anki записывать на карточку предложения вместо слов, переводить туда-обратно, использовать аудио и видео в карточках.
        • 0
          Duolingo всё же отличная штука — не надо ничего записывать, он сам всё предложит. И покажет, сколько в день вы назанимались.
          Правда, пары русский-английский там нет. Есть английский-немецкий, английский-французский, ещё итальянский, испанский и португальский.
          • +1
            Весьма интересно, кстати, учить другие языки через английский.
  • +2
    Не даром говорят: «Повторение — мать учения»!
  • +4
    Чтобы быть программистом, не надо знать все функции.
    Надо знать где и как их искать!
  • +1
    Посмотрел на цену AnkiMobile для iPhone и ужаснулся, она реально того стоит?
    • +2
      Ну это вам решать, вы же купили iPhone, вас никто не заставлял. Версия для Android бесплатна. С пользователей iPhone разработчики традиционно денег хотят. Есть альтернативы:
      iFlash: itunes.apple.com/ru/app/iflash-touch/id313198123?mt=8
      Cram: itunes.apple.com/us/app/cram/id498843111?mt=8
      но они тоже небесплатны. На suse есть сколько-то ещё: suse.me/soft/anki/iphone/
    • +1
      Во-первых, web–версия вполне функциональна и не требует денег
      Во-вторых, продажа версии Anki для iPhone — это способ поддержать разработку. Поначалу мне тоже казалось, что цена великовата, но после двух лет ежедневного использования Anki (web+десктоп) я с удовольствием её купил, так как полученный эффект стоит того.
  • 0
    Язык — это ладно, вот современный фреймворк на карточки придется долго резать. Правда, можно ограничится только непонятными моментами: столкнулся с чем-то неочевидным или новым — сделал карточку.
  • +1
    Все способы насильно заставить свой мозг что-то заучить — кажутся мне немного не естественными. У нас и так есть встроенный планировщик, который выбирает что запоминать, а что нет. В кэш мозга попадает только то, что нам нужно регулярно, остальное вытесняется. За редкими штуками можно ходить во внешнюю память (гугл / маны / etc). Если какая-то штука стала часто используемой — она сама подгрузится в кэш (и достаточно быстро — достаточно нескольких запросов к одному и тому-же). К тому-же, с современными скоростями доступа к информации, разница между кэшом и внешней памяти не такая и большая — сходить в кэш от десятков миллисекунд до нескольких секунд; сходить во внешнюю память => от нескольких секунд до нескольких минут.
    • 0
      Проблема в том, что планировщик априори считает, что менять род деятельности вам нужно не так часто и сопротивляется запоминанию большого количества информации «за один присест». А многие вещи иначе невозможно начать использовать.

      Так-то да, все эти карточки помогают только «первый шаг» в какой-то области сделать.
      • 0
        Лимит в день. Если заниматься каждый день, а не срочно перед экзаменом/етц, планировщик покажет все карточки, и не так много дней потребуется.
  • +1
    [скриншот 1]
    [скриншот 2]
    Вот это, как мне кажется, готовый пример того, что память не создаёт программиста.

    Современный программист, на JavaScript программирующий, никогда не станет набирать код «new Array('5')», потому что «['5']» набирается куда быстрее, и проще, и безошибочнее.

    Не станет он набирать и код «new Array(5)», потому что создание пустого массива ненулевой длины — это извращение, которое очередным шагом доброго и полноценного решения какой-либо задачи послужить не сможет. Всем пустым массивам лучше иметь нулевую длину: во-первых, так проще опознавать их впоследствии, а во-вторых, «[]» набирается куда быстрее, и проще, и безошибочнее.

    Так что помнить эти два примера не нужно; а запомнить нужно про необходимость избегать их.

    (То же самое избегание, надо сказать, и «JavaScript Гарден» советует.)
  • 0
    Дерек… вспомнил сразу Мафию 2 :)
  • 0
    А кому-то удалось импортировать карты по JS? А то у меня анки повис на этапе импорта.

    Но имхо, метод интервальных повторений для языков программирования — лишен смысла. Программирование надо понимать, а не зубрить.
    А вот для иностранных языков — совсем другое дело, у меня например есть набор карт английских идиом, забавная вещь.
  • 0
    Кто активно пользуется для своих карточек, расскажите, пожалуйста, есть ли смысл сваливать все карточки в одну колоду, или на каждую тематику лучше создавать отдельную? Как лучше организовать систему? Много колод — забудешь в каждую зайти, и мало карточек в каждой колоде. Одна колода — система проще, но всё в куче (хотя не уверен, что это плохо). Где баланс?
    • +1
      Есть теги. Мне кажется, можно создать урезанную колоду по тегам на основе общей.
      • +1
        Плюс колоды могут быть вложенными.
    • +2
      Я на каждую область знания создаю отдельную колоду и организую их иерархию с помощью вложенности.
  • 0
    Есть также прекрасная программа для iOS — Eductic.
  • +1
    Эти карточки отлично заменяются практикой. Если что-то встретилось вам раз в жизни и больше ни разу — можно и забыть. А потом вспомнить (с меньшими усилиями, потому что «уйдёт в интуицию»). Если встречаешься часто — запоминаешь.

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

    Так же как с языком. Можно сколько угодно зубрить карточки, но погружения в языковую среду они не заменят.
    • 0
      Одно другому не мешает. Можно практиковаться и в то же время что-то запоминать с помощью карточек.
  • +1
    И? сидеть перебирать карточки учить снипеты? А кодить когда?
  • 0
    Завел колоду с правилами из статьи habrahabr.ru/post/194752/
    Для себя определённую целесообразность вижу — такой подход позволяет обойти грабли с которыми я ещё не сталкивался.
    • 0
      Можете поделиться колодой?

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