Как программист английский учил
За последние полгода на гиктаймсе было несколько статей, описывающих личный опыт по изучению английского языка. В основном люди рассказывают о том, как нашли крутое приложение, стали смотреть фильмы, читать книги в оригинале и всё стало хорошо. В моем же случае не было приложения, которое бы меня устроило. О том, как я начал кодить сервис для себя и что из этого вышло, читайте под катом.
У меня нет проблем с чтением технических книг или ответов на stackoverflow. Проблемы начинаются при чтении художественной литературы — даже книги для подростков тяжело идут. Причина в небольшом словарном запасе. Осознав это, я начал искать способы поправить положение, вот что я пробовал:
- Продолжал читать книги и попутно смотрел в словаре незнакомые слова. Интерес от чтения понижается до нуля, постоянно переключаешь внимание туда-сюда. И это долго.
- Открыл толковый словарь в случайном месте и начал читать как книгу. Это было интересней, но все равно слишком долго — про одно слово читаешь не меньше 20 минут.
- Карточки «слово-перевод», вроде anki. Вот это вообще никуда не годится. Слово — не какая-то статическая конструкция с единственном смыслом, его значение меняется при взаимодействии с другими словами. Этого в карточках нет.
Технические статьи не особо хороши для повседневного чтения. - Еще я смотрел и до сих пор смотрю видео вроде TED’a, без субтитров. Классная штука, вроде отдельные слова не понимаешь, но общий смысл угадывается в том числе по жестам, начинаешь «чувствовать», что может значить то или иное слово.
Проблема налицо, что делать? Идея карточек хороша, в том числе тем, что можно отслеживать свой прогресс. Но перевод без контекста бесполезен, нужен был способ совместить пользу от чтения текста с удобством карточек. С этими мыслями я набрел на tatoeba. Скачав и распарсив любезно выложенную ими в открытый доступ базу, я получил блок из примерно 130'000 английских предложений с переводом на русский. Вот тут и начинается история.
Попытка 1. Создал на ruby on rails небольшое приложение, которое по запросу выдает случайным образом одно из этих ста тридцати тысяч предложений. Уже после написания понял, что ерунду сделал. То легкое предложение попадется, то сложное. Слова совершенно разные каждый раз, что плохо для запоминания.
Попытка 2. Распарсил предложения на отдельные слова, вывел их список. Теперь вначале выбираешь слова, а потом получаешь предложения с этими словами. Это был не идеальный инструмент, но я понял, что движусь в правильном направлении.
И наконец, попытка 3. Посчитал частоту встречаемости слов, выстроил список по убыванию. На основе этого списка вычислил «условную сложность предложения» — наибольший частотный ранг среди слов, входящих в предложение. Добавил к таблице слов целочисленное поле, показывающее степерь изученности слова (0 — незнакомое, 100 — изученное). Добавил к таблице предложений поле, показывающее, сколько раз я видел это предложение.
Таким образом я получил словарь, отражающий мои знания английского. Добавил инпут для выбора количества предложений и кнопку «начать» — система сама ищет наиболее встречаемые среди неизученных мною слов, ищет наиболее «легкие» предложения, в которые входят эти слова, сортирует по возрастанию количества просмотров и отдает на фронт. Я читаю предложение, смотрю перевод и «голосую» за каждое слово в нем — в зависимости от того, какую кнопку я нажму (знаю/не знаю), у этого слова прибавится / отнимется 5 очков изученности.
Написал фронт на ангуляре, добавил сохранение тренировки в локалстораж. Теперь утром перед работой я загружаю сотню предложений и читаю их пока еду в метро без интернета. Появляется интернет — отправляю результаты на сервер и загружаю еще партию для следующей тренировки.
Прошло уже чуть больше недели постоянного использования своей задумки. Срок маленький, но уже чувствуется прогресс. Было бы жалко использовать свой инструмент только для себя, так что я купил вчера небольшую виртуалку, домен, настроил деплой рельсов и добавил в бд таблицу users. То, что получилось, можно увидеть на sentences.mobi. Буду рад, если кому-то это приложение принесет пользу.
p.s. Я вот сейчас подумал о том, что можно на хабре написать пару статей об объединении рельсов и ангуляра — сброка и деплой фронта, деплой бекенда через capistrano, настройка продакшен сервера (nginx, postgresql, unicorn), бекап бд и файлов на aws, авторизация по токену. По отдельности в интернете есть что почитать об этом, но чего-то готового, «бери и пользуйся» я не видел. Стоит заняться этим?
p.p.s. Печально видеть, что технологии вроде машинного обучения, анализа текстов, экспертных систем используются в основном для увеличения конверсии в интернет-магазинах. Почему-то такая важная область, как «обучение человека» практически полностью игнорируется.