Проходил 21 мая в 20:00

День открытых дверей
Всё о курсе «Backend разработчик на PHP»

День открытых дверей онлайн

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

Запись

О курсе

Backend разработчик на PHP
50 000 ₽
5 месяцев
Начало 29 августа
  • Глубокое знакомство с библиотеками PHP и особенностями языка
  • Навыки проектирования приложений, работы с базами и файлами, веб-фронтендом
  • Привычку к хорошему и чистому коду
  • Владение тактиками по созданию высоконагруженных систем
Для реализации больших и долгосрочных проектов современному PHP-разработчику необходимо заботиться об архитектуре кода, применять паттерны проектирования, писать код в соответствии с принципами SOLID и поддерживать высокий code coverage своих unit-тестов. …
Программа курса
Модуль 1
General Knowledge
Модуль 2
Databases
Модуль 3
Developing
Модуль 4
Architecture & HighLoad
Модуль 5
Проектный модуль
General Knowledge
Подготовка к курсу
познакомиться
29 августа, 20:00 — 21:30
Виртуализация, контейнеры и облачные вычисления
организация рабочего пространства
2 сентября, 20:00 — 21:30
Домашние задания: 2
ДЗ
Провести экономическое сравнение Приватного и Публичного облаков. Выберите в качестве примера свою текущую компанию (или компанию, в которой хотите работать), коротко опишите ее (количество сотрудников, сфера, приоритеты)

Сравните целесообразность разворачивания своей инфраструктуры или аренды публичного облака (можно выбрать любого провайдера)
ДЗ
Основы работы с Docker. * Установить Docker себе на машину
* С помощью Dockerfile настроить статический сайт (можно использовать nginx образ)
Linux
выровнять знания в области Linux-based серверов
5 сентября, 20:00 — 21:30
Домашние задания: 2
ДЗ
Консольная команда Sum. Написать консольное приложение (bash-скрипт), который принимает два числа и выводит их сумму в стандартный вывод.

Если предоставлены неверные аргументы (для проверки на число можно использовать регулярное выражение) вывести ошибку в консоль.
ДЗ
Анализ таблицы пользователей. Имеется таблица следующего вида:

id user city phone
1 test Moscow 1234123
2 test2 Saint-P 1232121
3 test3 Tver 4352124
4 test4 Milan 7990923
5 test5 Moscow 908213

Таблица хранится в текстовом файле.

Вывести на экран 3 наиболее популярных города среди пользователей системы, используя утилиты Линукса.

Подсказка: рекомендуется использовать утилиты uniq, awk, sort, head.
Основы PHP
выровнять знания языка PHP
9 сентября, 20:00 — 21:30
Домашние задания: 3
ДЗ
Установить расширение двумя способами. Необходимо установить любое расширение через pecl и через make.
- прислать скриншот команды pecl list, где должно значиться расширение + вывод функции `php -i | grep "ваше расширение"`
- прислать вывод команды make, т.е. `make > make_output.txt` + вывод функции `php -i | grep "ваше расширение"`
ДЗ
Создание собственного расширения. Необходимо создать расширение, и выложить в git и на packagist.org
- прислать команду для клонирования с гита
- прислать команду для установки через composer
ДЗ
Создать Docker-образ для работы. Необходимо создать образ, который будет включать:
- образ php, берем с https://hub.docker.com/_/php/
- необходимые утилиты (git, curl, wget, grep...)
- установленный composer
- установленные расширения redis, memcached, pecl_http, pdo_pgsql
PHP in CLI
научиться работать с консольным PHP
12 сентября, 20:00 — 21:30
Домашние задания: 2
ДЗ
Сокеты. Написать два PHP скрипта, который запускаются на одной машине и обмениваются сообщениями через unix-сокеты
ДЗ
Утилита для исправления опечаток. Существует утилита The fuck (https://github.com/nvbn/thefuck )

Написать аналог на php для одной команды ( например git commit)
PHP WebServers
выровнять знания о веб-серверах
16 сентября, 20:00 — 21:30
Домашние задания: 2
ДЗ
Простое веб-приложение в docker. Используя Docker, вы описали сборку двух контейнеров – один с nginx, второй – с php-fpm и вашим кодом.
Используя docker-compose вы запускаете оба контейнера.
Контейнер с nginx пробрасывает 80 порт на вашу хостовую машину и ожидает соединений.
Клиент соединяется, и шлёт следующий HTTP-запрос:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 48

string=(()()()()))((((()()()))(()()()(((()))))))

String - это POST-параметр, который можно проверять:
1. [ обязательно ] На длину и непустоту
2. [ по желанию ] На корректность кол-ва открытых и закрытых скобок

Все запросы с динамическим содержимым (*.php) nginx, используя директиву fastcgi_pass, проксирует в контейнер с php-fpm и вашим кодом.
Nginx должен обрабатывать запросы не обращая внимания на директиву Host. После обработки,
• если строка корректна, то пользователю возвращается ответ 200 OK, с информационным текстом, что всё хорошо;
• если строка некорректна, то пользователю возвращается ответ 400 Bad Request, с информационным текстом, что всё плохо.
ДЗ
Docker-окружение для Laravel.
Сети, протоколы. Балансировка
обеспечить понимание сетевого взаимодействия и отказоустойчивости
19 сентября, 20:00 — 21:30
Домашние задания: 2
ДЗ
Приложение верификации email. Реализовать приложение (сервис/функцию) для верификации email.
Реализация будет в будущем встроена в более крупное решение.
Минимальный функционал - список строк, которые необходимо проверить на наличие валидных email.
Валидация по регулярным выражения и проверке DNS mx записи, без полноценной отправки письма-подтверждения.
ДЗ
Балансировка при помощи NGINX.
Безопасность
обеспечение безопасности кода и приложения
23 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Сканер уязвимостей (OpenVAS). Установить сканер уязвимостей OpenVAS (использовать готовые сборки или собрать самостоятельно).
Просканировать свои проекты.
Результат работы сканера в PDF в чат по ДЗ.
Если найдены уязвимости - внести исправления (код, настройки). Повторное сканирование, результат работы сканера в PDF в чат по ДЗ.
Рекомендуем использовать на регулярной основе.

Если своего проекта нет, то выбираем сайт (желательно что-то небольшое - там больше вероятность что-то найти), и строим отчёт с рекомендациями.
Командная разработка
научиться производить код коллективно
26 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Клиент для вашей библиотеки должен работать по протоколу HTTP.. Для этого, используя docker compose, вы создадите два контейнера, один с nginx, а второй с php-fpm и приложением, использующим библиотеку.
Databases
Основные понятия баз данных
выравниваем знания о БД
30 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Необходимо спроектировать схему базы данных для одного из предложенных проектов.. Спроектировать базу данных, для планировщика задач (каких угодно на ваш выбор).
PostgreSQL для администратора
углубляемся в аспекты работы с СУБД
3 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Практическая отработка навыков с вебинаров.
PostgreSQL для разработчика
научиться организовывать логику на уровне данных
7 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Футбольная база данных. Вам предоставлена Футбольная база данных группого тура чемпионата Мира по футболу 2018 года.
Придумайте и сформулируйте 10 вопросов по этой базе данных и составьте SQL запросы для нахождения ответов.
Приложите ссылку на файл с вопросами и запросами. Работы будут проверяться с обратной связью.
Как устроен PostgreSQL
заглянуть под капот СУБД
10 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Индексы, XML и PHP.. Создать большую базу данных из XML файлов.
Создать РНР скрипт для генерации данных.
Создать/удалить индексы, проверить время выполнения запросов
Другие SQL-решения
посмотреть на рынок хранилищ
14 октября, 20:00 — 21:30
MongoDB
углубляемся в NoSQL
17 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Приложение для анализа каналов на Youtube. Создать приложение для анализа каналов на Youtube:
1. Создать структуру/структуры хранения информации о канале и видео канала в mongoDB, описать в виде JSON с указанием типов полей. Описать какие индексы понадобятся в данной структуре?
2. Создать необходимые модели для добавления и удаления данных из коллекций
3. Реализовать класс статистики, который может возвращать:
- Суммарное кол-во лайков и дизлайков для канала по всем его видео
- Топ N каналов с лучшим соотношением кол-во лайков/кол-во дизлайков
4*. Можно создать паука, который будет ходить по Youtube и наполнять базу данными
Redis
изучаем один из самых популярных инструментов кэширования в web
21 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Система хранения событий для аналитики. Аналитик хочет иметь систему со следующими возможностями:
1) Система должна хранить события, которые в последующем будут отправляться сервису событий
2) События характеризуются важностью (аналитик готов выставлять важность в целых числах)
3) События характеризуются критериями возникновения. Событие возникает только если выполнены все критерии его возникновения. Для простоты все критерии заданы так: <критерий>=<значение>

Таким образом предположим, что аналитик заносит в систему следующие события:
{
priority: 1000,
conditions: {
param1 = 1
},
event: {
::event::
},
},
{
priority: 2000,
conditions: {
param1 = 2,
param2 = 2
},
event: {
::event::
},
},
{
priority: 3000,
conditions: {
param1 = 1,
param2 = 2
},
event: {
::event::
},
},

От пользователя приходит запрос:
{
params: {
param1 = 1,
param2 = 2
}
}

Под этот запрос подходят первая и третья запись, т.к. в них обеих выполнены все условия, но приоритетнее третья, так как имеет больший priority.

Написать систему, которая будет уметь:
1) добавлять новое событие в систему хранения событий
2) очищать все доступные события
3) отвечать на запрос пользователя наиболее подходящим событием
4) использовать для хранения событий redis
PHP и базы данных
объединяем код и данные
24 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Реализация одного из паттернов работы с хранилищем данных. Необходимо реализовать один из паттернов: Table Data Gateway, Raw Data Gateway, Active Record, DataMapper для произвольной таблицы. Паттерн должен содержать метод массового получения информации из таблицы, результат которого возвращается в виде коллекции.
Дополнительно можно использовать паттерн Identity Map для устранения дублирования объектов, ссылающихся на одну строку в БД или Lazy Load для отложенной загрузки связанных записей в таблице или коллекции.
Developing
Парадигмы программирования
познакомиться с фундаментальными принципами построения приложений
28 октября, 20:00 — 21:30
Архитектура кода
знакомство с принципами построения взаимодействия сущностей в коде
31 октября, 20:00 — 21:30
Design patterns
узнать или улучшить понимание паттернов проектирования кода
4 ноября, 20:00 — 21:30
Практики хорошего кода
чуть ближе подойти к понятию "хорошего кода"
7 ноября, 20:00 — 21:30
Введение в тестирование
узнать, почему тестирование - залог крепкого сна команды разработки
11 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Разработанное ранее мини приложение необходимо покрыть unit-тестами, используя PHPUnit и добиться code coverage в минимум 70%
Unit-тестирование
чуть глубже рассмотрим один из аспектов автоматического тестирования
14 ноября, 20:00 — 21:30
Алгоритмы. Начало
получить фундаментальные знания о классических алгоритмах
18 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Необходимо реализовать один из предложенных алгоритмов на деревьях..
Алгоритмы. Продолжение
узнать о деревьях, графах и алгоритмах их обработки
21 ноября, 20:00 — 21:30
Architecture & HighLoad
Очереди
изучить основной инструмент работы асинхронных отказоустойчивых приложений - очереди
25 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Используя мини-приложение, разработанное в прошлом модуле, необходимо реализовать Rest API с использованием очередей. Ваши клиенты будут отправлять запросы на обработку, а вы будете складывать их в очередь и возвращать номер запроса. В фоновом режиме вы будете обрабатывать запросы, а ваши клиенты периодически, используя номер запроса, будут проверять статус его обработки.
Проектирование API
узнать, что такое API и зачем он нужен
28 ноября, 20:00 — 21:30
Профилирование и логирование
учимся анализировать работу приложения
2 декабря, 20:00 — 21:30
Репликация
изучить важный инструмент обеспечения отказоустойчивости БД
5 декабря, 20:00 — 21:30
Шардинг
усиливаем отказоустойчивость хранилищ
9 декабря, 20:00 — 21:30
Кеширование
усилить знания о кэшировании в Highload-системах
12 декабря, 20:00 — 21:30
Deploying
познакомиться с понятиями деплоя и сборок
16 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Используя выбранный инструмент автоматического деплоя, необходимо реализовать автоматическую выкатку написанного ранее мини-приложения на собственный виртуальный сервер.
Site Reliability Engineering
узнать о best practices обеспечения производительности и отказоустойчивости
19 декабря, 20:00 — 21:30
Проектный модуль
Заключительный месяц курса посвящен проектной работе. Свой проект — это то, что интересно писать слушателю. То, что можно создать на основе знаний, полученных на курсе. При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.

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

Например:
1. Система для обучения работы на PHP (аналог CodeAcademy + HackerRank)
2. Bot в телеграмм, позволяющий найти перелеты/отели
3. Анализ GitHub на наличие интересных проектов (рост коммитов, звездочек). Как продолжение поиск лучших контрибьютеров
4. Создать масштабируемую новостную ленту с множеством интеграций
5. Свой проект
Консультация по проектам
Обсуждение тем проектов, вопросы и ответы
23 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Проект.
Презентация проектов
Подведение итогов курса и презентация реализованных проектов
26 декабря, 20:00 — 21:30

Преподаватель

Александр Пряхин

Технический директор E-Commerce проекта с бэкграундом разработки и технического обеспечения веб-приложений. В профессиональном программировании прошел долгий путь от Junior Developer до CTO.

Окончил факультет прикладной математики и физики МАИ (НИУ). Имеет преподавательский опыт в Московском Авиационном институте, а также на базе нескольких платформ дополнительного образования. Разработал различные обучающие курсы: от изучения языка PHP до построения масштабируемых систем и архитектур.



Навыки
Разработка Web-приложений
Кризис-менеджмент
Построение команд
Linux-based системы
PHP, Java, JS
Преподаватель курсов:
Backend разработчик на PHP

F.A.Q.: Наиболее часто задаваемые вопросы:

Нужно ли оплачивать обучение до Дня открытых дверей, если я хочу гарантированно попасть в группу?
Да, мы рекомендуем заранее оплатить обучение, чтобы гарантированно попасть в группу. В период проведения Дня открытых дверей резко возрастает количество желающих обучаться, поэтому может случиться так, что к окончанию Дня открытых дверей мест в группе не останется
Кто будет проводить День открытых дверей?
Проводить День открытых дверей будет преподаватель курса.
Как принять участие в Дне открытых дверей?
Для того, чтобы принять участие в Дне открытых дверей, оставьте свой e-mail в поле регистрации на мероприятие. Перед началом Дня открытых дверей мы пришлем вам ссылку, пройдя по которой, вы сможете присоединиться к вебинару.
Какие вопросы будем обсуждать на Дне открытых дверей?
На дне открытых дверей мы поговорим о проекте OTUS (о программе курса, почему мы не принимаем в группы новичков, почему учиться у нас интересно, но сложно), карьерных перспективах выпускников (почему вероятность карьерного роста у лучших студентов стремится к 100%), учебном процессе (оплатах, оценке знаний, сертификатах и прочих аспектах). Также ведущий мероприятия с радостью ответит на все ваши вопросы.