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

Осень 2020

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


 

Описание
Go (golang) - современный язык программирования, предназначенный для разработки высоконагруженных веб-приложений, работающих на многопроцессорных системах. Курс дает основы программирования на языке Go, а также опыт применения языка в основных задачах, которые встречаются в серверной веб-разработке.

Курс не обучает программированию с нуля - слушатели должны иметь опыт программирования хотя бы в рамках университетских заданий. Курс предполагает большой объем материала и сложные ДЗ, которые займут много времени, но позволят “прокачать” навыки программирования.

При наличии вакансий лучшим выпускникам предлагается стажировка в Mail.Ru Group. За время существования курса в компанию пришло уже 15 выпускников курса по Go.
Подробнее
Чему научитесь
1. Разработка серверных приложений на языке Go.
2. Проектирование веб-сервисов.
3. Сборка, деплой и тестирование веб-сервисов.
Подробнее

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

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

Выпускник ИУ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 ак. ч. СР

РАСПИСАНИЕ

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