Большинство из нас не оканчивали курсов метапознания и не знакомы с теорией обучения. Мы планировали учится, а не "учить как учиться". Тем не менее вы когда-нибудь обращали внимание на то, как вы обращаете внимание? Думали над тем, как вы думаете? Изучали то, как вы учитесь? Всем привет, друзья! С написанного выше начинается любой учебник издательства O'Reilly, по праву считающегося одним из лучших в мире издательством литературы сферы IT. И если они считают, что нужно вставлять одну и ту же страницу в начало почти каждой своей книги, наверное, стоит над этим задуматься. Так же к написанию этой статьи меня сподвигло одно обстоятельство обучения на проекте. Я говорю о неприятном чувстве, которое так или иначе испытывал практически каждый ученик: то самое осознание, что ты, наверное, "проспал" что-то важное в лекциях сразу после того, как открывается последняя страница любого из уровней, и бодрый капитан Бобров предлагает вам решить "парочку" задачек по только что изученной теме. Если вы, как и я — один из этих людей, предлагаю поразмышлять над этим.

В качестве небольшого вступления.

Принцип обучения на Javarush организован так, что основной упор идет на практику, а теория при этом подается на уровне необходимого минимума. Это логичный противовес учебникам по языку Java, который очень глубок и включает в себя множество тем, некоторым из которых можно посвящать диссертации. Если попытаться охватить их все хотя бы обзорно, на обучение в проекте уйдут годы. Однако этот подход к обучению создает некоторый перекос, и если практические задачи — это действительно жемчужина этого проекта, то с его теоретической частью я вижу одну особенность, которая имеет накопительный характер и вполне может привести к тому, что встретившись с реальной работой, ученик проекта будет сильно деморализован, вплоть до отказа от идеи быть программистом. Суть в том, что в проекте довольно редко указывается, что помимо лекций нужно искать дополнительный материал самостоятельно, и вообще не говорится о том как это делать. В итоге человек, двигаясь по программе обучения и читая только лекции, начинает опрометчиво полагать, что поданный ему теоретический минимум достаточен для реальной работы. Мне в свое время мне очень объемно начитывалась теория и методика обучения, и здесь я хочу поделиться некоторыми ее приемами. Приступим.

Изучение теории.

Для начала рассмотрим пример. Итак, вы читаете лекцию и натыкаетесь на что-то вам доселе незнакомое: слово или выражение, синтаксический прием или блок кода. Пусть это будет непонятное слово на английском языке, допустим, String. "Ну ладно, — думаем мы, — пока неясно, что это такое, но дальше-то наверняка объяснят". И действительно, далее вы узнаете необходимый минимум об этом слове, как раз для решения первых задач. Вы успешно решаете их где-то с десяток, и тут вам приходит первое ложное чувство: вы считаете, что String — это тема пройденная и изученная, к тому же мало что важного или сложного из себя представляющая. Сейчас хочу обратиться к тем, кто оставил позади Java Syntax: вы изучили методы и классы, имеете представление о коллекциях, и не одну сотню раз писали слово String в своем коде. Кто-нибудь из вас заглядывал сюда? Если нет, то вы многое упустили. Оказывается, это самый популярный класс во всем языке, имеет 15 конструкторов и 69 методов. Многие из методов покажутся для вас откровением, лично я, узнав о существовании таких методов, как substring(); startsWith(); и endsWith(); невольно подумал "а что, так можно было?". Поэтому если вы, читая статью или лекцию, встретили что-то незнакомое, вы можете воспользоваться следующим алгоритмом:

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

    • Уясните значение этого слова. Да да, буквально поймите, что оно значит. Если слово англоязычное — переведите его. Если грозное слово "конкатенация" вы замените его синонимом "склеивание", а иностранное ругательство "Comparator" зазвучит для вас как "сравниватель" — процесс дальнейшего изучения статьи или лекции пойдет проще.

    • Гугл знает все, НО! Обращайтесь к YouTube в самую последнюю очередь! Почему? Потому что слушая лектора на YouTube, вы, во-первых, не знаете осведомленности в предмете самого лектора, то есть насколько он сам понимает то, о чем говорит.

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

      В-третих, погрузимся немного в принцип восприятия информации. Когда вы читаете, задействуется только зрительный канал восприятия, и весь (очень, кстати, скудный у всех людей) ресурс внимания направлен только на него. Когда вы смотрите видео, то помимо зрительного задействуете еще и слуховой канал. Это ведет к вынужденному перераспределению внимания между ними и, как следствие, к быстрому утомлению мозга. Выразится это в том, что параллельно с лектором вы начнете думать, как же все таки решается та задача с дерущимися котами, не пора ли выпить кофе, или просто уснете. Усталость мозга проявляется лишь двумя симптомами: невозможностью сконцентрироваться или желанием спать.

      По-настоящему правильно пройденный путь по тропинке из хлебных крошек выдаче гугла по вашему запросу должен будет в итоге привести вас на https://docs.oracle.com/. Помните, что именно там вы найдете полный и всеобъемлющий ответ на ваш вопрос, все остальное так или иначе переработанная чьим-то умом информация оттуда же, не факт что полная или правильная. Ну и в-четвертых, смотря видео, очень сложно выполнять следующий пункт.

  3. Конспектируйте. Заметили в статье или самостоятельном поиске информации новый термин? Увидели изящную синтаксическую конструкцию? Просто считаете, что "эту вот штуку надо запомнить"? Не тешьте себя иллюзиями, что даже прочитав этот кусок текста 10 раз подряд, вы его запомните наглухо. При том водопаде информации, который будет литься на вашу голову всю вашу карьеру программиста вы попросту не сможете удержать ее всю в голове. URL, где вы только что прочитали что-то интересное, уже через месяц будет забыт, а все, что останется в голове, — это "где-то я что-то такое видел(а)". Поэтому лучше будет иметь под рукой компактную тетрадь, где находится самое ценное и интересное, которую вы всегда будете иметь с собой, даже там, где нет ноутбука или интернета.

    Вторая причина, по которой нужно вести конспект, кроется глубже. Все, кто учился в более серьезном, чем школа, заведении, хоть раз, но слышали от преподавателя что-то подобное: "обязательно пишите шпаргалки, но выходя на экзамен, оставляйте их дома". Это не шутка, здесь заключен еще один мощный методический принцип: когда вы пишете что-то, вы задействуете еще один канал восприятия информации — тактильный. Уникальная особенность этого канала в том, что мозг воспринимает поступающее через него как практическое действие. Иными словами когда вы что-то видите или слышите, мозг не концентрируется на этом полностью, и его логика понятна: так он защищает себя от перенапряжения. Ну мало ли что вы можете увидеть или услышать — не факт, что оно вам вообще надо. Но если вы что-то делаете руками, мозгу дается сигнал, что это действие осознанное, в нем есть потребность, и, возможно, будет потребность это действие повторить. А значит надо ЗАПОМНИТЬ, как оно делается и зачем. То есть если перед вами стоит выбор 10 раз прочитать или 1 раз записать — выбирайте второе, эффект будет лучше. Кроме того, делая заметки, вы не просто переписываете материал, а обрабатываете его, пропускаете через призму собственного восприятия, и пишете в свободной форме, наиболее понятной лично вашему стилю мышления.

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

    Чтобы не придумывать еще примеры, обратимся к тому же классу String. Очень популярный инструмент программиста. Лично я все его методы и конструкторы выучил наизусть, как стихотворение. 15 конструкторов и 69 методов — у любого, кто читает эту статью, заучивание этой информации займёт максимум один день. Но если вы этого не сделаете, вы не сможете воспользоваться всем его функционалом — вы просто не будете знать, что этот функционал существует. Нет необходимости запоминать объявления всех методов, достаточно просто запомнить, что они есть, а специфический синтаксис конкретного метода можно и подсмотреть. То же самое касается например потоков ввода и вывода — вы всегда сможете сконфигурировать наиболее подходящий для вашей задачи поток, ЕСЛИ будете знать, какие они вообще бывают.

Итак, допустим, мы встретили незнакомое слово и выяснили, что оно значит, где и как применяется, законспектировали и/или заучили синтаксические конструкции с ним, и...? Возникает резонный вопрос: как мне проверить самого себя, насколько хорошо я усвоил этот материал? Существует простой и безотказный прием: если вы считаете, что четко усвоили сложную тему, например, парадигму полиморфизма в Java, проверьте себя: объясните эту тему кому-то, вообще не связанному с программированием: маме, малолетнему ребенку или кошке. Если у вас это получится — вы действительно поняли тему. Да, я уже вижу ухмылку на лице читателя, поэтому вот реальный пример из жизни: "Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей — и все становится ясно.". John Robbins, тринадцатикратный обладатель титула "Most Valuable Professional" от Microsoft.

В качестве заключения.

Справедливости ради следует заметить, что данная методика сильно замедлит темпы обучения программированию. Применяя этот алгоритм, вы можете потратить несколько дней на понимание термина, определение которого имеет длину в две строчки, а конспект короткой заметки в один абзац может в итоге занять несколько страниц рукописного текста. Это будет лишь в начале, потом вы с восторгом начнете понимать, что чтение учебников все больше и больше напоминает чтение художественного произведения, — сложная терминология и тяжелые речевые обороты будут заходить в голову как светская беседа на перекуре, а ваш конспект будут переписывать себе коллеги. И еще, друзья, учите английский. В контексте профессии программиста это не просто показатель вашей грамотности, а жизненно важный навык. Зная язык, вы поймете, что названия операторов, классов, методов, интерфейсов и переменных — это не просто случайные наборы латинских букв, а "говорящие" названия, понимая которые вам не придется зазубривать синтаксис, — вы будете запоминать его, просто зная, что означает название. На этом всем спасибо, надеюсь, статья была хоть чем-то полезной, удачи всем в учебе!