posted by aqshakirzhan on November 19, 2014

Перед вами – руководство о том, как в короткие сроки стать продуктивным программистом.
Малкольм Гладуелл в «Гениях и аутсайдерах» писал, что на освоение чего-либо уходит порядка 10 000 часов. Тренируйтесь по три часа в день – и через каких-то десять лет вы будете мастером. Миллионы читателей воспарили к небесам, – ведь всего-то стоит вложить n-ное количество часов, а на выходе получить нового Билла Гейтса. Дни перетекали в месяцы, а мы тем временем начали понимать, что 10 000 часов – намного дольше, чем мы ожидали. Безграничные возможности превратились в очередную фантазию на тему «а ведь можно было…».

Метод Janki – попытка сократить время, необходимое на обучение программированию. Он стал плодом моего навязчивого стремления создать автоматизированный интернет-бизнес, который дал бы мне финансовую свободу, избавил бы от географических и временных ограничений. И мне не хотелось ждать 10 000 часов. Думаю, вам тоже.

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

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

Метод Janki основан на предположении, что 10 000 по Гладуэллу можно сократить при помощи сосредоточенного подхода к обучению. Метод построен на использовании системы карточек для интервального повторения в приложении Anki, создателем которого является великолепный Дэмиен Элмс.

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

Я назвал это Janki Challenge и приглашаю вас принять участие.

Что мешает нам учиться

Проблема 1: Мы слишком быстро забываем то, что выучили

Скажите, вам знакома ситуация, когда вы неделю упорно готовитесь к экзамену с тем, чтобы спустя два месяца быть едва ли в состоянии вспомнить хотя бы 10% от выученного, а через год полностью забыть материал?

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

Первое правило Janki улучшает память:

«Каждый раз, когда вы узнаете что-то новое, создайте в Anki карточку формата «вопрос-ответ».»

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

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

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

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

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

Выполняйте каждый день – и вы не забудете.

Проблема 2: Мы слишком быстро сдаемся

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

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

Второе правило Janki призывает к ежедневной практике:

«Занимайтесь по Anki каждый божий день, включая все выходные и праздники – вы должны обязать себя заниматься постоянно.»

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

Правило №2 не такое страшное, как может показаться. Через пару месяцев занятий, вам будет достаточно уделять программе не более 5-8 минут в день. Найти время для занятия – тоже не проблема, ведь также доступна версия Anki для смартфонов. Вы можете повторять карточки по пути на работу, в автобусе, в свободную минутку на работе. Программа также предоставляет функцию синхронизации состояния колод, поэтому изменения будут отображаться на всех устройствах привязанных к одной учетной записи.

Проблема 3: Мы учимся вне контекста

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

Третье правило Janki заставляет сконцентрироваться на том, что важно в данный момент:

«Учитесь в контексте. Беретесь за проект – изучайте лишь то, что поможет вам успешно его завершить.»

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

Шаг 1: Я нашел ответ в Google

Шаг 2: Я попытался написать код, добавляющий изображение в пост.

Шаг 3: Убедившись, что все работает как следует, я добавил новую операцию в колоду Anki.

Проблема 4: Нам кажется, что научиться можно не прибегая к практике

«Я выбрал самый худший способ познавать секс – по книге»
Эдди Иззард

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

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

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

Четвертое правило Janki подкрепляет теорию практикой:

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

Скажем, вы работаете над приложением на базе SQL. В ходе работы вы будете обращаться к литературе по разработке баз данных и SQL (язык структурированных запросов). Время от времени вам будут попадаться новые понятия. Пробуйте применять каждую новую крупицу знаний, прежде чем добавлять ее в колоду Anki. Если, к примеру, вы прочли о том, как удалить ряд из таблицы базы данных, для начала попробуйте воспользоваться этим методом и удалить ряд из собственной базы, и только потом добавляйте карточку, посвященную данной операции.

Проблема 5: Мы ошибаемся чаще, чем следовало бы

/*Допущенные нами в прошлом ошибки – отличное средство для развития памяти. Именно по этой причине мы учимся на практике. Но не все ошибки преподают нам уроки одинаково эффективно; есть некая зависимость между эмоциональным воздействием, оказанным ошибкой и временем хранения полученного урока в памяти.*/

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

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

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

Пятое правило метода Janki снижает повторяемость ошибки:

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

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

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

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

Проблема 6: Мы не мыслим масштабно

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

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

Шестое правило метода Janki призывает к критическим рассуждениям:

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

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

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

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

Проблема 7: Мы не следим за порядком в своих хранилищах знаний

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

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

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

Седьмое правило Janki помогает следить за порядком в ваших колодах:

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

Следующий пример иллюстрирует слабое понимание Git, позднее замененное более подробным и полным видением.

Проблема 8: Мы не обращаемся к первичным источникам

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

Для вас, как программиста, источником вдохновения должен служить чужой код. Качайте проекты с открытых источников (Github) и просматривайте код. Натолкнулись на ту часть, которую не понимаете, создавайте новую карточку, если нужно. Возьмите ручку и бумагу и набросайте путь, по которому «движется» программа. Каковы входные данные, что по-вашему получится в результате? Что происходит с данными по мере того, как они движутся через программу? Почему программа была сделана именно такой? Какие приемы использовались при ее создании?

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

Восьмое правило Janki призывает использовать чужой код в качестве обучающего материала:

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

Leave a Comment

Fields with * are required.