Предыстория: От 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 разработке и создать что-то по-настоящему полезное.

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

Комментарии (19)


  1. rPman
    01.07.2025 04:44

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

    Я думал что практически все функции обучения иностранными языками уже прочно взяли на себя ИИ. Мало того, если речь об английском, можно с бесплатным microsoft copilot поговорить голосом, состряпав голосом системный промпт (главное неудобство) получить неплохую помощь в общении с нативным терпеливым спикером.

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


    1. DmitriiMikhailov Автор
      01.07.2025 04:44

      У всех свои слабые места в изучении. Кому-то грамматика нужна, кто-то на слух плохо воспринимает беглую речь, у кого-то проблемы с произношением, а кому-то не хватает словарного запаса. Я сделал ставку на словарный запас и на мне это неплохо сработало. Не скажу, что я был активно погружен в языковую среду, чаще всего я занимался самостоятельно.
      Я хотел добавить chatgpt в другое приложение - генерация тренировочных программ на основе входных данных, но потом оказалось что api OpenAI требует минимального пополнения баланса и просит привязать карту. Если поделитесь бесплатными AI api, хотя бы ограниченными - буду благодарен.


      1. rPman
        01.07.2025 04:44

        у openrouter есть бесплатные модели free, но как обычно результат не гарантируется, лучше заплатить, хоть криптовалютой

        p.s. вам жалко 5-10$ на эту задачу?


        1. DmitriiMikhailov Автор
          01.07.2025 04:44

          Зависит от целей. Если это инвестиция в стартап - ок. Я точно не помню, но для генерации тренировочных программ на 4 недели получалось довольно накладно. Думаю, я вернусь к этому вопросу, когда проработаю финансовую модель более подробно.
          Вы пробовали использовать OpenAI api? Какой бюджет примерно закладывали что бы протестировать?


          1. rPman
            01.07.2025 04:44

            протестировать что?

            Положите на счет минимальные 5$ и пополняйте по мере необходимости, мой счет на 5$ сгорел через год не использования (мне было удобнее openrouter использовать)


            1. DmitriiMikhailov Автор
              01.07.2025 04:44

              Я хотел максимально облегчить запуск и упростить поддержку: SQLite, простой фронт, минимум зависимостей и так далее т.к. приложение не коммерческое и его цель была - помочь себе и друзьям на языковых курсах. Возможно, в будущем сделаю экспериментальную AI-функцию. Почитаю про openrouter, спасибо за подсказку!


  1. GrifonLeo1971
    01.07.2025 04:44

    Статья интересная конечно, но где само приложение посмотреть можно?
    Не нашел ссылок


    1. DmitriiMikhailov Автор
      01.07.2025 04:44

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


      1. GrifonLeo1971
        01.07.2025 04:44

        Это было бы здорово. Может многие бы протестировали, написали бы что можно доработать


        1. DmitriiMikhailov Автор
          01.07.2025 04:44

          Напишите мне в лс или в телеграм - дам ссылку.
          Мой сервер с apache едва справляется с текущей нагрузкой, активные тестирования его точно положат)


  1. AppCrafter
    01.07.2025 04:44

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