Програміст – це професія, для якої необхідно постійно розвиватися і навчатися. Технології вдосконалюються, з'являються нові мови й інструменти програмування. Щоб орієнтуватися у всьому цьому розмаїтті, фахівець повинен докладати зусиль.
Курс 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.