Программист – это профессия, для которой необходимо постоянно развиваться и обучаться. Технологии совершенствуются, появляются новые языки и инструменты программирования. Чтобы ориентироваться во всем этом разнообразии, специалист должен прилагать усилия.
Курс Software Engineering построен таким образом, что студенты рассматривают пять составляющих процесса работы, чтобы получить полное представление о процессе разработки ПО.
Continuous Integration, Testing, Delivery, Deployment и Operation.
Сочетание фундаментальной теории и современных технологий разработки в программе курса позволяет подготовить молодого специалиста к работе в IT-сфере.
Освоив новые знания, разработчик расширяет свои возможности и получает стимул для карьерного продвижения. Сфера Software Engineering быстро развивается и привлекает все больше внимания среди инвесторов, крупных компаний. После курса обучения студенты будут обладать системными знаниями и видеть структуру процесса разработки в комплексе. Такой подход делает более эффективным усвоение материала и применение полученных навыков на практике.
Кому подходит этот курс.
- Начинающим программистам от Junior/Junior+ уровня и до Middle.
- Специалистам по обеспечению надежности (SRE-инженерам).
- DevOps, специалистам, которые занимаются автоматизацией процессов разработки для ознакомления с новыми инструментами.
Что умеют выпускники курса.
- Использовать ветки и работать в Git, знают стандарты хранения программного кода.
- Эффективно проводить Release Management, управляя процессом выхода программного продукта.
- Настраивать Quality Gates для SonarQube для оценки качества кода, создавать пользовательские ворота качества.
- Проводить Code Review для повышения качества кода программных продуктов.
- Формулировать бизнес-требования и превращать их в техническое задание.
- Знают все этапы жизненного цикла ПО и контролируют качество прохождения каждого, начиная с планирования системы, заканчивая ее технической поддержкой.
- Умеют отправлять Pull Request, что является необходимой частью процесса Code Review и вносить изменения в код.
- Знают принципы TDD (test-driven development) и применяют их в своих проектах.
- Проводят настройку систем (CI/CD), соединяя SonarQube, Jenkins, SonarQube, Github и Nexus для непрерывной интеграции.
- Создают фреймворки тестирования и знают различия между end-to-end и юнит-тестированием.
Курсы Software Engineering. Программа.
Подготовительный этап.
Определяется уровень учеников, выстраивается коммуникация с ними. Ознакомление с планом занятий и работа с теорией и методическими материалами.
Continuous Integration.
- Основные понятия в разработке программного обеспечения.
- Взаимодействие разработчика с членами команды.
- Применение Git для командной работы над кодом.
- Веб-приложение для управления задачами Github.
- Составление рабочего графика и менеджмент ресурсов.
- С помощью каких инструментов реализуют проверку качества кода.
- Автоматизация и управление задачами с помощью Jenkins.
- Бранчинг версий для релиза и стабилизация кода.
Continuous Testing.
- Принципы разработки TDD (test-driven development).
- Как происходит тестирование качества кода с применением SonarQube.
- Юнит-тесты и покрытие кода.
- Настройка пользовательских ворот качества Quality Gates.
- User Story Isolation.
- Как определить уязвимости кода.
- Отправка кода в репозиторий.
- Мануальное тестирование.
- Автоматизированное тестирование.
- E2E – тестирование функции в реальных сервисах.
- UI – тестирование интерфейса путем имитации действий пользователя.
Архитектура программного обеспечения (Software Architecture).
- Внешние факторы качества – robustness (устойчивость), correctness (корректность), reusability (повторное использование), extendibility (расширяемость).
- Какой бывает архитектура ПО – Serverless, SOA, Web-Queue-Worker.
- Типы архитектуры: Standalone, N-tier, SOA, Microservices, Big Data/Big Compute, Serverless, Web-Queue-Worker, Event-driven architecture.
- Модели облачных сервисов. XaaS, SaaS, IaaS, PaaS.
- Сбор требований, постановка задачи estimates, pre-sales, RFI/RFP – запрос информации и запрос предложения.
- Работа с внешними факторами качества.
Проектирование программного обеспечения (Software Design).
- Архитектура ПО и проектирование.
- Архитектурное решение и дизайн интерфейса.
- Графическое представление программного кода.
- Распределенное вычисление – теория и алгоритмы.
- Polyglot Persistence.
- Polyglot Programming.
- Что такое парадигмы программирования.
- Функциональное и логическое программирование.
- Процедурное программирование и ООП.
- Структура данных.
- Компилятор и интерпретатор.
- Отношения между классами в ООП: композиция и декомпозиция, ассоциация, наследование, агрегация.
- Общая структура организации проекта.
- Компонентная модель.
- Дизайн-шаблоны GRASP, T-diagrams, UML, MVC(MVVM).
- Документация.
- CAP-теорема.
- RDBMS.
- NoSQL.
- Graph DB, DB Migration.
- Написание микросервиса для API на языке Java.
- Создание микросервиса для аутентификации с помощью Node.js.
- Многопоточное программирование C++.
- Алгоритмы lock-free.
- Angular/Typescript (front-end составляющая сервиса).
- Groovy для Jenkins DSL.
- Подключение Postgresql, MongoDB и Neo4j.
- Аутентификация и авторизация. Контроль доступа RBAC/ABAC.
- Message brokering.
- Чем различаются принципы mobile-first и mobile-only.
- Waterfall, RUP, Agile.
- Многопоточное программирование, клиент-серверные системы, P2P.
- Технический долг, legacy-продукты, рефакторинг.
- Кэширование.
- Multitenancy, аудит, брендинг, GDPR.
Программный интерфейс приложения API.
- Как создается интерфейс взаимодействия.
- Принципы объектно-ориентированного программирования SOLID.
- Контрактное программирование – спецификации интерфейсов.
- Что такое ортогональный API.
- Стандарты API – GraphQL, RESTful API, OpenAPI.
- Внедрение системы API-менеджмента.
- Как организовать пагинацию (pagination).
- Rate Limits – ограничение частоты запросов к API для оптимизации работы приложения.
- Обзор ML.
Continuous Delivery.
- Внутренняя структура разработки ПО.
- Хранилище артефактов в репозитории.
- Что такое переменные среды.
- NoOps, Opsless.
- Технология Docker, как использовать Docker compose, чтобы запустить приложение-контейнер.
- Swarm.
- Kubernetes.
- Service Mesh (Istio).
Continuous Deployment.
- Среда разработки: Preview Env, Development Env, Test Env, Production Env.
- Эффективность модели follow-the-sun.
- Скорость развертывания версии ПО и стоимость разработки.
- A/B, Canary, 0-downtime, Blue-Green Deployment – шаблоны развертывания.
- Rolling updates – плавающий метод обновления ПО.
Continuous Operation.
- Техническая поддержка как часть разработки программного обеспечения.
- Обслуживание клиентов и доработка программы.
- Планирование разработки с учетом задач SRE.
- Линии поддержки L1, L2, L3 и решение клиентских проблем.
- Соглашение об уровне обслуживания SRE, SRE, SLI, SLA, SLO.
- Восстановление данных и data backup strategy.
- Системы мониторинга прогнозирования.
- Настройка оповещений о сбое.
Облачные технологии.
- Облачные технологии как инструмент разработки.
- Ключевые технологии облачных сервисов.
- Обзор основных облачных платформ, их архитектура.
- Гибридное облако – что такое и как с ним работать.
- Создание кластера для разворачивания приложения.
- Работа с географическими зонами.
- Аппаратная и пользовательская виртуализация.
- Технологии виртуализации Docker и Kubernetes.