Разработка мобильного приложения для изучения языков
Приложение для изучения языков — один из самых технически насыщенных форматов edtech. Здесь сходятся: алгоритм интервального повторения, синтез и распознавание речи, офлайн-режим с большими контентными базами и геймификация, которая должна работать без чувства дешевизны. Дуолинго потратил годы на калибровку этих систем — клиент, который хочет «как Дуолинго», должен понимать масштаб задачи.
Алгоритм повторений: SM-2 или собственная реализация
Основа любого словарного тренажёра — спейсед репетишн. Классический SM-2 работает: карточка оценивается от 0 до 5, следующее появление рассчитывается по формуле I(n) = I(n-1) * EF, где EF — коэффициент лёгкости. Проблема SM-2 в мобильном контексте: он не учитывает контекст сессии (утро vs вечер, 5 минут vs 40 минут). Anki использует модифицированный SM-2 с адаптивным шагом — для серьёзного приложения стоит смотреть в сторону FSRS (Free Spaced Repetition Scheduler), который показывает лучшую retention rate на больших датасетах.
База карточек хранится локально в SQLite (Room на Android, Core Data или GRDB на iOS). Синхронизация с сервером — через дельта-обновления, не полный redownload. При 10 000 карточек в базе полная перезагрузка по 3G убивает UX.
Распознавание произношения
Это самый болезненный компонент. Нативный SFSpeechRecognizer (iOS) распознаёт речь, но не оценивает произношение — он просто переводит аудио в текст. Для оценки произношения нужен phoneme-level анализ.
Варианты:
-
Azure Pronunciation Assessment — отдаёт accuracy score, fluency score, completeness score по каждому фонему. Интеграция через
SPXSpeechConfiguration+SPXPronunciationAssessmentConfig. Работает хорошо для европейских языков. -
Google Cloud Speech-to-Text с
enableWordTimeOffsets+ собственная логика сравнения фонем — дешевле, но требует больше кастомной работы. - On-device через CMU Sphinx / Vosk — подходит для offline, но точность заметно ниже.
Типичная ошибка реализации: запись через AVAudioSession без установки .allowBluetooth — на AirPods приложение переключается на микрофон гарнитуры, качество падает, оценка произношения становится нерелевантной.
Офлайн и размер контента
Приложение для изучения языков не может требовать постоянного интернета. Аудиофайлы произношений, изображения к словам, видеоуроки — всё это нужно хранить локально или грамотно кешировать.
Стратегия: текстовый контент и карточки — в SQLite (10–50 МБ для курса), аудио — lazy download при первом воспроизведении с последующим кешированием в Caches директории, видео — опциональная загрузка по запросу пользователя. Принудительно скачивать всё при установке — ошибка, которая приводит к удалениям из-за занятого места.
На Android нужно явно обрабатывать onLowMemory и очищать аудиокеш по LRU-политике. Иначе через месяц активного использования приложение занимает 2 ГБ.
Геймификация без Skinner box
Стрики, XP, лиги — всё это работает на retention, но только если не превращается в манипуляцию. Механика streak freeze (заморозка серии) снижает тревожность пользователя и на самом деле увеличивает долгосрочное удержание. Технически: стрик хранится на сервере с учётом часового пояса пользователя — без этого пользователи в UTC+12 теряют стрик в полночь UTC.
Leaderboards реализуются через партиционированные недельные таблицы — глобальный рейтинг из миллиона пользователей считать в реальном времени нельзя.
Процесс работы
Старт — с определения языковых пар и типов упражнений (перевод, аудирование, говорение, грамматика). Это сразу определяет архитектуру контентной базы.
Этапы: проектирование алгоритма повторений → offline-first архитектура данных → UI компонентов упражнений → интеграция speech API → геймификация → тестирование на целевых языковых парах.
Финальный этап — А/Б тестирование порядка упражнений: правильная последовательность влияет на retention сильнее, чем любой дизайн.
Ориентиры по срокам
MVP с одной языковой парой, карточками и базовым tts — 6–8 недель. Полноценное приложение с произношением, грамматическими упражнениями, геймификацией и офлайн-режимом — 4–6 месяцев.







