Курс

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
  • Огляд хмарних платформ, гібридні хмарні рішення
  • Архітектура хмарних додатків
Запис на консультацію

Якщо у вас є питання стосовно курсу або програми навчання, запишіться на індивідуальну консультацію зі мною.

Напиши нам







Дякуємо за реєстрацію.

Найближчим часом з вами зв‘яжеться наш менеджер

Контакти