2013-01-06
Я уже год использую этот метод обучения и могу сказать, что он – самый эффективный из тех, с которыми мне довелось столкнуться за 14 лет изучения программирования.
Признаюсь, я достаточно посредственный программист. У меня нет специального образования. Я просто учился кое-чему ввиду необходимости – я запустил небольшой сайт CD Baby, который со временем стал разрастаться, и поскольку я не мог позволить себе нанять специалиста, я просто потратил около 25$ на книги по PHP, SQL, Linux и Apache. Из них я почерпнул тот минимум знаний, который помог мне поддерживать сайт в рабочем состоянии. Годами я использовал этот скромный набор.
Однако позже, когда мне довелось работать бок о бок с НАСТОЯЩИМИ программистами, я был просто поражен объемом их знаний. Все эти команды и функции просто отскакивали от их пальцев. Мы пользовались одним и тем же языком, однако они хранили в памяти такое невероятное количество информации, что я почувствовал себя третьеклассником рядом с профессором университета. Мне захотелось добиться такой же скорости работы.
Я задумался о том, сколько раз за все эти годы я чему-то учился и тут же забывал. Я вычитывал какой-то интересный прием в журнале или книге, пробовал его применить один раз, после чего меня что-то отвлекало, я забывал о нем, и продолжал делать все привычным способом.
Я хотел надежно отложить в памяти команды и приемы языка, чтобы не забыть их и иметь возможность в нужный момент ими воспользоваться.
Когда вам попадается новый факт, вы рискуете в скором времени его забыть, если он не будет периодически мелькать у вас перед глазами.
Это может происходить случайно, если вы, к примеру, погрузившись в тот или иной язык, будете время от времени повторно натыкаться на изучаемые слова.
Однако, согласно результатам исследования, самое эффективное время для повторения выученного, это момент, когда вы вот-вот готовы его забыть.
Предположим, вы выучили новое иностранное слово. Повторите его спустя несколько минут после того, как услышали его, затем – через пару часов, затем – через день, затем – через 2 дня, затем – через 5 дней, затем – через 10 дней, 3 недели, 6 недель, 3 месяца, 8 месяцев и т.д. Через некоторое время оно накрепко засядет в вашей голове – нужно будет лишь изредка его повторять.
Программное обеспечение на основе метода интервального повторения все сделает за вас, вам лишь необходимо занести в него ту информацию, которую вы хотели бы запомнить, затем каждый день проходить тестирование – программа определяет интервалы повторения, основываясь на вашей оценке собственных знаний. Если, ответив на вопрос, вы оцениваете его как легкий, то в следующий раз программа его предложит не скоро, если же вы допустили ошибку или не вспомнили ответ, программа задаст вопрос снова несколько раз, пока вы не справитесь.
По этой ссылке: apps.ankiweb.net можно скачать программу Anki – бесплатную и самую популярную программу такого рода. Существуют версии для Mac, Windows, Linux, iPhone, Android и т.д. Написана на Python.
Ну а теперь поговорим непосредственно о программировании.
Что если бы вы могли запомнить все в изучаемом вами языке программирования? Все команды, параметры, функции. Решения для сотен самых распространенных проблем – все это практически на уровне мышечной памяти? Представьте, как читаете книгу или документ и запоминаете все в мельчайших подробностях!
Ну ладно, пора переходить от вступления к делу.
Начну с того, что проясню одну важную вещь:
Карточки нужны для того, чтобы запомнить то, что выучил.
Прежде чем создавать карточку, посвященную чему-либо, нужно в первую очередь это что-либо понять и запомнить. Каким бы не был ваш источник – будь то книги, лекции, видеозаписи, код, онлайн-уроки, или любой другой – создавать карточку можно лишь после того, как новая информация была выучена и усвоена.
(Именно поэтому использование чужих колод не так эффективно. Это же просто напоминалки.)
Вам предстоит создать огромное количество карточек. Вопрос — с одной стороны. Ответ – с другой.
Если вы используете этот метод для изучения иностранного языка, оформление карточек не должно вызвать сложностей. В поле вопроса – слово или фраза, в поле ответа – перевод, и наоборот.
С другими дисциплинами не все так просто – от вас потребуется немного творческого мышления.
Придется немного потрудиться – изучить соответствующий материал, выбрать ключевые факты, разбить их на минимальные фрагменты и оформить в виде коротких вопросов, – что-то наподобие викторины, в которой вам предстоит участвовать.
Я занимаюсь этим уже около года, так что могу поделиться, как максимально сэкономить время.
Заменяйте долгие описания примерами с использованием кода
Если вы читаете учебник по программированию и натыкаетесь на абзац, описывающий какую-то функцию.
«Оператор сложения (+)… если хотя бы один операнд – строковый, второй также преобразуется в строковый, таким образом, результат сложения – объединение двух строковых операндов.»
Вы проверяете эту информацию на практике, изучаете вопрос вдоль и поперек, в итоге выясняете, что 1 + '1' таки равно '11'. После чего создаете карточку, которая поможет запомнить этот факт:
var a = 5 + '5';
// what is a?
'55'
If either side of + is a string, the other is
converted to a string before adding like strings.
Ставьте себе вопросы с подвохом
Иногда вы узнаете "загвоздку" - распространенную ошибку или неожиданную особенность.
«Если за конструктором нового массива следует натуральное положительное число, то в результате создается пустой массив длиной в обозначенное этим числом количество элементов. Любая другая комбинация аргументов дает на выходе массив, содержащий эти самые аргументы.»
Проверяете на практике, пробуете разные варианты, и создаете две карточки. Попытаемся подловить себя будущего:
var a = new Array('5');
// what is a?
An array with one item, the string '5': ['5'];
… и за ней – практически идентичный вопрос…
var a = new Array(5);
// what is a?
An empty array with a length of 5.
Когда программа будет вас проверять, она будет выдавать карточки с вопросами вперемешку, поэтому подвох вас ждет – как обычно – в самый неожиданный момент.
Можете попробовать более изощренные варианты, которые заставят вас надолго запомнить «интересные» карточки:
var a = [20, 10, 5, 1];
// what is a.sort()?
[1, 10, 20, 5]
// sort treats all values as strings
Не забывайте также задавать себе небольшие задачки:
var a = [20, 10, 5, 1];
// sort these in numeric order
function compare(v1, v2) { return(v1 — v2); }
a.sort(compare);
Запоминайте интересные приемы
Если вам попался интересный трюк, который вы хотели бы запомнить, превратите его в ответ на вопрос карточки.
var albums = [
{name: 'Beatles', title: 'White Album', price: 15},
{name: 'Zeppelin', title: 'II', price: 7}];
// make this work:
albums.sort(by('name'));
albums.sort(by('title'));
albums.sort(by('price'));
function by(propName) {
return function(obj1, obj2) {
v1 = obj1[propName];
v2 = obj2[propName];
if (v1 < v2) { return -1; }
else if (v1 > v2) { return 1; }
else { return 0; }
};
}
Задавайте вопросы с несколькими вариантами ответов
Если есть два и более решения той или иной задачи, и вы хотите запомнить все, формулируйте вопрос соответственно, чтобы в будущем, отвечая на вопрос, вы вспомнили все возможные варианты. (Кстати следующие ниже примеры взяты из языка Ruby.)
s = 'string like this'
# In Ruby, show two ways to turn it into 'String Like This'
s.split.map(&:capitalize).join(' ')
s.gsub(/\b\S/) {|x| x.upcase}
Учите объемные понятия посредством коротких примеров
Допустим, вы провели 20 минут, изучая какое-то понятие, которое имеет скорее концептуальную природу, требует скорее понимания, а не выучивания ряда функций. В таких случаях, можно свести все к небольшому примеру, который напомнит вам суть данного понятия.
/(a(b)((c)d))/.match('abcd')
# What will $1, $2, $3, $4 be?
$1 = 'abcd'
$2 = 'b'
$3 = 'cd'
$4 = 'c'
Другой пример:
class C
self
end
class D < C
end
d1 = D.new
# which object is self?
class D
Прочитайте «20 Rules of Formulating Knowledge» Петра Возняка
Рекомендую на эту тему почитать статью Петра Возняка “20 Rules of Formulating Knowledge” – там вы найдете очень много полезных советов. Статья находится здесь: supermemo.com/en/articles/20rules.
Для наиболее эффективных результатов, запускайте программу каждый день. Если надолго забросить ее, у вас к чертям собьется график, в итоге вам придется заново учить вещи, которые вы по идее должны помнить.
Вы можете запомнить тысячи фактов, тратя на них по 20 минут в день. Для меня это утренний ритуал. Наливаю чашечку горячего чая. Открываю Anki. Пью чаек.
Можно сделать все гораздо интереснее – заставить себя отвечать на вопросы как можно быстрее.
Мне это напоминает воркаут для мозга. 20 минут «тяжелой атлетики» в день окупятся в виде моментальных и долгосрочных результатов.
Добавляйте все новые и новые карточки, и вы будете удивлены, насколько свежа вся эта информация в вашей голове.
Я уже год практикую этот метод, и могу сказать, что он ЗНАЧИТЕЛЬНО повысил мою продуктивность. Поэтому я крайне настоятельно его рекомендую и вам.
Вы можете использовать этот подход в изучении чего угодно. Вдохновить на это может эта статья.
Не стесняйтесь, пишите мне в любое время, задавайте вопросы или просто делитесь успехами.
"Janki Method Refined" Джека Кинселлы - отличная статья о подобном подходе, объясняющая его даже лучше, чем я здесь.
Вы также можете использовать Anki для изучения самых разных вещей.
"Augmenting Long-term Memory" Майкла Нильсена - замечательная статья об использовании Anki для изучения чего угодно.
Прочтите интервью с Петром Возняком на сайте wired.com, чтобы узнать о человеке, который довел это до предела.