Pull to refresh

Как я прокачал английский до B2 в США, разработав своё языковое приложение

Level of difficultyEasy
Reading time4 min
Views4.8K

Предыстория: От A1 к B1+ без очевидных методов

После переезда в США в июне 2024 года, я, как и многие, столкнулся с распространенной проблемой – языковым барьером. Мой английский стабильно находился на уровне A1, несмотря на заранее установленные приложения вроде Duolingo. Я испытывал трудности в ресторанах, при заселении в отели, и даже при уточнении самых простых вещей.

Обычно онлайн-преподаватели и блогеры советуют учить по 5-10 слов, составлять предложения, заниматься регулярно по чуть-чуть. Я же выбрал, пожалуй, самый неочевидный способ – решил просто читать словарь.

Я нашел сайт с около 8000 слов, разбитых по секциям от уровня A1 до C2. Недолго думая, я принялся читать по 500 слов за раз. Вы скажете: "Какой в этом смысл? Ты не запомнишь столько слов!" И я полностью согласен. Но был один нюанс, который я добавил от себя. Я разделил программу на периоды: сначала читаю все слова подряд, затем закрепляю их через чтение и аудирование, просматривая детские передачи.

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

Но тут меня осенило: а что, если разработать приложение, в которое я смогу добавить весь этот словарь и тренировать уже изученные слова? Более того, это позволило бы мне прокачать свои навыки как full-stack разработчика.

Рождение идеи: Парсинг словаря и борьба с банами

Первым делом предстояло выяснить, как получить словарь слов, желательно с разбивкой по секциям. Изучив GitHub, я не нашел ни одного адекватного словаря в формате JSON. Тогда я решил написать собственный парсер на PHP. Он обходил страницы сайта со словами по определенному алгоритму и выгружал их в JSON.

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

Несколько часов мучений спустя, у меня наконец был JSON-словарь из 8000 слов. Затем я занялся его форматированием, чтобы привести к нужному виду: приложение должно было рандомно запрашивать слово и предлагать несколько вариантов перевода для выбора. На всякий случай я сделал обе языковые пары: англо-русскую и русско-английскую. Уже тогда у меня была идея расширять приложение, добавляя новые языковые пары в будущем.

MVP и первые успехи

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

В январе я записался на бесплатные ESL-курсы при публичной библиотеке Далласа. Все студенты сдают входной тест, который ни на что не влияет, так как нет разбивки на группы. Обучение напоминало ситуацию, когда вас сбрасывают за борт без подготовки: преподаватель-носитель просто говорил, а ученики пытались понимать на слух. Тем не менее, я успешно сдал тест и продемонстрировал "мастерское" владение языком на уровне B1+, что оказалось абсолютным рекордом среди студентов!

Расширение горизонтов: Помощь иммигрантам и мультиязычность

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

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

Как это работает: Интерфейс и геймификация

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

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

После авторизации вы видите основной интерфейс. Идея проста: загружается одно слово и четыре варианта перевода. Нужно выбрать правильный ответ. За это вы получаете +5 баллов, в случае ошибки теряете один кредит, а слово автоматически добавляется в словарь проблемных слов. Когда кредиты заканчиваются, игра завершается, и ваш рейтинг фиксируется. Если вы войдете в пятерку лучших игроков, ваше имя отобразится на доске лидеров.

В словаре проблемных слов вы можете повторять трудные слова и слушать их произношение.

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

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

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

Техническая сторона разработки

Во время изучения PHP я стремился максимально углубиться в работу языка. Именно поэтому я написал свою версию MVC фреймворка с роутингом, контроллерами, моделями и рендерингом. Это позволило быстро разрабатывать прототипы приложений, не загружая множество различных зависимостей, как в случае с Laravel, что значительно повлияло на скорость работы приложения.

Для фронтенда я использовал jQuery, так как на тот момент у меня не было глубоких познаний во Vue, и jQuery полностью удовлетворял мои потребности.

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

Заключение

Мой опыт переезда в США и последующего погружения в изучение языка, сопряженный с разработкой собственного инструмента, стал для меня не просто способом преодолеть языковой барьер. Это был полноценный проект, который помог мне значительно улучшить свои навыки в Full-Stack разработке и создать что-то по-настоящему полезное.

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

Tags:
Hubs:
+8
Comments37

Articles