Модуль 1
184,00ч

Учебный модуль 1. Go-разработчик

Основополагающие концепции языка Go.
Создание проекта на JetBrains GoLand.
Вы узнаете приемы использования Go: тестирования, отладки, маршрутизации и создания веб-служб и сетевых приложений.
Изучите принципы работы операционных систем и обмена данными по сети.
Научитесь работать с файловой системой, алгоритмами поиска и сортировки.
Научитесь собирать, тестировать и развёртывать готовые приложения.
Часов в программе
62,00 часа
лекции
108,00 часов
практика
14,00 часов
промежуточная аттестация
184,00 часа
всего
Материально-технические условия реализации программы:
Вид занятий: лекционные и практические
Требуемое ПО:
Аккаунт в Google, операционная система, программы Microsoft Excel, Microsoft PowerPoint, Power BI, MySQL, GitHub, Jupyter-Notebook и настроенная в зависимости от языка программирования среда разработки: любая привычная IDE, для Python — установленный интерпретатор с python.org и любая привычная IDE.
Информационные ресуры
1. Язык Go для начинающих [Электронный ресурс]//URL: https://habr.com/ru/post/219459/
2. Golang: основы для начинающих [Электронный ресурс]//URL: https://tproger.ru/translations/golang-basics/
3. Уроки для изучения Golang [Электронный ресурс]//URL: https://golangify.com/
4. Чем хорош язык Go и зачем его изучать? Все плюшки Golang [Электронный ресурс]//URL: https://proglib.io/p/language-go
5. Язык программирования Go: мнения и перспектива [Электронный ресурс]//URL: https://timeweb.com/ru/community/articles/yazyk-programmirovaniya-go-mneniya-i-perspektiva-1
6. Что такого в языке Go? [Электронный ресурс]//URL: https://medium.com/nuances-of-programming/что-такого-в-языке-go-7942ad3f922d
7. Go: Часто задаваемые вопросы FAQ[Электронный ресурс]//URL: https://github.com/akrisanov/golang_faq_ru
8. Выполните первые шаги с помощью Go [Электронный ресурс]//URL: https://docs.microsoft.com/ru-ru/learn/paths/go-first-steps/
9. 10 главных конструкций языка Go [Электронный ресурс]//URL: https://thecode.media/10-go/
10. Golang: Основной синтаксис [Электронный ресурс]//URL: https://dev-gang.ru/article/golang-osnovnoi-sintaksis-pua4fd0n18/
11. Лучшие IDE для Golang [Электронный ресурс]//URL: https://code.tutsplus.com/ru/tutorials/what-are-the-best-golang-ides--cms-28889
Образовательные ресуры
Реализация программы дополнительного профессионального образования предусматривает использование дистанционных образовательных технологий, применяемых для преподавания теоретических разделов учебных модулей, выполнения практических ситуаций и для промежуточной аттестации с использованием асинхронной формы проведения занятий.
Асинхронное обучение — это метод доставки учебного материала обучающемуся с помощью размещения контента учебного курса на платформе дистанционного образования Skillbox 2.0.
Преподаватель и обучающийся не контактируют напрямую.
Лекционные занятия представлены в виде видеоконтента (электронный учебный курс).
В рамках практических занятий применяется кейс-технология или технология ситуационного анализа. Это метод активного обучения на основе реальных ситуаций. Слушателю предлагается короткий текст с подробным описанием ситуации и задача, требующая решения. Цель этого метода — максимальное вовлечение каждого слушателя в самостоятельную работу по решению поставленной проблемы или задачи, развитие самостоятельного мышления, применение теоретических знаний к решению практических задач. Кейс помогает совершенствовать компетенции, необходимые для проведения трансфузиологической помощи. Преимущество кейсов — возможность оптимально сочетать теорию и практику, что важно при подготовке специалистов в сфере разработки веб-приложений.
Каждый слушатель в течение всего периода обучения обеспечивается индивидуальным неограниченным доступом к электронно-библиотечной системе Znanium и к электронной информационно-образовательной среде.

Учебно-методические материалы

Методы, формы и технологии

Реализация программы дополнительного профессионального образования предусматривает использование дистанционных образовательных технологий, применяемых для преподавания теоретических разделов учебных модулей, выполнения практических ситуаций и для промежуточной аттестации с использованием асинхронной формы проведения занятий.
Асинхронное обучение — это метод доставки учебного материала обучающемуся с помощью размещения контента учебного курса на платформе дистанционного образования Skillbox 2.0.
Преподаватель и обучающийся не контактируют напрямую.
Лекционные занятия представлены в виде видеоконтента (электронный учебный курс).
В рамках практических занятий применяется кейс-технология или технология ситуационного анализа. Это метод активного обучения на основе реальных ситуаций. Слушателю предлагается короткий текст с подробным описанием ситуации и задача, требующая решения. Цель этого метода — максимальное вовлечение каждого слушателя в самостоятельную работу по решению поставленной проблемы или задачи, развитие самостоятельного мышления, применение теоретических знаний к решению практических задач. Кейс помогает совершенствовать компетенции, необходимые для разработки программного обеспечения. Преимуществом кейсов является возможность оптимально сочетать теорию и практику, что важно при подготовке специалистов в сфере разработки, отладки, проверки работоспособности, модификации программного обеспечения.

Методические разработки

Рекомендации по проведению обучения для лиц с ОВЗ.

Материалы курса

Базовые навыки программирования. Принципы написания программ. Управление средой разработки и основные функциями. Назначение блоков программы. Ошибки программы и их исправление по подсказкам компилятора.
Понятие переменных и их типов. Способы присваивания. Понятия константы и иммутабельных значений. Базовые математические операции. Деление произвольных чисел с округлением в условиях работы со строгой типизацией. Сложные выражения для более компактных вычислений.
Математические принципы очередности выполнения операций.
Функция fmt.Scan. Принципы работы операций ввода и копирования значений переменных. Передача значений из одной переменной в другую.
Тип данных string. Способы вывода строковых переменных.
Использование составных операторов как форма математический операции и присваивания.
Условный оператор. Формирование блоков кода. Использование безусловных реверсивных блоков с помощью оператора else. Оператор дополнительных условиях else if.
Понятие времени жизни переменных, выбор имен переменных. Ограничения вложенных блоков при использовании условных операторов.
Операторы логического сравнения и / или / не.
Применение логического типа данных bool. Как оперировать типом bool в построении логических выражений. Как использовать композитные условия, применяя логический тип bool.
Принципы работы циклов, условия для управления циклами.
Применение счётчиков. Возможности конструкций break и continue. Применение конструкции continue при управлении циклом.
Организация вложенных циклов при написании программы.
Схемой работы вложенных циклов. Принцип независимого прерывания вложенного цикла. Понятие алгоритмической сложности. Отличия цикла по принципу написания в языке Go.
Конструкция switch и контекст её применения. Switch как аналог множественного if else. Default для управления поведением по умолчанию. Default для контроля выполнения условий. Практика применения нескольких операторов case с одинаковым набором инструкций.
Диапазон значений каждого типа. Физический смысл переменных с указанием размерности. Принцип размещения переменных в оперативной памяти. Применение размерности переменных. Циклы с обратным отсчётом. Переполнение памяти. Связь между размерностью переменной и предельных значениях. Константы предельных значений для контроля размерности.
Математические вычисления. Размерностью чисел с плавающей точкой. Управление точностью. Арифметические операции на числах с плавающей точкой. Принципы конвертации переменных из типа в тип. Конвертация типов на примере типов int и float. Работа с типами на примере функций из пакета math.
Комплексные типы данных. Строки.
Работа с файлами. Теория хранения и распределенного доступа к областям диска. Пакеты OS и IO. Чтение из файла. Вывод содержимого файла на экран. Создание файла. Запись в файл. Создание файла с расширением TXT. Уровень доступа к файлу. Чтение и запись. Флаги доступа. Создание файлов во временных директориях.
Функции в программировании: func () — объявление функции.
func (i int) — объявление функции с аргументом (1 аргумент, 2 аргумента, неопределённое количество аргументов).
Параметры и способ их передачи: по ссылке и по значению. Безопасный код: определённое и неопределённое поведение, особенности в Golang и отличия от других языков.
Безопасный код: валидация входных параметров.
Функции возвращающие результат: func () int — объявление функции с возвращаемым значением, функция math.rand().
func (i int) int — композитное объявление функции.
Определение области видимости и практическое применение в Golang. Время жизни переменных. Функции с побочным эффектом. Использование в нескольких функциях переменной из глобального пространства. Возвращаемые значения. Безопасный код: определённый и неопределённый результат.
Композитные типы данных. Одномерные массивы. Базовые алгоритмы на массивах. Индексы и проблемы с неправильными индексами. Циклы с массивами. Сумма элементов, проверка значений.
Настройка JetBrains GoLand, создание проекта на JetBrains GoLand. Инструкции для разных платформ. Решение проблем.
Установка студии. Консольные команды для работы с программами Golang. Запуск кода с go run. Сборка исполняемого файла с помощью go build. Git как система отслеживания изменений.
Отладка кода и логирование: разделение сообщений в логах по типам, внешний пакет logrus. Вывод на экран сообщений об ошибках. Общепринятые типы сообщений: debug, info, warning, error, critical. Ограничение уровня вывода в logrus и контроль полноты логов. Настройка встроенного отладчика. Инструкции для разных платформ. Запуск отладчика на функцию main().
Breakpoints и чтение stacktrace. Остановка программы в указанном месте перед строкой, вызывающей ошибку.
Промежуточные и финальные значения переменных. Чтение значений глобальной переменной на разных этапах выполнения кода, поиск обнуления значения. Breakpoint по условию. Остановка выполнения кода при определённом значении переменной.
Описание git и GitLab. Авторизация и установка кредов в IDE.
git commit и git push. Инструменты IDE для фиксации версии кода.
Простые алгоритмы на массивах. Поиск максимального или минимального значения по массиву или строке. Panic как средство критической остановки выполнения кода.
Поиск второго минимума и второго максимума.
Двумерные массивы, «физический смысл». Проход по двумерному массиву во вложенных циклах. Поиск максимального или минимального значения по массиву. Диагональные матрицы, транспонирование.
Анонимные функции. Описание типизации в контексте проблематики хранения и переполнения. Попытка присваивания значения int16 типу int8 для демонстрации переполнения. Преобразование типов. Преобразование int8 в int64. Garbage Collector и время жизни переменной.
Суть анонимной функции, использование в коде, запись в переменную. Применение анонимной функции в цикле.
Как использовать defer для выполнения кода в завершение функции, несколько defer в одной функции.
Продвинутые алгоритмы на массивах. Поиск элемента несортированного массива. Алгоритмы поиска в несортированном массиве. Поиск элемента сортированного массива. Бинарный поиск.
Сортировка с пониженной алгоритмической сложностью.
Отработки рекурсии. Продвинутые алгоритмы сортировки массивов. Реализация. Базовая практика func foo() (bar, error) {} как средство ухода от фальшивых return. Как вернуть из функции (bar, nil) при успешном выполнении и (bar, error) при ошибочном.
Композитные типы данных. Срезы. Динамическое выделение памяти: концепция двусвязного списка, принцип выделения памяти. Инициализация срезов. Создание среза через встроенную функцию make. Добавление элементов в срез. Добавление с использованием append. Удаление элемента из среза.
Подмножества и работа со срезами.
Получение подмножества из среза через синтаксис a[low:high].
Деление срезов динамической длины на два подмножества.
Переменная byte. Устройство кодировок и принцип кодирования символов. Примеры на уровне исходного кода Go обхода ASCII и UTF-8. Обход среза в цикле. Запись byte и вывод на экран.
Строки и текстовые данные. Базовые алгоритмы со строками. Функции в пакете, работа со строками. Разбиение строк по разделителю. Split. Разбиение строк в срез. Объединение строк в одну. Join. Сборка строк из среза и вывод в консоль.
Поиск позиции символа в строке. Index. Поиск элемента в строке. Поиск разницы строк. Compare. Вывод результата сравнения двух строк.
Концепция ассоциативного массива и словаря, типизированные индексы, инициализация карты, добавление элемента в карту, удаление элементов.
Структура, описание структур данных, объявление структуры, типизация свойств. Создание своей структуры данных. Область видимости свойств, передача переменных или структур в функции по ссылке и значению, указатели. Структура данных с разными типами свойств и областью видимости. Интерфейс структуры. Создание интерфейса и его поддержка в структуре данных. Методы структуры. Создание метода для структуры данных
Переиспользование кода, модульность: package, переиспользование кода, встроенные библиотеки, пользовательский нейминг в конструкции package. Подключение встроенных библиотек. внешние библиотеки, установка библиотек с помощью go get, глобально, локально, директории GOPATH. Подключение внешней библиотеки для форматирования даты. Расширение понятия области видимости за пределами одного файла. Использование внешних переменных и функций. import своего кода из других файлов, присваивание пакету имени, декомпозиция проекта на части. Несколько package в одном проекте, смена package у одной из частей проекта и переимпорт. Вложенные директории, дополнительная декомпозиция по директориям.
Многопоточность, работа с каналам: теория параллельных процессов. Горутины, ключевое слово go. Запуск функции в параллельном потоке. Создание канала. Запись в канал и чтение из канала. Направления каналов, теория распределения данных, накладные ресурсы, маршрутизация. Смена направления канала.
Оператор Select, разные потоки для разных сообщений, разные потоки для одного вида сообщений. Работа с Select.
Обмен данными по сети: сетевые соединенния. Создание сетевого соединения в Golang, пакет net. Открытие нового сетевого соединения в новом потоке на чтение и запись.
Протоколы передачи данных. TCP, UDP, HTTP. Открытие соединения с каждым из протоколов и проверка его состояния.
Чтение из сетевого соединения. Чтение данных по указанному сетевому адресу. Запись в сетевое соединение.
Передача данных по сети по указанному сетевому адресу.
Маршалинг и анмаршалинг структур: маршалинг структур в JSON. Анмаршалинг структур из JSON.
Микросервисная архитектура. Проблематика монолитных приложений и преимущества микросервисов. Горизонтальный рост на микросервисах. Отказоустойчивость и балансировка нагрузки.

Учебная литература

1. Батчер М. Go на практике / Мэтт Батчер, Мэтт Фарина; пер. с англ. Р. Н. Рагимова; под науч. ред. А. Н. Киселева. — Москва: ДМК Пресс, 2017. — 374 с. — ISBN 978-5-97060-477-9. — Текст: электронный. — URL: https://znanium.com/catalog/product/1028131
2. Калькот Л. Istio: приступаем к работе: практическое руководство / Л. Калькот, З. Бутчер ; пер. с англ. А. Л. Бриня. — Москва: ДМК Пресс, 2020. — 236 с. — ISBN 978-5-97060-863-0. — Текст: электронный. — URL: https://znanium.com/catalog/product/1210709
3. Прутяну Э. Как стать хакером: сборник практических сценариев, позволяющих понять, как рассуждает злоумышленник: практическое руководство / Э. Прутяну; пер. с анг. Д. А. Беликова. — Москва : ДМК Пресс, 2020. — 380 с. — ISBN 978-5-97060-802-9. — Текст: электронный. — URL: https://znanium.com/catalog/product/1094954

Темы

1. Введение. Первая программа 2. Базовые типы. Целочисленные типы 3. Строки 4. Условный оператор if 5. Логические операторы и составные условия 6. Введение в циклы: For как единая точка входа 7.Вложенные циклы 16. Настройка JetBrains GoLand, создание проекта на JetBrains GoLand 17. Отладка и логирование 26. Строки и текстовые данные. Базовые алгоритмы со строками 27. Композитные типы данных. Карты и структуры 28. Переиспользование кода, модульность 29. Многопоточность, работа с каналам 30. Обмен данными по сети 31. Микросервисная архитектура 8. Оператор switch 9. Диапазоны значений 10. Числа с плавающей запятой. Математические вычисления 11. Комплексные типы данных. Строки 12. Работа с файлами 13. Функции в программировании 14. Функции, возвращающие результат 15. Композитные типы данных. Одномерные массивы. Базовые алгоритмы на массивах 18. Breakpoints 19. Простые алгоритмы на массивах 20. Двумерные массивы 21. Анонимные функции 22. Продвинутые алгоритмы на массивах. Поиск 23. Сортировка с пониженной алгоритмической сложностью 24. Композитные типы данных. Срезы. Динамическое выделение памяти 25. Подмножества и работа со срезами
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
6,00ч
Всего
8,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
3,00ч
Всего
5,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Лекции
2,00ч
Практические занятия
4,00ч
Всего
6,00ч
Промежуточная аттестация 14,00 часов
Промежуточная аттестация по Учебному модулю 1 "Go-разработчик" проводится путем выполнения практического задания.