23 мая в 20:00

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

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

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

О курсе

Разработчик Golang
50 000 ₽
5 месяцев
Начало 28 мая
При переходе на Go люди зачастую сталкиваются с различными неудобствами, вызванными непохожестью Go на другие языки программирования. В этом курсе мы хотели бы объяснить что такое Go-way, рассказать про идиомы языка и помочь избежать типичных ошибок. Программа курса позволит погрузиться в разработку на Go для решения практических задач, углубления знаний в языке и сопутствующем технологическом стеке. Этот курс подойдет для: ...
Программа курса
Модуль 1
Начало работы с Go
Модуль 2
Стандартные библиотеки и практики
Модуль 3
Cетевое взаимодействие
Модуль 4
Микросервисы
Модуль 5
Проект
Начало работы с Go
В первом модуле мы изучим Go как язык. Рассмотрим основные синтаксические конструкции и их выполнение в рантайме. Основное внимание уделим конструкция уникальным для языка Go, которых нет в другом языке.
Начало работы c Go
* Установка рабочего окружение Go
* Установка компилятора и тулчейна
* Компиляция и запуск программ на Go
* Подключение библиотек
* Основные синтаксические конструкции
* Публичные и приватные идентификаторы
28 мая, 20:00 — 21:30
Домашние задания: 1
ДЗ
Hello now(). Завести Go репозиторий на GitHub, написать программу печатающую текущее время / точное время с использованием библиотеки NTP
Элементарные типы данных в Go
* Элементарные типы
* Zero value
* Константы
* Указатели
* Строки и руны и массивы байтов
* Стандартный функции для работы со строками и Unicode
* Преобразование и присвоение типов
* Передача по ссылке и значению
30 мая, 20:00 — 21:30
Домашние задания: 1
ДЗ
Сжатие строки. Создать Go функцию, осуществляющую примитивное сжатие строки, содержащей повторяющиеся символы / руны, например: "aaaabccddddde" => "a4bc2d5e"
Слайсы и словари
* Отличия массивов и слайсов
* Внутренняя структура слайсов и словарей
* Создание и работа со слайсами и словарями
* Отличие длинны и емкости (length vs capacity)
* Различные способы итерации
* Сортировка
* Распространные ошибки и затруднения
4 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
Частотный анализ. Написать функцию, которая получает на вход текст и возвращает
10 самых часто встречающихся слов без учета словоформ
Функции и обработка ошибок
* Функции и области видимости
* Замыкания
* Функции с переменным числом аргументов
* Типы ошибок
* panic, recover и defer
* Стек-трейсы
* Best practiсe обработки ошибок
6 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
Поиск максимума. Написать функцию находящую максимальный элемент в слайсе
с произвольными элементами ([]interface{}) с использованием
пользовательской функции-компаратора.
Структуры
* Определение структур
* Вложенные и анонимные структуры
* Тэги элементов структуры
* Использование тэгов для JSON и работы с СУБД
* Публичные структуры и публичные элементы структур
* Методы типов
11 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
Двусвязный список. Реализовать двусвязанный список на языке Go
Интерфейсы
* Определение и реализация интерфейсов
* Внутренняя структура интерфейсов
* Интерфейсы как "универсальный" тип
* Определение типа значения интерфейса
* Опасный и безопасный type cast
* Конструкций switch
* Слайсы и словари с интерфейсами
* Где мои generic-и?
13 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
Поиск элемента в JSON. Реализовать функцию json_path, получающую на вход JSON документ,
путь в это документе и возвращающую значение по данному пути.
Обработать возможные ошибки.
Горутины и каналы
* Запуск горутин
* Каналы, внутреняя структура канала
* Буферизованные и небуферизованные каналы
* Операции работы с каналами
* Использование каналов для передачи данных и синхронизации
* Конструкция select
* Таймеры в Go
18 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
Объединение каналов. Написать функцию, объединяющую несколько каналов в один. Принимает слайс с каналами []chan interface{}, возвращает один канал chan interface{}
Примитивы синхронизации
* Мьютексы
* Условные переменные
* Гарантировано одноразовое выполнение
* Pool и WaitGroup
* Модель памяти в Go
* Race-детектор
20 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
Параллельное исполнение. Сделать функцию для параллельного выполнения N заданий.
Принимает на вход слайс с заданиями `[]func()error`, число заданий которые можно выполнять параллельно `N` и максимальное число ошибок после которого нужно приостановить обработку. Учесть что задания могу выполняться разное время.
Пакеты и библиотеки
* Импорт пакетов
* Алиасы и импорт без использования
* init функции и порядок инициализации пакетов
* internal пакеты
* Рекомендованная структура проекта
25 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
Оформление пакета. Оформить функции из домашних заданий 1.2 и 1.3 в виде отдельного проекта.
Сделать интерфейс командной строки CLI для вызова этих функций.
Стандартные библиотеки и практики
Во втором модуле мы познакомимся с основными функциями стандартной библиотеки Go, а так же наиболее популярными open-source библиотеками. Научимся пользоваться инструментами для управления зависимостями, тестирования и профилирования Go кода.
Инструменты Go разработчика
* Подробнее про GOROOT и GOPATH
* Сборка модулей и установка программ: go build, go install
* Модули и зависимости: dep и vgo
* Форматирование кода: go fmt, fix
* Линтеры: go vet, golint, металинтеры
27 июня, 20:00 — 21:30
Домашние задания: 1
ДЗ
Публикация библиотеки. Оформить программу из задания 1.1 в виде GitHub проекта.
Описать и проверить установку зависимостей с помощью dep.
Настроить и запустить линтеры, создать Makefile для автоматизации проверки и сборки проекта
Работа с вводом/выводом
* Тип Buffer
* Стандартные интерфейсы: Reader, Scanner, Writer, Closer
* Блочные устройства, Seeker
* Форматированный ввод и вывод: fmt
2 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Копирование файлов. Реализовать утилиту копирования файлов (см man dd).
Выводить в консоль прогресс копирования
Форматирование данных
* base64 и другие форматы строк, кодировки
* Текстовые форматы: JSON, XML, YAML
* Использование стуктур и интерфейсов для парсинга
* Бинарные форматы: MsgPack и ProtocolBuffers
4 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Обработка JWT токенов. Сделать утилиту консольную утилиту для кодирования, декодирования JWT токенов
Взаимодействие с OS
* Обработка аргументов командной строки: flags, cobra
* Работа с переменными окружения
* Запуск внешних программ
* Работа с файловой системой
* Временные файлы
* Обработка сигналов
9 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Утилита envdir.
Реализовать утилиту envdir на Go.
Эта утилита позволяет запускать программы получая переменные окружения из определенной директории. См man envdir
Файлы конфигурации и логирование
* Различные варианты конфигурации
* Использование простых форматов: ini, yaml и т.п.
* Библиотеки для работы с конфигурацией: viper и confita
* Стандартная библиотека для логирования
* Расширенное логирование с помощью Zap
11 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Каркас микросервиса. Реализовать "каркас" микросервиса, считывающий конфиг из файла,
создающий логгер/логгеры с указанными уровнями детализации.
Рефлексия
* Использование пакета reflect
* Type и Value
* Использование рефлексии совместно с type switch
* Пакет unsafe и тип unsafe.Pointer
* Пример использования рефлексии
16 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Сериализация JSON. Сделать простой JSON сериализатор: функцию, которая принимает interface{} и возвращает строку, содержащую JSON. Учитывать тэги структур.
Кодогенерация в Go
* Примеры применения кодогенерации
* Команда go generate
* Генерация кода по Protobuf спецификациям
18 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Простейший календарь. Сделать "заготовку" для микросервиса-календаря. Определить структуру определяющую событие, написать методы для добавления/изменения/удаления событий. Хранить события в памяти, без персистентности.
Профилирование и оптимизация Go программ
* Общая информация о профилировании
* Виды профайлеров
* Профилирование использования CPU
* Профилирование выделения памяти
* Flame диаграммы
* Общие оптмизации в Go
* Оптимизации выделения памяти
23 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Оптимизация производительности. Провести анализ производительности программы из дз 2.6.
Построить Flame диаграммы и выявить наиболее медленные фрагменты.
Попытаться улучшить производительность.
Cетевое взаимодействие
Go чаще все используется для написания сетевых сервисов. В третьем модуле мы изучим как работать с сетью в языке Go. Рассмотрим стандартные протоколы и формат, а так же напишем простой сервер. Отдельное внимание будет уделено обработке ошибок возникающих при работе с сетью.
Go Internals
* Как работает планировщик в Go
* Блокирующие и неблокирующие вызовы
* Goroutines and Threads
* Вызовы С функций в Go, CGO
25 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Самый популярный IP Белорусии. Выяснить на каком IP адресе содержится больше всего доменов из зоны .by
Сравнить скорость работы с использованием CGO и Pure-Go DNS resolver.
Сравнить количество потоков и нагрузку на систему.
Список доменов: http://csa.ee/databases-domain-lists/
Низкоуровневые протоколы TCP, UDP, DNS
* Стандартные интерфейсы - Dialer, Conn
* Возможные сетевые проблемы: потеря пакетов, подвисшие соединения, недоступность
* Таймауты и контекст
* Отладка сетевых проблем
30 июля, 20:00 — 21:30
Домашние задания: 1
ДЗ
Telnet. Реализовать telnet клиент (см man telnet)
HTTP библиотека
* Использование HTTP клиента
* Создание простого HTTP сервера
* Декораторы и middleware
* HTTP/1.1 и HTTP/2.0
* REST
* Протокол S3
1 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
REST сервис. Используя go-swagger сделать REST сервер и CLI клиент для сервиса-календаря из дз 2.7. Поскольку swagger генерирует занчительную часть кода имеет смысл сделать это отдельным проектом.
GRPC
* Описание API с помощью Protobuf
* Генерация кода для GRPC клиента и сервера
* Реализация API
* Прямая и обратная совместимость API
* Представление о Clean Architecture
6 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
GRPC сервис. Создать GRPC спецификацию для сервиса-календаря из дз 2.7.
Сгенерировать GRPC сервер и клиент, проверить работу сервиса.
Отделить модель данных от Protobuf структур.
Работа с SQL
* Стандартные интерфейсы sql.DB, sql.Rows, sql.Tx
* Подключение к СУБД и настройка пула подключений
* Выполнение запросов и получение результатов
* Простейшие SQL запросы
8 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Работа с базами данных. Изменить код сервиса-календаря, так что бы события хранились в базе данных.
Продвинутая работа с базами
* Использование sqlx хелперов
* Работа с NULL значениями
* Использование транзакций
* Миграция баз данных
13 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Миграции баз данных. Изменить код сервиса-календаря, добавить поддержку событий "на весь день". Использовать sqlx. Написать миграции для базы данных.
NoSQL базы данных
* Встроенные базы данных, BoltDB
* Использование Redis для кеширования данных
* Выбор базы данных для проекта
15 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Кеширование данных. Реализовать методы "события на текущую неделю" и "события на текущий месяц", кешировать результаты выбороки в Redis
Очереди сообщений
* Использование RabbitMQ, Kafka
* Возможные проблемы с очередями: перегрузка, падение обработчиков, сбойные сообщения
* Запуск пула обработчиков с помощью systemd или supervisor
20 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Работа с очередями. Реализовать "напоминания" о событиях с помощью RabbitMQ.
Создать процесс, который периодически сканирует основную базу данных, выбирая события о которых нужно напомнить. Создать процесс, который читает сообщения из очереди и шлет уведомления.
Микросервисы
В четвертом модуле мы рассмотрим вопросы архитектуры web сервисов, в частности популярную сейчас микросервисную архитектуру. Рассмотрим вопросы тестирования, развертывания и эксплуатации приложении.
Монолит и микросервисы
* Отличия микросервисов от монолитной архитектуры
* Преимущества микросервисов
* 12 factor applications
* Архитектура одного микросервиса
* Clean Architecture
22 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Доработка сервиса. Доработать дз 3.8, разделив код на отдельные сервисы
Docker
* Основные команды docker
* Представление о контейнер и образе
* Сборка собственных Docker контейнеров
* Запуск и управление контейнерами
* Передача конфигурации и получение логов
* Использование Docker Registry
27 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Докеризация сервиса. Подготовить Docker файлы для каждого из сервисов из дз 3.8.
Собрать образы и загрузить в DockerHub
Тестирование микросервисов
* Использование docker-compose
* Интеграционные тесты
* Behaviour Driven Development
* Описание тестов на языке Gherkin
* Использование godog для запуска тестов
10 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Интеграционное тестирование . Создать docker-compose файл, поднимающий все сервисы проекта, включая базу и очередь. Написать простейший интеграционный тест для проекта.
Kubernetes
* Docker Swarm
* Puppet
* Ansible
* Как мы решаем проблему запуска сервсисов на более 1 машины
29 августа, 20:00 — 21:30
Домашние задания: 1
ДЗ
Разворачивание в kubernetes. Развернуть проект в Kubernetes. Создать описания pod-ов и service-ов.
Избавиться от hard-code IP в конфигах проектов.
Обнаружение сервисов
* Необходимость Service Discovery
* Использование DNS
* Использование DCS: zookeeper, etcd, consul
3 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Разворачивание в kubernetes. Продолжение дз 4.4
Мониторинг
* Проверка работоспособности сервисов
* Health Check в Docker
* Системные метрики: LA, CPU, MEM, IO
* Количественный мониторинг, prometheus
5 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Мониторинг сервиса. Обеспечить простейший мониторинг проекта с помощью prometheus
Использование CI
* GitLab pipelines
12 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Continuous integration. Автоматизировать тестирование и выкатку новых версий с помощью CI
Проект
Проект, разрабатываемый студентами, будет представлять собой реализацию микросервиса с полным набором компонентов, таких как: логгирование, liveness пробы, make файлы, тесты, статические анализаторы кода, файлы для деплоя, образ в docker, репозиторий и т.п.)
Проектная работа
Домашние задания: 1
ДЗ
Проект.
Консультация по проектам
Презентация проектов

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

Дмитрий Смаль
Старший разработчик в Yandex
Занимается разработкой инфраструктуры Яндекс.Облако и поддержкой реляционных баз данных. За 10 лет прошёл путь от рядового разработчика до старшего программиста в NetCracker, Agava, Mail.Ru Group (проектов «Игры», «Здоровье» и «Дети») и Яндексе.

Может спроектировать архитектуру, реализовать проект с помощью небольшой команды, развернуть необходимую инфраструктуру, организовать процесс разработки и деплоя. Разрабатывал сервера, поддерживающие 500k+ подключений, собирал модный фронтенд на React, отправлял тонны писем по SMTP, проектировал API и базы данных. Владеет Python, JavaScript, Go, Perl и другими языками и технологиями.

Окончил Московский физико-технический институт, где получил степень магистра. Около 6 лет был лектором в Технопарке и Технотреке Mail.Ru. Читал лекции, проводил практические занятия и экзамены. Записал видео-курс «Web-технологии» на Stepik. Проекты на гитхабе - https://github.com/mialinx
Преподаватель курсов:
Разработчик Golang

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

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