Тема изучения языка, с одной стороны, крайне актуальна почти для всех, но с другой стороны, мало кто вкладывает достаточно усилий для достижения желаемого результата. В данной статье я хочу поделиться своими наработками в области изучения языков. Но для начала, что же значит "изучить язык"? В фокусе данной статьи находится не изучение языка в целом, а лишь один аспект – пополнение словарного запаса. Однако, прежде всего надо понять, что и зачем мы учим. Что значит, например, "выучить английский"? Предположу, что для некоторых – это крайне туманный результат определенных усилий: вы мысленно представляете, как говорите с кем-то на языке, которого не знаете, и получаете одобрение собеседника.  Но, давайте разберемся: с кем вы говорите? Зачем? Какой вопрос обсуждаете? Как получаете одобрение? Не важно? Кто-то может представлять себе более конкретный результат, например: чаепитие в Лондонском особняке с профессором лингвистики из Оксфорда, и британский акцент, вызывающий восторг собеседника.  Конкретизация результата не прибавила смысла – обе ситуации не только абсурдны, но и бессмысленны. А все потому, что язык, в большинстве случаев, сам по себе нам не интересен. Поэтому для себя я определяю проблему владения языком как возможность обмениваться мыслями с носителями языка с целью решения конкретных вопросов. Если я общаюсь с коллегами — обмениваться мнениями касательно проблем и решений рабочих проектов. Если еду куда-то туристом — возможность обсудить с местными жителями достопримечательности и бытовые вопросы. Один их важных этапов изучения – это обретение минимального грамматического и словарного базиса, который хоть и не позволит вести chit-chat, но поможет в ряде ситуаций в иноязычной среде. Но как же совершить качественный скачок дальше? По своему опыту могу сказать – с помощью двух вещей: практики и увеличения словарного запаса. Для активизации практики лучший вариант – это переезд в другую страну. А вот для пополнения словарного запаса необходимо специально учить слова. Мне интересно, сталкивался ли кто-то с похожими проблемами пополнения словарного запаса, и пришел ли к тем же выводам. В последнем случае – хотелось бы найти единомышленников и скоординировать усилия. Также я хочу понять, стоит ли мне развивать свои наработки для более широкой аудитории, или же, достаточно ограничиться поддержкой проекта исключительно для себя. Для тех, кто хочет скорее пощупать, а не вчитываться — рекомендую перепрыгнуть сразу в конец, где есть ссылка на мои наработки. Родители с малых лет пытались донести до меня, что английский надо учить, и что без него – никуда. Но разве я их слушал? Мама под палками со мной занималась, я не хотел, но в том возрасте у меня было мало прав. В какой-то момент к английскому добавился и немецкий. На какие-то периоды это прерывалось, потом возвращалось без четкой закономерности. В определенном возрасте пришло осознание необходимости, и я сам стал возвращаться к урокам и был инициатором. Но в силу внешних причин это все было также нестабильно. Тем не менее, результат однозначно был. Всю жизнь к тому моменту я прожил в Москве и ее окрестностях, поэтому понятия не имел, что и как происходит в англоговорящих странах. Но когда стало ясно, что скоро я переезжаю в Европу, я решил сделать последний рывок. Последний заход в изучении у меня был наиболее осознанный, поскольку я уже относился к языку не как к эфемерному понятию, а как к инструменту. И понимал, что от него нужно, что придет само с практикой, а чего не хватает. Не хватало двух составляющих: словарного запаса и восприятия на слух. Слух пришлось тренировать аудиокнигами, бесконечными перемотками и пересказами с экзаменами по смыслу текста. А вот слова пришлось учить дедовскими методами – с помощью бумажных карточек. Следует отметить, что необходимость увеличения словарного запаса ощущается далеко не сразу. Для этого надо сначала освоиться достаточно хорошо, чтобы разговор на иностранном языке воспринимался как обыденность. Тогда мыслительный процесс перестает ограничивать полет фантазии, и во время разговора хочется употреблять все более богатые словосочетания. И в момент, когда пора озвучивать слово, соответствующее выбранному понятию, наступает остановка — слова-то подходящего в голове и нету! Поэтому, чем больше слов в нашей базе данных — тем легче нам общаться. В более осознанном возрасте я достаточно много наблюдал за процессом своего изучения языков, в поисках секретов и легкий путей. Но никаких открытий я не сделал — чтобы свободно общаться, помимо всего остального, нужны слова. Чем больше — тем лучше. Нужно выстраивать в голове базу данных слов. И это не просто пары слов между родным и иностранным языком — это сложные образы, привязанные к контексту, типовым предложениям, звучанием (как услышать), произношением (как выстроить язык и губы, чтобы сказать самому) и т.д.  Эта база данных хранится не где-то отдельно; она перемешана с общей памятью. Идеальная программа обучения есть только у новорожденного ребёнка, который учится разговаривать, параллельно учась жить и думать. Именно поэтому существуют методики, которые пытаются научить языку, подталкивая думать на нем. Но даже в них при наличии необходимого минимального базиса БД перестает расти, и нужно пополнять ее как-то искусственно. И для этого надо учить слова. Сейчас существует невероятное количество приложений для изучения языков (DuoLingo, RosettaStone, FluentForever и десятки других). Однако позволяют ли они выучить язык? — Нет, не позволяют. Помогают ли? Кому-то могут помочь в определенных аспектах, а могут и не помочь, и это уже определяет сам обучаемый. Главная цель подобных проектов — это продать, а не научить. В настоящее время в связи с развитием облачных технологий в IT-бизнесе идет тенденция вместо разовой покупки продавать подписку, чтобы как можно дольше "доить" клиентов. И, несмотря на затраты на содержание облачных сервисов, это показывает большую прибыль. Конечно, существуют разные модели, с содержанием автономного web-сервиса, продажа лицензий, привязанных к датам, контроль функций устройства из облаков, замешивание рекламы в свободный контент и др., но идея остается нерушимой. Подобная "дойка" периодически доходит до абсурда, достаточно взглянуть на "подписку на печать" HP. К сожалению, это реальность, которую необходимо принять и под нее адаптироваться. Но главное, нужно понимать, что всем владельцам подобных сервисов абсолютно все равно, сможете ли вы заговорить свободно на языке или нет. Их интерес ограничивается исключительно деньгами, и это разумно — ведь если никто не будет платить, то и сервис просто не будет существовать. Главное, что нужно понимать — ответственность за результат лежит исключительно на обучаемом. При этом, само приложение может быть даже хорошим. Но можно ли это сказать про среду выполнения? Большинство языковых приложений предлагают учить язык прямо с телефона. В теории звучит многообещающе — можно заниматься где угодно. На практике же, телефон является средой для выполнения ПО, где тяжелее всего удерживать фокус и где происходит больше всего переключений контекста. Особенно в среде, где каждое приложение всеми силами пытается привлечь ваше внимание. Можно, конечно, попробовать ставить авиа-режим, но какие-то сервисы не хранят данные локально и тут же перестанут работать. Можно завести отдельный телефон, но тогда простота исчезнет. И даже в этом случае мозг уже натренирован на определенный режим работы с телефоном, который в корне губит продуктивность. К сожалению, с ростом технологий мозг среднего потребителя стал деградировать. И вместо эпохи освоения космоса наступила эпоха цифрового аутизма. Мы натренировали наш мозг так, что телефон стал инструментом потребления, а не обучения. А для потребления нужен простой контент. Иначе мы пролистаем на следующую запись. Именно на этом при борьбе за траффик и строится большая часть продуманных страниц, анализ, сколько пользователь оставался на странице и др. Мозг ожидает того же от лингво-приложений, но вместо этого ему приходится работать. Поэтому некоторые приложения пытаются преподнести образовательный контент как простой, в итоге жертвуя результатом. С компьютером среду настроить проще, если (хотя бы на время занятия) изолироваться от интернета. В ином случае открытый браузер уже запустит отработанные привычки потребления и интернет-серфинга, и выйти в рабочий режим будет сложно. Поскольку изучение языка – это тяжелый труд для мозга, то он будет искать любые причины этого не делать. Для того, чтобы начать процесс, нужно преодолеть барьер, и чем меньше этот барьер, тем легче начать. Например, лично мне понравилась идея FluentForever, однако, в итоге приходится готовить собственные карточки и совершать работу вручную в приложении (даже несмотря на наличие готовых наборов). Существует и более весомая проблема – отсутствия дисциплины. Это то, без чего рушатся любые попытки изучения языка, независимо от вложений финансов и времени. И это справедливо не только для приложений, но и для регулярных занятий, включая с занятия с репетиторами. Я считаю, что существующие приложения основаны на жизнеспособных методах, но вот эффективность их использования у среднестатистического обучаемого составляет порядка 10-20%. В какой-то степени это вина приложения, но в большей — человеческой натуры и самого обучаемого. Высокую эффективность дает лишь погружение в нужную учебную среду, где за исполнением метода следят внешние контроллеры. Возможно, кто-то, обладая железной дисциплиной, научился выплывать в океанах цифрового мусора, который нас окружает, и для него описанные проблемы – вовсе не проблемы. Таким могу лишь позавидовать. Для меня же эти проблемы крайне актуальны. 30 лет назад моя мама учила словам по бумажным карточкам, написанным от руки. 20 лет назад она писала мне карточки, и я учил точно так же. Несколько лет назад я думал, что технологии шагнули далеко вперед, и надеялся на приложения. Окинув свой прошлый опыт, изучая сегодня голландский язык… я вновь учу слова по карточкам. Разумеется, сами карточки немного эволюционировали. Разумеется, это не отменяет занятий с живым преподавателем, выполнений упражнений, учебников, изучения грамматики и следования образовательной программе. Но слова я учу по бумажным карточкам. Существует теория, что карточки нужно делать самому, тогда они запоминаются лучше. На это утверждение ссылаются, в том числе, некоторые приложения, которые аргументируют этим необходимость сначала сделать для себя авторский контент. Безусловно, в этом есть зерно здравого смысла, однако никто не приводит конкретных цифр в доказательство. Опираясь на свой опыт, по "своим" карточкам я учил слова достаточно редко (кроме последних пары лет). Я сделал следующие наблюдения: Поэтому для себя я понял — если есть готовые карточки — их использование даст больше результата. Один из больших минусов бумажных карточек — по ним нельзя понять произношение. А раз выучив слово неправильно, переучивать придется долго. У меня ушло около 10 лет, чтобы переучить произношение первой буквы also, а все из-за того, что я учил по тому, как оно пишется, а не как читается. В прошлом лучше всего удавалось это хоть как-то компенсировать, если отдельно от самих карточек надиктовать примеры произношения и потом их слушать. Я слушал их в машине по дороге в офис вместо музыки. Конечно, не считая невероятных трудов по подготовке контента, сам процесс немного отвязан от карточек, из-за чего мозгу не так легко их связать. Но сегодня эту проблему удалось решить окончательно. Решение довольно банально, это QR-код на карточках, база произношений и приложение, которое читает веб-камеру и почти мгновенно зачитывает произношение. Более того — заодно примеры, если карточку перевернуть. Слабая попытка использования QR-кодов уже была реализована, однако без отсутствия мгновенного отклика смысл полностью теряется. Поэтому запускается клиент, в котором нету никаких кнопок, который сразу начинает читать камеру. Увидел карточку — зачитал. Для того, чтобы это работало, QR-код должен быть большим. И плотность информации в нем должна быть максимальной. Поэтому никакого текста — пришлось сделать идентификацию карточек и сторон, и хранить в сжатом бинарном виде. При этом, внешнее сжатие типа gzip не помогает на микро-объемах, поэтому все сжатие осуществляется на уровне протокола, и максимальный размер укладывается в 12-16 байт. Тогда код получается достаточно большим и читается почти мгновенно. Также код надо расположить так, чтобы палец его не закрывал. Aztec код позволяет информацию уплотнить еще сильнее, однако вот читается он в несколько раз медленней, поэтому пришлось от него отказаться. Более того, QR код имеет неудобную геометрию в отличии от pdf417 — однако его чтение нормально проходит в несколько раз реже, чем QR при тех же остальных параметрах. Поэтому альтернатив коду QR нет. В любом большом начинании выстраивание процесса является ключевым элементом. Какие-то элементы могут хромать, какие-то отсутствовать с перспективой сделать позже, но сам процесс должен быть. Я пропущу свои "скитания" и попытки, и перейду сразу к выводам, точнее к текущей версии процесса, который сам использую. Также, в п.3 я печатаю не только оригинальные карточки, но и "парные" (т.е. если основные en -> ru, то парные это ru -> en). Автоматизировать удалось все, кроме самой подготовки карточек. Несомненно, попытки были и с этим — но качественные карточки получаются, только если в них вдуматься и подобрать все элементы вручную. Тем не менее, базовый контент карточки выкачивается из нескольких открытых источников (ldoceonline.com, wiktionary и др.), часть произношений берется оттуда же, а вот недостающие (как правило, примеры и неправильные формы) синтезируется Google-ом. Картинки приходится выбирать вдумчиво. Это творческий процесс, но часто картинка даже и не нужна. Собранное слово хранится в виде json-файла со ссылками на аудио и картинку, формируя тем самым базу карточек. На основе базы карточек с помощью CI/CD собираются печатные листы, БД произношений и 2 клиента под Windows и Mac OS. Если все прошло успешно — создается release-tag, к которому прикрепляется комплект файлов. Поэтому в вопросах подготовки карточек я разгрузил себя как мог.  Генерация печатных листов предполагает, что используется двусторонняя печать. Отступы обратной стороны просчитываются очень точно, но зависят от конкретного принтера и печатного ПО. Поэтому поля надо корректировать, если просто скачать и нажать печать — вероятность попадания почти ноль.  Нарезка – это самый тяжелый процесс (после подбора принтерных отступов). Как потребитель, в случае готового продукта я бы с удовольствием лучше заплатил, чтобы получить распечатанную нарезанную пачку, дабы не заниматься этим самому. Чтобы не быть голословным, на public-странице проекта можно скачать примеры и попробовать лично. Там в основном только карточки, которые я сейчас учу сам + несколько для примера (например животные). Надеюсь, мой опыт окажется для кого-то полезным. Буду рад обратной связи, которая позволит мне понять, стоит ли развивать мои наработки, и если стоит — то в каком направлении.  Успехов в изучении! Разработчик