Разработка веб-сервисов на Golang

Весна 2020

Цель курса — Изучите основы программирования на языке Go и получите опыт применения языка в основных задачах, которые встречаются в серверной веб-разработке. 



 

Описание
Go (golang) предназначен для разработки высоконагруженных веб-приложений, работающих на многопроцессорных системах. Курс интегрирован с курсами по фронтенд-разработке и проектирования интерфейсов, итоговый семестровый проект по ним общий. Курс не обучает программированию с нуля, вы должны иметь опыт программирования хотя бы в рамках университетских заданий. 
Подробнее
Чему научитесь
По итогам курса сможете разрабатывать серверные приложения на языке Go, проектировать веб-сервисы, проводить их сборку, деплой и тестирование. 
Преподаватели курса набирают студентов на стажировку в свои подразделения Mail.ru Group. За время существования курса в компанию пришло более 15 выпускников курса по Go.
Подробнее

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

Дмитрий Дорофеев Дмитрий Дорофеев

Выпускник ИУ6 и Технопарка.
Руководитель группы разработки Почты

Василий Романов Василий Романов

Технический менеджер проекта Почта@Mail.ru

Андрей Кучин Андрей Кучин

Старший программист продуктовой команды разработки Почты Mail.ru

Никита Алтунин Никита Алтунин

Разработчик почты и календаря mail.ru.

Программа

занятие Часы в ауд. + сам. работа

Смешанное занятие №1: Введение. Основы Go. Настройка окружения.  
+ ДЗ №1

Мы рассмотрим основы языка, такие как базовые переменные, сложные типы данных (слайсы и отображения) и управляющие структуры (условые операторы, циклы). Поговорим про функции, структуры, методы и интерфейсы. Настроим окружение для разработки и напишем первую программу на Go.
Домашнее задание №1: ДЗ №1
Настроить окружение. Написать калькулятор и покрыть его тестами.
4 часа + 4 часа СР

Лекция №1: Асинхронная модель Go.  
+ ДЗ №2

В этой лекции мы расскажем самой сильной стороне Go - асинхронном программировании. Рассмотрим горутины и чем они отличаются от полноценных тредов. Поговорим про каналы, как средство передачи данных между горутин. Поднимем вопрос гонки данных (data race) и узнаем, как найти такие места и что есть в языке Go для работы с ними - мютексы, атомики.
Домашнее задание №2: ДЗ №2
Написать программу, считающую хеши параллельно
4 часа + 4 часа СР

Лекция №2: Работа с сетью. HTTP  
+ ДЗ №3

Мы научимся работать с сетью по протоколу TCP, познакомимся с протоколом HTTP и особенностями работы с ним в Go. Также затронем вопрос тестирования HTTP сервисов.
Домашнее задание №3: ДЗ №3
Поднять веб-сервер, интегрировать его с фронтендом. Начать делать авторизацию
4 часа + 4 часа СР

Смешанное занятие №2: Проектирование API. Авторизация.  
+ ДЗ №4

На лекции рассмотрим различные способы организации API. Познакомимся с такими понятиями как RPC, REST, GraphQL. Расскажем про различные способы авторизации пользователей.
Домашнее задание №4: ДЗ №4
Готовая авторизация. Scoreboard с пагинацией.
4 часа + 4 часа СР

Рубежный контроль №1: Рубежный контроль 1  

Проверка заданий модуля
4 часа + 4 часа СР

Лекция №3: Вебсокеты. Фреймворки. Архитектура.  
+ ДЗ №5

Познакомимся с паттернами и лучшими практиками разработки веб-сервисов. Рассмотрим несколько фреймворков для Go.
Домашнее задание №5: ДЗ №5
Применить middlewares в проекте. Начать использовать роутер
4 часа + 4 часа СР

Смешанное занятие №3: Безопасность веб сервисов  
+ ДЗ №6

Научимся проектировать backend сервисы с точки зрения безопасности. Изучим основные уязвимости, как их эксплуатировать и рассмотрим способы защиты от них.
Домашнее задание №6: ДЗ №6
Сделать защиту от csrf и xss.
4 часа + 4 часа СР

Смешанное занятие №4: Работа с базами данных  
+ ДЗ №7

Научимся работать с различными типами хранилищ (mysql, mongo, redis). Рассмотрим протокол AMQP для очередей.
Домашнее задание №7: ДЗ №7
Начать хранить все данные в базе
4 часа + 4 часа СР

Лекция №4: Микросервисы  
+ ДЗ №8

Рассмотрим микросервисную архитектуру, ее достоинства и недостатки. Познакомимся с gRPC для общения между сервисами
Домашнее задание №8: ДЗ №8
Вынести авторизацию и игру в отдельные сервисы
4 часа + 4 часа СР

Рубежный контроль №2: Рубежный контроль  

Проверка заданий модуля
4 часа + 4 часа СР

Контрольное занятие №1: Предзащита  

Предзащита
4 часа + 4 часа СР

Смешанное занятие №5: Конфигурирование, логирование, мониторинг.  
+ ДЗ №9

Рассмотрим различные библиотеки для логирования. Подключим систему мониторинга, научимся строить графики. Рассмотрим способы конфигурирования сервиса.
Домашнее задание №9: ДЗ №9
Логировать все события. Завести мониторинг. Подключить remote config
4 часа + 4 часа СР

Смешанное занятие №6: Рефлексия, кодогенерация. Производительность  
+ ДЗ №10

Научимся работать с рефлексией и кодогенерацией. Рассмотрим вопросы производительности, профилирования приложений.
Домашнее задание №10: ДЗ №10
Начать использовать библиотеки с кодогенерацией
4 часа + 4 часа СР

Хакатон №1: Хакатон  

Хакатон
8 часа

Рубежный контроль №3: Рубежный контроль  

Проверка заданий модуля
4 часа + 4 часа СР

Смешанное занятие №7: Deploy. CI  
+ ДЗ №11

Познакомимся с docker, научимся упаковывать свой сервис и доставлять его до продакшена. Научимся использовать CI для автоматизации тестирования и деплоя.
Домашнее задание №11: ДЗ №11
Задеплоить игру
4 часа + 4 часа СР

Смешанное занятие №8: Продвинутые темы  
+ ДЗ №12

Изучим unsafe и cgo. Поговорим про современные подходы к разработке бекенда, сервисы, упрощающие разработку. Познакомимся с линтерами и научимся их применять в работе.
Домашнее задание №12: ДЗ №12
Прогнать свой код через gometalinter и исправить ошибки
4 часа + 4 часа СР

Рубежный контроль №4: Рубежный контроль  

Проверка заданий модуля
4 часа + 4 часа СР

Экзамен №1: Защита итогового проекта  

Публичная защита проекта
4 часа + 4 часа СР

РАСПИСАНИЕ

Полное расписание