Курс

Software Engineering

Записаться
clock icon
Старт группы

28 сентября

person icon
График

сб, вс: 10:00-14:00

star icon
Длительность

120

dollar icon
Группа

15 человек

Описание курса

Говорят, новые знания — новые горизонты. Когда инженер осваивает одну из IT-технологий и получает первую работу, перед ним становится вопрос «Что делать дальше для карьерного продвижения и как развивать себя?».

Ответ на этот вопрос — постоянное обучение. Мы рекомендуем в качестве следующего шага выбрать именно Software Engineering. Эта сфера быстро развивается, интерес со стороны крупных компаний и заказчиков растёт, появляется желание инвестировать в разработчиков. Поэтому программа построена таким образом, чтобы дать глубокое понимание процесса разработки программного обеспечения. Она покроет 5 ключевых сфер – Continuous Integration, Testing, Delivery, Deployment и Operation. На протяжении всего курса студенты будут разрабатывать SaaS приложение, которое позволит эффективнее усваивать материал и применять полученные знания на практике.

Главная задача данного курса — объединить фундаментальные знания и современные инструменты, чтобы молодой специалист имел прочную основу для развития в мире нулей и единиц.

Для кого

Junior/ Junior+ / Middle разработчикам

разработчикам, тестировщикам, DevOps

SRE, support-инженерам

преподаватели курса

Владислав Курмаз

Преподаватель и разработчик курса Software Engineering

Software-девелопер с 20-летним опытом работы. Сферы деятельности: game development, 3D printing, Finance & Trading software, Avia simulators, ITSM. Основной фокус работы: инновации в развитии компаний и построение эффективной и результативной рабочей среды.

Что будете уметь

Узнаете, что такое жизненный цикл разработки ПО (SDLC), за счет чего Git стал стандартом де-факто для хранения исходного кода, как Code Review помогает улучшать качество программного продукта, зачем нужны Pull Request, сможете применять TDD на практике.

Поймёте, как использовать ветки, что такое Release Management, как изолировать большие функциональные части системы, используя User Story Isolation.

Сможете настраивать системы непрерывной интеграции (CI/CD), связывая воедино Jenkins, SonarQube, Nexus и Github.

Построите простой фреймворк для тестирования приложения, узнаете разницу между юнит и end-to-end тестированием, настроите Quality Gates для SonarQube.

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

Поймёте, почему одна технология или язык программирования уже не может быть достаточным условием успеха в IT (Polyglot Programming / Polyglot Persistence).

Научитесь создавать RESTful и GraphQL APIs, правильно их версионировать и строить стратегии отключения устаревших версий API.

Познакомитесь с Docker и Kubernetes, узнаете как с их помощью создавать программные продукты, которые могут работать с высокой нагрузкой и быть устойчивыми к отказам.

С помощью Prometheus научитесь собирать статистику с уровня приложения и операционной системы, а ELK stack (Elasticsearch, Logstash, Kibana) поможет понять, как эффективно искать ошибки в сложных распределенных системах.

Программа

Введение

Вводная часть поможет сориентироваться в программе, понять план занятий и наладить общение как в группе будущих разработчиков, так и между студентами и лектором. Проработаем механизм коммуникации, проверки домашних заданий и работы в классе.

Continuous Integration

Сфокусируемся на современном процессе создания ПО. Какие понятия – основные, на чём нужно делать акцент разработчику, чтобы взаимодействовать с остальными членами команды максимально быстро и эффективно? Главное на этом этапе – ресурсный менеджмент, рабочий график, инструменты проверки качества кода и хранилище артефактов.

  •         Git
  •         Branching и Release Management
  •         Github
  •         Jenkins

Continuous Testing

Качество кода – один из главных артефактов разработки ПО, особенно если заказчик требует быструю адаптацию новых бизнес-требований в сжатые сроки. Какие типы тестов нужно использовать, как предотвратить регрессию при отправке нового кода в репозиторий, как код ревью улучшает качество продукта. Посвятим время юнит-тестам, покрытию кода и Quality Gates.

  •         TDD – Test Driven development
  •         SonarQube
  •         Ревью кода, User Story Isolation
  •         Тестирование кода, регрессия, проверка кода на уязвимости, автоматизированное, e2e и UI тестирование, мануальное тестирование

Архитектура программного обеспечения (Software Architecture)

Большая часть разрабатываемого сейчас ПО — это XaaS (SaaS, PaaS, IaaS и т. д.). Такая трансформация позволила увеличить проникновение различных программных продуктов во все сферы жизни, но, с другой стороны, — существенно увеличила сложность ПО. Поэтому каждый разработчик должен быть знаком с типами архитектуры ПО и уметь работать с факторами качества. Это позволит создавать приложения, которые, с одной стороны, соответствуют ожиданиям клиента, а с другой – могут развиваться без полной повторной разработки.

  •         Внешние факторы качества ПО: correctness, robustness, extendibility, reusability и др.
  •         Типы архитектуры: Standalone, N-tier, SOA, Microservices, Serverless, Web-Queue-Worker, Event-driven architecture, Big Data/Big Compute
  •         Сбор требований, pre-sales, Estimates, RFI/RFP

Проектирование программного обеспечения (Software Design)

Проектирование (разработка) — это основной этап создания программного продукта, который и всегда должен идти в связке с выбранной архитектурой. Хороший дизайн усиливает сильные стороны архитектурного решения с одной стороны, и сглаживает неизбежные компромиссы с другой.

ООП, структуры данных, графическое представление кода, распределенные вычисления, Polyglot Persistence & Polyglot  Programming будут основными темами этой части.

  •         Ключевые парадигмы программирования: процедурное, объектно-ориентированное, функциональное и логическое. Компиляторы / интерпретаторы и структуры данных.
  •         Наследование, композиция или агрегация, композиция и декомпозиция.
  •         Общая структура организации проекта, компонентная модель
  •         Дизайн-шаблоны, GRASP, UML, T-diagrams, MVC(MVVM)
  •         Документация
  •         CAP-теорема, RDBMS, NoSQL, Graph DB, DB migration
  •         Polyglot programming, Polyglot persistence, с помощью Java, создадим микросервис для API, добавим микросервис для аутентификации с на базе Nodejs, будем использовать C++ для многопоточного программирования и lock-free алгоритмов, Angular/Typescript для front-end части нашего сервиса, а также groovy для Jenkins DSL. Подключим Postgresql, MongoDB и Neo4j.
  •         Аутентификация и авторизация,  RBAC / ABAC
  •         Message brokering
  •         Mobile-first, mobile-only
  •         Multitenancy, аудит, брендинг, GDPR
  •         Waterfall, RUP, Agile
  •         Технический долг, legacy-продукты, рефакторинг
  •         Многопоточное программирование, клиент-серверные системы, P2P, распределённые вычисления, алгоритмы lock-free, кэширование.

API

Как и люди, программные компоненты должны взаимодействовать между собой, чтобы создавать ценность. Но построение интерфейсов взаимодействия — сложная задача. Поэтому данный модуль будет посвящен разработке APIs как на уровне отдельных классов, так и для крупных сервисов и компонентов.

  •         Oртогональный API, контрактное программирование, принципы SOLID
  •         RESTful API, OpenAPI, GraphQL
  •         API менеджмент, Pagination, Rate Limits
  •         Обзор ML

Continuous Delivery

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

  •         Репозиторий артефактов
  •         Переменные среды
  •         NoOps, Opsless
  •         Docker, Docker compose, Swarm, Kubernetes, Service Mesh (Istio)

Continuous Deployment

Одним из ключевых параметров разработки является скорость, с которой разработчики могут развернуть ту или иную версию ПО. Это особенно важно, когда необходимо разобраться с эскалациями пользователей. Быстрое развертывание помогает сэкономить огромное количество времени и существенно сократить стоимость разработки.

  •         Различные типы сред разработки (dev, qa, uat, prod)
  •         Blue/Green, A/B, Canary deployment, 0-downtime, Rolling updates, стратегия «Follow the sun»

Continuous Operation

Около 40% затрат на разработку программного обеспечения составляет обслуживание. Оно включает в себя техническую поддержку, работу с клиентскими проблемами и доработку ПО.

Главная задача модуля — узнать, как на этапе проектирования и разработки учитывать те задачи, которые будут стоять перед  SRE и командой поддержки L1 / L2 / L3 в процессе эксплуатации системы.

  •         Мониторинг, измерения, оповещения
  •         Data backup strategy, план восстановления данных, поддержка(L1/L2/L3)
  •         SRE, SLIs, SLOs, SLAs

Облачные технологии

Облачные технологии уже давно перестали быть чем-то необычным и перешли в разряд повседневного инструмента разработки.

Студенты познакомятся с ключевыми технологиями и игроками в этой области. Что такое гибридные облака, как создать кластер и развернуть на нем приложение, как работать с географическими зонами, и как это влияет на архитектуру и дизайн ПО.

  •         Виртуализация — аппаратная и на уровне пользователя, Docker/Kubernetes
  •         Обзор облачных платформ, гибридные облачные решения
  •         Архитектура облачных приложений
запись на консультацию

Если у вас есть вопросы по курсу или программе обучения, запишитесь на индивидуальную консультацию со мной.

Напиши нам







Спасибо за регистрацию.

В ближайшее время с вами свяжется наш менеджер

Контакты