Метод Janki - система обучения на основе интервального повторения. Часть 2

GTD


Первая часть поста про Метод Janki

Метод Janki: Нечто большее, чем просто тренировка памяти


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

Преимущество 1: Скорость написания кода увеличивается

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

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

Рассмотрим следующий пример. Допустим, ваша программа использует 100 функций, из них 70 – встроенные, т.е. стандартные для используемого языка. Остальные 30 – пользовательские. Если вы четко знаете данные ввода и вывода встроенных функций, дебаггинг значительно упрощается, ведь вам остается выяснить, как работают те 30 пользовательских функций. Учитывая то, что пользовательские функции во многом определяются функциями стандартными, это задание также не должно забрать слишком много времени. Прочные знания в области синтаксиса, ввода-вывода, и использования стандартных функций позволят вам сузить круг поиска и, в конце концов, определить ошибку.

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

Вы, возможно, хотите возразить, – мол, таких улучшений скорости можно добиться и с опытом. Это верно, но мы с вами идем совершенно другим путем. Janki позволяет приобрести те же знания, но быстрее, и хранить их вы сможете дольше. Если вы сделали что-то, но затем, спустя пару месяцев не можете повторить вновь — запомнить, как и что делать вам поможет Anki.

Преимущество 2: Разбивка

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

Это можно продемонстрировать следующим примером. Давайте умножим 130 на 30 двумя способами.

Способ 1: Вам известно, что умножение – это многократное сложение, то есть наш пример можно представить в виде 130 + 130 + 130… и т.д. Таким образом, используя правило сложения, вы рано или поздно получите ответ – 3900. Давайте назовем уровнем интеллекта способность быстро выполнять отдельные вычисления.

Способ 2: Возможно, из школьной таблицы вы помните, что 13х3 будет 39. Вы также можете помнить, что при умножении круглых чисел, нули просто складываются и дописываются в конце результата. Таким образом, наш пример упрощается до следующего вида 13х3+два нуля в конце. В итоге получаем те же 3900. Уровень интеллекта, или скорость сложения, в данном случае неактуальна, поскольку знание позволяет вам значительно упростить задачу.

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

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

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

Преимущество 3: Удобный архив, заключающий в себе все ваши знания в области программирования.

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

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

Мне это дико не нравилось. Не люблю решать одну и ту же проблему дважды. Метод Janki поможет избежать этой ситуации.

В Anki есть функция поиска карточек. Можно также задействовать фильтр даты и тега. К примеру, вам нужно найти карточки, содержащие слово “ssh”, созданные полгода назад, и содержащие тег «внедрение».



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

Преимущество 4: Не нужно изобретать колесо

Современные языки программирования имеют множество встроенных алгоритмов, или же эти алгоритмы хранятся в корневой библиотеке. Это в первую очередь касается таких продвинутых языков, как Ruby и Python. Нужно упорядочить массив? Array#sort, и задача решена.

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

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

Дополнение


Стоит ли скачивать чужие колоды?

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

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

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

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

Моя колода содержит около 6000 карточек и посвящена в основном Ruby on Rails, включая карточки по таким темам, как Ruby и Rails 3.1, HTTP-потокол, командная строка Unix, Git, CSS, JavaScript, VIM, Rspec, Capybara, TDD, Coffeescript, jQuery, coffeescript, sass, внедрение, шаблоны дизайна, часто встречающиеся выражения, SQL, рефакторинг, и алгоритмы. Все помечено тегами, аккуратно оформлено и соответствует сегодняшнему положению дел. Эти знания – все, что мне потребовалось для того, чтобы разработать, скоординировать, и внедрить целый ряд веб-приложений. Вы можете скачать мои карточки по веб-разработке здесь.

Какие знания стоит добавлять в колоды, а какие – нет?

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

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

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

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

б) Факт касается одной из крупнейших технологий, которые актуальны уже на протяжении долгого времени, и с большой долей вероятности в ближайшее время никуда не денутся (Linux, Ruby, Javascript, VIM, git, HTML, CSS, SQL)

в) Факт (пусть даже относится к библиотеке, которая возможно изменится в ближайшее время) используется мной каждый день, и предполагается, что и впредь будет входить в мой инструментарий. Еще лучше, если технология востребована, ведь высокий спрос приятно отражается на вашем кармане (Rails, jQuery ).

Какие основные комбинации клавиш мне нужно знать?

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

Нажмите Enter чтобы программа выдала ответ на вопрос карточки, оценивайте свой ответ клавишами 0, 1, 2, или 3.

Command + Backspace – удалить карточку. Используйте эту комбинацию, если карточка содержит сложную для понимания / неправильную / устаревшую информацию.
Command + E – редактировать. Tab перемещает курсор между полями вопроса в поле ответа.

Janki-вызов


Хотите научиться программировать и создавать мощные приложения? Тогда предлагаю пройти Janki challenge. Скачайте программу Anki (ссылка ниже), выберите проект, и заявите друзьям, что берете на себя обязанность научиться программированию.

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

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

Дальнейшее чтение



По материалам блога Джека Кинселлы

18 комментариев

avatar
Начал ли кто-нибудь практиковать этот метод?
Я начал заниматься после выхода предыдущей статьи. Сейчас в день на просмотр карточек трачу примерно 1 час.
avatar
Ого! А сколько всего карточек?
Я загрузил Анки, потихоньку туда что-то добавляю, если вспоминаю. Обучение занимает пару минут в день пока. Но я сейчас никаких новых областей не осваиваю в плане обучения.
avatar
Моих собственных карточек около 70 — карточки по многопоточности в .Net — они занимают около 30 минут в день.
Карточки с вопросами из билетов на сдачу прав — скачал готовые — занимают еще около получаса.
avatar
Я давно искал что-то подобное. Спасибо автору за открытый для меня Janki. Сейчас заполняю карточки по PHP и jQuery. Прогресс налицо.
avatar
Думаю, что данный метод не ограничивается только программированием. Я программированием не занимаюсь, после прочтения первой части сделал три колоды: «Извлеченные уроки», «Наблюдения» и «Новое». Заношу в них все, что показалось мне полезным и интересным.
avatar
Естественно. Программирование — просто как успешный кейс. Интервальное повторение — совершенно универсальный метод.
avatar
Вот еще нашел: автор говорит, что внес 13 улучшений в оригинальный метод. Ссылка здесь
avatar
Спасибо. Если коммент получит много плюсов — обязательно переведем.
avatar
Отличный пост. Но я обратил внимание, что на Ваших скриншотах код не оформлен как код. Рекомендую аддон Syntax Highlighting for Code. В самой программе — Инструменты — Дополнения — Обзор и установка, далее ввести код дополнения (для вышеуказанного аддона — 491274358). После этого в окошке редактуры появится молния и ниспадающий список различных языков программирования, список внушительный.
  • lion9
  • 0
avatar
У этого дополнения есть проблемы с путями на русском языке.
avatar
Какие именно пути? Я такого не замечал, быть может, потому, что пути к папке пользователя у меня всегда на английском (во избежание проблем с программами, которые могут их не понимать). У автора Mac, поэтому полагаю, что путей на русском у него нет. В любом случае, правильно оформленный код в разы удобнее заучивать.
avatar
Какие именно пути?
Да, именно путь к папке пользователя.
avatar
Но это, также, может быть любая папка с русским именем в пути до дополнения.
avatar
Кроме того, приятно поразил тот факт, что AnkiDriod сразу же после синхронизации тоже стал показывать код правильно.
avatar
Тут дело в том, что это расширение сохраняет карточку с уже готовым html кодом раскраски кода, поэтому оно будет отображаться одинаково везде, независимо от того установлено это расширение или нет.
avatar
Собственно, я начал пользоваться Anki после вот этих двух статей уважаемого автора блога. Поскольку Вы разбираетесь в Anki, может, ещё какие полезные расширения подскажете? Был бы благодарен.
avatar
Я сам начал пользоваться после первой статьи. Быстро пробежался по списку дополнений, самым полезным мне показалось как раз это, но оно у меня не заработало. Больше никаких дополнений я не ставил.
avatar
Спасибо за пост. Тоже начал заниматься по этому методу. Пытаюсь подготовиться к экзамену CISCO CCNA. Посмотрим на результат. По логике — должно сработать.

Оставить комментарий