Программа:
День первый
Git. Внутреннее устройство Git. Основы, необходимые для работы с материалами курса. Работа с ветками. Сложные слияния и разрешение конфликтов. Различные представления истории и анализ графов.
Rack. Абстракция для HTTP серверов. Модель приложения в Rack и какое это имеет отношение к рельсам. Как middleware позволяет расширять и комбинировать приложения. Как использовать полученные знания на практике.
Архитектура Rails 4. Cтек Ruby on Rails на примере обработки запроса: от попадания HTTP запроса в Rails приложение и до формирования ответа. Возможности модульной архитектуры Rails 4: больше«хуков», меньше «monkey patching». Разбор работы основных частей Rails 4: роутинг, ActionController, ActiveRecord, ActiveModel, Arel.
Реляционные базы данных. Что такое индекс и как он устроен. Обычные бинарные и B деревья. Эффективные индексы: обычные, функциональные и частичные. Статистика использования БД. Анализ плана запросов и оптимизация индексов. Денормализация данных и проблемы, которые она влечёт. Лог транзакций, блокировки и дедлоки. Дисковый кэш. Разбиение данных на несколько баз. Репликация. Инструментарий работы с БД.
День второй
Фронтенд в Rails 4. Ускоряем загрузку сайта: теория и психологические моменты, минификация JS и CSS, сжатие и кеширование, CDN для внешних ресурсов, оптимизация графики, ленивая дозагрузка. Ускоряем фронт: профайлеры, перерисовка, анимации в CSS. Организация фронта: БЭМ, Sass/Stylus, Автопрефиксер, Rails Sass Images. Дизайн: фронт – тоже дизайнер, зачем нужен дизайн, где и зачем нужна анимация.
Оптимизация кода. Организация кода: толстые модели/худые контроллеры, concerns, presenters, decorators. Структура проекта. Стилистика кода проекта для команды.
Отладка. Дебаггер — главный инструмент разработчика. Простая формула нахождения ошибок. Мистические баги.
Тестирование. Зачем нужно автоматическое тестирование и почему оно важно для здорового сна. Что нужно и что не нужно тестировать в вашем проекте. Чем отличаются подходы TDD и BDD. Почему BDD — это не про фреймворк, а про процесс разработки в целом. Как построить процесс разработки так, чтобы все виды тестирования были эффективными. Почему нельзя забывать о ручном тестировании и как его организовать. Почему процент тестового покрытия ничего не значит. Признаки плохих тестов. Инструментарий: что использовать, а что нет. Автотесты, распараллеливание тестов, Continuous Integration.
Профилирование. Как найти узкие места. Точные и приблизительные профайлеры вызовов. Анализ распределения и утечки памяти. Сбор метрик в продакшене. Как делать выводы и примеры оптимизаций.
Выкатка приложений. Практика гладких выкаток: как нужно и как не нужно делать. Чем отличается выкатка приложения от управления конфигурацией. Какие инструменты стоит использовать, а какие — нет. Capistrano, Chef. Мониторинг и инструменты мониторинга. NewRelic RPM.
День третий
Домашнее задание
День четвёртый
Lighting talks. Разбор домашних заданий, обсуждение решений и возможных вариантов реализации, вопросы ответы.